LUNADASH / ARCHITECTURE

A place for every feature.

How the compositor, the Slint shell and SlintLu fit together, and where each feature lives in the source.

How the desktop fits together

The C++20 compositor uses wlroots for Wayland protocols, input and scene rendering, with a C11 core for geometry and rendering helpers. It starts the shell as a separate Wayland client: SlintLu runs the LunaDash shell, written in Slint. The two talk only through Wayland and the compositor's control socket; the compositor links no UI toolkit.

XWayland starts on demand for X11 applications. Video wallpapers play in mpvpaper, which the compositor starts and keeps below the shell's wallpaper surface.

Component repositories

RepositoryContains
LunaDashThe compositor, desktop services, packaging and the pins of the other components.
LunaDash-ShellThe panel, dock, launcher, dashboard, settings, switchers and wallpaper library, written in Slint.
SlintLuRuns Slint shells as Wayland layer-shell windows and provides the desktop services.
LunaDash-docsThis website.

LunaDash's packaging/shell-revision and packaging/slintlu-revision pin the shell and SlintLu commits that packages, the installer and the NixOS module build together.

Find the feature you want to change

Under src/Responsibility
compositor/Wayland protocols, windows, input, outputs, session, tiling and scrolling layouts, animation, rendering and the control socket.
config/Desktop preferences, translations, session.json and plugin metadata.
core/Small contracts: JSON access, files, processes, listener helpers.
ctl/lunadashctl, the control client.
desktop/Applications, wallpapers (including the video player), themes, shortcuts and system tools used by the shell.
service/Standalone services, including the file chooser portal.

Directories use lowercase names. C++ interfaces and implementations sit side by side as PascalCase .hpp and .cpp files in the LunaDash namespace; C functions use the ludash_ prefix. Each executable has a small Main.cpp. Window layouts implement one interface (compositor/layout/WindowLayout.hpp): the tiling split tree, the scrolling columns and the free-form stacking layout.

nix/ holds the Nix packaging and NixOS module, packaging/arch/ the Arch package.

Add a feature without spreading its details

  1. Choose the owning domain and define its interface there.
  2. Shell behaviour belongs in LunaDash-Shell; a runtime capability the shell lacks belongs in SlintLu as a general feature.
  3. List new sources in the owning CMake target.
  4. Update the documentation and this website.

LunaDash is a development preview. Physical GPUs, multiple outputs and some input-method details need testing on real systems. Native plugins remain opt-in and run without a sandbox.

Read the technical architecture for ownership details.