Skip to main content

Announcing Amino, a new UI toolkit for Desktop Java

Posted by joshy on October 9, 2010 at 2:19 PM PDT

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.

Related Topics >>


Announcing Amino, a new UI

Man, this is a lot of hypothetical work.

You'll be competing directly with JavaFX, the sanctioned solution from Oracle and moreover all the GPU aware code that effort is sure to come to create over time.

There's a lot that goes into a robust , fast, resource sparing UI toolkit . I am wondering what the value add is that will attract the required number of developers with the right specialization (hardware gurus etc.). I don't see it happening not because it's a totally unworthy project or you're not competent but because of the sheer amount of code and the magnitude of the ongoing commitment from presumably unpaid developers.

Best of luck in any case.

Announcing Amino, a new UI

Ohh Forgot t o mentions, I read about your slow EventBus implementation, maybe you could use this one: Regards, Aleix.

Announcing Amino, a new UI

That's nice josh !!!! It's great for me to learn from your source code, kudos ! I've downloaded, but is there a way to import the project to Netbeans and start hacking the code ? Another idea that would be great is that Node class can zoom its contents ala Firefox when you roll the mouse wheel with control key pressed. And another last one: it would be great to port Amino to mono / cairo, as I know there's no portable ui toolkit in mono in spite of it's legacy winforms... thanks for the code again Josh !! keep the good work !

Announcing Amino, a new UI

Hi joshy, I'm the creator of the Eclipse E4/ CSS Engine. I have seen your code about CSSParser and I suggest you to use SAC Parser to parse CSS. It's common API to parse CSS. It exist serveral implementation like Batik, Flute (E4 use Batik implementation). But it can manage only CSS2 and not CSS3. I hope that someone will develop a CSS3Parser (based on SAC Parser). Good luck for your project. Regards Angelo


I can build a maven project for this and XMLUtil. Uploading this to some public repository is another matter. Also is there a special mailing list just for Amino?

broken links

Whoops. I forgot to include the link to the dev list.  Fixed.