Iodine: a Better Java Language

Last week we Announced Elements 9.2, and one of the major new features in this release is Iodine, our new Java Language compiler front-end.

While a major focus is using the Java language on other platforms (a topic i'll cover in my next post), the goal with Iodine is also to provide a great/better Java development experience for existing Java developers who target the JVM or Android. So even if you could not care less about using Java on .NET, Cocoa or native platforms, we believe Iodine has a lot offer!

1. A Better Language

Iodine is a full superset of regular Java, but provides enhanced abilities that will make writing Java code easier and more productive. All your existing Java code should compile right away (just copy it over), and you can start making use of the enhancements, right away.

For the initial release, these include:

  • optional type inference with the var keyword
  • "out" and "by-reference" parameters
  • type extensions
  • partial classes
  • powerful aspects
  • accessing getters/setters using property syntax
  • global (class-less) methods and fields
  • Cocoa-style multi-part method names (aka named parameters)

and the list will continue expanding, with support for structs/records and easy property definitions, for example, coming in version 9.3. Read about all the language extensions here.

Iodine also does away with some silly limitations that plague Java developers, such as being limited to having one class per file (or, indeed, one file per class) or having to match the package/namespace structure of your code with folders on disk.

Of course Iodine will also keep in sync as the Java language as defined by Oracle itself evolves, for Java 9 and beyond.

2. A Better IDE Experience

Let's face it: Nobody loves working in Android Studio, Eclipse, or NetBeans – the IDEs are bloated, clunky and unintuitive.

Iodine comes with a range of great IDE options.

On Mac, we have Fire, our own IDE that's lightweight, simple and does not get in your way. Our customers that have been using Fire other languages absolutely love it.

On Windows, fully integrates with Visual Studio, Microsoft's flag-ship IDE. We also have Water, our own Windows IDE, coming out later this year (and usable as early Preview right now); Water is designed around the same principles that make Fire great, but also designed decidedly for Windows.

3. A Better Tool Chain

Iodine comes with a great build tool chain to take your project from source code to final executable – be it .jar or .apk. The core compile is fast, and has great error reporting, including auto-fix-its and recoverable errors for common trivial mistakes (such as wrong case or a missing semicolon. Gradle/Maven package resolution is build deeply into the IDEs and build chain, with no need to manually tweak .gradle script files. And coming in version 10 later this year, our new EBuild build chain will take things to the next level.

Another cool benefit is that, because Iodine is part of the four-language family of Elements, you can exult mix in code written in Swift, C# or Oxygene (on a file-by-file basis within the same project) and compile that into your Java or Android project, as well. That's great for re-using code snippets you find online in the "wrong" language.


Iodine is a great tool chain for developing Java and Android apps using the Java language – with a better compiler, faster IDEs and a more sophisticated over-all tool chain. If you are frustrated at all with your current Java IDE, or tool chain, check it out!

marc hoffman

Chief Architect and CEO here at RemObjects Software. Project Manager for Elements and lead developer of Fire, our awesome new development environment for the Mac.