remix-run/react-router · error
You cannot use navigator.forward() on the server because it
Error message
You cannot use navigator.forward() on the server because it is a stateless environment.
What it means
forward() on the SSR stateless navigator throws (lib/dom/server.tsx:296), completing the set of history-mutation stubs (push/replace/go/back) that are meaningless in a one-shot server render. It indicates forward navigation was requested during SSR.
Source
Thrown at packages/react-router/lib/dom/server.tsx:325
`\`navigate(${JSON.stringify(to)}, { replace: true })\` somewhere ` +
`in your app.`,
);
},
go(delta: number) {
throw new Error(
`You cannot use navigator.go() on the server because it is a stateless ` +
`environment. This error was probably triggered when you did a ` +
`\`navigate(${delta})\` somewhere in your app.`,
);
},
back() {
throw new Error(
`You cannot use navigator.back() on the server because it is a stateless ` +
`environment.`,
);
},
forward() {
throw new Error(
`You cannot use navigator.forward() on the server because it is a stateless ` +
`environment.`,
);
},
};
}
/**
* Create a static {@link DataRouter} for server-side rendering
*
* @example
* export async function handleRequest(request: Request) {
* let { query, dataRoutes } = createStaticHandler(routes);
* let context = await query(request);
*
* if (context instanceof Response) {
* return context;
* }View on GitHub (pinned to 7aea711dd1)
Solutions
- Call forward() only from client event handlers
- Replace forward-on-render logic with a loader redirect to a known route
- Audit isomorphic wrappers that touch router.state.navigator
Defensive patterns
Strategy: validation
Validate before calling
const isServer = typeof window === 'undefined'; if (!isServer) navigator.forward?.(); // client-only forward navigation
Prevention
- Call forward() only from client event handlers
- Replace forward-on-render with loader redirects to known routes
- Keep browser-chrome emulation (back/forward UI) fully client-side
When it happens
Trigger: Code or a library calling navigator.forward() during server rendering; retry/redo UI that triggers forward navigation during mount or render instead of on user interaction.
Common situations: Browser-chrome emulation components (custom forward buttons) that eagerly invoke navigation on init; shared navigation managers initialized during SSR.
Related errors
- You cannot use navigator.go() on the server because it is a
- You cannot use navigator.back() on the server because it is
- You cannot use navigator.push() on the server because it is
- You cannot use navigator.replace() on the server because it
- Prerender (data): Received a ${response.status} status code
AI-assisted analysis of remix-run/react-router@7aea711dd1 (2026-08-18).
Data as JSON: /api/errors/7c579a0a13d23cac.
Report an issue: GitHub.