Agar is a type of sugar polymer obtained from seaweed and red algae. Agar becomes gelatinous in water and is primarly used as a culture medium for microbiological work. Agar is also the name of an open source GUI toolkit, a set of software libraries for building graphical user interfaces.
Agar works with a wide variety of platforms and graphics systems, from modern desktops to classic consoles and embedded devices. Agar's low-level layers are modular, extensible and easily ported to new hardware platforms and graphics systems. Standard drivers include:
For graphics systems without window capabilities, a single-window mode is provided (in which case Agar provides an internal window manager).
A set of general-purpose widgets are included in the Agar distribution. Agar's class registration interface allows new widgets to be implemented externally (i.e., as part of an application or library). GUI elements are styled with Cascading Stylesheets.
Agar is thread-safe when built with threads support.
CORE implements Agar's Object System, a single-inheritance system that can be used from different languages (for example, it is possible to subclass an Agar class written in C with one written in Ada and vice-versa). Agar objects are serializable (and CORE provides serialization routines to help with that). A tree of Agar objects is referred to as a VFS or virtual filesystem. The CORE library is non-graphical and usable by command-line programs or daemons. It provides simple interfaces to operating system services such as filesystem access, dynamic library loading, network services, process execution, I/O multiplexing, timers and threads.
Agar is portable to different platforms including FreeBSD, IRIX, Linux, MacOS Classic, MacOS X, NetBSD, OpenBSD, Solaris and Windows. Agar has been used on ARM embedded devices. It has even been ported to game consoles such as the GP2x, the Nintendo Gamecube/Wii and the Xbox.