Open-source project
PatrickJS/awesome-cursorrules avatar
PatrickJS/awesome-cursorrules

awesome-cursorrules is a folder of .mdc files you copy, not a plugin

đź“„ Configuration files that enhance Cursor AI editor experience with custom rules and behaviors

40,870 stars3,494 forksJavaScriptCC0-1.0

At a glance

What is it?
PatrickJS/awesome-cursorrules collects Markdown .mdc rule files that you place in .cursor/rules/ to give Cursor project-specific guidance. Nothing is installed and nothing is enforced, which is both the appeal and the limit: the rules steer suggestions rather than failing a build.
Who is it for?
Adopt awesome-cursorrules if your team already uses Cursor and wants shared, reviewable guidance in version control that a pull request can change. Do not adopt it as a quality mechanism, because nothing in a .mdc file fails a build, and do not expect even coverage, since eleven of the fifteen rules visible in the Frontend section are for Next.js.
Can I use it commercially?
Yes. CC0-1.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 124 days ago.
What is it written in?
Mainly JavaScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 1, 2026, and from our analysis. They are not legal advice.

Editorial analysis

A rule is a Markdown .mdc file you copy into .cursor/rules

The whole delivery mechanism is one sentence: add selected `.mdc` files to `.cursor/rules/` and they apply to your project. There is no package to install, no CLI, no manifest entry. Cursor Project Rules are described as Markdown-based files that tell Cursor how to behave for specific projects, file types, frameworks and workflows.

The directory name is the API. `.cursor/rules/` is where the editor looks, and the repository's own README is built around copying from it, with every entry linking to a file under `rules/` in the repository. Anything you do not copy does not apply, and there is no partial inclusion: a rule is in or it is out.

For a team this is the useful part, since the files are Markdown and can be reviewed like any other source. A rule change shows up in a diff, gets argued about in a pull request, and lands in history. That is a different lifecycle from a prompt typed into a chat window, and it is the main reason to prefer a shared folder over personal configuration.

Rules steer suggestions, a linter is what actually fails

The stated benefits are relevance, consistency and fewer repeated corrections: rules can describe local architecture, preferred libraries, common methods and domain constraints, and shared files keep AI assistance aligned across contributors. All of that is advisory by construction. There is no schema to validate, no hook that runs, and no failure path.

So the honest alternative to a .mdc file is a linter or formatter configuration, which is a real difference in approach rather than a matter of taste. A lint rule that forbids an import fails the build and tells you exactly where. A .mdc rule that says the same thing changes what the model tends to write, and the gap shows up in review rather than in CI.

Use both, or know which one you have. Rules that restate what a linter already forbids are duplicate maintenance, and the linter is the one that still works on code Cursor did not write.

The filename suffixes are not consistent

Every rule lives under `rules/`, and the naming carries a suffix that varies between entries. In the visible portion you find `angular-novo-elements-cursorrules-prompt-file.mdc`, `cursor-ai-react-typescript-shadcn-ui-cursorrules-p.mdc`, `nextjs15-supabase-cursorrules-p.mdc`, `nextjs-tailwind-typescript-apps-cursorrules-prompt.mdc` and the shorter `nextjs-type-llm.mdc`.

That is four patterns in one directory: `-cursorrules-prompt-file.mdc`, `-cursorrules-prompt.md`, `-cursorrules-p.mdc`, and a bare name. A script that globs `rules/*-cursorrules-prompt-file.mdc` finds a fraction of the collection, and a bulk rename that assumes one pattern renames the wrong files.

The repository has a script for exactly this class of problem, `node scripts/convert-readme-links.mjs --to absolute` and the same script with `--to relative`, which flips every link in the README between full GitHub URLs and relative paths. So the links are already generated, and they are the thing to regenerate after any move rather than the thing to hand-edit.

Eleven of the fifteen visible rules are for one framework

The table of contents promises thirteen categories, from Frontend Frameworks and Libraries through Mobile Development, Games and Graphics to Security and Documentation. The visible rules list, which is cut off partway through the first category, tells a narrower story.

Of the fifteen entries shown, eleven are Next.js. They are not one rule split into sections, they are eleven files: Next.js 14 with Tailwind and SEO, Next.js 15 with React 19 and Vercel AI, Next.js with TanStack Query v5, Next.js with Supabase as a Todo app, Next.js for SEO, Next.js with Type LLM, and more.

