The Arduino IDE Finally Grows Up

While the Arduino has a very vocal fan club, there are always a few people less than thrilled with the ubiquitous ecosystem. While fans may just dismiss it as sour grapes, there are a few legitimate complaints you can fairly level at the stock setup. To address at least some of those concerns, Arduino is rolling out the Arduino Pro IDE and while it doesn’t completely address every shortcoming, it is worth a look and may grow to quiet down some of the other criticisms, given time.

For the record, we think the most meaningful critiques fall into three categories: 1) the primitive development environment, 2) the convoluted build system, and 3) the lack of debugging. Of course, there are third party answers for all of these problems, but now the Pro IDE at least answers the first one. As far as we can tell, the IDE hides the build process just like the original IDE. Debugging, though, will have to wait for a later build.

We were happy to see a few things with the new IDE. There’s some autocompletion support, Git is integrated, and there’s still our old friend the serial monitor. The system still uses the Arduino CLI, so that means there isn’t much danger of the development getting out of sync. The actual editor is Eclipse Theia. People typically either love Eclipse or hate it, however, it is at least a credible editor. However, Theia uses Electron which makes many people unhappy because Electron applications typically eat a lot of resources. We’ll have to see how taxing using the new Pro IDE is on typical systems with normal workloads.

On the future feature list is our number one pick: debugging. They are also promising support for new languages, third party plugins, and synchronization with the Web-based editor. All good features.

This is just an alpha preview release, but it is a great start. Our only question is will existing users really care? Most people already write code in another editor. Many use an external build system like PlatformIO. Eclipse already has a plug in for Arduino that supports debugging with the right hardware. So while new users may appreciate the features, advanced users may be wondering why this is so late to the party.


