Phosphor is a suite of focused Qt6 / Wayland libraries for building window-management tools. Each library owns a single responsibility; the suite is designed to be consumed à la carte, so you pull in only what you need.
The suite currently ships with PlasmaZones, the reference consumer, and the headers live under libs/phosphor-*/include/ in that repository. These docs are generated from those public headers, with each library's hand-written design notes coming from its README.md.
The suite is organized into five categories — click a library name for its design + examples page, or a namespace for the auto-generated API surface.
Foundations Layout Engines Rendering Surfaces Shell
Low-level shared infrastructure every other layer builds on.
| Library | Namespace | Responsibility |
|---|---|---|
| `phosphor-identity` | PhosphorIdentity | Stable cross-process identity formats (WindowId, ScreenId, VirtualScreenId) |
| `phosphor-geometry` | PhosphorGeometry | Pure-function geometry helpers shared by both engines |
| `phosphor-dbus` | PhosphorDBus | Generic, service-agnostic D-Bus client utilities |
| `phosphor-protocol` | PhosphorProtocol | Shared D-Bus service names, wire types, helpers |
| `phosphor-config` | PhosphorConfig | Pluggable configuration backends with schema + migration |
| `phosphor-fsloader` | PhosphorFsLoader | Watched-directory + metadata-pack loader skeleton |
| `phosphor-shortcuts` | Phosphor::Shortcuts | Pluggable global-shortcut backends |
| `phosphor-workspaces` | PhosphorWorkspaces | Virtual desktop and activity tracking |
Zone and tile data models — the what of placement.
| Library | Namespace | Responsibility |
|---|---|---|
| `phosphor-layout-api` | PhosphorLayout | Layout description interfaces + provider registry |
| `phosphor-zones` | PhosphorZones | Manual zone data model, registry, and ILayoutSource |
| `phosphor-tiles` | PhosphorTiles | Tiling algorithms, sandboxed JS, and TilingState |
Placement runtime — the how of placement.
| Library | Namespace | Responsibility |
|---|---|---|
| `phosphor-engine` | PhosphorEngine | Unified placement-engine surface + shared service contracts |
| `phosphor-snap-engine` | PhosphorSnapEngine | Manual zone-based placement engine |
| `phosphor-tile-engine` | PhosphorTileEngine | Automatic-tiling placement engine |
| `phosphor-placement` | PhosphorPlacement | Window tracking, auto-snap, resnap, rotation, empty-zone queries |
Shader and animation pipeline.
| Library | Namespace | Responsibility |
|---|---|---|
| `phosphor-shaders` | PhosphorShaders | Shader-effect registry, base UBO layout, uniform extension contract |
| `phosphor-rendering` | PhosphorRendering | ShaderEffect / ShaderNodeRhi / runtime GLSL → SPIR-V |
| `phosphor-animation` | PhosphorAnimation | Motion runtime + shader-transition runtime with JSON profiles |
| `phosphor-audio` | PhosphorAudio | Audio spectrum input for audio-reactive shaders |
Wayland integration, layer-shell primitives, and screen topology.
| Library | Namespace | Responsibility |
|---|---|---|
| `phosphor-wayland` | PhosphorWayland | Custom QPA plugin + LayerSurface wrapper |
| `phosphor-layer` | PhosphorLayer | Layer-shell surface primitives: factory, registry, coordinator |
| `phosphor-surfaces` | PhosphorSurfaces | Surface manager with QML loading and Vulkan wiring |
| `phosphor-screens` | Phosphor::Screens | Physical + virtual screen topology resolver |
| `phosphor-compositor` | PhosphorCompositor | Plugin SDK for hosting the daemon in non-KWin Wayland compositors |
Higher-level shell infrastructure on top of the surface stack — panel windows, named UI-pattern recipes, system-tray and platform services.
| Library | Namespace | Responsibility |
|---|---|---|
| `phosphor-shell` | PhosphorShell | Quickshell-style declarative QML framework for layer-shell shells |
| `phosphor-services` | PhosphorServices | D-Bus + platform integrations (system tray today; notifications, MPRIS, UPower next) |
| `phosphor-overlay` | PhosphorOverlay | Per-screen layer-shell shell hosts with named slot vocabulary |
| `phosphor-shell-patterns` | PhosphorShellPatterns | Named UI-pattern Role recipes (wallpaper, panel, modal, toast) |
Phosphor* library.libs/phosphor-*/include/ grouped by library directory.dbus/*.xml.All Phosphor libraries share a handful of cross-cutting conventions so anything you learn in one library transfers to the others:
libs/phosphor-identity/include/PhosphorIdentity/WindowId.h declares PhosphorIdentity::WindowId. The Phosphor prefix is elided when sorting the class index (you won't see a hundred classes starting with Phosphor...).include/, implementation in src/ — everything under libs/phosphor-*/include/ is the stable surface you can link against. src/ and any _p.h/internal/ headers are intentionally excluded from this reference.README.md is the source of truth for its responsibility, key types, examples, and design notes; the build pipeline (scripts/readme-to-doxypage.py) stitches them in here.Q_OBJECT, Q_PROPERTY with READ/WRITE/NOTIFY, parent-based ownership, signals in past tense (layoutChanged), slots in imperative (saveLayout). Macros are stripped by the preprocessor before Doxygen parses, so class declarations read cleanly in the generated HTML.I* interfaces with one or more concrete implementations. That makes it easy to drop in a different persistence layer or shortcut router without touching the consumers.All Phosphor libraries: LGPL-2.1-or-later. Consumers (including PlasmaZones) link against them under that license.