Arduino CLI IDECode Arduino sketches in plain VS Code — compile, upload, monitor, and debug right from the editor.
This extension is a thin wrapper around the official
Why you'll like it
Getting startedStep 1 — Install
|
| Command | What it does |
|---|---|
| Arduino CLI: Select Board | Choose the board (FQBN) for the current sketch |
| Arduino CLI: Compile | Compile the active sketch |
| Arduino CLI: Upload | Upload the compiled sketch to the board |
| Arduino CLI: Upload Using Programmer | Upload via a hardware programmer |
| Arduino CLI: Burn Bootloader | Write the bootloader to the board |
| Arduino CLI: Board Details | Show the selected board's capabilities |
Serial
| Command | What it does |
|---|---|
| Arduino CLI: Open Serial Monitor | Read text from the board's serial port |
| Arduino CLI: Open Serial Plotter | Graph live numeric data streaming over serial |
| Arduino CLI: Save Serial Log… | Save the captured serial output to a file |
Platforms / cores
| Command | What it does |
|---|---|
| Arduino CLI: Install / Uninstall / Upgrade Platform | Manage a single core |
| Arduino CLI: Upgrade All Platforms | Update every installed core |
| Arduino CLI: Download Platform (cache only)… | Pre-download a core without installing |
| Arduino CLI: Update Package Index | Refresh the list of available cores |
Libraries
| Command | What it does |
|---|---|
| Arduino CLI: Add Library… | Search and install a library |
| Arduino CLI: Install Library from ZIP… / from Git URL… | Install from a local archive or a repository |
| Arduino CLI: Download Library Archive (cache only)… | Pre-download a library without installing |
| Arduino CLI: Upgrade All Libraries | Update every installed library |
| Arduino CLI: Update Libraries Index | Refresh the list of available libraries |
Build profiles (sketch.yaml)
| Command | What it does |
|---|---|
| Arduino CLI: Create Build Profile… | Create a reproducible build profile |
| Arduino CLI: Set Default Profile… | Choose the profile used by default |
| Arduino CLI: Add / Remove Library to Profile… | Pin libraries to a profile |
| Arduino CLI: List Profile Libraries | Show the active profile's libraries |
Debug & IntelliSense
| Command | What it does |
|---|---|
| Arduino CLI: Debug | Start a debug session on a supported board |
| Arduino CLI: Show Debug Configuration | Inspect the generated debug config |
| Arduino CLI: Configure IntelliSense | Regenerate c_cpp_properties.json for the current board |
Sketch & maintenance
| Command | What it does |
|---|---|
| Arduino CLI: New Sketch… | Scaffold a new sketch |
| Arduino CLI: Archive Sketch… | Zip up the sketch for sharing |
| Arduino CLI: Check for CLI Updates | See if a newer arduino-cli is available |
| Arduino CLI: Clean Download Cache | Free up cached downloads |
| Arduino CLI: Show Daemon Version / Restart Daemon | Diagnose the background daemon |
IntelliSense (code completion)
When you select a board, the extension can generate VS Code's c_cpp_properties.json with the right include paths and defines for that board — so go-to-definition, hover docs, and autocompletion work for the Arduino core and your libraries. Install Microsoft's C/C++ extension to get the most out of it. This stays on automatically (arduinoCli.intellisense.autoConfigure) and refreshes when the board or libraries change.
Debugging
On boards with debug support (and an installed debug adapter such as Cortex-Debug), the Debug button starts a real debug session: breakpoints, stepping, and variable inspection. The extension auto-detects the adapter; you can override everything via the arduinoCli.debug.* settings. The Debug button only appears for boards that support it.
Settings
You can leave everything at its defaults. To tweak, open Settings and search for "Arduino CLI":
| Setting | Default | What it does |
|---|---|---|
arduinoCli.path |
arduino-cli |
Path to the arduino-cli executable |
arduinoCli.daemonPort |
50051 |
Local TCP port for the background daemon |
arduinoCli.monitor.autoReconnect |
true |
Reopen the serial monitor after an upload |
arduinoCli.autoInstallPlatform |
true |
Offer to install a missing core before compiling |
arduinoCli.boardManagerUrls |
[] |
Extra Board Manager URLs (e.g. for ESP32, STM32) |
arduinoCli.alwaysExportBinaries |
false |
Always export compiled binaries next to the sketch |
arduinoCli.unsafeLibraryInstall |
false |
Allow installing libraries from untrusted ZIP/Git sources |
arduinoCli.updateNotifications |
true |
Check for arduino-cli updates on startup |
arduinoCli.verbose |
false |
Verbose output for compile, upload, and bootloader |
arduinoCli.intellisense.autoConfigure |
true |
Keep the C/C++ IntelliSense config in sync automatically |
arduinoCli.debug.adapter |
auto |
Debug adapter: auto, cortex-debug, cppdbg, or custom |
arduinoCli.debug.adapterConfig |
{} |
Fields merged into the generated debug configuration |
arduinoCli.debug.interpreter |
"" |
GDB command interpreter (e.g. mi, mi2) |
Works great with Blocks Editor
If you'd rather build programs by dragging blocks than typing C++, install the sister extension Blocks Editor (linucs.blocks-editor). It's a visual, Scratch-like editor that generates real Arduino code — and it uses this extension's Compile and Upload buttons to build and flash your board. The two are designed to work side by side, but each is fully standalone: use one, the other, or both.
Requirements
- VS Code 1.120 or newer
arduino-cliinstalled and on yourPATH(or setarduinoCli.path) — see Step 1.- For debugging: a board with debug support and a debug adapter (e.g. the Cortex-Debug extension).
- For IntelliSense: Microsoft's C/C++ extension.
Good to know
- Nothing runs until you need it. The extension doesn't spawn the daemon on startup — it starts on the first command that needs it. If
arduino-cliisn't installed, you'll get one clear message instead of a noisy error, and you pay nothing if you never use it. - It stays out of your way. This is a thin wrapper: it pushes defaults and policy into
arduino-cli's own configuration rather than reimplementing them. Your builds match whatarduino-cli(and the Arduino IDE) produce. - On Apple Silicon Macs, some classic AVR toolchains are x86-only and need Rosetta 2 (
softwareupdate --install-rosetta) to compile/upload.
For developers
npm install
./scripts/fetch-protos.sh # vendor the arduino-cli proto definitions (already included)
npm run compile # typecheck + lint
npm run build # bundle to dist/extension.js
Press F5 in VS Code to launch an Extension Development Host. The extension loads the
vendored arduino-cli .proto files at runtime via @grpc/proto-loader (no codegen step).
See CLAUDE.md for architecture notes and PUBLISHING.md for
the release process.
Community
Questions, ideas, or just want to show what you built? Join the GitHub Discussions.
Contributing
Contributions and bug reports are welcome — open an issue or pull request on the repository.
