Arduino now has an officially supported command-line interface. The project, called arduino-cli, is the first time that the official toolchain has departed from the Java-based editor known as the Arduino IDE. You can see the official announcement video below.
Obviously this isn’t a new idea. Platform IO and other command-line driven tools exist. But official support means even if you don’t want to use the command line yourself, this should open up a path to integrate the Arduino build process to other IDEs more easily.
The code is open source, but they do mention in their official announcement that you can license it for commercial use. We assume that would mean if you wanted to build it into a product, not just provide an interface to it. This seems like something Arduino expects, because a lot of the command line tools can produce json which is a fair way to send information to another application for parsing.
The command line interface doesn’t just build a sketch. You can do things like install and manage libraries. For example, to create a new sketch:
arduino-cli sketch new HackadayPgm
You can update the installed platforms, list the connected boards, and search for board support:
arduino-cli core update-index arduino-cli board list arduino-cli core search mkr1000
If you don’t already have the board support, you can install it and verify that it is there:
arduino-cli core install arduino:samd arduino-cli core list
That last step will give you the FQBN or unique name for the core. So to compile and upload you have this mouthful:
arduino-cli compile --fqbn arduino:samd:mkr1000 Arduino/HackadayPgm arduino-cli upload -p /dev/ttyACM0 -fqbn arduino:samd:mkr1000 Arduino/HackadayPgm
Unlike, say, PlatformIO, this is clearly better for building into a tool, even if it is a makefile. We’d like to see a .build.json file or something that allows you to just issue short commands that do the right thing in a working directory. Of course, you could build that with a little shell scripting. Hmm….
It is nice to see the release of an official method and we hope this will lead to more editors being able to handle Arduino seamlessly.