{"record":{"id":"288d0edf90795db0","repo":"remix-run/react-router","slug":"react-router-config-loading-requires-vite-s-conf","errorCode":null,"errorMessage":"React Router config loading requires Vite's __config_loader environment to be runnable.","messagePattern":"React Router config loading requires Vite's __config_loader environment to be runnable\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/react-router-dev/vite/vite-runner.ts","lineNumber":66,"sourceCode":"    configFile: false,\n    envDir: false,\n    plugins: [],\n    environments: {\n      __config_loader: {\n        consumer: \"server\",\n        dev: {\n          createEnvironment: (name, config, context) =>\n            vite.createRunnableDevEnvironment(name, config),\n        },\n      },\n    },\n  });\n\n  const environment = devServer.environments.__config_loader;\n\n  if (!vite.isRunnableDevEnvironment(environment)) {\n    await devServer.close();\n    throw new Error(\n      \"React Router config loading requires Vite's __config_loader environment to be runnable.\",\n    );\n  }\n\n  return { devServer, environment, runner: environment.runner };\n}\n","sourceCodeStart":48,"sourceCodeEnd":73,"githubUrl":"https://github.com/remix-run/react-router/blob/1fd704a7dabcbe3ae09d7387b460e6acaba30ec1/packages/react-router-dev/vite/vite-runner.ts#L48-L73","documentation":"Thrown in vite-runner.ts after creating a dev server with an `__config_loader` environment: the code asserts the environment is a runnable dev environment via vite.isRunnableDevEnvironment(). If it isn't (e.g. the environment was overridden by another plugin or Vite config to a non-runnable type), React Router cannot execute the user's react-router.config.ts module via the module runner, so it errors out and closes the dev server.","triggerScenarios":"A plugin or user vite.config overrides `environments.__config_loader` or replaces `createEnvironment` so it no longer returns a runnable environment. A Vite version where createRunnableDevEnvironment is unavailable or behaves differently. Environment API mismatch between Vite and @react-router/dev.","commonSituations":"Vite major upgrade that changed the Environment API (consumer/server split). A custom plugin that globally overrides createEnvironment. Pinning to an incompatible Vite version outside @react-router/dev's peer range.","solutions":["Align Vite version with the peerDependency range of @react-router/dev (check package.json peerDeps).","Remove or audit any vite.config customization of `environments` or `createEnvironment`.","Disable third-party plugins one by one to find one that overrides the environment.","Update @react-router/dev to the latest patch that targets your Vite major."],"exampleFix":"// vite.config.ts — before (overrides the environment React Router depends on)\nexport default defineConfig({ environments: { __config_loader: { consumer: 'client', dev: { createEnvironment: customEnvFactory } } } });\n// after — let React Router own the __config_loader environment\nexport default defineConfig({ plugins: [reactRouter()] });","handlingStrategy":"validation","validationCode":"import * as vite from 'vite';\nconst satisfies = typeof vite.createRunnableDevEnvironment === 'function' && typeof vite.isRunnableDevEnvironment === 'function';\nif (!satisfies) throw new Error('Installed Vite does not support runnable dev environments; align with @react-router/dev peer range.');","typeGuard":"function viteSupportsRunnableEnv(vite: typeof import('vite')): boolean {\n  return typeof vite.createRunnableDevEnvironment === 'function' && typeof vite.isRunnableDevEnvironment === 'function';\n}","tryCatchPattern":null,"preventionTips":["Pin Vite to the peer range declared by @react-router/dev.","Never override `environments.__config_loader` in user vite.config.","Audit third-party Vite plugins that globally patch createEnvironment."],"tags":["vite","config-loader","environment","dev-server","version-compat"],"backgroundTag":null,"analyzedSha":"1fd704a7dabcbe3ae09d7387b460e6acaba30ec1","analyzedAt":"2026-08-12T13:54:57.804Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}