TanStack Router - 100% type-safe routing, file-based routes, loaders, search params. Use when implementing routing in React apps (NOT Next.js).
View on GitHubfusengine/agents
fuse-react
plugins/react-expert/skills/react-tanstack-router/SKILL.md
January 22, 2026
Select agents to install to:
npx add-skill https://github.com/fusengine/agents/blob/main/plugins/react-expert/skills/react-tanstack-router/SKILL.md -a claude-code --skill react-tanstack-routerInstallation paths:
.claude/skills/react-tanstack-router/# TanStack Router
100% type-safe router for React with file-based routing.
## Installation
```bash
bun add @tanstack/react-router
bun add -D @tanstack/router-plugin @tanstack/router-devtools
```
## Vite Configuration
```typescript
// vite.config.ts
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import { TanStackRouterVite } from '@tanstack/router-plugin/vite'
export default defineConfig({
plugins: [TanStackRouterVite(), react()],
})
```
---
## File-Based Routing
### Structure
```text
src/routes/
├── __root.tsx # Root layout
├── index.tsx # / route
├── about.tsx # /about route
├── posts/
│ ├── index.tsx # /posts route
│ └── $postId.tsx # /posts/:postId route
└── _layout/
└── dashboard.tsx # Pathless layout group
```
### Root Route
```typescript
// src/routes/__root.tsx
import { createRootRoute, Outlet } from '@tanstack/react-router'
import { TanStackRouterDevtools } from '@tanstack/router-devtools'
export const Route = createRootRoute({
component: () => (
<>
<nav>
<Link to="/">Home</Link>
<Link to="/about">About</Link>
</nav>
<Outlet />
<TanStackRouterDevtools />
</>
),
})
```
### File Route
```typescript
// src/routes/index.tsx
import { createFileRoute } from '@tanstack/react-router'
export const Route = createFileRoute('/')({
component: HomePage,
})
function HomePage() {
return <h1>Welcome</h1>
}
```
---
## Route Parameters
```typescript
// src/routes/posts/$postId.tsx
import { createFileRoute } from '@tanstack/react-router'
export const Route = createFileRoute('/posts/$postId')({
loader: async ({ params }) => {
return fetchPost(params.postId)
},
component: PostPage,
})
function PostPage() {
const post = Route.useLoaderData()
return <article>{post.title}</article>
}
```
---
## Search Parameters
### Define Schema
```typescript
// src/routes/search.tsx
import { createFileRoute } from '@tanstac