BabylonJS/Babylon.js · error · Error

Required extension ${name} is disabled

Error message

Required extension ${name} is disabled

What it means

The glTF asset declares an extension in its 'extensionsRequired' list, and an extension with that name is registered and enabled, but the user explicitly disabled it via loader extensionOptions. Because the asset cannot be correctly loaded without a required extension, the loader refuses to proceed.

Source

Thrown at packages/dev/loaders/src/glTF/2.0/glTFLoader.pure.ts:734

                        this._parent.onExtensionLoadedObservable.notifyObservers(extension);
                        return extension;
                    })()
                );
            }
        });

        this._extensions.push(...(await Promise.all(extensionPromises)));

        this._extensions.sort((a, b) => (a.order || Number.MAX_VALUE) - (b.order || Number.MAX_VALUE));
        this._parent.onExtensionLoadedObservable.clear();

        if (this._gltf.extensionsRequired) {
            for (const name of this._gltf.extensionsRequired) {
                const available = this._extensions.some((extension) => extension.name === name && extension.enabled);
                if (!available) {
                    if (this.parent.extensionOptions[name]?.enabled === false) {
                        throw new Error(`Required extension ${name} is disabled`);
                    }
                    throw new Error(`Required extension ${name} is not available`);
                }
            }
        }
    }

    private _createRootNode(): INode {
        if (this._parent.customRootNode !== undefined) {
            this._rootBabylonMesh = this._parent.customRootNode;
            return {
                _babylonTransformNode: this._rootBabylonMesh === null ? undefined : this._rootBabylonMesh,
                index: -1,
            };
        }
        this._babylonScene._blockEntityCollection = !!this._assetContainer;
        const rootMesh = new Mesh("__root__", this._babylonScene);
        this._rootBabylonMesh = rootMesh;

View on GitHub (pinned to 0592b347b8)

Solutions

  1. Remove the enabled:false override for the required extension in extensionOptions
  2. Register the needed extension plugin (e.g. GLTFLoaderDracoCompression) and ensure it is enabled
  3. Re-export the glTF asset without the required extension if you cannot support it
  4. Check this._gltf.extensionsRequired in the asset to see which extensions must be enabled

Example fix

// before
const loader = new GLTFLoader();
loader.extensionOptions["KHR_draco_mesh_compression"] = { enabled: false };
// after
const loader = new GLTFLoader();
// do not disable an extension that the asset lists in extensionsRequired
loader.extensionOptions["KHR_draco_mesh_compression"] = { enabled: true };
Defensive patterns

Strategy: validation

Validate before calling

// Check required extensions against your loader config before loading
const required = gltf.extensionsRequired ?? [];
for (const name of required) {
  if (loader.extensionOptions[name]?.enabled === false) {
    throw new Error(`Re-enable ${name}: asset requires it`);
  }
}

Type guard

function isExtensionEnabled(loader, name) {
  return loader.extensionOptions[name]?.enabled !== false;
}

Try / catch

try {
  await loader.loadAsync(url);
} catch (e) {
  if (/is disabled$/.test(e.message)) {
    const ext = e.message.match(/Required extension (\S+) is disabled/)?.[1];
    console.warn(`Enable extensionOptions[${ext}] to load this asset`);
  } else throw e;
}

Prevention

When it happens

Trigger: loader.extensionOptions['KHR_draco_mesh_compression'].enabled = false (or similar) combined with loading a .glb/.gltf whose extensionsRequired includes that extension.

Common situations: Disabling extensions to test fallbacks or reduce bundle size; copy-pasted loader configuration from another project; a shared loader factory that disables certain extensions by default.

Related errors


AI-assisted analysis of BabylonJS/Babylon.js@0592b347b8 (2026-08-30). Data as JSON: /api/errors/7196653275ea08a6. Report an issue: GitHub.