A powerful VS Code extension for Arduino IDE that provides automated configuration logging and profile-based board configuration management to streamline your Arduino development workflow.
⚠️ Early Development NoticeThis extension is currently in early development stage. While it has been tested and includes comprehensive unit tests, you may encounter bugs or unexpected behavior. Please:
- Use with caution in production environments
- Back up your sketch.yaml files before using auto-update features
- Report any issues you encounter on GitHub Issues
- Consider testing in a non-critical project first
Your feedback and bug reports are invaluable in helping us improve the extension!
Profile selector showing saved board configurations with instant switching capability. The status bar trigger displays the currently active profile.
- Never lose track of board settings - Automatically logs every configuration change
- Switch between board configurations instantly - Save and apply complete board profiles with one click
- Perfect for multi-board projects - Manage different configurations for development, testing, and production
- Team collaboration made easy - Share board configurations via
sketch.yamlin version control - Cross-machine consistency - Apply the same board configuration on any computer
- Arduino IDE 2.0 or later
- This extension works exclusively in Arduino IDE (which is built on VS Code/Eclipse Theia)
- Does NOT work in standard VS Code
ⓘ Note: The extension requires the Arduino IDE environment to access board configuration APIs. Standard VS Code installations are not supported.
-
Download the latest
.vsixfile from GitHub Releases -
Close Arduino IDE completely (important!)
-
Copy the
.vsixfile to Arduino IDE's plugins directory:macOS:
cp vscode-arduino-sketch-vault-*.vsix ~/Library/Application\ Support/arduino-ide/plugins/
Linux:
cp vscode-arduino-sketch-vault-*.vsix ~/.config/arduino-ide/plugins/
Windows (PowerShell):
Copy-Item vscode-arduino-sketch-vault-*.vsix "$env:LOCALAPPDATA\Arduino IDE\plugins\"
-
Start Arduino IDE
-
The extension should activate automatically
ⓘ Tip: If the plugins directory doesn't exist, create it first:
- macOS:
mkdir -p ~/Library/Application\ Support/arduino-ide/plugins/- Linux:
mkdir -p ~/.config/arduino-ide/plugins/- Windows:
mkdir "$env:LOCALAPPDATA\Arduino IDE\plugins\"
Download the latest.vsixfileOpen Arduino IDEOpen Command Palette:macOS:Cmd+Shift+PWindows/Linux:Ctrl+Shift+P
Type:Extensions: Install from VSIX...Select the downloaded.vsixfileRestart Arduino IDE
After installation, you should see:
$(circuit-board) VAULTin the status bar (bottom left)- "Arduino Sketch Vault" commands in the Command Palette
- "Arduino Sketch Vault" in the Output panel dropdown
Manage multiple board configurations as profiles with instant switching via the status bar.
- Quick Profile Switching: Click the status bar to instantly switch between saved configurations
- Complete Configuration Capture: Saves FQBN with all options (Upload Speed, CPU Frequency, Flash Size, etc.)
- sketch.yaml Integration: Profiles are stored in standard
sketch.yamlformat - Visual Status Bar: Shows current active profile with circuit board icon
- Auto-Apply on Startup: Prompts to apply default profile when opening a sketch
Status Bar Interface:
Click: $(circuit-board) PRODUCTION → Opens profile picker
Example Workflow:
- Configure board for development: ESP32-S3 @ 921600 baud, 240MHz CPU
- Save as "development" profile
- Configure board for production: ESP32-S3 @ 115200 baud, 160MHz CPU
- Save as "production" profile
- Switch between profiles with one click!
Track every board configuration change with detailed logging to multiple outputs.
-
Comprehensive Change Tracking:
- Full FQBN (Fully Qualified Board Name) with all configuration options
- Upload Speed, CPU Frequency, Flash Size, and all board-specific options
- Port selection changes
- Before/after values for every change
-
Multiple Output Channels:
- JSON Log File: Machine-readable
.arduino-sketch-vault.jsonin your workspace - Output Panel: Real-time viewing in "Arduino Sketch Vault" output channel
- Toast Notifications: Visual feedback for configuration changes
- JSON Log File: Machine-readable
-
Rich Context: Each log entry includes:
- ISO 8601 timestamp
- Sketch path
- Complete board configuration
- Individual changes with before/after values
- Change type classification (initial, fqbn, board, port)
Keep your sketch.yaml and Arduino IDE perfectly synchronized.
- IDE → sketch.yaml (Auto-Update): Automatically updates sketch.yaml when you change board settings
- sketch.yaml → IDE (Manual Apply): Apply saved configurations to Arduino IDE with one command
- Profile-Aware Updates: Updates the correct profile based on
default_profilefield - Library Preservation: Keeps your libraries section intact during FQBN updates
- Configurable: Can be disabled via settings if managing sketch.yaml manually
-
Configure your board in Arduino IDE (Tools menu):
- Select board (e.g., ESP32-S3)
- Set Upload Speed (e.g., 921600)
- Set CPU Frequency (e.g., 240MHz)
- Configure other options as needed
-
Save as profile:
- Open Command Palette (
Cmd/Ctrl+Shift+P) - Run: "Arduino Sketch Vault: Create Board Configuration"
- Enter profile name (e.g., "development")
- Choose whether to switch to this profile now
- Open Command Palette (
-
Verify:
- Status bar shows:
$(circuit-board) DEVELOPMENT sketch.yamlis created/updated in your sketch folder
- Status bar shows:
Via Status Bar (Quick):
- Click
$(circuit-board) PROFILE_NAMEin status bar - Select profile from picker
- Arduino IDE automatically applies the configuration
Via Command Palette:
- Open Command Palette (
Cmd/Ctrl+Shift+P) - Run: "Arduino Sketch Vault: Switch Board Configuration"
- Select profile
- Configuration applied automatically
When you open a sketch with an existing sketch.yaml:
- Extension prompts: "Apply 'PROFILE_NAME' configuration?"
- Shows board details (e.g., "ESP32-S3 @ 921600 baud")
- Click "Yes" to apply, "No" to skip
- Board configuration syncs with your saved profile
ⓘ Tip: This ensures your Arduino IDE always starts with the correct configuration for each project.
The extension automatically logs all board configuration changes:
Real-time Output Panel:
- View → Output → Select "Arduino Sketch Vault" from dropdown
- Or run command: "Arduino Sketch Vault: Show Logs"
JSON Log File:
- Located at:
<sketch-folder>/.arduino-sketch-vault.json - Machine-readable for automation and analysis
- Append-only (preserves full history)
Toast Notifications:
- Automatically appear when configuration changes
- Shows summary (e.g., "Upload Speed changed: 921600 → 115200")
- Not shown for initial state logging
{
"timestamp": "2025-10-20T14:32:15.123Z",
"sketchPath": "/Users/yourname/Arduino/MyProject",
"fqbn": "esp32:esp32:esp32s3:UploadSpeed=921600,CPUFreq=240,FlashSize=16M",
"board": {
"name": "ESP32-S3",
"fqbn": "esp32:esp32:esp32s3:UploadSpeed=921600,CPUFreq=240,FlashSize=16M"
},
"port": {
"address": "/dev/cu.usbserial-14230",
"protocol": "serial"
},
"changes": [
{
"option": "UploadSpeed",
"label": "Upload Speed",
"previousValue": "115200",
"newValue": "921600",
"previousLabel": "115200",
"newLabel": "921600"
}
],
"changeType": "board"
}To clear all logs and reset state:
- Run command: "Arduino Sketch Vault: Clear Logs"
- Deletes
.arduino-sketch-vault.jsonfile - Clears in-memory state
profiles:
default:
fqbn: esp32:esp32:esp32s3:UploadSpeed=921600,CPUFreq=240
platforms:
- platform: esp32:esp32 (3.0.7)
libraries: []
production:
fqbn: esp32:esp32:esp32s3:UploadSpeed=115200,CPUFreq=160
platforms:
- platform: esp32:esp32 (3.0.7)
libraries: []
default_profile: default- profiles: Dictionary of named configurations
- default_profile: Currently active profile (auto-updated by extension)
- fqbn: Complete board configuration with all options
- platforms: Board package with version
- libraries: Project dependencies (preserved by extension)
From Current Configuration:
- Configure board in Arduino IDE
- Run: "Arduino Sketch Vault: Create sketch.yaml"
- File created with "default" profile
- Opens automatically for review
Manual Creation:
- Create
sketch.yamlin sketch folder - Add profiles and default_profile field
- Use extension to apply configuration
To apply a profile from sketch.yaml to Arduino IDE:
- Ensure
sketch.yamlexists in sketch folder - Set
default_profileto desired profile name - Run: "Arduino Sketch Vault: Apply sketch.yaml Configuration"
- Extension will:
- Select base board
- Apply all configuration options
- Show progress notification
- Update status bar
When enabled (default):
- Any board configuration change in Arduino IDE updates sketch.yaml
- Updates the profile specified by
default_profile - Preserves libraries and other profile settings
- Shows notification on update
When disabled:
- sketch.yaml only updates via manual commands
- Useful if managing sketch.yaml manually or via other tools
- Still logs all changes to vault
Access all commands via Command Palette (Cmd/Ctrl+Shift+P):
| Command | Description |
|---|---|
| Arduino Sketch Vault: Switch Board Configuration | Opens profile picker to switch between saved configurations |
| Arduino Sketch Vault: Create Board Configuration | Saves current board configuration as a new profile |
| Arduino Sketch Vault: Apply sketch.yaml Configuration | Applies default profile configuration to Arduino IDE |
| Arduino Sketch Vault: Create sketch.yaml | Creates sketch.yaml from current board configuration |
| Arduino Sketch Vault: Show Logs | Opens the log output channel |
| Arduino Sketch Vault: Clear Logs | Clears all logs and resets state |
Settings are available in Arduino IDE Preferences:
| Setting | Type | Default | Description |
|---|---|---|---|
arduino-sketch-vault.autoUpdateSketchYaml |
boolean | true |
Automatically update sketch.yaml when board configuration changes in Arduino IDE |
To modify settings:
- File → Preferences → Settings
- Search for "Arduino Sketch Vault"
- Toggle auto-update as needed
Scenario: Different configurations for development vs. production
profiles:
development:
fqbn: esp32:esp32:esp32s3:UploadSpeed=921600,CPUFreq=240,DebugLevel=verbose
production:
fqbn: esp32:esp32:esp32s3:UploadSpeed=115200,CPUFreq=160,DebugLevel=none
default_profile: developmentSwitch instantly between environments via status bar.
Scenario: Multiple developers working on same project
- Developer A configures board perfectly for the project
- Creates profile and commits
sketch.yamlto git - Developer B clones repository
- Extension prompts to apply profile on startup
- Both developers have identical board configuration
Scenario: Project supports multiple Arduino boards
profiles:
esp32-dev:
fqbn: esp32:esp32:esp32s3:UploadSpeed=921600
arduino-uno:
fqbn: arduino:avr:uno
nano-33-iot:
fqbn: arduino:samd:nano_33_iot
default_profile: esp32-devSwitch between boards instantly without reconfiguring.
Scenario: Tracking down when a setting changed
- Review
.arduino-sketch-vault.jsonlog file - Search for configuration option (e.g., "CPUFreq")
- See complete timeline of changes with timestamps
- Identify when issue was introduced
Scenario: Working on desktop and laptop
- Configure board on desktop
- Commit
sketch.yamlto version control - Pull on laptop
- Apply configuration via command
- Identical setup on both machines
Symptoms: No status bar item, no commands available
Solutions:
- Verify you're using Arduino IDE 2.0+ (not standard VS Code)
- Check Developer Tools (Help → Toggle Developer Tools) for errors
- Ensure
.vsixfile is in correct plugins directory - Try reinstalling via Command Palette method
- Restart Arduino IDE completely
Symptoms: Configuration doesn't change when switching profiles
Solutions:
- Check Output panel (View → Output → "Arduino Sketch Vault") for errors
- Verify board package is installed (Tools → Board → Boards Manager)
- Check FQBN syntax in
sketch.yamlis correct - Try manually selecting board first, then switch profile
- Wait 10 seconds for commands to register (boards loading)
Symptoms: sketch.yaml doesn't update when changing board settings
Solutions:
- Check setting:
arduino-sketch-vault.autoUpdateSketchYamlistrue - Verify
sketch.yamlexists in sketch folder - Check
default_profilefield exists and is valid - Review Output panel for error messages
- Try manually creating sketch.yaml first
Causes:
- No
sketch.yamlin current sketch folder (expected) - No
default_profilefield in sketch.yaml default_profilereferences non-existent profile
Solutions:
- Create a profile: "Create Board Configuration"
- Or create sketch.yaml: "Create sketch.yaml"
- Verify
default_profilematches profile name exactly
Symptoms: Error when applying profile: "Board not found"
Solutions:
- Install required board package (Tools → Board → Boards Manager)
- Verify FQBN format:
vendor:arch:board:option1=value1,option2=value2 - Check for typos in profile FQBN
- Ensure board package version matches (check platforms section)
Symptoms: .arduino-sketch-vault.json not created
Solutions:
- Verify workspace/sketch folder is open
- Check file permissions in sketch directory
- Make a board configuration change to trigger logging
- Check Output panel for write errors
# Install dependencies
npm install
# Compile TypeScript
npm run compile
# Watch mode for development
npm run watchComprehensive test suite with >70% code coverage:
# Run all tests
npm test
# Run tests in watch mode
npm run test:watch
# Generate coverage report
npm run test:coverage
# Run only unit tests
npm run test:unitSee TESTING.md for detailed testing information.
# Create .vsix file
npm run package
# If Node version issues:
bash -c "source ~/.nvm/nvm.sh && nvm use 20 && npx vsce package"Output: vscode-arduino-sketch-vault-{version}.vsix
For rapid development and testing, use the automated deployment script to compile, package, and install the extension directly into Arduino IDE:
# Deploy to local Arduino IDE
./deploy-local.shWhat it does:
- ✅ Sets correct Node version (requires NVM)
- 📦 Installs/updates dependencies (ensures package-lock.json is current)
- 🔨 Compiles TypeScript code
- 📦 Packages extension as
.vsix - 🧹 Removes all old versions from Arduino IDE
- 📥 Installs new version into Arduino IDE plugins directory
Custom Arduino IDE location:
# Default location: ~/.arduinoIDE
# Override with environment variable:
ARDUINO_IDE_DIR=~/custom/arduino-ide ./deploy-local.shAfter deployment:
- Restart Arduino IDE completely
- Extension loads automatically on startup
- Check status bar for
$(circuit-board) VAULTindicator - View logs in Output panel → "Arduino Sketch Vault"
Platform-specific default directories:
- macOS:
~/.arduinoIDE - Linux:
~/.arduinoIDE - Windows:
%USERPROFILE%\.arduinoIDE
ⓘ Tip: This is much faster than manually copying
.vsixfiles and is the recommended workflow for development.
arduino-sketch-vault/
├── src/
│ ├── extension.ts # Main entry point and orchestration
│ ├── profile-service.ts # Profile management and switching
│ ├── board-sync-service.ts # Bidirectional IDE sync via commands
│ ├── sketch-yaml-service.ts # sketch.yaml CRUD operations
│ ├── log-service.ts # Multi-output logging system
│ ├── config-state-tracker.ts # State tracking and change detection
│ └── types.ts # Type definitions
├── out/ # Compiled JavaScript (gitignored)
├── test/ # Unit and integration tests
├── deploy-local.sh # Automated local deployment script
├── package.json # Extension manifest
├── tsconfig.json # TypeScript configuration
└── README.md # This file
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Add/update tests as needed
- Ensure tests pass (
npm test) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
MIT License - see LICENSE file for details.
- Bug Reports: GitHub Issues
- Feature Requests: GitHub Issues
- Discussions: GitHub Discussions
- Built for Arduino IDE
- Uses vscode-arduino-api by dankeboy36
- Inspired by the Arduino community's need for better configuration management
Development supported by Devista
