Convert Cursor rules to Windsurf (Devin Desktop) rules

Windsurf's documentation now lives under Devin Desktop. Workspace rules are Markdown files in .devin/rules/, and the older .windsurf/rules/ and .windsurfrules files are described as legacy but still imported by default.

This is the friendliest direction to convert: Windsurf's trigger field has a value for each of Cursor's four rule types, so every rule keeps its behaviour.

Input

    Everything runs in your browser. Files are never uploaded.

    Output

    Converted files appear here.

    Conversion report

      How each rule type converts

      In Cursor rules (.mdc) Becomes Result
      alwaysApply: true trigger: always_on Kept
      globs trigger: glob + globs Kept
      description only trigger: model_decision + description Kept
      Manual rules trigger: manual Kept

      Steps

      1. Drop your .cursor/rules files or .cursorrules into the converter.
      2. Rules are written to .devin/rules/. Tick Use legacy .windsurf/rules/ if your editor version still expects the old path.
      3. Download, unpack at the repository root and reopen the workspace.

      Worked example

      This output is generated by the same converter you use above, from an illustrative rule set.

      Input

      .cursor/rules/project.mdc

      ---
      description:
      globs:
      alwaysApply: true
      ---
      
      # Project
      
      - Next.js App Router with TypeScript in strict mode.
      - Use pnpm. Run `pnpm test` and `pnpm lint` before committing.
      - Never commit secrets; read config from environment variables.

      .cursor/rules/react-components.mdc

      ---
      description: React component conventions
      globs: src/components/**/*.tsx
      alwaysApply: false
      ---
      
      - Function components only; no default exports.
      - Co-locate tests as `Component.test.tsx`.

      .cursor/rules/database.mdc

      ---
      description: Read before writing or changing database migrations
      globs:
      alwaysApply: false
      ---
      
      - Never edit a migration that has already been applied.
      - Every new table needs a primary key and created_at.

      .cursor/rules/release.mdc

      ---
      description:
      globs:
      alwaysApply: false
      ---
      
      - Bump the version in package.json and update CHANGELOG.md.

      Output

      .devin/rules/project.md

      ---
      trigger: always_on
      ---
      
      # Project
      
      - Next.js App Router with TypeScript in strict mode.
      - Use pnpm. Run `pnpm test` and `pnpm lint` before committing.
      - Never commit secrets; read config from environment variables.

      .devin/rules/react-components.md

      ---
      trigger: glob
      globs: "src/components/**/*.tsx"
      ---
      
      - Function components only; no default exports.
      - Co-locate tests as `Component.test.tsx`.

      .devin/rules/database.md

      ---
      trigger: model_decision
      description: Read before writing or changing database migrations
      ---
      
      - Never edit a migration that has already been applied.
      - Every new table needs a primary key and created_at.

      .devin/rules/release.md

      ---
      trigger: manual
      ---
      
      - Bump the version in package.json and update CHANGELOG.md.

      Report for this example

      Things to watch for

      FAQ

      Does Windsurf import Cursor rules automatically?

      Its documentation describes importing its own legacy files (.windsurfrules, .windsurf/rules) but not Cursor's .mdc files, so convert them.

      Is Windsurf now called Devin Desktop?

      The Windsurf docs URL redirects to Devin Desktop documentation, which still refers to .windsurf paths as legacy and to Windsurf Plugins for other editors.

      Sources

      Format details last checked against these docs on 2026-10-30.

      Related conversions