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
Installation
Requirements
- Visual Studio Code
^1.90.0 or 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
F5 to 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.