The Common Lisp Interface Manager (CLIM) is a powerful Lisp-based toolkit that provides a layered set of portable facilities for constructing user interfaces. These include application building facilities; basic windowing, input, output, and graphics services; stream-oriented input and output augmented by facilities such as output recording, presentations, and context sensitive input; high-level "formatted output" facilities; command processing; and a compositional toolkit similar to those found in the X world that supports look-and-feel independence.
CLIM does not compete with the window system or toolkits of the host machine (such as Motif or OpenLook), but rather uses their services, to the extent that it makes sense, to integrate Lisp applications into the host's window environment. For example, CLIM "windows" are mapped onto one or more host windows, and input and output operations performed on the CLIM window are ultimately carried out by the host window system.
The CLIM programmer is insulated from most of the complexities of portability. Regardless of the operating platform (that is, the combination of Lisp system, host computer, and host window environment), applications only need deal with CLIM objects and functions. CLIM makes abstractions out of many of the concepts common to all window environments. The programmer is encouraged to think in terms of these abstractions, rather than in the specific capabilities of a particular host system. For example, using CLIM, the programmer can specify the appearance of output in high-level terms and those high-level descriptions are then turned into the appropriate appearance for the given host. Thus, the application has the same fundamental interface across multiple environments, although the details will differ from system to system.
CLIM provides a spectrum of user interface building options, all the way from detailed, low-level specification of "what goes where," to high-level specifications in which the programmer leaves all of the details up to CLIM. This allows CLIM to balance ease of use on the one hand and versatility on the other. By using high-level facilities, a programmer can build portable user interfaces quickly, whereas by utilizing lower-level facilities, she can customize her programming and user interfaces according to her specific needs or requirements. For example, CLIM supports the development of applications that are independent of look and feel, as well as the portable development of toolkit libraries that define and implement a particular look and feel.
The CLIM architecture is divided into several layers, each with an explicitly-defined protocol. These protocols allow the programmer to customize or re-implement various parts of CLIM.