A Tabbed Tiling Wayland Compositor

Tabby started life as a X11 window manager and remained that way up through version 1.0. It has since been completely rewritten for wayland. Tabby is in active development. Feel free to watch the Roadmap file to see what goals are currently on my radar - the Roadmap file is a mostly free-form outline of my current brainstorming.


Tabby comes with a few utilities: tabby-cmd, tabby-bar, and tabby-bg.


You will use tabby-cmd at least behind the scenes as it is the shebang that executes your config file for tabby. You can also call tabby-cmd directly to send commands to tabby's IPC system. Most available commands can be seen in the example config script. A full man page will be on the way soon.


You will most like want to launch tabby-bar at startup from your config file. While tabby will run just fine without the bar, tabby was designed from the start to show tabs ... in a bar. You run tabby-bar with a single parameter of an ini-file configuring the bar. An example ini is provided, better documentation will come soon in a man page.

The bar can include optional left and right status regions along with the window title bars in the middle. All three regions are highly configurable both through scripts / programs you can run to provide input to each status region and through format strings that you can adjust to completely change the color and layout of any of the text in the statuses or title regions.


A wallpaper / background can optionally be set with tabby-bg. At present this file must be a png file, and will be scaled to fit the monitor while preserving the aspect ratio. No other options of image format or scaling are yet implemented. Other wallpaper / background setters should work with tabby provided they use the layer-shell protocol for creating a background surface.


Tabby supports custom tiling layouts which can be created my simply creating a new text file with the extension .algo in the config directory. This file is essentially is just a list of numbers specifying positions and coordinates for windows. Three layouts algorithms are provided with tabby. The tiling layout file format is described in a section below. Layouts can be toggled at run-time with tabby-cmd or via a key binding.

Within each tiling layout there can be several modes. The active mode number defines the maximum number of client windows that will be tiled. If there are more than this number of client windows, the remainder will be stacked in the last position (and can be cycled through with focusrel/focusto commands). If there are fewer clients than the mode is designed for, tabby will fall back to a smaller mode number within the same layout.

In otherwords, if you define 5 modes and at runtime select mode 1, then only one surface (i.e., window) will be visible regardless of how many client surfaces are mapped. If you switch to mode 3, then up to three client surfaces will be visible; if only one is mapped, then it will be tiled as in mode 1 until another is mapped at which point they'll be tiled as in mode 2, and when another is mapped they'll be displayed as in mode 3, if yet another is mapped, only three surfaces will be tiled due to mode 3 being selected.

Tiling .algo File Format

There are two sections in the file labeled in the default as 'modes' and 'placements'. The content of these labels is ignored, but there must be a single non-numeric word or token at the start of each of the two sections.

The first section is a white-space-delineated list of integers. In order to define n modes, this list must contain a number of entries equal to the nth triangular number (i.e., n * (n + 1) / 2) of the number of modes. The values of these entries are indices into the placement list indicating where in monitor-relative coordinates each surface should be tiled.

The second list is made up of blocks of four floating point values which are monitor-relative (0.0 - 1.0 inclusive) coordinates for the x and y position and width and height of each surface placement.


Tabby can be built with the included makefile which accepts PREFIX and DESTDIR variables. A PKGBUILD is also provided for archlinux and related distros.


Manual pages are coming soon. For now please see the documented default config file.


Please feel free to report bugs to the tracker on the project homepage. If you are viewing this README online, you are looking at the project homepage, otherwise please see here.