The Complete Arduino Development Environment for VS Code
Out-of-the-box tooling • AI-powered assistance • Modern developer experience
Arduino Unified streamlines your Arduino workflow by automating the installation of the official toolchain—including Arduino CLI, Language Server, and Clangd—providing a true out-of-the-box experience. No more fragmented extensions or complex configurations; just pure, efficient coding for your hardware projects.
Built on the same proven foundation as Arduino IDE 2.x (gRPC + arduino-cli daemon), Arduino Unified brings modern development practices and AI-powered assistance directly into VS Code.
- 🚀 Zero Configuration - Auto-downloads and manages the entire Arduino toolchain
- 🤖 AI-Powered - GitHub Copilot integration with Arduino-specific tools
- 📡 Real-time Board Discovery - Automatic detection of connected boards
- 📊 Serial Plotter - Beautiful data visualization for sensor readings
- 🎨 Modern UI - React-based webviews for library/platform management
- 🔌 Offline-First - No cloud dependency, fully functional locally
- 🌐 Universal Support - Official Arduino, ESP32, ESP8266, STM32, and more
- One-click sketch compilation with configurable warning levels
- Direct upload to board or via programmer
- Bootloader burning support
- Binary export for production
- Memory usage analysis (Flash/RAM)
- Real-time compilation output
- Real-time board discovery - Automatic detection via USB/Serial/Network
- Status bar board selector with quick switching
- Support for all Arduino-compatible boards
- Custom board configuration (CPU speed, variants, etc.)
- FQBN (Fully Qualified Board Name) support
- Beautiful webview interface for library search
- One-click library installation with dependency resolution
- Platform (core) installation for 3rd-party boards
- Automatic library updates
- Configurable board manager URLs
- Serial Monitor - Real-time serial communication in VS Code terminal
- Serial Plotter - Live data visualization with Chart.js
- Configurable baud rates (300 - 921600)
- Multiple line ending options
- Timestamp support
- Auto-scroll and buffer management
- Integration with hardware debuggers (JTAG, SWD)
- Seamless cortex-debug integration
- Optimize for debug compilation option
- Check debug support for selected board
Ask questions and get Arduino-specific help directly in VS Code:
@arduino How do I read from a DHT22 temperature sensor?
@arduino Why is my sketch using so much memory?
@arduino Explain this compilation errorThe AI assistant has context about:
- Your current board and FQBN
- Selected port and connection status
- Installed libraries
- Recent compilation errors
- Serial monitor output
The AI can directly invoke Arduino operations:
- Compile sketches and analyze errors
- Query board information (pins, programmers, config)
- Search libraries in the Arduino registry
- Read serial output for debugging assistance
- Auto-add missing
#includedirectives - Suggest
pinMode()calls for undeclared pins - "Explain Error with Copilot" for compilation errors
- Context-aware quick fixes
- Syntax highlighting for
.inoand.pdefiles - IntelliSense and auto-completion
- Arduino keyword documentation on hover
- Code formatting with clang-format
- Error diagnostics in Problems panel
- Open VS Code
- Go to Extensions (Ctrl+Shift+X / Cmd+Shift+X)
- Search for "Arduino Unified"
- Click Install
On first activation, Arduino Unified will:
- Prompt to download Arduino CLI (if not already installed)
- Initialize the Arduino environment
- Download board indexes and library lists
- Start the gRPC daemon for fast communication
That's it! You're ready to start coding.
Command Palette → Arduino Unified: New Sketch
Or use the default template in settings:
{
"arduinoUnified.sketch.template": "void setup() {\n Serial.begin(9600);\n}\n\nvoid loop() {\n Serial.println(\"Hello, Arduino!\");\n delay(1000);\n}\n"
}Click the board selector in the status bar → Choose your board and port
Or use Command Palette → Arduino Unified: Select Board & Port
Click the ✓ icon in the editor title bar
Or use Command Palette → Arduino Unified: Compile Sketch
Click the ↑ icon in the editor title bar
Or use Command Palette → Arduino Unified: Upload Sketch
Click the 🔌 icon in the editor title bar
Or use Command Palette → Arduino Unified: Open Serial Monitor
Open GitHub Copilot Chat (Ctrl+Alt+I / Cmd+Option+I) and type:
@arduino I'm getting a "not enough memory" error. How can I optimize my sketch?The AI has full context of your project and can:
- Analyze your code
- Compile and diagnose errors
- Suggest optimizations
- Find relevant libraries
- Debug serial output issues
When you get a compilation error:
- Hover over the error in the Problems panel
- Click "Explain Error with Copilot"
- Get an AI explanation with suggested fixes
@arduino What's the best library for reading GPS data?The AI will search the Arduino library registry and recommend options.
- none - No warnings
- default - Standard compiler warnings
- more - Additional warnings
- all - All possible warnings (very verbose)
- none - No line ending
- nl - Newline (
\n) - cr - Carriage return (
\r) - nlcr - Both (
\r\n)
- Arduino UNO, Mega, Nano, Micro, Leonardo
- Arduino Due, Zero, MKR series
- Arduino Portenta, Opta, Giga
- ESP32 - Espressif systems
- ESP8266 - Espressif systems
- STM32 - STMicroelectronics
- Any board with Arduino Board Manager support
Add board manager URLs in settings:
{
"arduinoUnified.boardManager.additionalUrls": [
"https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json"
]
}Arduino Unified is built on a modern, robust architecture:
┌─────────────────────────────────────────────────────────────┐
│ VS Code Extension │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Commands │ │ Webviews │ │ AI Tools │ │
│ │ & UI │ │ (React) │ │ & Chat │ │
│ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │
│ │ │ │ │
│ └──────────────────┼──────────────────┘ │
│ │ │
│ ┌───────▼────────┐ │
│ │ gRPC Client │ │
│ │ (Proto-based) │ │
│ └───────┬────────┘ │
└────────────────────────────┼─────────────────────────────────┘
│
┌────────▼────────┐
│ arduino-cli │
│ daemon │
│ (Go binary) │
└────────┬────────┘
│
┌──────────────┼──────────────┐
│ │ │
┌────▼────┐ ┌────▼────┐ ┌────▼────┐
│ Board │ │ Compile │ │ Upload │
│Discovery│ │ Tooling │ │ Tooling │
└─────────┘ └─────────┘ └─────────┘- gRPC Communication - Type-safe, high-performance RPC
- Arduino CLI Daemon - Official Arduino toolchain
- React Webviews - Modern UI for library/platform management
- AI Integration - Deep Copilot integration with Language Model API
- Board Discovery - Real-time USB/Serial/Network detection
- Node.js 18+ and pnpm 8+
- VS Code 1.107.0+
# Clone the repository
git clone https://github.com/fermeridamagni/arduino-unified.git
cd arduino-unified
# Install dependencies
pnpm install
# Build the extension
pnpm run compile
# Package the extension
pnpm run packagepnpm run testThis project uses Ultracite for code quality:
# Check for issues
pnpm run check
# Auto-fix issues
pnpm run fixWe welcome contributions! Please see CONTRIBUTING.md for details on:
- Code of conduct
- Development workflow
- Coding standards
- Pull request process
Found a bug or have a feature request? Please open an issue on GitHub Issues with:
- Bug reports: Steps to reproduce, expected vs actual behavior, logs
- Feature requests: Use case, proposed solution, alternatives considered
For security vulnerabilities, please see SECURITY.md.
This project is licensed under the GNU General Public License v3.0 - see the LICENSE file for details.
Arduino Unified includes the following third-party components:
- Copyright: 2024 ARDUINO SA Arduino
- License: Apache License 2.0
- Source: Arduino CLI
- Files:
src/cli/proto/cc/arduino/cli/commands/v1/*.proto
These protocol buffer definitions are used for gRPC communication with the Arduino CLI daemon.
- Copyright: 2008 Google Inc.
- License: BSD 3-Clause License
- Source: Protocol Buffers
- Files:
src/cli/proto/google/protobuf/*.proto,src/cli/proto/google/rpc/*.proto
These are standard Google Protocol Buffer definitions used for message serialization.
- Arduino Team - For the amazing Arduino CLI and Language Server
- Microsoft - For VS Code and GitHub Copilot
- Community - For feedback, bug reports, and contributions
- Documentation: GitHub Wiki
- Discussions: GitHub Discussions
- Issues: GitHub Issues
Made with ❤️ by fermeridamagni




{ // Custom Arduino CLI path (leave empty for auto-download) "arduinoUnified.cli.path": "", // Arduino CLI version to auto-download "arduinoUnified.cli.version": "1.4.1", // Board manager URLs for 3rd-party platforms "arduinoUnified.boardManager.additionalUrls": [ "https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json", "http://arduino.esp8266.com/stable/package_esp8266com_index.json" ], // Compilation settings "arduinoUnified.compile.verbose": false, "arduinoUnified.compile.warnings": "default", "arduinoUnified.compile.optimizeForDebug": false, // Upload settings "arduinoUnified.upload.verbose": false, "arduinoUnified.upload.verify": false, "arduinoUnified.upload.autoVerify": true, // Serial monitor settings "arduinoUnified.monitor.baudRate": 9600, "arduinoUnified.monitor.lineEnding": "nl", "arduinoUnified.monitor.autoScroll": true, "arduinoUnified.monitor.timestamp": false }