Next.js Cursor Rules Starter (Free)
Free Next.js Cursor rules in .mdc format, checked against current Next.js docs, plus a linter that shows why a rule isn't applying.
View Next.js Cursor Rules Starter (Free)
11 Next.js rules your agent actually follows: each one attaches only to the files it's about, states the version-specific behavior, and installs with one command.

11 Cursor project rules (.mdc) for Next.js, scoped so each loads only when relevant, with an installer that detects your stack, an AGENTS.md exporter (Claude Code, Codex) and a rules linter. Written against current docs (checked Nov 2026; Next.js 16).
The screenshot is real output from the kit’s own commands. Tested from a fresh download of this exact zip: ./run_tests.sh ran 8 tests OK on Python 3.13 and 3.10.

python3 tools/install_rules.py --detect /path/to/app # what it finds
python3 tools/install_rules.py /path/to/app --auto # install rules for detected stacks into .cursor/rules/
python3 tools/install_rules.py /path/to/app --all --agents-md # everything, plus AGENTS.md
python3 tools/lint_rules.py /path/to/app/.cursor/rules --project /path/to/appExisting files are never overwritten unless you pass --force; --dry-run previews. ./tools/demo.sh runs it on examples/sample-app; ./run_tests.sh runs the tests. As a Cursor plugin, the manifest is .cursor-plugin/plugin.json.
| Rule | Loads | First instruction |
|---|---|---|
| nextjs-overview.mdc | always | Check the next version in package.json before using an API |
| nextjs-server-client-components.mdc | by file (app//*.tsx, src/app//*.tsx, components//*.tsx, src/components//*.tsx) | Default to Server Components |
| nextjs-async-request-apis.mdc | by file (app//page.tsx, app//layout.tsx, app//route.ts, src/app//page.tsx, src/app//layout.tsx, src/app//route.ts) | params and searchParams are Promises: const { slug } = await props.params |
| nextjs-data-caching.mdc | Agent picks it | Since Next.js 15, fetch and GET Route Handlers are not cached by default |
| nextjs-server-actions.mdc | Agent picks it | Treat every 'use server' function as a public POST endpoint: re-check authentication and authorization inside the... |
| nextjs-route-handlers.mdc | by file (app//route.ts, src/app//route.ts, app//route.js, src/app//route.js) | Export named functions per method (GET, POST, ...) |
| nextjs-proxy.mdc | by file (proxy.ts, src/proxy.ts, middleware.ts, src/middleware.ts) | Next.js 16 renames middleware.ts to proxy.ts and the export to proxy |
| nextjs-metadata-seo.mdc | by file (app//layout.tsx, app//page.tsx, app/sitemap.ts, app/robots.ts, src/app//layout.tsx, src/app//page.tsx) | Use export const metadata or export async function generateMetadata({ params }) in Server Component pages and... |
| nextjs-images-fonts.mdc | by file (next.config.*, app//*.tsx, components//*.tsx, src//*.tsx) | Use next/image with explicit width/height (or fill plus a sized parent) and a real alt |
| nextjs-config-env.mdc | by file (next.config.*, .env.example, package.json) | serverRuntimeConfig/publicRuntimeConfig are removed in 16 |
| nextjs-errors-loading.mdc | by file (app//error.tsx, app//not-found.tsx, app//loading.tsx, app//default.tsx, src/app//error.tsx, src/app//loading.tsx) | error.tsx must be a Client Component ('use client') and receives error and reset |
Zip, 22 KB, v1.0, 33 files. You may use and modify this kit for your own work and for clients you serve, including paid client work. Not affiliated with or endorsed by Cursor (Anysphere) or Vercel.
11 Cursor rules for Next.js (Server/Client Components and more), written against current docs. Installs in one command, exports AGENTS.md. $12 once.
Free Next.js Cursor rules in .mdc format, checked against current Next.js docs, plus a linter that shows why a rule isn't applying.
View Next.js Cursor Rules Starter (Free)10 Cursor rules for Django (models and N+1 and more), written against current docs. Installs in one command, exports AGENTS.md. $12 once.
View Cursor Rules for DjangoFree Django Cursor rules in .mdc format, checked against current Django docs, plus a linter that shows why a rule isn't applying.
View Django Cursor Rules Starter (Free)