Skip to main content
skill CX Codex

tanstack-router-best-practices — Claude Code skill: TanStack Router

A rule set for TanStack Router in React: type safety, data loading, search params, navigation. Useful once routing in a project grows past a few pages.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add DeckardGer/tanstack-agent-skills --skill tanstack-router-best-practices -a claude-code
npx skills add DeckardGer/tanstack-agent-skills --skill tanstack-router -a claude-code
Open on GitHub

What tanstack-router-best-practices does

The skill splits its rules into priority tiers. Type safety and route organization come first, then router config, data loading, search params and error handling, with navigation, code splitting, preloading and route context below. Rules carry prefixes like ts-, load-, search- and nav-.

Every rule lives in its own file under rules/. The format repeats: why the pattern matters, a bad example, a good example, and a note on when to apply or skip it. Your agent pulls the relevant file while you set up routes, wire loaders or untangle URL state.

This targets React apps that already use TanStack Router. Several data-loading rules assume TanStack Query — queryOptions inside loaders, ensureQueryData. No Query in the project? Skip those entries, the rest stands on its own.

What it helps with

  • register the router type for global inference
  • lay out routes as files and nested levels
  • set up loaders and cache control with loaderDeps
  • validate search params and give them defaults
  • split critical data from the rest in a loader

Example prompts for the agent

  • Set up file-based routing in TanStack Router following the skill rules
  • Check my loaders — am I using loaderDeps and ensureQueryData correctly?
  • Walk through the search params on this route and add validation plus defaults

How to install tanstack-router-best-practices

1Skills CLI (Vercel)

npx skills add DeckardGer/tanstack-agent-skills --skill tanstack-router-best-practices -a claude-code
npx skills add DeckardGer/tanstack-agent-skills --skill tanstack-router -a claude-code

2Manually: put the files in place

~/.claude/skills/tanstack-router/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/tanstack-router/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about tanstack-router-best-practices

How do I install tanstack-router-best-practices in Claude?

Run npx skills add DeckardGer/tanstack-agent-skills --skill tanstack-router-best-practices -a claude-code. The skill file then lands at ~/.claude/skills/tanstack-router/SKILL.md.

What does tanstack-router-best-practices do?

It hands your agent a set of TanStack Router rules covering type safety, route organization, loaders, search params, navigation, code splitting and preloading. Each rule ships with bad and good code examples.

Does the skill require TanStack Query?

No, but some data-loading rules build on Query — queryOptions in loaders and ensureQueryData. Without Query those entries simply do not apply.

Source text

SKILL.md · MIT
---
name: tanstack-router-best-practices
description: TanStack Router best practices for type-safe routing, data loading, search params, and navigation. Activate when building React applications with complex routing needs.
---

# TanStack Router Best Practices

Comprehensive guidelines for implementing TanStack Router patterns in React applications. These rules optimize type safety, data loading, navigation, and code organization.

## When to Apply

- Setting up application routing
- Creating new routes and layouts
- Implementing search parameter handling
- Configuring data loaders
- Setting up code splitting
- Integrating with TanStack Query
- Refactoring navigation patterns

## Rule Categories by Priority

| Priority | Category | Rules | Impact |
|----------|----------|-------|--------|
| CRITICAL | Type Safety | 4 rules | Prevents runtime errors and enables refactoring |
| CRITICAL | Route Organization | 5 rules | Ensures maintainable route structure |
| HIGH | Router Config | 1 rule | Global router defaults |
| HIGH | Data Loading | 6 rules | Optimizes data fetching and caching |
| HIGH | Search Params | 5 rules | Enables type-safe URL state |
| HIGH | Error Handling | 1 rule | Handles 404 and errors gracefully |
| MEDIUM | Navigation | 5 rules | Improves UX and accessibility |
| MEDIUM | Code Splitting | 3 rules | Reduces bundle size |
| MEDIUM | Preloading | 3 rules | Improves perceived performance |
| LOW | Route Context | 3 rules | Enables dependency injection |

## Quick Reference

### Type Safety (Prefix: `ts-`)

- `ts-register-router` — Register router type for global inference
- `ts-use-from-param` — Use `from` parameter for type narrowing
- `ts-route-context-typing` — Type route context with createRootRouteWithContext
- `ts-query-options-loader` — Use queryOptions in loaders for type inference

### Router Config (Prefix: `router-`)

- `router-default-options` — Configure router defaults (scrollRestoration, defaultErrorComponent, etc.)

### Route Organization (Prefix: `org-`)

- `org-file-based-routing` — Prefer file-based routing for conventions
- `org-route-tree-structure` — Follow hierarchical route tree patterns
- `org-pathless-layouts` — Use pathless routes for shared layouts
- `org-index-routes` — Understand index vs layout routes
- `org-virtual-routes` — Understand virtual file routes

### Data Loading (Prefix: `load-`)

- `load-use-loaders` — Use route loaders for data fetching
- `load-loader-deps` — Define loaderDeps for cache control
- `load-ensure-query-data` — Use ensureQueryData with TanStack Query
- `load-deferred-data` — Split critical and non-critical data
- `load-error-handling` — Handle loader errors appropriately
- `load-parallel` — Leverage parallel route loading

### Search Params (Prefix: `search-`)

- `search-validation` — Always validate search params
- `search-type-inheritance` — Leverage parent search param types
- `search-middleware` — Use search param middleware
- `search-defaults` — Provide sensible defaults
- `search-custom-serializer` — Configure custom search param serializers

### Error Handling (Prefix: `err-`)

- `err-not-found` — Handle not-found routes properly

### Navigation (Prefix: `nav-`)

- `nav-link-component` — Prefer Link component for navigation
- `nav-active-states` — Configure active link states
- `nav-use-navigate` — Use useNavigate for programmatic navigation
- `nav-relative-paths` — Understand relative path navigation
- `nav-route-masks` — Use route masks for modal URLs

### Code Splitting (Prefix: `split-`)

- `split-lazy-routes` — Use .lazy.tsx for code splitting
- `split-critical-path` — Keep critical config in main route file
- `split-auto-splitting` — Enable autoCodeSplitting when possible

### Preloading (Prefix: `preload-`)

- `preload-intent` — Enable intent-based preloading
- `preload-stale-time` — Configure preload stale time
- `preload-manual` — Use manual preloading strategically

### Route Context (Prefix: `ctx-`)

- `ctx-root-context` — Define context at root route
- `ctx-before-load` — Extend context in beforeLoad
- `ctx-dependency-injection` — Use context for dependency injection

## How to Use

Each rule file in the `rules/` directory contains:
1. **Explanation** — Why this pattern matters
2. **Bad Example** — Anti-pattern to avoid
3. **Good Example** — Recommended implementation
4. **Context** — When to apply or skip this rule

## Full Reference

See individual rule files in `rules/` directory for detailed guidance and code examples.

© DeckardGer · MIT · DeckardGer/tanstack-agent-skills

Similar skills

Everything for Frontend and UI →

From the same set3

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor