Skip to main content
The Router is the core object that manages routing state, navigation, and route matching in TanStack Router.

Creating a Router

createRouter

Creates a new Router instance for React.
import { createRouter } from '@tanstack/react-router'

const router = createRouter({
  routeTree,
  context: { userId: '123' },
  defaultPreload: 'intent',
})
Source: packages/react-router/src/router.ts:91
options
RouterConstructorOptions
required
Router options used to configure the router.
returns
Router
A Router instance to be provided to RouterProvider.

Router Class

The Router class extends RouterCore from @tanstack/router-core. Source: packages/react-router/src/router.ts:95-119
export class Router<
  TRouteTree extends AnyRoute,
  TTrailingSlashOption extends TrailingSlashOption = 'never',
  TDefaultStructuralSharingOption extends boolean = false,
  TRouterHistory extends RouterHistory = RouterHistory,
  TDehydrated extends Record<string, any> = Record<string, any>,
> extends RouterCore<...> {
  constructor(options: RouterConstructorOptions<...>) {
    super(options)
  }
}

RouterProvider

Top-level component that renders the active route matches and provides the router to the React tree via context.
import { RouterProvider } from '@tanstack/react-router'

function App() {
  return <RouterProvider router={router} />
}
Source: packages/react-router/src/RouterProvider.tsx:58-67
router
TRouter
required
The router instance created with createRouter.
...rest
Partial<RouterOptions>
Additional router options to update the router instance. Accepts the same options as createRouter to update the router after creation.

Usage Example

import { createRouter, RouterProvider, createRootRoute, createRoute } from '@tanstack/react-router'

// Create routes
const rootRoute = createRootRoute({
  component: () => (
    <div>
      <h1>My App</h1>
      <Outlet />
    </div>
  ),
})

const indexRoute = createRoute({
  getParentRoute: () => rootRoute,
  path: '/',
  component: () => <div>Home Page</div>,
})

const aboutRoute = createRoute({
  getParentRoute: () => rootRoute,
  path: '/about',
  component: () => <div>About Page</div>,
})

const routeTree = rootRoute.addChildren([indexRoute, aboutRoute])

// Create router
const router = createRouter({
  routeTree,
  defaultPreload: 'intent',
  defaultPreloadDelay: 50,
})

// Provide to app
function App() {
  return <RouterProvider router={router} />
}

Type Safety

To enable type-safe routing throughout your app, register your router type:
declare module '@tanstack/react-router' {
  interface Register {
    router: typeof router
  }
}
This enables autocomplete and type-checking for:
  • Route paths in Link components
  • Search params
  • Route params
  • Navigation options

See Also

Build docs developers (and LLMs) love