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
- Remove the entry that sets enabled: false for the required plugin in pluginOptions.
- Set enabled: true explicitly for the plugin matching the file format being loaded.
- 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
- Keep pluginOptions constants in one place and review enabled:false flags.
- Never disable a plugin globally in shared loader wrappers.
- Match the enabled flags to the set of file formats the app actually loads.
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
- When using ArrayBufferView to load data the file extension m
- No plugin or fallback for ${pluginExtension ?? fileInfo.url}
- Loading from ArrayBufferView can not be used with plugins th
- No scene available to import mesh to
- Cannot load file: a valid scene filename or root url was not
AI-assisted analysis of BabylonJS/Babylon.js@0592b347b8 (2026-08-30).
Data as JSON: /api/errors/3bf14f87dc3b0483.
Report an issue: GitHub.