T
tanstack-router-best-practices
About tanstack-router-best-practices
A reference skill for applying TanStack Router patterns in React apps. It organizes guidance by priority, covering routing, type safety, data loading, navigation, and related practices.
Key features
- 01Type-safe routing guidance
- 02Route organization patterns
- 03Loader and data-fetching rules
- 04Search parameter validation
- 05Navigation and error handling
- 06Code splitting and preloading
Use cases
- 01Setting up routes and layouts
- 02Adding type-safe URL state
- 03Configuring loaders with TanStack Query
- 04Refactoring navigation and route loading
Install
Copy the command and run it in a terminal.
$
npx skills add https:/ / github.com/ deckardger/ tanstack-agent-skills --skill tanstack-router-best-practicesAfter installing, type/tanstack-router-best-practicesin Claude Code to confirm it loaded.
Bundled files
References and scripts installed along with SKILL.md.
rules/ctx-before-load.mdctx-dependency-injection.mdctx-root-context.mderr-not-found.mdload-deferred-data.mdload-ensure-query-data.mdload-error-handling.mdload-loader-deps.mdload-parallel.mdload-use-loaders.mdnav-active-states.mdnav-link-component.mdnav-relative-paths.mdnav-route-masks.mdnav-use-navigate.mdorg-file-based-routing.mdorg-index-routes.mdorg-pathless-layouts.mdorg-route-tree-structure.mdorg-virtual-routes.mdpreload-intent.mdpreload-manual.mdpreload-stale-time.mdrouter-default-options.mdsearch-custom-serializer.mdsearch-defaults.mdsearch-middleware.mdsearch-type-inheritance.mdsearch-validation.mdsplit-auto-splitting.mdDetails
From the project READMETanStack 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 inferencets-use-from-param— Usefromparameter for type narrowingts-route-context-typing— Type route context with createRootRouteWithContextts-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 conventionsorg-route-tree-structure— Follow hierarchical route tree patternsorg-pathless-layouts— Use pathless routes for shared layoutsorg-index-routes— Understand index vs layout routesorg-virtual-routes— Understand virtual file routes
Data Loading (Prefix: load-)
load-use-loaders— Use route loaders for data fetchingload-loader-deps— Define loaderDeps for cache controlload-ensure-query-data— Use ensureQueryData with TanStack Queryload-deferred-data— Split critical and non-critical dataload-error-handling— Handle loader errors appropriatelyload-parallel— Leverage parallel route loading
Search Params (Prefix: search-)
search-validation— Always validate search paramssearch-type-inheritance— Leverage parent search param typessearch-middleware— Use search param middlewaresearch-defaults— Provide sensible defaultssearch-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 navigationnav-active-states— Configure active link statesnav-use-navigate— Use useNavigate for programmatic navigationnav-relative-paths— Understand relative path navigationnav-route-masks— Use route masks for modal URLs
Code Splitting (Prefix: split-)
split-lazy-routes— Use .lazy.tsx for code splittingsplit-critical-path— Keep critical config in main route filesplit-auto-splitting— Enable autoCodeSplitting when possible
Preloading (Prefix: preload-)
preload-intent— Enable intent-based preloadingpreload-stale-time— Configure preload stale timepreload-manual— Use manual preloading strategically
Route Context (Prefix: ctx-)
ctx-root-context— Define context at root routectx-before-load— Extend context in beforeLoadctx-dependency-injection— Use context for dependency injection
How to Use
Each rule file in the rules/ directory contains:
- Explanation — Why this pattern matters
- Bad Example — Anti-pattern to avoid
- Good Example — Recommended implementation
- Context — When to apply or skip this rule
Full Reference
See individual rule files in rules/ directory for detailed guidance and code examples.
Comments
Markdown supported