--- title: StaticRouterProvider new: true --- # `` A `` accepts a `router` from [`createStaticRouter()`][createstaticrouter] and a `context` from [`createStaticHandler()`][createstatichandler] and renders your application on the server (i.e., [Node][node] or another Javascript runtime). For a more complete overview, please refer to the [Server-Side Rendering][ssr] guide. ```jsx lines=[4,34-37] import { createStaticHandler, createStaticRouter, StaticRouterProvider, } from "react-router-dom/server"; import Root, { loader as rootLoader, ErrorBoundary as RootBoundary, } from "./root"; const routes = [ { path: "/", loader: rootLoader, Component: Root, ErrorBoundary: RootBoundary, }, ]; export async function renderHtml(req) { let { query, dataRoutes } = createStaticHandler(routes); let fetchRequest = createFetchRequest(req); let context = await query(fetchRequest); // If we got a redirect response, short circuit and let our Express server // handle that directly if (context instanceof Response) { throw context; } let router = createStaticRouter(dataRoutes, context); return ReactDOMServer.renderToString( ); } ``` ## Type Declaration ```ts declare function StaticRouterProvider(props: { context: StaticHandlerContext; router: Router; hydrate?: boolean; nonce?: string; }: JSX.Element; ``` ## `context` This is the `context` returned from the `createStaticHandler().query()` calls which contains all of the fetched data for the request. ## `router` This is the router created via `createStaticRouter` ## `hydrate` By default, `` will stringify the required hydration data onto `window.__staticRouterHydrationData` in a `