105 thoughts on “The Arduino IDE Finally Grows Up

      1. My key is on “by default”.

        Hiding compiler warnings in C/C++ is a sin. So many warnings are simply the compiler saying “I’m pretty sure you are doing something wrong, but I still allow it”. By doing this by default you are just setting up more people for pain.

      2. Just thought I’d say thanks Massimo for swinging by.

        Don’t let the commenteers get you down. Everyone has their own idea of what’s best. And to that end, what you’ve been doing lately — CLI for some folks, better GUI for others — is great!


        1. Seconded! – Way to go Massimo, seriously. Simplicity and not changing much has a ton of value in my opinion. The base UI/UX hasn’t changed much in ~10 years., and I’m not saying that in a bad way. How many apps/API’s/OS’s have had changes that ‘this is a great idea’ forcing learning curves down users throats in the same period whether they want them or not (windows 10 start menu?)? I love I can not happen to have a micro project for a year+, and be able to jump back in without a relearning curve of ‘where did this go / how does this work now?’ or flip to a new board and not have to learn it’s idiosyncrasies (unless I have need or want to).
          – I use a professional dev/debug IDE 8+ hours a day, but Arduino is still my go-to for most micro projects. if someone is a pro on micros, and spending plenty of (likely paid) hours in development, they’re welcome to spend the time/learning curve on Atmel studio, Eclipse config, etc. But they don’t need to whine about Arduino IDE then, because it isn’t their only option. For small projects you can whip out without worrying about compilers, board/chip configs, etc, it’s amazing, especially with the library manager added along the way.
          – Kudos, and I look forward to trying the Pro version – seems like it will be some nice improvements without needing to take the time investment to make the jump to the other current options.

      3. massimo and team,

        congrats on the release. for the new pro IDE alpha, is there (or what is) the process to add 3rd party boards? we can try that out to test it. if it’s not going to be supported that is fine, we just want to know what to suggest to people and what to expect. same for CREATE.

        some other confirmation/questions:
        1) the pro IDE is based on theia, any info on why that was selected? &
        2) the alpha is not open-source at this time during alpha, but will be later?
        3) the blog post says “Support for additional languages other than C++” are there documentation/examples?

        and for other stats, for those interested, here are some theia stats:


    1. There is a web app. I’d rather have a standalone application because there are many more boards than just the standard AT chips out there, and it’s a much more reliable experience connecting to programmers and debuggers. The process of interfacing a browser to actual hardware is horribly insecure and unreliable too.

    2. There actually is a webapp. And oddly enough I have often had higher success with the web app when using outdated libraries. It uses some sort of USB bridge application that runs in the background, that works very well especially on windows,

      1. the web app removes too much control , and can be downright problematic? I had a program make a library call, the web app had two versions installed, and it was a pain to figure out where the wrong one was since it was an older unrelated library with the same name but different functions.

  1. Just goes to show how Arduino has no clue what people want. Visual Studio Code would have been a far better choice over Eclipse which has a heavy footprint. As for debugging, i honestly have no idea why so many people feel they need it. I have been programming embedded micros for 30 years now. I never once needed a debugger. printf properly placed here and there is all that was ever needed. Maybe the people who feel they must have a debugger should focus on writing better code.

    1. Debugging is very helpful when you have complex algorithms. Any network protocol, encryption, string handling, etc can benefit from it. When you’re parsing a string, using that to create a request, and then parsing the response, you have so many places that can go wrong.

      Printf debugging is an art, and it takes time to put them in and take them out, and to decide where they are needed.

      I think Eclipse Theia may be better than normal Eclipse. Haven’t tried it, but I have a hard time imagining it being worse than Eclipse.

      1. Good luck using printf when the uC crashed. Hardware debugger can at least pull the stack, peripheral registers, memory dump. You can also do real time profiling. Why make your life more difficult than you have to when the chip vendor specifically added in the support?

        I guess you have never have to work on writing your own low level code.

      1. I’m sure they have an idea or two. But it’s difficult to paint over someone else’s canvas – the insufficiently credited works of Wiring and Processing. It’s difficult to erase their contributions when so few understand the code. That’s the real reason the IDE is like a time capsule to another decade..

        1. they were an inspiration in 2003 then we worked for 15 years it seems a bit excessive to give zero value to 15 years of work. that website is full of incorrect statements and was “heavily inspired” by the lawyers of the people we were suing at the time… better stop here

          1. Forking the code is quite a bit more than simply taking ‘inspiration.’

            You started with their code, plain and simple. It only reflects poorly that you don’t recognize that.

          2. “giving zero credit”? Wow. Irony.

            Nothing stops you from taking the work of Wiring, Hernando Barragán’s work, and forking it as Arduino. It is GPL, of course.

            But what happened in 2005 is Arduino went on a blitz across the nascent maker media movement, presenting this new thing written “in a weekend”. No mention of the fork or taking of a student’s work – or ethics.

        2. How did you read that and take it seriously? He’s clearly butthurt someone used an idea, he didn’t patent, to make money. It’s literally, “Boo hoo, why didn’t you pick me”, the novel!

        3. Bit late to the party but here goes anyways – I’m mindful of overhearing a conversation a great many years ago between a Microsoft programmer from the US and a local programmer here in oz that went something like this (I’ll let you imagine the American accent): “No man Noo, the user will never understand it, you’ve got make it easy . . .”. The MS programmers name was Scott too as it happens, but he clearly had a better understanding of the importance of the man-machine interface than a great many so called ‘professional’ programmers even today. For my part – within an hour of my first encounter with an Arduino I was using the IDE with relative ease and had the thing tapping out a variety Morse code messages to my great delight – within an hour – Now that is “making it easy” . . . By contrast I’ve yet to find any other programing Ecosystem or IDE that even comes close to making it that easy – and when it comes down to it all I really want to do is make a bit of hardware do something clever.

          In fact if I have any criticism of the Arduino Ecosystem/IDE it is that they have done such a fantastic job of ringfencing the complexity that when you finally reach a point where you have to look under the bonnet it’s rather like falling off a cliff!!

          From my point of view the Arduino team have hit the target they were aiming at right in the bullseye – As to building on Wiring/Processing ? Of course they did! And the Wiring/Processing dudes were doing the same thing too, we all do it, but a modicum of research shows that there is a Huge progression between Wiring/Processing and the Arduino Ecosystem.

          Long-Story-Short — I’m really tired of hearing from ‘programmers’ whining about how bad Arduino is cause fellas – the simple fact is this – You’ve been Outvoted – Bigtime . . . Get over it . . .

      2. As usual with Arduino, only people that know how to use other tools complain about it without even realising that they are not the demographic Arduino is targeting.

        It’s really interesting to see professionals, or near professionals, getting wound up about a platform made for entry hobbyists into electronics.

        1. “only people that know how to use other tools complain about it”

          I think you replied to the wrong post.

          My post spoke to the clunkiness of the ancient, Wiring-based Arduino IDE… and the ethics of a professor forking his student’s work and passing it off as his own.

          In your response, you seem to suggest that the folks complaining about the target audience (I’ll summarize as “why use a microcontroller?”) are “the same” as folks complaint about the old Arduino IDE’s monolithic tooling and outdated workflow.

          It is not really possible for these groups to overlap much: the latter group are folks trying to USE the microcontroller, while the former group see a way to solve all problems using logic-based chips.

    2. You’re absolutely right. I don’t know why anyone thinks they need a debugger. I don’t know why anyone thinks they need printf, either.

      I’ve done so much work just by toggling addresses and reading registers through a front panel. Maybe the people who think they need more just need to sharpen their hexadecimal skills.


    3. Criticism is always welcome as long as it is based on a bit of research. This is based on Theia which is a project in the Eclipse foundation but it’s not Eclipse. People are building more and more complex code with Arduino and printf just doesn’t cut it anymore. An actual debugger is needed for these more advanced use cases.

    4. There’s an Arduino plugin for Visual Studio Code which works absolutely fantastically. So much better and no stupid 100% interrupt on CPU trying to poll serial ports when it’s not connected.

      1. If that means they know what is working and what isn’t, then so be it. VS Code has been rapidly evolving since they first went open source, and no doubt some of that improvement comes from collecting information about what users use and how fast/slow various features are.

        1. That isn’t enough, you also need to block all MS domains and all Azure IP blocks, and never allow a windows 10 system to talk to your network. Failing any one of those and your telemetry has been delivered to Microsoft.

          MS p2p updates were specifically made to prevent “blocking at the firewall”, and both data and software can be passed both directions via other computers, even if it may take some time to get passed around indirectly enough to make it back to a direct route to MS.

          Since your claims indicate you weren’t aware of that, it’s nearly 100% certain that at least some of your telemetry data has made its way back to MS already.

      2. This is FUD and nothing more

        quick search reveals for example this –

        Few clicks and no more telemetry, or any other online cloud services.

        BTW How is Arduino Pro and telemetry? Microsoft is very open about what they are collecting and how – all VSCode is OSS.

        I understand you don’t like the VSCode but why this?

        One thing i really like about VSCode/PlatformIO is the reproducible builds. You get the GIT repo, you press build and it builds for the correct platform / architecture / board. Arduino? Unless somebody states it in the README or something (or you forget to write it down somewhere in the project for later), you have no idea what to pick in the board manager. Is it Nano? Micro? Mini? 8MHz? 16MHz?

      3. That’s ok… I’ll let you guys have it instead. :-P Bit of a cheap shot there Massimo… not that M$ don’t deserve it! :-D And then there is the checkbox right there in the preferences to let you disable telemetry….

    1. I use VS Code with the Platform.IO extension. Haven’t looked back since then. I’ve had zero problems with more complex arduino projects such as Repetier and Marlin with this setup. Loving it!

  2. Is love to see a debugger – yes I can get around it other ways but it would help.

    Been able to decompile code that is already on a chip would be really neat.

    But despite what might be considered shortcomings it enabled me to produce a number of micro based projects I would not otherwise have attempted . Thank you to all the folks that have enabled myself and lots of others to give it ago

    1. > decompile code
      There is a disassembler in the toolchain. So “avr-objdump” can go from your binary data in your chip (which you can dump with avrdude) to assembly.

      Going back to C is a much tougher job. I don’t know of any tools that do this. There is just so much information lost after the optimizer did it’s job and you only look at the assembly output. I think for AVR is sort of doable, due to the limited instruction set and a bunch of other things. But still a lot of information will be lost, like function names, variable names. And a quick search shows no results.

      ida pro is a tool specialized in handling “unknown” executable data:
      But does not go back to C.

    1. Arduino’s announcement says “Before releasing the source code to move out of the alpha, we would greatly appreciate your feedback”. Sure sounds like it will be open source at some unspecified point in the future, but for now is only a public preview without source code.

  3. Am I the only one who prefers to write code using a good text editor like Notepad++ (with syntax highlighting turned off!) rather than a big, bloated IDE? I like the simplicity of typing exactly what I mean, with just enough sugar to handle indentation, regex searches, etc.

    1. I prefer to have both options to use the right tool for the job, as is the case here.
      Simple things, and even automated deployment via CLI works best for me.
      Early development stage and learning new libraries, an IDE helps for me.
      I feel it is best to have both available and just refrain from using the wrong tools at any given moment, vs have limited options forced on me.

    2. I’ve worked in so many different languages and frameworks (and 3 or more microcontrollers) that IDEs with code completion, hints, build configurations are necessary to keep me productive as I switch around. Sure I can ssh in and edit in vim for quick fixes, and make my own build scripts… but it’s unnecessary pain.

  4. ya know what would be great? If arduino didn’t have 97 dead platforms preinstalled with an IDE that the creators executed and buried a decade ago. I mean it used to be simple stand alone package, but now it wants to install 100 different USB drivers, and intertwine itself throughout the entire OS.

    So now we get a “pro” version, half decade after most the world stopped caring and its big features is autocomplete and git, omg, someone fuckin shoot me.

    1. It would be great. unfortunately if we remove some of them people complain. With auto detection you won’t need to manually select the board very often. Having said this.. This is an alpha version with a fraction of the features we are implementing. There is a whole UX review going on. I don’t know which “half of the world” you’re talkng about considering that every one of our platforms have a steady increase in number of users…

      1. Well, thanks to the “convenience”, the whole thing is starting to resemble a DLL hell. For example, some of the pre-installed libraries conflicted with some of the libraries for the MKR boards, which caused the macro LITTLE_ENDIAN to be defined twice, where the second time it was defined using another macro.

        Hours and hours were wasted before someone noticed that there’s a single compiler warning that appears on the first time you compile the code, if you scroll the text all the way up, but not on subsequent attempts. The project ended before we managed to discover this fault, which had the effect of a) making the board hang up if a special debug mode wasn’t used, b) make the board hang up randomly if the special debug mode IS used, but with a delay of about 30-60 hours.

        1. The Pro IDE does not install any library by default. If you found it, can you please open an issue? I am not able to reproduce it. Maybe you are referring to the standard Arduino IDE.

  5. Oh hey, did not notice you kids over there. Me? I will continue to use my various Scons scripts for whatever builds. And if it was not for the good stuff by PJRC, would have never considered anything to do with ardy stuff.

  6. Here’s my biggest question which the post doesn’t seem to address: can a project span more than one file yet?

    It’s good to separate ‘library’ code from ‘application’ code, but I cannot use an “IDE” which restricts me to a single .ino file for all of my application code. It’s madness to keep things organized.

      1. Huh, neat. I guess I never looked back after trying…well honestly, anything else, even vim+make was easier and more reliable. And for modern educational solutions, these days you have Circuit/MicroPython, NodeRed, Scratch, MakeCode…

        But I guess there’s still room for a “how to embedded C IDE”. Hopefully they can continue to help more people get started with the basics of embedded development, it is an exciting field.

    1. .ino is the initial file where setup and loop should be found.
      Additional files should use .c (or .cpp or .h etc)
      If all the files are in the same directory they are automatically included, but in sub-dirs will need an #include

      In this case two .ino extensions is akin to asking for two setup()’s or two main()’s

  7. Just one last question: when will the Arduino-Club (including PJRC for Teensyduino) finally do and maintain a plain regular .deb repo?
    Last I tried ca. 1 year ago, I could not get an up-to-date ArduinoIDE with bogstandard “apt update; apt install arduino”.

    1. I can’t speak for Arduino, but I can say that PJRC will probably *never* do this. Linux already consumes a large amount of dev time which is quite disproportionate to its small user base. We currently build 6 copies of the software for each release, where 4 of them are for Linux. The absolute last thing I want to do is divert more engineering time away from work that benefits everyone, like USB stack optimizations, audio library features (especially now that we have 600 MHz M7 for DSP), improving libraries and writing new ones, serial monitor speedup & IDE contributions back to Arduino, etc.

      1. How does writing portable C code consume a large amount of dev time due to Linux? Or are you referring to building and packaging binaries for different Linux distributions being the time hog?

  8. 1). 2). and 3). are valid arguments “against” arduino, but there is a much bigger and more important issue.

    “arduino” throws away 30+ years of “good practices” and conventions and replaces it “Getting a led blinking in 5 minutes”.
    This makes it a very bad platform for “teaching embedded programming”.

    Why use the very weird and silly “startup() and “loop()” functions ??? though that is still easy to work around.
    A bigger problem when confronted with any “arduino” project are those silly port numbers. C macro’s have exisited from the beginning to give magic numbers a meaningfull name, and using macro’s would have made it a lot easier to port “arduino” projects to another uC.

    Also, wen newbies are studying C / C++ and dive deeper into the “arduino” frameworks they encounter a very odd mix of C and C++.

    Because of this and similar reasons I’ve decided long ago to (mostly) ignore “arduino” stuff.
    In the few exceptions where I thought that re-using an “arduino” library for a C++ project, because it supported some chip I wanted to use (such as HX711) I ended up re-implementing a new class from scratch and would have been better of if I had started by simply reading the datasheet and writing the lib from scratch.
    Lot’s of “libraries” for “arduino” seem to be of exceptionally low quality. Seems they are written by people with very little programming experience. Which is OK, of course, but it does not invite re-use of any of the “arduino” stuff.

    Another example is the Adafruit TFT library.
    The amount of trouble they’ve gone through in “portmagic.h” to try to get an 8-bit port to work on some of the “arduino”s” is astounding. I would have had more respect if they simply said:
    #if …
    #error “this board is not supported because the hardware does not fit well”.

    But now we’re sort of stuck with cheap TFT screens directly from Ali with an 8-bit bus divided over the “analog” and “digital” sections of the stupendous arduino pin layout. Yuck!

    1. Lemme see, while all your points are valid I guess
      1) you are not the target audience of Arduino, but millions of others are
      2) I would like to see you teach a ‘real’ embedded ide with debugger environment to *art students* with no programming experience, and have them show a blinking led in, e.g. Keil or Atmel
      Studio. In an hour.
      3) setup() and loop() might be silly, but are a hell of a lot easier to grasp than threads and semaphores.
      4) Real Programmers:


    2. ” “arduino” throws away 30+ years of “good practices” and conventions and replaces it “Getting a led blinking in 5 minutes”. ”
      Well said.

      What I hate even more about arduino, is the fact that nobody reads the damned datasheet of the MCU anymore. Initializing a UART port became a single line of code and 90% of the persons doing this, don’t know what parity and stop bits are.
      When i have to hire students and talk about their projects, they just explain where they copied the code from. Most of them don’t even know bit shifting or using masks, since reading a pin in arduino is that simple.
      People are going to complain and say that “it’s the future” and things need to be simple. Well in automotive safety systems, you can’t always afford using some functions that do stuff. You need to write your own drivers, or optimize some code.

      1. Does this sentiment, that one must understand parity & stop bits before using a UART, apply to more modern protocols like USB, SD cards/filesystems & 4-bit SDIO, Ethernet & TCP/IP, WiFi, or Bluetooth?

        The reality of these modern protocols is a level of complexity that requires a time frame of many months to years to craft good quality code. Whether you call that code a “driver” or “stack” or “middleware”, the reality is nearly all embedded developers today simply use already-developed code published by the chip vendor or 3rd parties.

        Developers use USB without understanding seldom-used features like isochronous transfers or very low-level details like bitstuffing which are handled automatically by the hardware. But somehow the expectation for UARTs is that everyone needs to know about parity checking that’s rarely used today and stop bits which the hardware handles automatically.

    3. with other words: its not for you. I personally HATE C++ because i cannot comprehend the way it works nor the benefits it should bring on a micro controller platform.

      see what I did there?

    1. You MS fanbois. Why not write proper english and instead of writing “don’t want no MS crap”, instead write “I really want MS crap”, it says the same thing without having to re-read your sentence to find out what you really mean.

      But on a serious note, if you want to become a good developer you really need to not restrict yourself to MS only. Saying you don’t want no MS stuff is really limiting your choices.

  9. Moderators – an entire thread about the Arduino’s “legacy” look and feel has been deleted.

    On it I had placed a (respectful) and on-topic comment noting it is difficult to update code that you’ve forked from the original author, referring to Wiring. This received a reply from Massimo, so the comments were not in any kind of jail.

    Is this purge the result of moderator action, Akismet failure, or abuse of the comment reporting system?

    For newer HaD readers, the backstory is here:

    1. It’ll be because of the version of WordPress HaD is using, they can’t isolate a single comment for deletion, it has to be the whole thread. It’s one of the annoying things, along with inability to edit comments.

      1. It’s only half that bad — only comments that reply to an offensive comment get killed along with the offender. If a comment thread forks and half of it goes to hell, only the bad bit gets pruned.

        (Or at least that’s the way it should be working…)

          1. No, but if a number of people report a comment, it goes back to moderation, taking it off the site until a human, maybe even me!, puts it back up again.

            If it was the parent of a comment of yours, that could have been it.

            Glad to know this is all resolved. You can reach us more effectively at next time you have any editorially relevant questions like this.

  10. PlatformIO is hell, they spin so much stuff that every third github issue on arduino libs or cores is specific to PlatformIO.
    I would LOVE for the Arduino CLI to replace PlatformIO or PlatformIO adopt the Arduino CLI which is the underlying env. for the IDE.

  11. I do a lot of sketches from multiple platforms. Apple mac, android, raspberry pi, and soon Fedora. The major problem I have is (invisible characters) that each platform uses. It is compounded when I upload the text from one platform to my website, then copy it to another platform to compile it. The ide needs a way to find invisible characters and fix them..

    The other major issue I have is uploading sketches from the pi to esp8266 and esp32. The pi does not like cp2102 or ch340g. I was only able to upload sketches to them going through the usb hub which had a uart made by Texas Instruments. The pi has no problem with FTDI uarts.

    It would be nice if the ide had a button that would open the right folders on the desktop where sketches and libraries go, and a automatic rename for filename with the wrong characters in them…

  12. A more sophisticated editor is the simplest problem to solve. It’s not “grown-up” until it has a debugger. Code of any significant complexity or size is laborious without one.

    Also on my wish-list would be ChromeOS support (probably just me!), but the use of Electron which enables ChromeOS-like support on regular OSes probably precludes that – it would perhaps require a dedicated ChromeOS version that does not use Electron. The Mbed IDE is an example of such an environment – although that too lacks a debugger.

  13. Paul, thanks for answering.
    Two of your “supported” Linux flavours seem to be Ubuntu and Raspbian, which both are based upon Debian and it’s apt/dpkg system. (I cannot speak for Arch, nor for Windows, with regard to theyr packaging and distribution systems)
    Now my experience with Teensyduino is that it does not leverage on the “native” apt/dpkg of Ubuntu and Raspbian: no wonder such a choice causes a lot of support effort for PJRC.

    I acknowledge that from Arduino side, as a base for Teensyduino, the very same lack applies. I haven’t tried in a while, so I apologise if I missed a formal/official Arduino dpkg-repo that appeared somewhere for easy use with apt (and synaptic for the GUI-inclined, of course).

  14. Interesting… missed this article though am wondering, after uninstalling most the above to maybe re-install more in the order read as effective for ESP32/8266 boards, if I can use Visual Studio 2003.NET or 2005 Pro easily with the Arduino, ESP32 and maybe some other boards like STEM boards. Reads like vbscripts will be the easiest route, though wondering what others suggest if have experience. The version of VS are what I invested in back in the day… so figured use one of those maybe with the serial port as we were using from ASP and other apps… so need to dig through my boxes of books to see what I still have regarding embedded system with and reading/writing with the latest protocols besides the serial port.

Leave a Reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

This site uses Akismet to reduce spam. Learn how your comment data is processed.