- Rust 91.3%
- Python 8.4%
- Makefile 0.3%
IonWL
A Wayland compositor inspired by Ion3, built on Smithay.
See the documentation for a full overview, including the Python API reference.
Why IonWL?
Most tiling compositors on Wayland use automatic layouts that rearrange windows when you open or close them. Ion3 took a different approach: you manually split the screen into frames, and windows open inside those frames as tabs. This gives you full control over your layout - it stays exactly how you set it up.
At the time of writing, nothing on Wayland offers this model. IonWL brings it to Wayland with a Python scripting API for configuration and key-bindings.
Features
- Manual tiling: Split the screen into frames and manage windows as tabs. Layouts stay fixed - opening or closing windows doesn't rearrange anything.
- Floating windows: Full floating layer with z-ordering.
- Scratch workspaces: Workspaces can float as overlays, acting as toggle-able scratch-pads.
- Shared desktops: All outputs belong to one desktop. Switching desktops switches all outputs at once.
- Python API: Key-bindings and configuration written in Python, with direct access to windows, frames, workspaces, and outputs. The Python API may also be invoked from external commands to run custom scripts.
- Flexible key-bindings: Separate bindings for press, release, and click for both mouse and keyboard. Modifier keys can be bound as tap actions. Key-bindings can optionally consume events and/or pass them through to the client.
- IPC: Unix socket interface with
ionwl-cmdfor scripting and external tools.
See the supported features documentation for a comprehensive list.
Requirements
- Rust 1.94+.
- Python 3.
- libseat, libinput & udev.
- GPU with DRM/KMS support.
- Sphinx (for building Python API docs).
Building
cargo build --releaseTo disable XWayland support:
cargo build --release --no-default-featuresInstallation
- Arch Linux
-
Install ionwl-git from the AUR.
- From Source
-
Build and install with
make:make make install PREFIX=/opt/ionwl mkdir -p ~/.config/ionwl cp config/default/ion_init.py ~/.config/ionwl/
Usage
See the documentation for more details as well as the Python API.
Running
# From a TTY (not inside another compositor).
./target/release/ionwlCustomizing
- See the configuration documentation.
Attribution
- Tuomo Valkonen Original author of the Ion3 (window-manager)
- Pinnacle (protocol implementations, backend initialization, cursor management, input handling, XWayland integration).
- Niri (window creation logic, DMABUF allocation, foreign toplevel protocol).
- Cosmic (layer shell deferred mapping, window mapping gate, interactive resize, output management).
- Note
-
This was written with the assistance of an LLM, in some cases using existing open-source code as a reference, full credit goes to those projects on which this is based.
License
GPL 3 or later, See LICENSE file for details.