Skip to content

Installation and Platform Setup

You have spent years fine-tuning your VS Code setup — keybindings, extensions, themes, snippets. The last thing you want is to start from scratch in a new editor. The good news: Cursor is a fork of VS Code. Your muscle memory, your extensions, and your settings all transfer in about two minutes. The bad news: installation still has a few platform-specific landmines that can waste an hour if you hit them unprepared.

  • Cursor installed and running on your platform with no security warnings or permission issues
  • All your VS Code settings, extensions, and keybindings imported automatically
  • The cursor shell command working from any terminal
  • A verified installation where AI chat responds to prompts and codebase indexing has started
Terminal window
brew install --cask cursor

This handles code signing and quarantine flags automatically.

  1. Download from cursor.com/download
  2. Open the .dmg file
  3. Drag Cursor to Applications

If macOS says “Cursor is damaged and can’t be opened”:

Terminal window
xattr -cr /Applications/Cursor.app

If you see “Cursor cannot be opened because the developer cannot be verified”:

  1. Open System Settings then Privacy and Security
  2. Scroll to “Security” and click Open Anyway
  3. Enter your password when prompted

Cursor can import everything from VS Code in a single step. This is the fastest path to feeling at home.

  1. Open Cursor Settings

    Press Cmd+Shift+J (macOS) or Ctrl+Shift+J (Windows/Linux).

  2. Go to General then Account

    Look for the VS Code import section.

  3. Click “Import from VS Code”

    Cursor detects and imports:

    • All installed extensions
    • User settings (settings.json)
    • Keyboard shortcuts (keybindings.json)
    • Snippets
    • Theme selections
  4. Restart Cursor

    The import takes effect after a restart.

If automatic import fails (rare, but it happens with non-standard VS Code installations):

Terminal window
# Copy settings
cp ~/.config/Code/User/settings.json ~/.config/Cursor/User/
cp ~/.config/Code/User/keybindings.json ~/.config/Cursor/User/
cp -r ~/.config/Code/User/snippets ~/.config/Cursor/User/

Being able to type cursor . in any terminal is essential for the workflows in this guide.

  1. Open Cursor
  2. Press Cmd+Shift+P (macOS) or Ctrl+Shift+P (Windows/Linux)
  3. Type Install ‘cursor’ command in PATH and select it
  4. Optionally, also run Install ‘code’ command in PATH for VS Code compatibility
  5. Restart your terminal

Verify it works:

Terminal window
cursor --version
cursor . # Opens current directory in Cursor

Open a real project — not an empty folder. Cursor needs files to index.

Terminal window
cd ~/projects/your-real-project
cursor .

When Cursor opens, it immediately begins indexing your codebase. This creates semantic embeddings that the AI uses to find relevant code when you ask questions or request changes.

  1. Open Settings: Cmd+Shift+J / Ctrl+Shift+J
  2. Navigate to Indexing and Docs
  3. Watch the progress bar — small projects finish in under a minute, large monorepos can take 10-15 minutes

Run through this quick checklist to make sure everything is working before moving to configuration:

CheckHowExpected Result
Terminal commandsOpen terminal with Ctrl+` and type node --versionv18.x or higher
Git integrationType git status in the terminalShows your repo status
AI chatPress Cmd+I / Ctrl+I and type “Hello”AI responds in the chat panel
File explorerCheck the sidebarYour project files are visible
ExtensionsOpen Extensions panel (Cmd+Shift+X)Your VS Code extensions appear

“Cursor is damaged” on macOS: Run xattr -cr /Applications/Cursor.app and try again.

Extensions not loading after migration: Clear the extension cache at ~/.config/Cursor/CachedExtensionVSIXs (macOS/Linux) or %APPDATA%\Cursor\CachedExtensionVSIXs (Windows) and restart.

AI chat shows “Rate limit exceeded”: You are on the free tier and have used your daily allocation. Either wait for the reset or upgrade to Cursor Pro.

Indexing stuck at 0%: Check that your project is not entirely in .gitignore patterns. Cursor respects .cursorignore if it exists — make sure you have not accidentally excluded everything.

cursor command not found on Linux: The AppImage does not auto-register shell commands. The symlink in the installation section (ln -s /opt/cursor.AppImage /usr/local/bin/cursor) handles this.