Reproduction
https://github.com/wobsoriano/clerk-react-router-v8-context-repro
System Info
System:
OS: macOS 26.5.1
CPU: (14) arm64 Apple M4 Pro
Memory: 4.15 GB / 48.00 GB
Shell: 5.9 - /bin/zsh
Binaries:
Node: 24.15.0 - /Users/wobsoriano/.vite-plus/bin/node
npm: 11.12.1 - /Users/wobsoriano/.vite-plus/bin/npm
pnpm: 11.9.0 - /Users/wobsoriano/.local/state/fnm_multishells/54362_1782257576852/bin/pnpm
bun: 1.3.13 - /Users/wobsoriano/.bun/bin/bun
Deno: 2.5.0 - /Users/wobsoriano/.deno/bin/deno
Browsers:
Chrome: 149.0.7827.156
Firefox: 147.0.2
Safari: 26.5
npmPackages:
@react-router/dev: 8.0.0 => 8.0.0
@react-router/node: 8.0.0 => 8.0.0
@react-router/serve: 8.0.0 => 8.0.0
react-router: 8.0.0 => 8.0.0
vite: ^8.0.3 => 8.1.0
Used Package Manager
npm
Expected Behavior
In react-router dev (framework mode), a node_modules dependency that imports react-router and renders during SSR should share the app's react-router instance. Its useLocation() / useNavigate() / useParams() calls under <ServerRouter> should work, like they do in production.
Actual Behavior
In dev, hooks from an externalized dependency throw during SSR even when rendered inside <ServerRouter>:
useNavigate() may be used only in the context of a component.
v8's conditional exports split react-router into development (dist/development) and default (dist/production).
Workarounds: NODE_OPTIONS='--conditions development' pnpm dev, or ssr.noExternal: ['<dep>']
Reproduction
https://github.com/wobsoriano/clerk-react-router-v8-context-repro
System Info
System: OS: macOS 26.5.1 CPU: (14) arm64 Apple M4 Pro Memory: 4.15 GB / 48.00 GB Shell: 5.9 - /bin/zsh Binaries: Node: 24.15.0 - /Users/wobsoriano/.vite-plus/bin/node npm: 11.12.1 - /Users/wobsoriano/.vite-plus/bin/npm pnpm: 11.9.0 - /Users/wobsoriano/.local/state/fnm_multishells/54362_1782257576852/bin/pnpm bun: 1.3.13 - /Users/wobsoriano/.bun/bin/bun Deno: 2.5.0 - /Users/wobsoriano/.deno/bin/deno Browsers: Chrome: 149.0.7827.156 Firefox: 147.0.2 Safari: 26.5 npmPackages: @react-router/dev: 8.0.0 => 8.0.0 @react-router/node: 8.0.0 => 8.0.0 @react-router/serve: 8.0.0 => 8.0.0 react-router: 8.0.0 => 8.0.0 vite: ^8.0.3 => 8.1.0Used Package Manager
npm
Expected Behavior
In react-router dev (framework mode), a
node_modulesdependency that imports react-router and renders during SSR should share the app's react-router instance. ItsuseLocation() / useNavigate() / useParams()calls under<ServerRouter>should work, like they do in production.Actual Behavior
In dev, hooks from an externalized dependency throw during SSR even when rendered inside
<ServerRouter>:useNavigate()may be used only in the context of a component.v8's conditional exports split react-router into development (
dist/development) and default (dist/production).Workarounds:
NODE_OPTIONS='--conditions development' pnpm dev, orssr.noExternal: ['<dep>']