.agents/skills/react-router-framework-mode/SKILL.md
Build full-stack React applications using React Router's framework mode. Use when configuring routes, working with loaders and actions, handling forms, handling navigation, pending/optimistic UI, error boundaries, or working with react-router.config.ts or other react router conventions.
npx skillsauth add curvenote/curvenote react-router-framework-modeInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Framework mode is React Router's full-stack development experience with file-based routing, server-side, client-side, and static rendering strategies, data loading and mutations, and type-safe route module API.
app/routes.ts)loader or clientLoaderaction or clientAction<Link>, <NavLink>, <Form>, redirect, and useNavigatereact-router.config.ts)Load the relevant reference for detailed guidance on the specific API/concept:
| Reference | Use When |
| ------------------------------------ | ----------------------------------------------------- |
| references/routing.md | Configuring routes, nested routes, dynamic segments |
| references/route-modules.md | Understanding all route module exports |
| references/special-files.md | Customizing root.tsx, adding global nav/footer, fonts |
| references/data-loading.md | Loading data with loaders, streaming, caching |
| references/actions.md | Handling forms, mutations, validation |
| references/navigation.md | Links, programmatic navigation, redirects |
| references/pending-ui.md | Loading states, optimistic UI |
| references/error-handling.md | Error boundaries, error reporting |
| references/rendering-strategies.md | SSR vs SPA vs pre-rendering configuration |
| references/middleware.md | Adding middleware (requires v7.9.0+) |
| references/sessions.md | Cookie sessions, authentication, protected routes |
| references/type-safety.md | Auto-generated route types, type imports, type safety |
Some features require specific React Router versions. Always verify before implementing:
npm list react-router
| Feature | Minimum Version | Notes |
| ----------------------- | --------------- | ----------------------------- |
| Middleware | 7.9.0+ | Requires v8_middleware flag |
| Core framework features | 7.0.0+ | loaders, actions, Form, etc. |
These are the most important patterns to follow. Load the relevant reference for full details.
Search forms - use <Form method="get">, NOT onSubmit with setSearchParams:
// ✅ Correct
<Form method="get">
<input name="q" />
</Form>
// ❌ Wrong - don't manually handle search params
<form onSubmit={(e) => { e.preventDefault(); setSearchParams(...) }}>
Inline mutations - use useFetcher, NOT <Form> (which causes page navigation):
const fetcher = useFetcher();
const optimistic = fetcher.formData
? fetcher.formData.get("favorite") === "true"
: isFavorite;
<fetcher.Form method="post" action={`/favorites/${id}`}>
<button>{optimistic ? "★" : "☆"}</button>
</fetcher.Form>;
See references/actions.md for complete patterns.
Global UI belongs in root.tsx - don't create separate layout files for nav/footer:
// app/root.tsx - add navigation, footer, providers here
export default function App() {
return (
<div>
<nav>...</nav>
<Outlet />
<footer>...</footer>
</div>
);
}
Use nested routes for section-specific layouts. See references/routing.md.
meta uses loaderData, not deprecated data:
// ✅ Correct
export function meta({ loaderData }: Route.MetaArgs) { ... }
// ❌ Wrong - `data` is deprecated
export function meta({ data }: Route.MetaArgs) { ... }
See references/route-modules.md for all exports.
If anything related to React Router is not covered in these references, you can search the official documentation:
https://reactrouter.com/docs
development
Use when setting up an email inbox for an AI agent (Moltbot, Clawdbot, or similar) - configuring inbound email, webhooks, tunneling for local development, and implementing security measures to prevent prompt injection attacks.
testing
Use when working with Resend email platform - routes to specific sub-skills for sending, receiving, audiences, or broadcasts.
tools
Use when creating email templates with React - welcome emails, password resets, notifications, order confirmations, or transactional emails that need to render across email clients.
tools
Prisma Postgres setup and operations guidance across Console, create-db CLI, Management API, and Management API SDK. Use when creating Prisma Postgres databases, working in Prisma Console, provisioning with create-db/create-pg/create-postgres, or integrating programmatic provisioning with service tokens or OAuth.