Caner
January 20, 2026, 4:39pm
1
Hello!
I’m trying to load a scene with GaussianSplattingMesh on iOS. The mesh seems to be loaded, but there is no visual output for the GaussianSplattingMesh (everything else in the scene is fine).
I could not generate a PG because could not load a PG scene from iOS Safari or Chrome. If you are able to load them, you may try any playground with GaussianSplattingMesh.
Everything is fine with Android.
Any help is greatly appreciated. Thanks!
Cedric
January 21, 2026, 8:18am
5
I could open and see every GS from Babylon.js docs on my iphone 11
Is there a specific GS that didn’t display? anything in the console?
Caner
January 21, 2026, 8:48am
6
Strange, all I see in docs is a blank page when running on iPhone 12 Pro with iOS 16.3.1. However, both the docs page and the PGs load fine when running on 13 Pro with iOS 16.1.
Cedric
January 21, 2026, 10:00am
7
Nothing in the console? Like a shader error?
Caner
January 21, 2026, 10:20am
8
The screenshot was from docs page, I thought it was not about shaders. I’m debugging on Windows, which I’m having inconsistencies when debugging, but I was able to see this error at docs:
I cannot see the contents of the .js resources there.
When loading a PG, this is the error I see:
Erroneous snippet from index.js:
checkBabylonVersionAsync().then((versionInfo) => {
const bundle = (globalThis && globalThis.__PLAYGROUND_BUNDLE__) || "babylon.playground.js";
loadScriptAsync(bundle).then(() => {
var hostElement = document.getElementById("host-element");
let mode = undefined;
if (window.location.href.includes("full.html")) {
mode = 1;
} else if (window.location.href.includes("frame.html")) {
mode = 2;
}
// eslint-disable-next-line no-undef /*ERROR BELOW*/
BABYLON.Playground.Show(hostElement, mode, versionInfo.version, versionInfo.bundles);
});
});
Cedric
January 21, 2026, 10:22am
9
do you get that error for every PG? only for ios16.3.1?
cc @docEdub
Caner
January 21, 2026, 10:42am
10
Yes, I’m having that at every PG and doc page. I will test with another device with different versions in a short while.
In my application, I see everything other than the GaussianSplattingMesh. But the mesh seems to be loaded without any errors.
Side information, subpages at forum are shown like this on my iPhone:
Caner
January 21, 2026, 12:44pm
11
docEdub
January 21, 2026, 4:18pm
13
The GS loads and displays on my iPhone 12’s with iOS 26.2. The GS is upside-down though. Same on macOS with all browsers.
I don’t have iOS 15 or 16 to test with.
PG I tested with is https://playground.babylonjs.com/#M05L0C#5
docEdub
January 21, 2026, 4:30pm
15
Same results on Windows 11 for Edge and Chrome. PG and GS load with no errors but GS is upside-down. I don’t see any syntax errors for the PG code in the console.
The issue should affect all iOS versions below 16.4 and is independent of Gaussian Splatting. On iOS < 16.4, opening https://playground.babylonjs.com results in a blank page.
This happens because Monaco upgrade introduces modern JavaScript features that older WebKit engines can’t parse/execute (notably class static initialization blocks and RegExp lookbehind ). On those browsers this triggers a runtime/parse failure early in babylon.playground.[fullhash].js, so the script never completes and the Playground isn’t attached to the global object.
Root cause analysis and fix proposal:
master ← simonedevit:fix/monaco-editor-old-safari
opened 11:01AM - 22 Jan 26 UTC
Issue: Users accessing https://playground.babylonjs.com/ on iOS < 16.4 encounter… a blank page due to a total script execution failure.
---
The upgrade of Monaco editor (from `0.27.0` to `0.55.1`) introduces modern JavaScript features that trigger syntax error on older WebKit engines, preventing the editor and the playground from initializing. This happens because new versions rely on _static initialization blocks_ and _lookbehind assertions_.
1. **Static initialization blocks (ES2022 syntax)** - supported from [iOS 16.4](https://caniuse.com/mdn-javascript_classes_static_initialization_blocks)
__Problem__: builded output (`babylon.playground.[fullhash].js`) contains the following code that it can not be interpreted from older WebKit versions:
```js
static { this.INSTANCE = new WindowManager(); }
```
__Solution__: downlevel ES2022 static initialization blocks to ES2021 via `ts-loader`.
__Note__: I opted for `ts-loader` instead of `babel-loader` to maintain consistency with the existing build pipeline and avoid adding new dev dependencies.
```ts
{
test: /\.js$/,
include: nonacoEditorRegEx,
use: {
loader: "ts-loader",
options: {
transpileOnly: true,
compilerOptions: {
target: "ES2021",
}
}
}
}
```
2. **Lookbehind assertions (regex) - supported from [Safari on iOS 16.4](https://caniuse.com/js-regexp-lookbehind)**
__Problem__: builded output (`babylon.playground.[fullhash].js`) contains the following code that it can not be interpreted from older WebKit versions:
- initialValidationRegex
```js
const initialValidationRegex = /\b(rgb|rgba|hsl|hsla)(\([0-9\s,.\%]*\))|^(#)([A-Fa-f0-9]{3})\b|^(#)([A-Fa-f0-9]{4})\b|^(#)([A-Fa-f0-9]{6})\b|^(#)([A-Fa-f0-9]{8})\b|(?<=['"\s])(#)([A-Fa-f0-9]{3})\b|(?<=['"\s])(#)([A-Fa-f0-9]{4})\b|(?<=['"\s])(#)([A-Fa-f0-9]{6})\b|(?<=['"\s])(#)([A-Fa-f0-9]{8})\b/gm;
```
- wordBoundaryToMaintain
```js
_PascalCaseAction.wordBoundaryToMaintain = new BackwardsCompatibleRegExp('(?<=\\.)', 'gm');
```
__Solution__: since there is no standard transpiler for _lookbehind assertions_, the most reliable workaround is to substitute them with _non-capturing groups_ and a "start of line" anchor `((?:$1|^))`.
This specific replacement should reserve capture group indices, ensuring that Monaco's internal logic for color decorators and PascalCase actions remains functional and correctly aligned. It remains a workaround and still requires thorough testing; smoke tests didn't show regressions.
---
Tested with the following simulators: iPhone 13 Pro (15.4, 15.5, 16.2, 16.4, 18.4).
---
Forum discussion: https://forum.babylonjs.com/t/gaussian-splat-mesh-is-not-rendered-on-ios/62164.
3 Likes