The RIA framework comes with an integrated animation framework for dynamic content as well as graphics tools that facilitate designs such as transparency, rounded angles, and gradients. The RIA Suit comes with seven optional modules that expand on the ULC Core, similar to Swing APIs (JTable - ULC Table, JTree - ULC Tree). The Visual Editor lets you add complex functionalities like drag-and-drop without any manual programming. The ULC Load package provides load and performance testing, and the ULC Office module lets you import/export Excel and Word files. The ULC Web Integration module is used for integrating browsers, web services, and plugins that can be launched directly in the application. There are also modules for portlet integration and table creation.
ULC Core offers the full set of Swing UI development tools and can easily be extended to include other Swing-based component libraries. The entire state of the application is maintained on the server and the Presentation engine displays the UI while sending user interactions to the server. The client/server interaction and network traffic are optimized by smart event handling, lazy loading, and caching.
Canoo says their ULC core allows the creation of rich-yet-light web applications, and they show how their architecture fills in the gaps for Swing development:
There is only one drawback with conventional Swing-based clients: they do not fit into a web architecture that runs all services on the server side with the exception of the user interface. ULC resolves this issue by bridging the gap between Swing's user interface components and a web architecture, thus enabling you to leverage both the advantages of client-side Java and server-side application management.
ULC is a lean library with 50,000 lines of code that affects only the presentation layer of an application; for all other layers, the architecture is entirely open. The server-side model simplifies development, while built-in optimizations facilitate scalability and performance. A special development setup allows client/server applications to be run in stand-alone configurations, where both client and server are executing in the same Java Virtual Machine. This speeds up edit/compile/execute cycles, eases debugging and enables the simulation of various network conditions to mimic real-world runtime behavior.
Pricing models are detailed here.