Align
Sync and share your editor configuration across VS Code-based editors.
Introduction ·
Tech Stack ·
Installation ·
Contributing
Introduction
Sync and share your editor configuration across VS Code-based editors.
Align stores your settings, keybindings, and installed extensions as a private GitHub Gist, letting you restore your exact setup on any machine in seconds.
Features
- Profile management — create multiple named profiles and switch between them freely
- Settings sync — backs up and restores your
settings.json - Keybindings sync — backs up and restores your
keybindings.json - Extension sync — installs and removes extensions to match the saved profile
- Private by default — profiles are stored in a private GitHub Gist under your account
- Cross-editor — works with VS Code and compatible editors
Tech Stack
- TypeScript — language
- Bun — package manager and script runner
- esbuild — bundler
- oxlint — linter
- oxfmt — formatter
- GitHub Gist API — cloud storage for profiles
Installation
Requirements
- Visual Studio Code
^1.90.0or a compatible editor - A GitHub account
Supported Editors
| Editor | macOS | Windows | Linux |
|---|---|---|---|
| VS Code | ✓ | ✓ | ✓ |
| VS Code Insiders | ✓ | ✓ | ✓ |
| Cursor | ✓ | ✓ | ✓ |
| Windsurf | ✓ | ✓ | ✓ |
| Antigravity | ✓ | ✓ | ✓ |
From the Marketplace
Search for Align in the Extensions view (Ctrl+Shift+X / Cmd+Shift+X) and click Install.
Getting Started
- After installing, sign in to GitHub when prompted and grant Gist access
- Open the command palette (
Ctrl+Shift+P/Cmd+Shift+P) and run Align: Show Menu - Select Create Profile to save your current configuration
Commands
All commands are available via the command palette under the Align category, or through the status bar button.
| Command | Description |
|---|---|
| Align: Show Menu | Open the Align action menu |
| Align: Create Profile | Save current settings, keybindings, and extensions as a new profile |
| Align: Pull Profile | Download a profile from GitHub and apply it locally |
| Align: Update Profile | Overwrite an existing profile with your current configuration |
| Align: Delete Profile | Remove a profile from GitHub |
| Align: Show Logs | Open the Align output channel |
| Align: Manually Set Paths | Override the auto-detected paths for settings.json or keybindings.json |
Configuration
| Setting | Type | Default | Description |
|---|---|---|---|
align.excludeExtensions |
string[] |
[] |
Extension IDs to exclude from sync |
align.confirmBeforeSync |
boolean |
true |
Show a confirmation dialog before installing or removing extensions |
align.ignoreSettingsKeys |
string[] |
[] |
Settings key prefixes to exclude from sync in both directions. E.g. "python" excludes all keys starting with "python" |
align.protectedExtensions |
string[] |
[] |
Extension IDs that will never be uninstalled during a pull, even if absent from the profile |
align.ignoreKeybindings |
string[] |
[] |
Keybinding commands to exclude from sync in both directions |
align.editorSpecificExtensions |
string[] |
["anysphere.*"] |
Extension ID patterns to skip during cross-editor sync. Supports exact IDs and publisher wildcards. Preserved in the profile when updating from a different editor |
How It Works
Align creates a single private GitHub Gist called Align that acts as the central store for all your profiles. Each profile is stored as a JSON file within that Gist and contains your settings, keybindings, and a list of extension IDs.
When you pull a profile, Align writes the saved settings.json and keybindings.json to disk and reconciles your installed extensions — installing any that are missing and removing any that are not in the profile (with your confirmation).
Contributing
- Clone the repository and install dependencies:
bun install - Open the project in your editor and press
F5to launch the Extension Development Host - Make your changes in
src/ - Before submitting, ensure all checks pass:
bun run check-types bun run lint bun run fmt:check
License
This project is licensed under the MIT License - see the LICENSE file for details.