Cursor SSH Settings Sync
Sync your Cursor (or VS Code) preferences across machines using your own SSH server as the backend — the same idea as VS Code Settings Sync, without Microsoft/GitHub cloud.
Why a Cursor extension (not a separate VS app)?
Cursor is a VS Code fork and speaks the same extension API, but it does not ship VS Code’s built-in Settings Sync. An extension is the right vehicle: it can read/write the User data directory, install extensions, show conflict diffs, and run on every install you use. Publishing as a normal VS Code-compatible extension means it works in Cursor (and VS Code if you want).
What syncs (mirrors VS Code Settings Sync)
| Resource |
Details |
| Settings |
settings.json, with machine-scoped / ignored keys stripped |
| Keyboard shortcuts |
keybindings.json (per-OS by default) |
| User snippets |
User/snippets/** |
| User tasks |
tasks.json |
| Extensions |
Installed extension IDs; missing ones are installed on pull |
| UI state |
Lightweight sidecar snapshot (language + sync metadata) |
| Profiles |
User/profiles/** when present |
Also included:
- Turn on / Turn off with optional remote clear
- Configure which resources sync
- Merge / Replace Local when remote data already exists
- Conflict resolution: Accept Local, Accept Remote, or Show Conflicts (diff)
- Three-way merge using last-successful-sync as base
- Local backups (default 30 days) and remote history (default 20 versions)
- Synced machines registry on the server
- Background auto-sync + sync shortly after settings files change
- Status bar indicator and Output channel log
Remote store layout
On the SSH host (default ~/cursor-ssh-sync):
cursor-ssh-sync/
machines/<machineId>.json
resources/
settings/content.json
keybindings/linux.json # or darwin.json / win32.json
tasks/content.json
extensions/content.json
uiState/content.json
snippets/...
profiles/...
history/<resource>/<timestamp>.json
Requirements
- Cursor or VS Code 1.85+
- Node build tools only needed to compile from source
- An SSH server you can reach (key-based auth recommended; password stored in editor Secret Storage)
- Outbound TCP to your SSH port
Install
- Download the latest
.vsix from Releases
- Cursor → Extensions →
⋯ → Install from VSIX…
From source
git clone https://github.com/nixomose/cursor-ssh-sync.git
cd cursor-ssh-sync
npm ci
npm run package # → nixomose-cursor-ssh-sync-*.vsix
Then Install from VSIX… in Cursor.
Publishing to the VS Code Marketplace and Open VSX (Cursor’s gallery) is documented in PUBLISHING.md.
Setup
- Command Palette → Cursor SSH Sync: Configure SSH Connection...
- Enter host, port, username, private key path (or password), and remote directory
- Cursor SSH Sync: Turn On...
- Pick what to sync
- If the server already has data: choose Merge, Replace Local, or Merge Manually...
Repeat Turn On on each machine pointing at the same SSH store.
Useful commands
| Command |
Purpose |
Cursor SSH Sync: Turn On... |
Enable sync + first sync |
Cursor SSH Sync: Turn Off... |
Disable (optionally clear remote) |
Cursor SSH Sync: Sync Now |
Manual sync |
Cursor SSH Sync: Configure... |
Toggle resources |
Cursor SSH Sync: Show Synced Data |
Machines + last outcome + backups |
Cursor SSH Sync: Open Local Backups Folder |
Reveal local backup dir |
Cursor SSH Sync: Show Log |
Output channel |
Cursor SSH Sync: Show Conflicts |
Diff local vs remote |
Settings of note
cursorSshSync.ignoredSettings — extra keys never synced
cursorSshSync.ignoredExtensions — extension IDs to skip
cursorSshSync.keybindingsPerPlatform — default true (VS Code behavior)
cursorSshSync.autoSyncIntervalMinutes — default 5
cursorSshSync.ssh.* — connection details
Machine-specific defaults (proxy, terminal shells, zoom, etc.) are excluded automatically, matching VS Code’s approach. Keys matching password / secret / token / apiKey are also skipped.
Security notes
- Prefer SSH keys; passwords go through VS Code/Cursor Secret Storage
- The remote directory holds your editor prefs — keep the server and path private (
chmod 700 recommended)
- This extension does not sync workspace
.vscode folders or secrets you intentionally keep out of user settings
Development
npm run watch # rebuild on change
npm run lint # typecheck
npm run package # produce .vsix
Press F5 in this workspace (with the Extension Development Host) to try a live debug session once a .vscode/launch.json is present.