BabylonJS/Babylon.js · error

The '${registeredPlugin.plugin.name}' plugin is disabled via

Error message

The '${registeredPlugin.plugin.name}' plugin is disabled via the loader options passed to the loading operation.

What it means

SceneLoader supports per-plugin options passed as the last argument to loading functions. This error is thrown when the resolved plugin was explicitly disabled by the caller via pluginOptions[pluginName].enabled === false.

Source

Thrown at packages/dev/core/src/Loading/sceneLoader.ts:708

            // Fetching head content to get the mime type
            const response = await _FetchAsync(fileInfo.url, { method: "HEAD", responseHeaders: ["Content-Type"] });
            const mimeType = response.headerValues ? response.headerValues["Content-Type"] : "";
            if (mimeType) {
                registeredPlugin = getPluginForMimeType(mimeType);
            }
        }

        if (!registeredPlugin) {
            registeredPlugin = getDefaultPlugin();
        }
    }

    if (!registeredPlugin) {
        throw new Error(`No plugin or fallback for ${pluginExtension ?? fileInfo.url}`);
    }

    if (pluginOptions?.[registeredPlugin.plugin.name]?.enabled === false) {
        throw new Error(`The '${registeredPlugin.plugin.name}' plugin is disabled via the loader options passed to the loading operation.`);
    }

    if (fileInfo.rawData && !registeredPlugin.isBinary) {
        throw new Error("Loading from ArrayBufferView can not be used with plugins that don't support binary loading.");
    }

    // For plugin factories, the plugin is instantiated on each SceneLoader operation. This makes options handling
    // much simpler as we can just pass the options to the factory, rather than passing options through to every possible
    // plugin call. Given this, options are only supported for plugins that provide a factory function.
    let plugin: SceneLoaderPlugin;
    if (IsFactory(registeredPlugin.plugin)) {
        const pluginFactory = registeredPlugin.plugin;
        try {
            // Only await when the factory is actually asynchronous, so that for synchronous factories the plugin is
            // instantiated (and onPluginActivatedObservable is notified) synchronously within the calling load operation.
            const createdPlugin = pluginFactory.createPlugin((pluginOptions ?? {}) as SceneLoaderPluginOptions);
            plugin = createdPlugin instanceof Promise ? await createdPlugin : createdPlugin;
        } catch (error) {

View on GitHub (pinned to 0592b347b8)

Solutions

  1. Remove the entry that sets enabled: false for the required plugin in pluginOptions.
  2. Set enabled: true explicitly for the plugin matching the file format being loaded.
  3. Audit wrapper/helper functions that construct pluginOptions so they do not silently disable needed loaders.

Example fix

// before
await SceneLoader.ImportMeshAsync("", root, "scene.glb", scene, undefined, "", { glTF: { enabled: false } });

// after
await SceneLoader.ImportMeshAsync("", root, "scene.glb", scene, undefined, "", { glTF: { enabled: true } });
Defensive patterns

Strategy: validation

Validate before calling

function assertPluginEnabled(pluginOptions: Record<string, { enabled?: boolean }> | undefined, pluginName: string): void {
  if (pluginOptions?.[pluginName]?.enabled === false) {
    throw new Error(`Plugin ${pluginName} is disabled but required for this load`);
  }
}

Try / catch

try {
  await BABYLON.SceneLoader.ImportMeshAsync("", root, file, scene, undefined, "", pluginOptions);
} catch (e) {
  if ((e as Error).message.includes("plugin is disabled")) {
    console.error("Re-enable the plugin in pluginOptions or remove the enabled:false flag");
  }
}

Prevention

When it happens

Trigger: Calling any SceneLoader load function with pluginOptions such as { glTF: { enabled: false } } while the file being loaded resolves to the glTF plugin.

Common situations: Copy-pasting option objects that disable plugins to trim bundle usage; a shared loader wrapper that disables plugins globally; enabling/disabling feature flags and accidentally turning off the needed plugin.

Related errors


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