Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
ovachiever avatar

Tanstack Router

  • 46 installs
  • 51 repo stars
  • Updated November 25, 2025
  • ovachiever/droid-tings

Helps with ai & agent building tasks during AI-assisted development.

About

tanstack router is a Claude Code skill for ai & agent building. It helps solo builders move faster with AI-assisted coding.

  • tanstack router
  • AI & Agent Building
  • AI-coding skill

Tanstack Router by the numbers

  • 46 all-time installs (skills.sh)
  • Ranked #7,539 of 16,556 AI & Agent Building skills by installs in the Skillselion catalog
  • Data as of Jul 27, 2026 (Skillselion catalog sync)
npx skills add https://github.com/ovachiever/droid-tings --skill tanstack-router

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs46
repo stars51
Last updatedNovember 25, 2025
Repositoryovachiever/droid-tings

What it does

Helps with ai & agent building tasks during AI-assisted development.

Files

SKILL.mdMarkdownGitHub ↗

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

Related skills

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.