That shape has a consequence for a reader. Someone on Angular has two visible entries, one of them tied to a specific UI library. Someone on Next.js has to choose between eleven, and the choice is not a style preference but a version and stack decision, because 14 and 15 are different files and the Supabase one assumes a backend. Coverage in the table of contents is not coverage in the folder, and the visible text is not long enough to tell you what the other twelve categories hold.

The one rule that names what it prevents is the one to read first

Most entries carry a one-line description of the stack they cover. One carries a count and a list of failure modes: Next.js 15 with Supabase, TypeScript and Security, described as 27 architecture rules preventing AI hallucinations, naming insecure auth around getSession versus getUser, synchronous params, deprecated imports, missing RLS, and Stripe key exposure.

That entry is worth reading as a template for what a good rule file looks like, because it is written as a list of things that go wrong rather than a list of things to do. A prohibition is checkable by a reviewer; a preference is not.

Two details travel with it. It is described as built for Cursor Agent and Claude Code, so the same Markdown works in a second host without conversion, which is the clearest statement in the collection about what these files actually are. And the specific claims age: getSession versus getUser and RLS enforcement are tied to particular versions of Supabase client libraries, so a file written for Next.js 15 is a snapshot rather than a reference.

check:prompt-safety runs the repository security script

The project ships its own checks rather than relying on the awesome-list tooling alone. The local test is `node --test scripts/*.test.mjs`, and there are separate scripts for the awesome list, repository hygiene, README hygiene, rule hygiene, issue template policy and repository security.

One entry is worth reading twice. `check:prompt-safety` runs `node scripts/check-repo-security.mjs`, the same file as `check:repo-security`. Whatever prompt-safety checking this repository claims to do, it is being done by the security script, or not done at all. If you are adding a rule that discusses authentication, secrets or input validation, that is the script that has to notice.

The upstream linter is a separate, opt-in step, `pnpm dlx [email protected]`, with a note in the manifest that it needs network access. So a green local run is not the same as passing awesome-lint, and the gap is deliberate rather than an oversight.

CC0-1.0 covers the rule text, and nothing here is versioned

The licence is CC0-1.0, a public domain dedication, with a LICENSE file at the root next to `contributing.md` and `code-of-conduct.md`. For the actual use case that is the right choice: you copy a .mdc file into your repository without carrying a notice, and a vendored copy does not rot into an attribution obligation.

What CC0 does not address is the images at the root, which are sponsor lockups in light and dark variants plus a few logo files. They sit in the same tree under a different kind of permission, and copying the folder wholesale brings them along.

There is nothing to pin either. The repository has no GitHub releases, the last push was on 2026-05-30, and the root manifest is marked private, so `pnpm install` here runs the hygiene checks rather than giving you anything. Copy the individual file, and record which one you copied in your own repository, because a rule file has no version and no changelog of its own.

Editorial conclusion

Adopt awesome-cursorrules if your team already uses Cursor and wants shared, reviewable guidance in version control that a pull request can change. Do not adopt it as a quality mechanism, because nothing in a .mdc file fails a build, and do not expect even coverage, since eleven of the fifteen rules visible in the Frontend section are for Next.js. Verify three things before you copy anything: that the rule you picked names the framework version you actually run, since the collection splits Next.js across fourteen and fifteen, that its filename matches the suffix pattern your tooling expects, and that the claims it makes about your stack, such as getSession versus getUser or missing RLS, still hold for the dependencies in your lockfile.

Frequently asked questions

What are the rules for Cursor AI?

Cursor Project Rules are Markdown-based `.mdc` files that live in `.cursor/rules/` and tell Cursor how to behave for specific projects, file types, frameworks and workflows. They can describe local architecture, preferred libraries, common methods, domain constraints and coding standards, and for a team, shared `.cursor/rules/*.mdc` files keep AI assistance aligned across contributors.

How do I use awesome-cursorrules in my project?

Add the selected `.mdc` files to `.cursor/rules/` in your project. There is no install step, no package and no manifest entry, and the repository's own root package.json is marked private, so nothing is fetched from it.

What license does awesome-cursorrules use?

CC0-1.0, with a LICENSE file at the repository root. That is a public domain dedication, so a rule file can be copied into your own repository without an attribution requirement. The sponsor logo images at the root sit outside what the licence text addresses.

Official sources

  1. Official documentation
  2. Official README
  3. Project repository
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/patrickjs-awesome-cursorrules.svg)](https://hysenlabs.com/projects/patrickjs-awesome-cursorrules)