Clutter is a discontinued GObject-based graphics library for creating hardware-accelerated user interfaces. Clutter is an OpenGL-based 'interactive canvas' library and does not contain any graphical control elements. It relies upon OpenGL (1.4+) or OpenGL ES (1.1 or 2.0) for rendering,. It also supports media playback using GStreamer and 2D graphics rendering using Cairo.

Clutter was authored by OpenedHand Ltd, now part of Intel. Clutter is free and open-source software, subject to the requirements of the GNU Lesser General Public License (LGPL), version 2.1.

Clutter (software)

In February 2022, the development team announced that the project would be discontinued. No more versions will be released and developers using Clutter are encouraged to port their applications to GTK 4 and libadwaita.

Clutter (software)

Adoption

Popular programs that adopt Clutter are GNOME Videos (a.k.a. Totem), GNOME Shell, Pitivi, Cinnamon Desktop and GNOME Ease.

Clutter (software)

Mx is a widget toolkit based on Clutter originally designed for the graphical shell of Moblin/MeeGo netbook, but evolved into an independent project.

The widget toolkits Netbook Toolkit () and Mx are based on Clutter. Often Clutter is seen analogous to GTK but this is inaccurate. Only Clutter together with Mx or Nbtk can match the extent of the GTK. This is also the reason why Clutter is required to be used along with GTK.

Clutter supports multi-touch gestures.

Clayland is a Wayland compositor utilizing Clutter. Snappy is a lightweight media player based on Clutter and GStreamer. Pinpoint is a simple light-weight presentation program. GNOME Maps uses ClutterActor Proof of concept casual video games PillPopper (a Pac-Man clone) and HappyWombats (an Angry Birds clone) use Clutter.

GTK Scene Graph Kit (GSK) was initially released as part of GTK+ 3.90 in March 2017 and is meant for GTK-based applications that wish to replace Clutter for their UI.

Software architecture

Clutter is a scene graph-based canvas working in retained mode. Every object on the scene is usually a 2D surface inside a 3D space.

Clutter abstracts the native windowing environment behind a backend, which is also responsible for creating the main container for the scene graph; this top level container is called the stage. Items on the stage are called actors.

Instead of operating on matrices, as does OpenGL, the Clutter developer changes properties of each actor. Clutter will then notice the changes, and render the scene accordingly.

Clutter is currently being developed by OpenedHand to provide visually rich graphical user interfaces on desktop and embedded hardware. The main target are media center-like applications, small devices UIs and base drawing API for GL- and GL/ES-based UI toolkits. Clutter uses Pango for text rendering (with a special GL/GLES renderer) and GdkPixbuf for loading images into GL textures. Interaction with other GNOME platform libraries is done through multiple integration libraries, e.g.: clutter-gst (GStreamer), clutter-gtk (for embedding the stage into a GTK application), clutter-cairo (for using cairo to draw into a texture). It's API and ABI are kept stable within micro releases, but can break API during minor releases—until it reaches 1.0, then it will be API and ABI stable until the following major release.

ClutterActor

ClutterActor is the basic element of Clutter's scene graph, it encapsulates the position, size, and transformations of a node in the graph. A ClutterActor can receive and handle input device events, for instance pointer events and key events. Animation is a core concept of modern user interfaces; Clutter provides a complete and powerful animation framework that automatically tweens the actor's state without requiring direct, frame by frame manipulation from your application code.

Supported platforms

Clutter is developed for the X Window System using GLX as well as Wayland using EGL. Clutter can also use the framebuffer. As of release 0.6, native support for Mac OS X has been added. A native Microsoft Windows backend is supported since the 0.8 release and Windows pre-compiled DLLs are available, however, it is possible to build the latest DLL for Windows with MinGW and Bash shell for Windows.

Since version 1.19.4 from June 2014, Clutter's evdev input backend depends on libinput 0.4.0.

Programming language bindings

Clutter is implemented using the C programming language with a design based on the GObject object system. Bindings are available for these languages:

C++ ( Cluttermm) Perl (Perl-Clutter) Python (PyClutter) Haskell () JavaScript (Seed and GJS) C# (Clutter-sharp (aka Clutter#)) ? Ruby () ? Vala (Clutter)