DEV Community

Cover image for I Built a One-Command Tool to Migrate Your Entire Cursor Setup to VS Code
Tom Yahav
Tom Yahav

Posted on • Originally published at github.com

I Built a One-Command Tool to Migrate Your Entire Cursor Setup to VS Code

The Problem Nobody Talks About

Cursor is a great editor. The AI features are genuinely impressive, and it's been a go-to choice for a lot of developers over the past couple of years.

But there are plenty of reasons you might want to switch back to VS Code — team standardization, extension compatibility, personal preference, or just wanting a cleaner setup. The problem? Moving back is surprisingly painful.

You open VS Code and everything feels wrong. Your theme is gone. Your keybindings don't work. Your snippets aren't there. And you're staring down 20+ extensions you need to reinstall one by one.

So I built a script that does it all in one command.


⚡ The Fix: One Command

bash <(curl -fsSL https://raw.githubusercontent.com/yahav10/cursor-to-vscode/main/cursor_to_vscode.sh)
Enter fullscreen mode Exit fullscreen mode

That's it. Run this in your terminal and within a minute your VS Code will feel exactly like your Cursor setup.


🔀 What Gets Migrated

Here's everything the script moves over automatically:

What How
⚙️ Settings Copies settings.json and strips out Cursor-specific keys so VS Code stays clean
⌨️ Keybindings Copies keybindings.json as-is — the format is identical between the two editors
✂️ Code snippets Copies all your custom snippet files
🧩 Extensions Reads your full Cursor extension list and installs each one into VS Code
💾 Backups Every VS Code file that gets overwritten is backed up as .bak first

🖥️ What It Looks Like in Your Terminal

The script is designed to keep you informed at every step. Here's a real example of the output:

╔══════════════════════════════════════════════════╗
║     Cursor → VS Code Migration  •  macOS         ║
╚══════════════════════════════════════════════════╝

Checking prerequisites...

      ✔  Cursor config  →  ~/Library/Application Support/Cursor/User
      ✔  VS Code config →  ~/Library/Application Support/Code/User

[1/4] Copying settings.json
      →  Backed up existing settings → settings.json.bak
      ✔  settings.json copied (4 Cursor-specific key(s) stripped)

[2/4] Copying keybindings.json
      ✔  keybindings.json copied

[3/4] Copying code snippets
      ✔  3 snippet file(s) copied

[4/4] Re-installing extensions into VS Code

      →  Found 12 extension(s) in Cursor.

      esbenp.prettier-vscode           ✔ installed
      dbaeumer.vscode-eslint           ✔ installed
      eamodio.gitlens                  ✔ installed
      ...

╔══════════════════════════════════════════════════╗
║                   Summary                        ║
╚══════════════════════════════════════════════════╝

  Config files
    ✔ Successes    3

  Extensions
    ✔ Installed    12 / 12

  Migration complete! Open VS Code and enjoy your familiar setup.
Enter fullscreen mode Exit fullscreen mode

Step counter, color-coded results, a live extension install feed, and a full summary at the end. You always know what's happening and what worked.


🔧 One Step Before You Run It

For the extension migration to work, both editor CLIs need to be registered in your terminal. It's a one-time setup.

In Cursor: Cmd+Shift+PInstall 'cursor' command in PATH

In VS Code: Cmd+Shift+PInstall 'code' command in PATH

Verify they're ready:

cursor --version && code --version
Enter fullscreen mode Exit fullscreen mode

If the CLIs aren't set up when you run the script, it'll skip extensions and print exact instructions to fix it — then you can re-run and it'll pick up where it left off.


🔒 It's Safe to Run

A few things the script never does:

  • It never deletes or modifies anything in Cursor
  • It never overwrites a VS Code file without backing it up first
  • It's safe to run multiple times

If something doesn't look right after migration, restoring is a single command:

cp ~/Library/Application\ Support/Code/User/settings.json.bak \
   ~/Library/Application\ Support/Code/User/settings.json
Enter fullscreen mode Exit fullscreen mode

🧠 One Interesting Challenge: The Settings File

The most non-trivial part of this migration is settings.json. Since Cursor is a VS Code fork, it shares the same format — but it adds its own keys like cursor.general.gitGraphEnabled or aipopup.enabled that VS Code doesn't understand.

Copying the file as-is would leave a bunch of noise in your VS Code settings. So the script uses Python to parse the JSON and strip any key that starts with a known Cursor prefix before writing it out:

CURSOR_PREFIXES = ("cursor.", "aipopup.", "cursorprediction.", "cursorSonnet.")
removed = [k for k in list(settings) if k.startswith(CURSOR_PREFIXES)]
for k in removed:
    del settings[k]
Enter fullscreen mode Exit fullscreen mode

It also gracefully handles malformed JSON (a trailing comma in settings is more common than you'd think). If the file can't be parsed, it copies it as-is and warns you instead of crashing.


📦 Get It

# Run directly
bash <(curl -fsSL https://raw.githubusercontent.com/yahav10/cursor-to-vscode/main/cursor_to_vscode.sh)

# Or clone it
git clone https://github.com/yahav10/cursor-to-vscode.git
Enter fullscreen mode Exit fullscreen mode

The full source is on GitHub: yahav10/cursor-to-vscode

If this saves you the 30 minutes of manual work it used to take me, drop a ⭐ on the repo. And if you run into issues or want to add Linux/Windows support, PRs are very welcome.


Have you switched between Cursor and VS Code? What was the biggest pain point for you? Let me know in the comments 👇

Top comments (0)