VS Code Settings Updater

February 23, 2026 · View on GitHub

Sync any settings.json key from local files or Git repos — with configurable merge strategies.

Keep your VS Code settings in sync with community configs, team overlays, and personal overrides — automatically, across machines.


Why

settings.json drifts. Community projects like antfu/vscode-file-nesting-config maintain curated settings you want to track, but copying them manually doesn't scale. Teams need shared editor configs. Power users maintain multiple personal overlays.

This extension generalises the concept: pull settings from any source, merge them your way, and keep them up to date automatically.


Features

  • 🔗 Multiple sources — local .jsonc files or remote Git repos (GitHub, Codeberg, GitLab, Gitea)
  • 🔀 Configurable mergereplace, merge-shallow, or merge-deep per source
  • Auto-updates — checks on startup and polls on a configurable interval
  • 🧹 Key tracking and cleanup — keys removed from a source are removed from your settings
  • 💬 User prompt — always asks before applying changes
  • 📋 Output log — timestamped fetch, apply, and error history
  • 🔔 Status bar — at-a-glance sync state

Quick Start

Install the extension, then add to your settings.json:

{
  "settingsUpdater.sources": [
    {
      "name": "File Nesting (antfu community)",
      "url": "github:antfu/vscode-file-nesting-config@main/README.md",
      "parser": "jsonc-block",
      "targetKey": "explorer.fileNesting.patterns",
      "mergeStrategy": "replace"
    }
  ]
}

On next startup (or by running Settings Updater: Update all sources now), the extension fetches the file, extracts the jsonc code block, and prompts you to apply the explorer.fileNesting.patterns key to your global settings.json.


Configuration Reference

Top-level settings

SettingTypeDefaultDescription
settingsUpdater.autoUpdateIntervalnumber (minutes)720How often to poll remote sources. Per-source updateInterval overrides this.
settingsUpdater.defaultParser"jsonc-block" | "jsonc-file""jsonc-block"Global default parser. jsonc-block extracts the first ```jsonc fence from a Markdown file; jsonc-file treats the file as a raw .jsonc/.json settings object.
settingsUpdater.giteaBaseUrlstringBase URL for self-hosted Gitea/Forgejo instances (required when using the gitea: shorthand).
settingsUpdater.sourcesSource[][]Ordered list of sources. Later entries override earlier ones for the same key.

Source object properties

PropertyTypeDefaultRequiredDescription
namestringYesHuman-readable label shown in prompts and logs.
enabledbooleantrueNoSet to false to skip without removing the config entry.
urlstringOne of url/fileRemote file URL or shorthand (see URL Shorthand Reference).
filestringOne of url/fileLocal file path. Supports ~ and workspace-relative paths.
parser"jsonc-block" | "jsonc-file"global defaultNoPer-source parser override.
targetKeystring | nullnullNoRestrict this source to a single settings key. If null, all keys in the parsed object are applied.
mergeStrategy"replace" | "merge-shallow" | "merge-deep""replace"NoHow to merge the source's values into settings.json.
updateIntervalnumber (minutes)global defaultNoPer-source polling interval override (remote sources only).

URL Shorthand Reference

ShorthandResolved to
github:owner/repo@branch/pathhttps://raw.githubusercontent.com/owner/repo/branch/path
codeberg:owner/repo@branch/pathhttps://codeberg.org/owner/repo/raw/branch/path
gitlab:owner/repo@branch/pathhttps://gitlab.com/owner/repo/-/raw/branch/path
gitea:owner/repo@branch/pathRequires settingsUpdater.giteaBaseUrl to be set

Full URLs (https://...) are also accepted and used as-is.


Merge Strategies

replace (default)

The source value completely replaces the existing value. Keys present in the existing settings but absent from the source are removed. Best for community-maintained lists where the source is the authoritative definition.

merge-shallow

Only top-level keys from the source are written. Existing keys not present in the source are preserved. Best for personal overrides applied on top of a base layer.

merge-deep

Recursively merges objects. Arrays are concatenated (source appended after existing). Primitives are replaced by the source value. Best for team overlays that should layer on top of personal settings without overwriting them.


Commands

Open the Command Palette (Ctrl+Shift+P / Cmd+Shift+P) and type Settings Updater:

Command IDPalette titleDescription
settingsUpdater.updateAllSettings Updater: Update all sources nowRe-fetches all enabled sources and applies any changes.
settingsUpdater.updateSourceSettings Updater: Update source…Quick Pick to update a single source immediately.
settingsUpdater.disableSourceSettings Updater: Disable source…Quick Pick to set enabled: false on a source.
settingsUpdater.enableSourceSettings Updater: Enable source…Quick Pick to re-enable a disabled source and apply it.
settingsUpdater.showLogSettings Updater: Show update logOpens the Output Channel with timestamped fetch/apply history.
settingsUpdater.openConfigSettings Updater: Open extension configurationOpens settings.json scrolled to the settingsUpdater section.
settingsUpdater.showStatusSettings Updater: Show source statusShows per-source status: last checked, last changed, keys managed.

Status Bar

A subtle item appears on the right side of the VS Code status bar:

StateAppearanceClick action
Idle$(sync) Settings UpdaterOpens source status
Updating$(sync~spin) Settings Updater
Error$(warning) Settings UpdaterOpens update log

Inspiration

This extension is directly inspired by antfu/vscode-file-nesting-config and the companion antfu.file-nesting-updater extension. VS Code Settings Updater generalises that exact pattern to work with any settings key, any source, and any merge strategy.


License

MIT