Documentation

Developer Guide

Everything you need to build, extend, and contribute to PlexyDesk.

Quick Start

Get up and running in 5 minutes

1. Install dependencies

# Debian/Ubuntu
sudo apt install libwayland-dev libdrm-dev libinput-dev libseat-dev \
                 libgbm-dev libegl-dev libglew-dev libfreetype-dev build-essential

# Arch Linux
sudo pacman -S wayland libdrm libinput seatd gbm glew freetype2 base-devel

2. Clone and build

git clone https://github.com/plexydesk/plexydesk.git
cd plexydesk
make -j$(nproc)

3. Run

./plexyshell

Need help? Check the issue tracker or join our discussions.

Build Instructions

System Requirements

Minimum

  • • Linux kernel 5.10+
  • • Mesa 21.0+ for OpenGL ES
  • • GCC 9+ or Clang 10+
  • • 2GB RAM

Recommended

  • • Linux kernel 6.0+
  • • AMD/Intel GPU with DMA-BUF
  • • 4+ CPU cores for physics
  • • SSD for fast builds

Configuration

Edit plexyshell.conf to customize your setup:

# Display settings
resolution=1920x1080
refresh_rate=60

# Physics parameters
physics_enabled=true
spring_constant=0.5
damping=0.15

# Visual effects
glass_alpha=0.85
shadows=true
cylindrical_mode=false

Full configuration reference is available in plexyshell.conf.example.

Architecture Overview

PlexyDesk is a bare-metal compositor that runs directly on DRM/KMS, bypassing the need for X11 or Wayland intermediaries.

Display Layer

  • DRM/KMS — Display control and mode setting
  • GBM — GPU buffer allocation
  • EGL/OpenGL ES — Hardware rendering
  • libseat — Session management

Input Handling

  • libinput — Keyboard and pointer events
  • Multi-seat — Device enumeration
  • Hotplug — Dynamic device management

Physics Engine

  • 12×12 mesh — Per-window cloth simulation
  • Spring physics — Natural oscillation
  • Multi-threaded — No global bottleneck

Wayland Bridge

  • Protocol adapter — wl_compositor, xdg_shell
  • DMA-BUF — Zero-copy buffer sharing
  • App support — GTK, Qt, Firefox

Component Diagram

┌─────────────────────────────────────────────────────────────────┐
│                         Applications                            │
│  ┌───────────┐  ┌───────────┐  ┌───────────┐  ┌───────────┐    │
│  │ Native C  │  │   GTK4    │  │    Qt6    │  │  Firefox  │    │
│  └─────┬─────┘  └─────┬─────┘  └─────┬─────┘  └─────┬─────┘    │
│        │              │              │              │           │
│        ▼              ▼              ▼              ▼           │
│  ┌───────────────────────────────────────────────────────────┐  │
│  │                     Plexy Protocol                        │  │
│  │            Unix Socket: /tmp/plexy.sock                   │  │
│  └─────────────────────────┬─────────────────────────────────┘  │
└────────────────────────────│────────────────────────────────────┘
                             │
                             ▼
┌─────────────────────────────────────────────────────────────────┐
│                      PlexyDesk Compositor                       │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────────────────┐  │
│  │   Server    │  │   Physics   │  │       Renderer          │  │
│  │  Protocol   │◄─│   Engine    │─▶│  OpenGL ES / Shaders    │  │
│  │  Handler    │  │  Per-Window │  │  Cloth Mesh Rendering   │  │
│  └──────┬──────┘  └─────────────┘  └───────────┬─────────────┘  │
│         │                                       │               │
│         ▼                                       ▼               │
│  ┌─────────────┐                        ┌─────────────┐         │
│  │   libinput  │                        │  DRM/KMS    │         │
│  │   Keyboard  │                        │  Display    │         │
│  │   Pointer   │                        │  Output     │         │
│  └─────────────┘                        └─────────────┘         │
└─────────────────────────────────────────────────────────────────┘

For API details, see the API Reference and Protocol Specification.

Contributing

We welcome contributions of all kinds. Here's how to get started:

Code Contributions

  1. 1. Fork the repository on GitHub
  2. 2. Create a feature branch from main
  3. 3. Make your changes and test thoroughly
  4. 4. Submit a pull request with a clear description

Bug Reports

Found a bug? Open an issue with:

  • • Your Linux distribution and kernel version
  • • GPU model and driver version
  • • Steps to reproduce the issue
  • • Expected vs actual behavior

Documentation

Help improve this documentation by submitting corrections or additions. Documentation source is in the website/ directory.

Related Documentation

Menu