LUDASH / ARCHITECTURE

A place for every feature.

LunaDash keeps its Wayland compositor, desktop services and shell in clear source domains, with build checks that protect those boundaries.

How the desktop fits together

The C++20 compositor uses wlroots for Wayland protocols, input and scene output. Quickshell runs the QML shell in a separate process. Native tools use Qt Widgets, and the file chooser portal exposes a D-Bus service. The compositor does not use Qt Wayland Compositor or implement an X11 window manager.

XWayland remains an authenticated compatibility container that starts on demand. The refactor preserves the existing window animations, wlroots version compatibility, configuration paths and command-line executable names.

Find the feature you want to change

Under src/Responsibility
compositor/Wayland windows, input, outputs, session, tiling, animation and rendering.
config/Preferences, translations, process helpers and plugin metadata.
core/Small lifecycle contracts, listener helpers and compile definitions.
ctl/The local control client.
desktop/Applications and the data/actions used by the shell.
service/Standalone services, including the file chooser portal.
shell/QML module configuration, runtime support and the media helper.

Directories use lowercase names. Adjacent C++ interfaces and implementations use PascalCase .hpp and .cpp files in the LunaDash namespace. Each executable has a small Main.cpp; its startup logic belongs to its application module. C functions retain the ludash_ prefix.

The root nix/ directory owns Nix packaging, NixOS module options and installed runtime checks. flake.nix and flake.lock stay at the repository root. Arch packaging remains under packaging/arch/.

Rendering has an explicit owner

compositor/renderer/ contains rendering orchestration. Raw OpenGL implementation, resource owners and built-in GLSL live together under renderer/opengl/. CMake embeds the shaders into the binary, so installed applications never need the source checkout or a particular working directory.

The active compositor uses the wlroots scene renderer. The retained Qt OpenGL element library is compiled and tested separately; its blur and procedural wallpaper passes are not currently connected to that scene. Image wallpaper and shell transitions are supplied by Quickshell.

Add a feature without spreading its details

  1. Choose the owning domain and define its public interface.
  2. Make lifetime ownership explicit; use the existing module, feature and listener contracts where they help.
  3. List sources in the owning CMake target and keep implementation resources with their module.
  4. Update tests, the technical documentation and the matching website guide.

Core code cannot include higher-level domains. Desktop services cannot include compositor internals, and renderer code cannot include desktop UI. CI rejects invalid include directions, naming violations, unlisted source files and misplaced GL code.

ARCHITECTURE AND REGRESSION CHECKS
python3 scripts/check-source-layout.py
python3 tests/architecture/test_source_layout.py
cmake -S . -B build -G Ninja \
  -DLUDASH_BUILD_RENDERER_TESTS=ON
cmake --build build --parallel 2
ctest --test-dir build --output-on-failure

What passing checks establish

The workflows cover source structure, builds, file operations, embedded shader loading and cleanup, software OpenGL, wlroots protocol and window lifecycles, Qt clients, on-demand XWayland and this website. Dev CI selects affected shared suites; Main CI includes all suites and security analysis. The distribution matrix covers Arch, Debian, Fedora, openSUSE and Alpine; Nix checks build x86_64 and evaluate the aarch64 package. Always inspect the completed runs for the exact commit before claiming a platform passed.

LunaDash remains a development preview. Physical GPUs, display-manager login, multiple outputs, Chrome/Zed and full input-method behavior need session testing. Screen locking and a complete PipeWire screen-sharing portal are not implemented. Native plugins remain opt-in and execute without a sandbox.

Read the technical architecture and testing and source map for ownership details and the current validation commands.