Use a local shared folder to sync settings.json, keybindings.json, and extensions across VS Code forks such as VS Code, Cursor, Windsurf, and VSCodium.
- Local-only sync, no Gist or cloud account
- Per-IDE sync timestamps
settings.jsonsupportsoverrideand per-keymergekeybindings.jsonstays whole-file sync by design- Settings blacklist / whitelist with glob patterns
- Poka-yoke confirmation before large settings overwrites
- Extension union sync so failed installs in one IDE do not remove entries from another
- Open VSX-style gallery config with VS Marketplace fallback for VSIX lookup
- Automatic local backup before writing
settings.jsonorkeybindings.json
override: replace the synced settings subset with the storage versionmerge: per-key last-write-wins using per-IDE snapshots and delete tombstones
Only keys inside the sync scope are touched. Keys outside the scope always stay local.
vscode-forks-sync.settings.excludeKeys: keys excluded from syncvscode-forks-sync.settings.includeKeys: optional whitelist; when non-empty, only matching keys sync
Both support glob patterns such as editor.* or terminal.integrated.*.
Default exclusions include vscode-forks-sync.* so the extension does not overwrite its own machine-specific settings.
vscode-forks-sync.settings.pokaYokeThreshold controls when Fork Sync asks for confirmation before applying a large settings pull.
keybindings.json is not merged per key. It is synced as a whole file because array-based keybindings are not safe to reconcile with the same strategy as settings.
extensions.json stores per-IDE successful installs plus a merged union list. Failed installs are recorded and preserved, and you can add them to a per-IDE exclude list if a fork cannot install them.
vscode-forks-sync.extensionsGallery is meant for Open VSX-compatible galleries. Fork Sync uses serviceUrl for Open VSX-style registries and falls back to VS Marketplace if lookup fails.
Before Fork Sync writes local settings.json or keybindings.json, it creates a backup in the shared storage folder.
Default layout:
~/.vscode-forks-sync/
.backups/
settings/
<AppName>-YYYYMMDD-HHmmss.json
keybindings/
<AppName>-YYYYMMDD-HHmmss.json
You restore manually by copying a backup over your local file.
| Setting | Default | Purpose |
|---|---|---|
vscode-forks-sync.storagePath |
~/.vscode-forks-sync |
Shared sync directory |
vscode-forks-sync.autoSync |
true |
Sync on startup |
vscode-forks-sync.promptOnAutoSync |
true |
Ask before startup sync |
vscode-forks-sync.promptOnExtensionSync |
true |
Ask before applying extension changes |
vscode-forks-sync.settings.mergeMode |
merge |
override or per-key merge |
vscode-forks-sync.settings.excludeKeys |
built-in defaults | Excluded settings glob patterns |
vscode-forks-sync.settings.includeKeys |
[] |
Optional whitelist glob patterns |
vscode-forks-sync.settings.pokaYokeThreshold |
10 |
Confirm large settings pulls |
vscode-forks-sync.backupBeforeLocalWrite |
true |
Backup before local settings/keybindings writes |
vscode-forks-sync.extensions.excludeExtensions |
[] |
Excluded extension glob patterns |
vscode-forks-sync.extensionsGallery |
Open VSX | Open VSX-style gallery descriptor |
MIT License © jinghaihan, lexatang