The Laxkit, a windowing toolkit.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


Released under the LGPL


The Laxkit is a C++ gui toolkit currently in the form of an Xlib wrapper. It has a number of user interfaces for manipulating various common two dimensional vector art objects like bezier curves with variable widths, gradients, and meshes.

The main driving force behind Laxkit development is as a windowing backend for the desktop publishing program Laidout (

The goal of the kit is to make the creation of art related programs easy, by providing basic, but adaptible and efficient interfaces that can be used as building blocks for more complex interfaces. Examples of efficiency would be having a lot of configurability in shortcuts, using combinations of key modifiers during mouse actions to change scroll speeds, and providing draggable visual elements to change drawable object properties instead of low level input boxes off to the side.

There is copius documentation of the source accessible through doxygen by running 'make docs'.

Another partially implemented goal of the Laxkit is to provide an interface kit supporting multi-pointer, multi-keyboard, and multi-touch surfaces.


To compile development git source, see the next section.

You will need the development files for:
Imlib2, harfbuzz, freetype2, fontconfig, cairo, x11, ssl, cups, and optionally sqlite3

On Debian systems, you can get them with this command:

apt-get install g++ pkg-config libpng12-dev libreadline-dev libx11-dev libxext-dev libxi-dev libxft-dev libcups2-dev libimlib2-dev libfontconfig-dev libfreetype6-dev libssl-dev xutils-dev libcairo2-dev libharfbuzz-dev libsqlite3-dev

On Fedora, it looks more like this:

sudo dnf install -y cairo-devel cups-devel fontconfig-devel ftgl-devel glibc-headers harfbuzz-devel imlib2-devel lcms-devel libpng-devel libX11-devel libXext-devel libXft-devel libXi-devel mesa-libGL-devel mesa-libGLU-devel openssl-devel readline-devel sqlite-devel xorg-x11-proto-devel zlib-devel GraphicsMagick-c++-devel libstdc++-devel freetype-devel imake

Now simply do:

make install

If you type ./configure --prefix=/your/own/install/path, then the laxkit will get installed in prefix/include, prefix/share/doc, prefix/lib, etc. What files were installed are put into the file install.log.

By default, make install will plop down everything in /usr/local/include and /usr/local/lib. The end result is two libraries:

liblaxkit.a          The laxkit core      
liblaxinterfaces.a   The laxkit interfaces


The development version of the Laxkit is currently kept on github. To access, you will need git installed, as well as all the extra packages listed above. Then do:

git clone laxkit-git

cd laxkit-git
make icons  ##<- this requires you have Inkscape installed
make docs   ##<- optional

By default, running the Laxkit directly from git code will pump out lots of debugging information to the terminal. To prevent this, do make hidegarbage before make.

If you make any changes to include statements in source files, you should run make depends which updates dependency checks when compiling.


If you are interested in translating, please look in lax/po/README, which gives a rough overview of how to go about that. The Laxkit uses gettext for translations.

Bug reports and reviews are welcome! You can post to Laxkit's github issue tracker:


The Laxkit source code contains a lot of doxygen style documentation. 'make install' will not generate or install this documentation. You must do that yourself with:

make docs

This uses doxygen to generate lots of docs in the docs/html directory. This assumes you have the dot tool, a part of Graphviz, which generates collaboration diagrams of the classes, which can be very handy. Also, there are some writeups in the documentation, particularly math related to bezier curves and patches, that need latex installed in order to be generated correctly. On Debian systems, as of Feb. 2010, you'll need the texlive-latex-base package.


Tom Lechner,