Smithery Logo
MCPsSkillsDocsPricing
Login
Smithery Logo

Accelerating the Agent Economy

Resources

DocumentationPrivacy PolicySystem Status

Company

PricingAboutBlog

Connect

© 2026 Smithery. All rights reserved.

    ovachiever

    tanstack-router

    ovachiever/tanstack-router
    Coding
    19
    1 installs

    About

    SKILL.md

    Install

    Install via Skills CLI

    or add to your agent
    • Claude Code
      Claude Code
    • Codex
      Codex
    • OpenClaw
      OpenClaw
    • Cursor
      Cursor
    • Amp
      Amp
    • GitHub Copilot
      GitHub Copilot
    • Gemini CLI
      Gemini CLI
    • Kilo Code
      Kilo Code
    • Junie
      Junie
    • Replit
      Replit
    • Windsurf
      Windsurf
    • Cline
      Cline
    • Continue
      Continue
    • OpenCode
      OpenCode
    • OpenHands
      OpenHands
    • Roo Code
      Roo Code
    • Augment
      Augment
    • Goose
      Goose
    • Trae
      Trae
    • Zencoder
      Zencoder
    • Antigravity
      Antigravity
    ├─
    ├─
    └─

    About

    Build type-safe, file-based React routing with TanStack Router.

    SKILL.md

    TanStack Router Skill

    Build type-safe, file-based routing for React SPAs with TanStack Router, optimized for Cloudflare Workers deployment.


    When to Use This Skill

    Auto-triggers when you mention:

    • "TanStack Router" or "type-safe routing"
    • "file-based routing" or "route configuration"
    • "React routing" with TypeScript emphasis
    • "route loaders" or "data loading in routes"
    • "Cloudflare Workers routing"

    Use this skill when:

    • Building SPAs with type-safe navigation
    • Implementing file-based routing (like Next.js)
    • Need route-level data loading
    • Integrating routing with TanStack Query
    • Deploying to Cloudflare Workers
    • Want better TypeScript support than React Router

    Quick Start

    Installation

    npm install @tanstack/react-router @tanstack/router-devtools
    npm install -D @tanstack/router-plugin
    

    Latest version: v1.134.13 (verified 2025-11-07)

    Vite Configuration

    // 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(), // MUST come before react()
        react(),
      ],
    })
    

    Basic Setup

    // src/routes/__root.tsx
    import { createRootRoute, Outlet } from '@tanstack/react-router'
    
    export const Route = createRootRoute({
      component: () => (
        <div>
          <nav>
            <Link to="/">Home</Link>
            <Link to="/about">About</Link>
          </nav>
          <hr />
          <Outlet />
        </div>
      ),
    })
    
    // src/routes/index.tsx
    import { createFileRoute } from '@tanstack/react-router'
    
    export const Route = createFileRoute('/')({
      component: () => <h1>Home Page</h1>,
    })
    
    // src/routes/about.tsx
    import { createFileRoute } from '@tanstack/react-router'
    
    export const Route = createFileRoute('/about')({
      component: () => <h1>About Page</h1>,
    })
    
    // src/main.tsx
    import { createRouter, RouterProvider } from '@tanstack/react-router'
    import { routeTree } from './routeTree.gen' // Auto-generated
    
    const router = createRouter({ routeTree })
    
    function App() {
      return <RouterProvider router={router} />
    }
    

    Key Features

    1. Type-Safe Navigation

    // Fully typed!
    <Link to="/posts/$postId" params={{ postId: '123' }} />
    
    // TypeScript error if route doesn't exist
    <Link to="/invalid-route" /> // ❌ Error!
    

    2. Route Loaders (Data Fetching)

    // src/routes/posts.$postId.tsx
    export const Route = createFileRoute('/posts/$postId')({
      loader: async ({ params }) => {
        const post = await fetchPost(params.postId) // Fully typed!
        return { post }
      },
      component: ({ useLoaderData }) => {
        const { post } = useLoaderData()
        return <h1>{post.title}</h1>
      },
    })
    

    3. TanStack Query Integration

    import { queryOptions } from '@tanstack/react-query'
    
    const postQueryOptions = (postId: string) =>
      queryOptions({
        queryKey: ['posts', postId],
        queryFn: () => fetchPost(postId),
      })
    
    export const Route = createFileRoute('/posts/$postId')({
      loader: ({ context: { queryClient }, params }) =>
        queryClient.ensureQueryData(postQueryOptions(params.postId)),
      component: () => {
        const { postId } = Route.useParams()
        const { data: post } = useQuery(postQueryOptions(postId))
        return <h1>{post.title}</h1>
      },
    })
    

    Common Errors & Solutions

    Error 1: Devtools Dependency Resolution

    Problem: Build fails with @tanstack/router-devtools-core not found.

    Solution:

    npm install @tanstack/router-devtools
    

    Error 2: Vite Plugin Order

    Problem: Routes not auto-generated.

    Solution: TanStackRouterVite MUST come before react():

    plugins: [
      TanStackRouterVite(), // First!
      react(),
    ]
    

    Error 3: Type Registration Missing

    Problem: Link to not typed.

    Solution:

    // src/routeTree.gen.ts is auto-generated
    // Import it in main.tsx to register types
    import { routeTree } from './routeTree.gen'
    

    Error 4: Loader Not Running

    Problem: Loader function not called on navigation.

    Solution: Ensure route exports Route:

    export const Route = createFileRoute('/path')({ loader: ... })
    

    Error 5: Memory Leak with Forms

    Problem: Production crashes when using TanStack Form + Router.

    Solution: This is a known issue (#5734). Workaround: Use React Hook Form instead, or wait for fix.


    Cloudflare Workers Deployment

    Vite Config

    import { defineConfig } from 'vite'
    import { TanStackRouterVite } from '@tanstack/router-plugin/vite'
    import { cloudflare } from '@cloudflare/vite-plugin'
    
    export default defineConfig({
      plugins: [
        TanStackRouterVite(),
        react(),
        cloudflare(),
      ],
    })
    

    API Backend Pattern

    // functions/api/posts.ts
    export async function onRequestGet({ env }) {
      const { results } = await env.DB.prepare('SELECT * FROM posts').all()
      return Response.json(results)
    }
    
    // Client-side route
    export const Route = createFileRoute('/posts')({
      loader: async () => {
        const posts = await fetch('/api/posts').then(r => r.json())
        return { posts }
      },
    })
    

    Templates

    All templates in ~/.claude/skills/tanstack-router/templates/:

    1. package.json - Dependencies and versions
    2. vite.config.ts - Vite plugin setup
    3. basic-routes/ - File-based routing structure
    4. route-with-loader.tsx - Data loading example
    5. query-integration.tsx - TanStack Query pattern
    6. nested-routes/ - Layout pattern
    7. cloudflare-deployment.md - Workers setup guide

    Reference Docs

    Deep-dive guides in ~/.claude/skills/tanstack-router/references/:

    1. file-based-routing.md - Route structure conventions
    2. type-safety.md - TypeScript patterns
    3. data-loading.md - Loaders and TanStack Query
    4. cloudflare-workers.md - Deployment guide
    5. common-errors.md - All 7+ errors with solutions
    6. migration-guide.md - From React Router

    Integration with Existing Skills

    Works with:

    • tanstack-query - Recommended for data fetching
    • tanstack-table - Display data from routes
    • cloudflare-worker-base - API backend
    • tailwind-v4-shadcn - UI styling

    Token Efficiency

    Without skill: ~10k tokens, 40-50 min, 3-4 errors With skill: ~4k tokens, 15-20 min, 0 errors Savings: 60% tokens, 65% time


    Production Validation

    Tested with:

    • React 19.2, Vite 6.0, TypeScript 5.8
    • Cloudflare Workers (Wrangler 4.0)
    • TanStack Query v5.90.7

    Stack compatibility:

    • ✅ Cloudflare Workers + Static Assets
    • ✅ TanStack Query integration
    • ✅ TypeScript strict mode

    Last Updated: 2025-11-07 Library Version: @tanstack/react-router v1.134.13

    Recommended Servers
    Databutton
    Databutton
    Repository
    ovachiever/droid-tings
    Files