Cursor Rules for Laravel
8 Cursor rules for Laravel, written against current docs. Installs in one command, exports AGENTS.md for Claude Code and Codex. $12 once.
View Cursor Rules for Laravel
One download for every stack you work in: the installer looks at each repo and installs only the rules it needs, from Laravel 13 and FastAPI to SvelteKit 3, Expo SDK 58 and Next.js 16.

8 Cursor rules for Laravel, written against current docs. Installs in one command, exports AGENTS.md for Claude Code and Codex. $12 once.
View Cursor Rules for Laravel7 Cursor rules for FastAPI, written against current docs. Installs in one command, exports AGENTS.md for Claude Code and Codex. $12 once.
View Cursor Rules for FastAPI7 Cursor rules for SvelteKit, written against current docs. Installs in one command, exports AGENTS.md for Claude Code and Codex. $12 once.
View Cursor Rules for SvelteKit6 Cursor rules for Expo, written against current docs. Installs in one command, exports AGENTS.md for Claude Code and Codex. $12 once.
View Cursor Rules for Expo (React Native)11 Cursor rules for Next.js (Server/Client Components and more), written against current docs. Installs in one command, exports AGENTS.md. $12 once.
View Cursor Rules for Next.js10 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 Django9 Cursor rules for Rails (Active Record and more), written against current docs. Installs in one command, exports AGENTS.md. $12 once.
View Cursor Rules for Rails8 Cursor rules for Supabase (Row Level Security policies and more), written against current docs. Installs in one command, exports AGENTS.md. $12 once.
View Cursor Rules for Supabase24 Cursor rules (.mdc) for Next.js, TypeScript, React, Python, FastAPI, Django, Go, Rust and more. Detects your stack, installs in one command, lints your rules. $12 once.
View Cursor Rules Pack86 Cursor project rules (.mdc) for all eight stack packs (Next.js, Django, Rails, Supabase, Laravel, FastAPI, SvelteKit, Expo) plus 20 general rules (agent workflow, commits, tests, security, review, TypeScript, React, Tailwind, Node, Python, Go, Rust, Spring Boot, Flutter, SQL, Docker, GitHub Actions, Terraform), 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; Django 5.2 LTS/6.0; Rails 8; Supabase publishable/secret keys, @supabase/ssr; Laravel 13, FastAPI 0.162, SvelteKit 3, Expo SDK 58).
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 |
|---|---|---|
| core-agent-workflow.mdc | always | Read the files you are about to change, and the code that calls them, before editing |
| core-git-commits.mdc | Agent picks it | Commit subject: imperative mood, ≤ 72 characters, no trailing period: Fix rounding in invoice totals, not fixed... |
| core-testing.mdc | Agent picks it | Use the test framework and folder layout the repo already uses |
| core-security.mdc | Agent picks it | Treat all input as untrusted: request bodies, query strings, headers, file names, webhook payloads, LLM output |
| core-code-review.mdc | @-mention | |
| core-docs.mdc | Agent picks it | When behavior, configuration, env vars, commands or public APIs change, update the README/docs in the same change |
| core-error-handling.mdc | Agent picks it | Never swallow errors: no empty catch {} / except: pass |
| typescript.mdc | by file (/*.ts, /*.tsx) | Keep strict on |
| react.mdc | by file (/*.tsx, /*.jsx) | Function components and hooks only |
| tailwind.mdc | by file (/*.tsx, /*.jsx, /*.html, /*.vue, tailwind.config.*) | Use the design tokens in the Tailwind config/theme (colors, spacing, fonts) |
| node-express.mdc | Agent picks it | Validate every request body, params and query at the route boundary with the repo's schema library |
| python.mdc | by file (/*.py) | Follow the formatter/linter config in pyproject.toml (ruff/black/isort) |
| go.mdc | by file (/*.go) | gofmt/goimports formatting |
| rust.mdc | by file (/*.rs, Cargo.toml) | cargo fmt and cargo clippy -- -D warnings clean before finishing |
| java-spring-boot.mdc | by file (/*.java, pom.xml, build.gradle*) | Constructor injection (final fields), no field @Autowired |
| flutter-dart.mdc | by file (/*.dart, pubspec.yaml) | Sound null safety: avoid ! |
| sql-migrations.mdc | by file (/migrations/, /*.sql, /migrate/) | Never edit a migration that has already run in any shared environment |
| docker.mdc | by file (/Dockerfile*, /docker-compose*.yml, /docker-compose*.yaml, /compose*.yaml, .dockerignore) | Pin base images to a specific version tag (and digest for production), never latest |
| github-actions.mdc | by file (.github/workflows/, .github/actions/) | Set least-privilege permissions: at the top of each workflow (contents: read by default) and grant more per job... |
| terraform.mdc | by file (/*.tf, /*.tfvars) | Run terraform fmt and terraform validate |
| 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 |
| django-overview.mdc | always | Check the Django version (requirements/pyproject/lockfile) before using an API |
| django-models-orm.mdc | by file (/models.py, /models/*.py, /managers.py, /services.py) | Avoid N+1 queries: select_related() for ForeignKey/OneToOne, prefetch_related() for reverse and many-to-many |
| django-migrations.mdc | by file (/migrations/*.py) | Never edit a migration that has been applied in any shared environment |
| django-views-urls.mdc | by file (/views.py, /views/*.py, /urls.py) | Match the repo's style (function-based or class-based views) |
| django-forms-validation.mdc | by file (/forms.py, /forms/*.py) | Validate all user input through a Form, ModelForm or serializer |
| django-security.mdc | by file (/settings.py, /settings/*.py) | Production: DEBUG = False, explicit ALLOWED_HOSTS, SECRET_KEY from the environment, SECURE_SSL_REDIRECT,... |
| django-templates.mdc | by file (/templates//*.html) | Keep autoescaping on |
| django-tasks.mdc | Agent picks it | Use the queue the project already has (Celery, RQ, Django-Q, or Django 6.0 django.tasks) |
| django-drf.mdc | by file (/serializers.py, /api//*.py, /viewsets.py) | Serializers list fields explicitly |
| django-testing.mdc | by file (/tests.py, /tests//*.py, /test_*.py, conftest.py) | Use the framework the repo uses (pytest-django or django.test.TestCase) |
| rails-overview.mdc | always | Check the Rails version in Gemfile.lock before using an API |
| rails-models.mdc | by file (app/models//*.rb) | Back every validation that matters with a database constraint (null: false, unique index, foreign key) |
| rails-migrations.mdc | by file (db/migrate/*.rb) | Never edit a migration that has run outside your machine |
| rails-controllers.mdc | by file (app/controllers//*.rb) | Rails 8+: use params.expect(post: [:title, :body]) instead of params.require(:post).permit(:title, :body) |
| rails-jobs.mdc | by file (app/jobs//*.rb, config/recurring.yml, config/queue.yml) | Rails 8 production default is Solid Queue (database-backed, config/queue.yml, recurring work in... |
| rails-hotwire-views.mdc | by file (app/views//*.erb, app/javascript//*.js, app/helpers//*.rb) | Rails 8 default front end: Propshaft + importmap + Turbo + Stimulus |
| rails-security.mdc | by file (config//*.rb, app/controllers//*.rb, app/models/user.rb) | Secrets in bin/rails credentials:edit (or env vars) |
| rails-testing.mdc | by file (test//*.rb, spec//*.rb) | Use the repo's framework: Minitest (Rails default, bin/rails test) or RSpec |
| rails-deploy-kamal.mdc | by file (config/deploy.yml, config/deploy.*.yml, .kamal/, Dockerfile) | Rails 8 apps deploy with Kamal 2 (config/deploy.yml) and Thruster in front of Puma, from the generated Dockerfile |
| supabase-overview.mdc | always | Keys: the publishable key (sb_publishable_...) is for anything shipped to users and only reaches what Row Level... |
| supabase-rls-policies.mdc | by file (supabase/migrations//*.sql, supabase//*.sql) | alter table x enable row level security; in the same migration that creates the table |
| supabase-ssr-auth.mdc | by file (utils/supabase/, lib/supabase/, src/lib/supabase/, proxy.ts, middleware.ts, app/auth/) | Use @supabase/ssr (createBrowserClient, createServerClient) |
| supabase-migrations-cli.mdc | by file (supabase/migrations//*.sql, supabase/config.toml, supabase/seed.sql) | New change: supabase migration new add_notes and write SQL, or make the change locally and capture it with... |
| supabase-queries.mdc | by file (/*.ts, /*.tsx) | Type the client: createClient<Database>(...) with generated types |
| supabase-edge-functions.mdc | by file (supabase/functions/) | Functions live in supabase/functions/<name>/index.ts and use Deno.serve |
| supabase-storage.mdc | Agent picks it | Buckets are private unless the files are truly public |
| supabase-realtime.mdc | Agent picks it | postgres_changes only streams tables added to the supabase_realtime publication, and it respects RLS for the... |
| laravel-overview.mdc | always | Check laravel/framework in composer.lock before using an API |
| laravel-eloquent.mdc | by file (app/Models//*.php) | Turn on Model::shouldBeStrict(! app()->isProduction()) in a service provider so lazy loading, missing attributes... |
| laravel-migrations.mdc | by file (database/migrations/*.php) | Create with php artisan make:migration create_orders_table |
| laravel-controllers-requests.mdc | by file (app/Http//*.php, routes/*.php) | Validate in Form Requests (php artisan make:request StoreOrderRequest) and use $request->validated() |
| laravel-queues-jobs.mdc | by file (app/Jobs//*.php, app/Listeners//*.php, config/queue.php, routes/console.php) | Jobs implementing ShouldQueue must be idempotent: they can run twice |
| laravel-security.mdc | by file (config//*.php, app/Http//*.php, bootstrap/app.php, .env.example) | Secrets live in .env (never committed) and are read through config(), not env(), outside config files |
| laravel-testing.mdc | by file (tests//*.php) | Use the repo's framework: Pest (Laravel 13 pairs with Pest 4) or PHPUnit 12 |
| laravel-blade-livewire.mdc | by file (resources/views//*.php, app/Livewire//*.php, app/View//*.php) | Prefer Blade components (<x-button>) and slots over copy-pasted markup |
| fastapi-overview.mdc | always | Check the installed fastapi version before using an API |
| fastapi-routes-deps.mdc | by file (app//*.py, src//*.py, main.py) | Declare parameters with Annotated: user: Annotated[User, Depends(get_current_user)], q: Annotated[str / None,... |
| fastapi-pydantic.mdc | by file (app/schemas//*.py, app/models//*.py, /schemas.py) | Use v2 APIs: model_config = ConfigDict(...), model_dump(), model_validate(), field_validator, model_validator |
| fastapi-database.mdc | by file (app/db//*.py, app/repositories//*.py, app/crud//*.py, alembic//*.py, alembic.ini) | One session per request via a yield dependency |
| fastapi-security.mdc | by file (app/core//*.py, app/auth//*.py, app/security//*.py, app/routers//*.py, app/main.py) | Protect routes with dependencies (Depends(get_current_user), Security(..., scopes=[...])) at the router level... |
| fastapi-testing.mdc | by file (tests//*.py, /test_*.py, conftest.py) | Use TestClient (sync) or httpx.AsyncClient with ASGITransport for async tests |
| fastapi-performance.mdc | Agent picks it | With a response_model or return type, FastAPI serializes JSON with Pydantic (Rust) directly (0.130+) |
| sveltekit-overview.mdc | always | Check @sveltejs/kit and svelte versions in package.json first |
| sveltekit-runes-components.mdc | by file (src//*.svelte, src//*.svelte.ts, src//*.svelte.js) | State: let count = $state(0) |
| sveltekit-load-data.mdc | by file (src/routes//+page.ts, src/routes//+page.server.ts, src/routes//+layout.ts, src/routes//+layout.server.ts, src//*.remote.ts) | +page.server.ts load runs only on the server (DB, secrets) |
| sveltekit-forms-actions.mdc | by file (src/routes//+page.server.ts, src/routes//+page.svelte) | Mutations use form actions in +page.server.ts (export const actions = { default: async ({ request, locals }) => |
| sveltekit-hooks-auth.mdc | by file (src/hooks.server.ts, src/hooks.ts, src/lib/server/) | Resolve the session once in handle (src/hooks.server.ts) and put it on event.locals |
| sveltekit-routing-state.mdc | by file (src/routes/, src/lib//*.ts) | Read page info from $app/state (page, navigating, updated), not $app/stores (removed in SvelteKit 3) |
| sveltekit-testing.mdc | by file (src//*.test.ts, src//*.spec.ts, tests/, e2e/, playwright.config.ts) | Unit/component tests with Vitest (and @testing-library/svelte or vitest-browser-svelte) |
| expo-overview.mdc | always | Check the expo version in package.json first |
| expo-router.mdc | by file (app//*.tsx, app//*.ts, src/app/) | Routes are files in app/: _layout.tsx for Stack/Tabs (NativeTabs for system tab bars), [id].tsx for dynamic... |
| expo-config-env.mdc | by file (app.json, app.config.ts, app.config.js, eas.json, .env*, plugins/) | EXPO_PUBLIC_* variables are inlined into the app bundle and visible to anyone |
| expo-components-styling.mdc | by file (components//*.tsx, src/components//*.tsx, app//*.tsx) | Use FlatList/FlashList with a stable keyExtractor for long lists, never .map() inside a ScrollView for... |
| expo-data-storage.mdc | by file (lib//*.ts, src/lib//*.ts, hooks//*.ts, src/hooks//*.ts, services//*.ts) | Tokens and secrets on device go in expo-secure-store, never AsyncStorage or plain files |
| expo-testing-release.mdc | by file (__tests__/, /*.test.tsx, /*.test.ts, e2e/, .maestro/, eas.json) | Unit/component tests with jest-expo and React Native Testing Library |
Zip, 111 KB, v1.0, 241 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 any framework project.
86 Cursor rules for Next.js 16, Laravel 13, FastAPI, SvelteKit 3, Expo SDK 58, Django, Rails 8 and Supabase. Detects each repo's stack. $39 ($108 value).
MCP server that triages GitHub issues: scored queue, no-reply and stale lists, duplicate pairs, similar-issue search, label suggestions. Read-only. $29.
View GitHub Issue Triage MCP ServerFree Python MCP server template with no dependencies: stdio server for MCP 2026-07-28 and 2025 clients, two example tools, tests and a probe client.
View Python MCP Server Template10 Claude Code subagents for DevOps and SRE: incident triage, Terraform plan review, Kubernetes, CI fixes, alerts, postmortems. Guard hook blocks destroy. $19.
View DevOps & SRE Subagents for Claude Code