I'm digging into the Arduino IDE codebase now. It's not too complicated but it really seems like a mess. Basic compilation is done in a fairly convoluted way. There are a whole lot of references to compiling Java code. Is there a reason for this? I'm guessing there is a lot of history in this codebase, so I'm weighing fixing it vs replacing it. So far I have built a straightforward class that can successfully compile a sketch to a hex file. Adding support for alternate cores, multiple libs, and the other stuff should be fairly easy.

On the GUI, I've done some more prototyping. I'm trying to decide between using Swing or JavaFX. JavaFX is the future of desktop Java and a lot prettier. Unfortunately it doesn't have a robust text editor, so doing things like Syntax Highlighting won't be possible for a while. If I go with Swing then I can put something together very fast that will look decent, but it won't have access to the new JavaFX features. In particular, it won't have access to the nice WebView. I was really hoping to use the WebView for inline help / docs. Thoughts? Does anyone care what it's written in?

There are a whole lot of references to compiling Java code. Is there a reason for this?

This is because the Arduino IDE is based on "Processing" ( http://Processing.org ), a "simplified" programming system for the desktop. Processing has similar principles, but creates "mostly java" code, where Arduino (or "Wiring") generates mostly C++ code. The pieces of the IDE that would have compiled and run the Java "sketches" of Processing are replaced with pieces that preprocess, compile, and upload, the avr-gcc code of Arduino.

PS: a questioned "to be answered" is whether modifications to the Arduino IDE will be accepted at all, or whether it's more efficient to stay in sync with the Processing project...