Janus provides an interface to pass UI descriptions encoded in a tree structure, to change widget attributes at runtime, and to call widget methods. Methods inside the application can be bound to UI events. The API is completely independent of the UI library used, so it also provides universal methods to initialize the underlying widget toolkit.

The actual rendering of the UI is done by so-called "bindings", which are dynamically loaded libraries. Currently, complete bindings for libuta and very basic bindings for gtk are shipped with Janus. The decision what widget toolkit is used is decided at linktime or even at runtime! If you want to change the toolkit you only need to link against the appropriate binding, no code changes are necessary.

Janus releases are available from

For the latest code, fetch the forge/libs/janus module from cvs.worldforge.org.