Introduction
Arduino is an open-source electronics platform that has revolutionized the way we approach embedded system development. With its user-friendly hardware and software components, Arduino has made it incredibly easy for hobbyists, students, and professionals to create interactive projects and prototypes. One of the most powerful tools in the Arduino ecosystem is the arduino-cli, a command-line interface (CLI) that allows you to compile, upload, and manage libraries, cores, and boards.
In this comprehensive article, we’ll explore the arduino-cli in depth, covering its installation, usage, and various functionalities. Whether you’re a seasoned Arduino developer or just starting out, this guide will equip you with the knowledge and skills needed to leverage the power of the arduino-cli and streamline your development workflow.
Installing the arduino-cli

The arduino-cli is a cross-platform tool that can be installed on Windows, macOS, and Linux operating systems. Follow the steps below to install the arduino-cli on your preferred platform:
Windows
- Visit the official Arduino CLI repository on GitHub: https://github.com/arduino/arduino-cli
- Download the latest release for Windows from the “Releases” section.
- Extract the downloaded archive to a directory of your choice.
- Add the
arduino-cliexecutable to your system’sPATHenvironment variable for easy access from any directory.
macOS
- Visit the official Arduino CLI repository on GitHub: https://github.com/arduino/arduino-cli
- Download the latest release for macOS from the “Releases” section.
- Extract the downloaded archive to a directory of your choice.
- Open a Terminal window and navigate to the directory where you extracted the
arduino-cli. - Run the following command to make the
arduino-cliexecutable:Copy codechmod +x arduino-cli - Optionally, you can move the
arduino-cliexecutable to a directory in your system’sPATHfor easy access from any directory.
Linux
- Visit the official Arduino CLI repository on GitHub: https://github.com/arduino/arduino-cli
- Download the latest release for Linux from the “Releases” section.
- Extract the downloaded archive to a directory of your choice.
- Open a Terminal window and navigate to the directory where you extracted the
arduino-cli. - Run the following command to make the
arduino-cliexecutable:Copy codechmod +x arduino-cli - Optionally, you can move the
arduino-cliexecutable to a directory in your system’sPATHfor easy access from any directory.
After installing the arduino-cli, you can verify the installation by running the following command in your terminal or command prompt:Copy code
arduino-cli version
This should display the version of the arduino-cli that you have installed.
Basic Usage
The arduino-cli is a powerful tool that provides a wide range of commands and options to streamline your Arduino development workflow. Here are some of the basic commands and their usage:
Compiling a Sketch
To compile an Arduino sketch, use the compile command followed by the path to your sketch file:Copy code
arduino-cli compile /path/to/your/sketch.ino
This command will compile your sketch and generate the necessary binary files for uploading to the Arduino board.
Uploading a Sketch
After compiling your sketch, you can upload it to an Arduino board using the upload command:Copy code
arduino-cli upload -p /dev/ttyACM0 --fqbn arduino:avr:uno /path/to/your/sketch.ino
Here’s what each part of the command means:
-p /dev/ttyACM0: Specifies the serial port to which your Arduino board is connected. Replace/dev/ttyACM0with the appropriate port for your system.--fqbn arduino:avr:uno: Specifies the fully qualified board name (FQBN) for your Arduino board. In this case, it’s the Arduino Uno board based on the AVR architecture./path/to/your/sketch.ino: The path to your Arduino sketch file.
Make sure to replace the serial port and FQBN with the appropriate values for your setup.
Managing Libraries
The arduino-cli provides commands to install, update, and uninstall libraries for your Arduino projects. Here are some examples:
Installing a Library
To install a library from the official Arduino Library Manager, use the lib install command:Copy code
arduino-cli lib install ArduinoJson
This command will install the latest version of the ArduinoJson library.
Updating a Library
To update an installed library to the latest available version, use the lib upgrade command:Copy code
arduino-cli lib upgrade ArduinoJson
Uninstalling a Library
To remove an installed library, use the lib uninstall command:Copy code
arduino-cli lib uninstall ArduinoJson
Managing Cores
The arduino-cli allows you to install and manage cores, which are software packages that provide support for different Arduino board architectures. Here’s an example of installing a core:Copy code
arduino-cli core install arduino:samd
This command installs the core for the Arduino SAMD boards, which are based on the ARM Cortex-M0+ architecture.
You can list all available cores using the core search command:Copy code
arduino-cli core search
Managing Boards
The arduino-cli provides commands to install and manage board packages, which contain support for specific Arduino boards. Here’s an example of installing a board package:Copy code
arduino-cli board install arduino:sam
This command installs the board package for the Arduino SAM boards, which are based on the ARM Cortex-M3 architecture.
You can list all available board packages using the board search command:Copy code
arduino-cli board search
Advanced Usage

