Announcing Amino, a new UI toolkit for Desktop Java

A decade from now 90% of people will use phones, slates, or netbooks as their primary computing device. This is a very exciting development in the software world and promises to reshape the way we make software (check out the great stuff our lead developer is doing in his day job at Palm), but Amino isn't for that world. Amino about that 10%: the content creators who need killer desktop apps, the programmers who want great tools, and the knowledge workers who need to manage incredible amounts of information at lightning speed. Amino is the toolkit to build these apps.

Amino is a next generation graphics library and UI toolkit. Though originally built as support for Leonardo Sketch it is now it's own incubator project. Amino is an (extremely alpha) 100% open source Java library that provides:

  • a 2D/3D scenegraph with multiple backends (Java2D, JOGL, and more coming).
  • a set of UI controls, skinnable with CSS.
  • Utility classes to help you build desktop apps quickly.
  • is extremely testable.
  • 100% open source (BSD), redistributable, and embeddable.
  • 100% Java, ready for use by any JVM dynamic language (Groovy, JRuby, Jython, JavaScript, JavaFX Script, etc.)

The source is available here. The JavaDocs are available here.

You can read the getting started tutorial which shows you how to build a basic app. Amino will look very straight familiar to Swing developers, but with a few enhancements:

  • Uses an event bus instead of listeners on each component, enabling better separation of model and view
  • A background task API to handle threading for you.
  • Mixes a retained mode scenegraph with immediate mode paint APIs so you can work at the abstraction level you prefer.
  • There are no Look & Feel classes. All UI skinning is done directly with CSS 3, even the default L&F.
  • If you use the (experimental) JOGL backend you can directly mix 2D graphics with OpenGL code.
  • All controls can be referenced by ID, similar to JavaScript libs, enabling further separation of concerns.
  • Amino has a tool called AppBundler which generates Mac OSX .app bundles as well as JNLP builds. The user should never know that your app is written in Java, or any other language. They will just love your app.

How is Amino different than JavaFX and other UI toolkits?

Amino is not innovative. On the contrary, Amino takes the best ideas from the past 20 years of UI toolkits, throws out the stuff that hasn't worked well, and bundles the rest up in a nice clean package with no legacy issues.

Amino is inspired by JavaFX and Swing, among other toolkits. At JavaOne 2010 Oracle announced a new Java only direction for JavaFX 2.0, which makes JavaFX even closer to Amino. Though similar, there are some differences:

  • Amino is BSD licensed and community developed, allowing you to do things you can't do with the Oracle owned JavaFX, such as: subsetting, bundling with your application, embedding on a mobile platform, recompiling with GCJ or Kaffe, or forking it for your own uses.
  • Amino is focused expressly on desktop apps. JavaFX is focused web based and mobile applications, similar to Flex and Sliverlight.
  • Amino is significantly smaller than JavaFX. It aims to be fast, easy to learn, and very, very lean; at the expense of backwards compatibility and features.
  • Amino is embeddable in Swing panels, so you can add just a little bit of Amino to your existing apps.

How can I help?

Amino is extremely alpha. Though the ambition is high, the current release is slow, ugly, and buggy. So the first way you can help is by just checking out the website, downloading the library, and trying to build something. Then file bugs! Only by building things can we find out what's broken or missing. Next, if you are interested in helping to develop Amino itself, there are a bunch of areas open to work on:

  • Event Bus: needs a new implementation. The current one is slow, not scaleable, and probably has memory leaks. See the wiki for details.
  • Scene Graph: the current scenegraph is minimal, just enough to get the controls to work. We need the rest of the shapes (path, oval, arc, lines, etc.) and transforms (rotate, shear) built and tested. See the wiki for details.
  • Maven support: I don't use Maven but a lot of people do. It would be great to get Amino and it's dependent libs built into a Maven repo.
  • CSS parser: I'm currently using a new from scratch CSS 3 parser. It needs to be finished to support some missing properties, as well as refactored to be more maintainable.
  • Installers: the AppBundler currently supports JNLPs and Mac OSX .app bundles. We'd like it to support NSIS generated MSI bundles and Linux launch scripts, but we need developers from those platforms to work on them.
  • More Controls: we have a fair number of controls, but a lot is still missing like menus, task panels, search fields, charts and more.


Please try out Amino and give us feedback. It will really help us make Amino into the best UI toolkit for desktop apps.

Talk to me about it on Twitter

Posted October 9th, 2010