{"record":{"id":"7c579a0a13d23cac","repo":"remix-run/react-router","slug":"you-cannot-use-navigator-forward-on-the-server-b","errorCode":null,"errorMessage":"You cannot use navigator.forward() on the server because it is a stateless environment.","messagePattern":"You cannot use navigator\\.forward\\(\\) on the server because it is a stateless environment\\.","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/react-router/lib/dom/server.tsx","lineNumber":325,"sourceCode":"          `\\`navigate(${JSON.stringify(to)}, { replace: true })\\` somewhere ` +\n          `in your app.`,\n      );\n    },\n    go(delta: number) {\n      throw new Error(\n        `You cannot use navigator.go() on the server because it is a stateless ` +\n          `environment. This error was probably triggered when you did a ` +\n          `\\`navigate(${delta})\\` somewhere in your app.`,\n      );\n    },\n    back() {\n      throw new Error(\n        `You cannot use navigator.back() on the server because it is a stateless ` +\n          `environment.`,\n      );\n    },\n    forward() {\n      throw new Error(\n        `You cannot use navigator.forward() on the server because it is a stateless ` +\n          `environment.`,\n      );\n    },\n  };\n}\n\n/**\n * Create a static {@link DataRouter} for server-side rendering\n *\n * @example\n * export async function handleRequest(request: Request) {\n *   let { query, dataRoutes } = createStaticHandler(routes);\n *   let context = await query(request);\n *\n *   if (context instanceof Response) {\n *     return context;\n *   }","sourceCodeStart":307,"sourceCodeEnd":343,"githubUrl":"https://github.com/remix-run/react-router/blob/7aea711dd1ae2bc5a076d13ff17291829690fa74/packages/react-router/lib/dom/server.tsx#L307-L343","documentation":"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.","triggerScenarios":"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.","commonSituations":"Browser-chrome emulation components (custom forward buttons) that eagerly invoke navigation on init; shared navigation managers initialized during SSR.","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"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"const isServer = typeof window === 'undefined';\nif (!isServer) navigator.forward?.(); // client-only forward navigation","typeGuard":null,"tryCatchPattern":null,"preventionTips":["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"],"tags":["ssr","navigation","history","stateless-navigator"],"backgroundTag":"navigation-during-ssr","analyzedSha":"7aea711dd1ae2bc5a076d13ff17291829690fa74","analyzedAt":"2026-08-18T18:04:14.938Z","contentChangedAt":"2026-08-18T18:04:14.938Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}