.cursorrules is Legacy. Here's What Changed.
Cursor deprecated the single .cursorrules file in favor of .cursor/rules/*.mdc. Here's exactly what changed and what you should do about it.
What changed and why
The original .cursorrules was a single flat file that loaded on every request -every prompt, every context window. This was wasteful: your React conventions loaded when you were editing a SQL migration, and your testing rules loaded when you were writing CSS. The new .cursor/rules/*.mdc format lets you scope rules to specific file patterns, making context tighter and reducing token waste.
The .cursorrules file -still works, but legacy
Cursor still reads .cursorrules for backward compatibility. If you have one, you don't need to migrate immediately. But new features (scoping, auto-attachment, agent-requested mode) are only available in the .mdc format. The .cursorrules format is effectively frozen -no new capabilities will be added to it.
What .cursor/rules/*.mdc adds
Four activation modes -(1) alwaysApply: true, loads on every request (equivalent to old .cursorrules behavior). (2) globs scoping, auto-attaches when matching files are open. (3) agent-requested, Cursor reads the description and decides when the rule is relevant. (4) Manual, only loaded when you explicitly reference the rule. This scoping is the major advantage -you can have 10+ rule files without bloating every context window.
How to migrate from .cursorrules
(1) Create the .cursor/rules/ directory. (2) Split your .cursorrules into logical groups (react.mdc, typescript.mdc, structure.mdc). (3) Add YAML frontmatter to each with description and globs. (4) Set alwaysApply: true only for project-wide conventions. (5) Delete .cursorrules once you've verified the new files work.
# Before: .cursorrules (single file, always loaded)
React conventions...
TypeScript conventions...
Testing conventions...
Folder structure...
[Everything loads every time, regardless of context]
# After: .cursor/rules/ directory
# .cursor/rules/react.mdc
---
description: React component conventions
globs: ["**/*.tsx", "src/components/**"]
alwaysApply: false
---
[React rules -only loads when .tsx files are open]
# .cursor/rules/typescript.mdc
---
description: TypeScript strict mode conventions
globs: ["**/*.ts", "**/*.tsx"]
alwaysApply: false
---
[TypeScript rules -loads for all TS files]
# .cursor/rules/project.mdc
---
description: Project-wide architecture and structure
alwaysApply: true
---
[Critical rules -always loaded]