Architecture

Architecture

PlexyDesk combines a compositor, desktop shell, client libraries, and a custom display protocol into one system.

High-level model

Layer Role
Client application Creates windows and widgets through PlexyDesk APIs
libplexyui High-level C API for widgets, layout, events, and styling
libplexycanvas Local rendering of widgets, text, layout, and GPU effects
libplexy Protocol and DMA-BUF frame handoff support
Unix socket protocol Communication path between clients and compositor
plexyshell Compositor and desktop shell runtime
Backend stack DRM/KMS, input handling, OpenGL, and compatibility bridge code

Render flow

  1. A client creates UI using functions from plexy_ui.h.
  2. The client renders its widget tree locally using libplexycanvas.
  3. The rendered frame is handed to the compositor using the PlexyDesk protocol and DMA-BUF-backed buffers.
  4. The compositor composites all visible client surfaces, applies shell chrome and effects, and renders desktop elements such as the dock and menubar.

Design direction

PlexyDesk is not presented as a generic Wayland replacement. The codebase is built around a GPU-first rendering path and a project-specific display protocol, while also carrying active bridge work around Wayland and X11 interoperability.

Important runtime pieces

  • src/shells/gnu_liquid/main.cpp is the active compositor runtime entry point described in the Makefile
  • src/renderer/ contains compositor rendering, background, dock, menubar, shader, and async rendering code
  • src/backend/ contains DRM and display backend support
  • src/input/ contains libinput integration and focus policy code
  • src/server/ contains socket server code for the compositor side of the protocol
  • src/wayland/ contains bridge and interoperability work including XWM-related files
  • src/core/ contains shell runtime, event loop, dock manager, and display layout state

Public API surface

The public API is exposed through headers in include/plexy/. In particular, plexy_ui.h documents:

  • application lifecycle
  • window creation
  • widget creation
  • flexbox-like layout controls
  • styling helpers
  • event callbacks
  • desktop menubar integration

Repository structure

Path Notes
src/ Main compositor, runtime, renderer, input, backend, and bridge code
lib/ Shared client-side support libraries
include/plexy/ Public headers for application authors
examples/ Small standalone sample applications
apps/ Larger experiments such as terminal, browser, clock, and utilities
tasks/ Engineering notes and implementation logs

Development note

The Makefile notes that the old src/uikit/ code remains in the repository, but is no longer compiled into the compositor. The compositor now consumes the canvas library through the C API instead.