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

  1. Call forward() only from client event handlers
  2. Replace forward-on-render logic with a loader redirect to a known route
  3. 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

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


AI-assisted analysis of remix-run/react-router@7aea711dd1 (2026-08-18). Data as JSON: /api/errors/7c579a0a13d23cac. Report an issue: GitHub.