While the basic commands cover many common use cases, the arduino-cli offers a wide range of advanced features and options to further enhance your development experience. Here are some examples:
Configuring the arduino-cli
The arduino-cli allows you to configure various settings and preferences through a configuration file. You can create a configuration file by running the following command:Copy code
arduino-cli config init
This will create a arduino-cli.yaml file in the current directory. You can then edit this file to customize settings such as sketchbook location, default board, and more.
Creating and Managing Sketches
The arduino-cli provides commands to create, copy, and manage sketches. Here are some examples:
Creating a New Sketch
To create a new sketch, use the sketch new command:Copy code
arduino-cli sketch new MyNewSketch
This command will create a new directory called MyNewSketch with the necessary files for a new Arduino sketch.
Copying an Existing Sketch
To copy an existing sketch, use the sketch copy command:Copy code
arduino-cli sketch copy /path/to/existing/sketch.ino /path/to/new/sketch
This command will create a copy of the existing sketch file in the specified new location.
Building and Uploading in a Single Command
The arduino-cli allows you to combine the compile and upload commands into a single step using the upload command with the --build option:Copy code
arduino-cli upload -p /dev/ttyACM0 --fqbn arduino:avr:uno --build /path/to/your/sketch.ino
This command will first compile the sketch and then upload it to the specified board.
Monitoring Serial Output
When uploading a sketch to an Arduino board, you can monitor the serial output using the monitor command:Copy code
arduino-cli monitor -p /dev/ttyACM0
This command will open a serial monitor window and display any output from the connected Arduino board.
Listing Connected Boards
If you have multiple Arduino boards connected to your computer, you can list them using the board list command:Copy code
arduino-cli board list
This command will display a list of all connected boards, along with their serial ports and board details.
Debugging Sketches
The arduino-cli provides options for debugging your sketches. You can enable debug mode by adding the --debug option to the compile or upload command:Copy code
arduino-cli compile --debug /path/to/your/sketch.ino
This command will compile your sketch with debug symbols, allowing you to use a debugger or other debugging tools for more advanced debugging scenarios.
FAQ (Frequently Asked Questions)
- How do I install a library from a custom source or local file? To install a library from a custom source or local file, you can use the
lib installcommand with the appropriate URL or file path:Copy code# Install from a custom URL arduino-cli lib install https://example.com/my-library.zip # Install from a local file arduino-cli lib install /path/to/my-library.zip - How can I specify a specific version of a library when installing or upgrading? You can specify a particular version of a library by appending the version number after the library name:Copy code
# Install a specific version arduino-cli lib install ArduinoJson@6.19.4 # Upgrade to a specific version arduino-cli lib upgrade ArduinoJson@6.19.4 - How do I list all installed libraries, cores, and board packages? To list all installed libraries, use the
lib listcommand:Copy codearduino-cli lib listTo list all installed cores, use thecore listcommand:Copy codearduino-cli core listTo list all installed board packages, use theboard listcommand:Copy codearduino-cli board list - How do I update the
arduino-cliitself to the latest version? Thearduino-cliprovides aself-updatecommand to update itself to the latest available version:Copy codearduino-cli self-updateThis command will download and install the latest version of thearduino-cli. - Can I use the
arduino-cliin a script or automated build process? Yes, thearduino-cliis designed to be easily integrated into scripts and automated build processes. You can combine the various commands and options to create custom workflows for compiling, uploading, and managing your Arduino projects.
Conclusion
The arduino-cli is a powerful tool that simplifies and streamlines the development workflow for Arduino projects. With its comprehensive set of commands and options, you can easily compile, upload, and manage libraries, cores, and boards from the command line.
Whether you’re a hobbyist, student, or professional developer, the arduino-cli can help you optimize your Arduino development process, enabling you to focus more on creating innovative and engaging projects.
As you continue to explore the arduino-cli, remember to consult the official documentation and community resources for the latest updates and best practices. Happy coding!





