Loom is an annotation-based web framework with a lot of exciting features included in its 1.0RC1 release. This is the first version that reached the stability and performance objectives set two years ago, which makes it our first 1.0 release candidate.
If you are interested in a 10-second test, look at
the demo (try to introduce invalid data); 1 minute introduction, check out
the underlying architecture; and if you have 10 minutes to spare, you may read the
getting started chapter on the reference guide.
Be warned, the demo does not look like Java at all.
We are leaving some busy months behind. It's impossible to include the full list of features included in this release, but being brief:
* It generates HTML 5 compliant pages.
* Lots of CSS classes are automatically calculated, such as the property type, unauthorized links and required fields. The same with maxlength and size attributes.
* A really small javascript footprint based on prototype. Its use is entirely optional.
* The same validations are executed at the browser and the server side.
* Support of Collection, Arrays, Maps, Set properties. The framework is frequently getting abused these days.
* Automatically detects the JavaRebel runtime agent for hot-redeploying Actions without a server restart.
* Everything works even with javascript turned off - this has been tricky at some places!
* Includes a libraries repository to keep script versions organized.
* The demo application gets a nice YSlow score without any special considerations.
If you are familiar with the Grails web API, Loom has developed a similar structure by accident. A partner called that CommonSense Driven Design, and the name sticked.
Loom is already being used in production by several of our customers, including a swiss bank. This Release Candidate gets us one step ahead, opening the way to other exciting features in the roadmap: integration with Spring Web Flow, additional javascript controls, and extension-less URLs as the most immediate.
We would be grateful for any feedback about this release: what to remove, what you find missing, and why.