Main Page: Difference between revisions

Set up PlexyDesk wiki landing page
Rewrite front page to focus on architecture and supported features
Line 2: Line 2:
= PlexyDesk =
= PlexyDesk =


'''PlexyDesk''' is a GPU-accelerated display server and desktop shell for Linux. It renders window chrome, the dock, the menubar, and client widgets with OpenGL, signed distance field rendering, blur, and glass-style materials. Client applications render locally with <code>libplexycanvas</code> and submit frames to the compositor using DMA-BUF-backed buffers.
'''PlexyDesk''' is a display server and desktop shell for Linux built around a modern, GPU-driven user interface. It is responsible for drawing the desktop itself, placing application windows on screen, rendering the dock and the menubar, handling animation and visual effects, and presenting a consistent UI toolkit for PlexyDesk applications.


{| class="wikitable"
{| class="wikitable"
Line 15: Line 15:
! Client stack
! Client stack
| <code>libplexy</code>, <code>libplexycanvas</code>, <code>libplexyui</code>
| <code>libplexy</code>, <code>libplexycanvas</code>, <code>libplexyui</code>
|-
! Build system
| GNU Make with C11 and C++20
|-
|-
! License
! License
Line 23: Line 20:
|}
|}


== What makes it interesting ==
== What PlexyDesk does ==
* GPU-first desktop shell with compositor effects built into the core runtime
PlexyDesk combines three responsibilities into one system:
* Custom display protocol optimized for local client rendering and DMA-BUF frame handoff
* it acts as the display server that decides what appears on screen
* macOS-inspired polish including blur, glass materials, dock magnification, and animated window effects
* it acts as the desktop shell that draws the dock, menubar, background, and window chrome
* Multi-monitor oriented architecture with a built-in shell instead of a separate panel-and-window-manager stack
* it provides application-facing libraries so apps can create native PlexyDesk windows and controls
 
In practical terms, PlexyDesk is the part of the desktop that gives applications a place to live, gives windows their shape and motion, and gives the overall environment its visual identity.


== Core features ==
== Architecture in plain language ==
* Glass materials with blur, refraction, and shader-based visual effects
PlexyDesk is organised around three main layers:
* Resolution-independent SDF rendering for chrome and widgets
* Built-in dock with hover magnification, launch animation, and running indicators
* Menubar integration with application title, menus, and clock
* PlexyUI widget toolkit with buttons, sliders, text input, sidebars, drawers, list views, and more
* Client isolation: applications render locally and submit frames to the compositor instead of drawing directly into the shell
* Native compositor work plus active bridge work around Wayland and X11 compatibility


== Quick start ==
{| class="wikitable"
<pre>
|-
# Install dependencies on Debian/Ubuntu
! Layer
./install-deps.sh
! What it is responsible for
|-
| Applications
| Programs create windows, text, buttons, panels, lists, drawers, and other interface elements
|-
| PlexyDesk client libraries
| The libraries help apps describe their UI, render it locally, and send finished frames to the display server
|-
| PlexyDesk compositor and shell
| The compositor places windows on screen, draws the desktop shell, applies visual effects, handles input routing, and presents the final image
|}


# Build the compositor
Instead of asking the shell to draw every application widget for them, PlexyDesk applications can render their own interface locally and then hand the finished frame to the compositor. The compositor then combines those application surfaces with system elements such as the dock, menubar, background, window chrome, and transitions. This keeps the shell visually consistent while still allowing applications to manage their own content.
make


# Run PlexyDesk
== Supported desktop features ==
./plexyshell
=== Window presentation and motion ===
</pre>
PlexyDesk provides its own window chrome and visual framing. Windows are not treated as plain rectangles with static borders; they are part of the shell experience. The compositor supports:
* animated window movement
* resize handling
* window shadows and depth styling
* rounded corners and smooth surface edges
* minimise and transition effects
* focus-aware rendering and presentation


For debug builds:
=== Dock and menubar ===
PlexyDesk includes built-in desktop shell components instead of leaving those responsibilities to separate tools. Supported shell features include:
* a dock with launch feedback and running indicators
* icon magnification behaviour as the pointer moves across the dock
* a menubar that can show application menus, titles, and status information
* a desktop-level clock and shell-facing window metadata


<pre>
=== Visual materials and effects ===
BUILD_MODE=debug make
The rendering system supports a polished visual layer throughout the shell and the UI toolkit. This includes:
</pre>
* glass-style surfaces
* blur-based materials
* shader-driven lighting and depth cues
* smooth rounded geometry
* scalable vector-style shape rendering for interface elements
* consistent text and surface styling across windows and widgets


== Documentation guide ==
These effects are part of the compositor and UI stack itself, so they can be used across the desktop rather than being isolated to one application.
* [[Getting Started]] - dependencies, build, run, systemd service, and package workflow
* [[Architecture]] - compositor model, client libraries, protocol flow, and repository layout
* [[Developer Guide]] - what to read first and where to work in the source tree
* [[Examples]] - minimal PlexyUI code plus example programs worth studying
* [[Development Status]] - current shape of the project and useful implementation notes


== Repository map ==
=== Application UI toolkit ===
PlexyDesk includes a UI layer for building applications that look and behave like part of the environment. Supported interface building blocks include:
* labels and buttons
* text input and text areas
* sliders, switches, checkboxes, and progress controls
* separators, panels, rows, and columns
* list views and icon views
* sidebars, toolbars, breadcrumbs, status bars, and drawers
* menu integration for desktop menubars
 
The toolkit also supports layout controls such as padding, spacing, alignment, flexible sizing, and batched updates for responsive interfaces.
 
=== Multi-display and layout awareness ===
PlexyDesk is built with display layout awareness in mind. The configuration and compositor layout model support:
* more than one monitor
* explicit placement of outputs in desktop space
* per-layout presets
* desktop-space positioning that keeps pointer movement and window placement coherent across screens
 
=== Backgrounds and appearance ===
The shell supports desktop appearance controls such as:
* theme selection
* UI scale factor control
* wallpaper backgrounds
* animated background modes
* compositor tuning for chrome, blur, and window presentation
* dock and terminal appearance settings through configuration
 
=== Stability through application isolation ===
PlexyDesk applications can render their own content locally and then submit frames to the compositor. In simple terms, that means the shell manages the desktop while applications manage their own drawing. This separation helps keep the shell in control of composition and reduces the amount of direct rendering work the shell has to do for every application surface.
 
== Internal building blocks ==
{| class="wikitable"
{| class="wikitable"
|-
|-
Line 83: Line 127:
| <code>apps/</code>
| <code>apps/</code>
| Application experiments such as terminal, browser, clock, calculator, and file manager
| Application experiments such as terminal, browser, clock, calculator, and file manager
|-
| <code>scripts/</code>
| Packaging, systemd, and development helpers
|-
| <code>docker/</code>
| Ubuntu container workflow for building <code>.deb</code> packages
|-
|-
| <code>tasks/</code>
| <code>tasks/</code>
Line 94: Line 132:
|}
|}


== Project status ==
== Explore the project ==
PlexyDesk is under active development. The rendering pipeline, compositor shell, dock, menubar, and widget toolkit are all present, but the project should still be treated as a developer-facing system rather than a finished general-purpose desktop environment.
* [[Architecture]] - a deeper technical explanation of how the compositor and client stack fit together
* [[Developer Guide]] - where the important source files and subsystems live
* [[Examples]] - small programs that show what PlexyDesk applications can look like
* [[Development Status]] - implementation notes and the current shape of the project


== Suggested next pages ==
== Current state ==
If you are starting from source, begin with [[Getting Started]]. If you want to understand the shape of the codebase before building, start with [[Architecture]] and [[Developer Guide]].
PlexyDesk already includes a functioning compositor shell, a built-in dock and menubar, a GPU-driven rendering path, and a native application UI toolkit. Work is ongoing across performance, compatibility, and broader desktop behaviour, but the front-page story of the project is already clear: PlexyDesk is a complete graphical shell with its own rendering model, desktop components, and application framework.

Revision as of 19:39, 21 March 2026

PlexyDesk

PlexyDesk is a display server and desktop shell for Linux built around a modern, GPU-driven user interface. It is responsible for drawing the desktop itself, placing application windows on screen, rendering the dock and the menubar, handling animation and visual effects, and presenting a consistent UI toolkit for PlexyDesk applications.

PlexyDesk at a glance
Focus GPU-accelerated compositor and desktop shell for Linux
Runtime plexyshell
Client stack libplexy, libplexycanvas, libplexyui
License AGPL-3.0-only

What PlexyDesk does

PlexyDesk combines three responsibilities into one system:

  • it acts as the display server that decides what appears on screen
  • it acts as the desktop shell that draws the dock, menubar, background, and window chrome
  • it provides application-facing libraries so apps can create native PlexyDesk windows and controls

In practical terms, PlexyDesk is the part of the desktop that gives applications a place to live, gives windows their shape and motion, and gives the overall environment its visual identity.

Architecture in plain language

PlexyDesk is organised around three main layers:

Layer What it is responsible for
Applications Programs create windows, text, buttons, panels, lists, drawers, and other interface elements
PlexyDesk client libraries The libraries help apps describe their UI, render it locally, and send finished frames to the display server
PlexyDesk compositor and shell The compositor places windows on screen, draws the desktop shell, applies visual effects, handles input routing, and presents the final image

Instead of asking the shell to draw every application widget for them, PlexyDesk applications can render their own interface locally and then hand the finished frame to the compositor. The compositor then combines those application surfaces with system elements such as the dock, menubar, background, window chrome, and transitions. This keeps the shell visually consistent while still allowing applications to manage their own content.

Supported desktop features

Window presentation and motion

PlexyDesk provides its own window chrome and visual framing. Windows are not treated as plain rectangles with static borders; they are part of the shell experience. The compositor supports:

  • animated window movement
  • resize handling
  • window shadows and depth styling
  • rounded corners and smooth surface edges
  • minimise and transition effects
  • focus-aware rendering and presentation

Dock and menubar

PlexyDesk includes built-in desktop shell components instead of leaving those responsibilities to separate tools. Supported shell features include:

  • a dock with launch feedback and running indicators
  • icon magnification behaviour as the pointer moves across the dock
  • a menubar that can show application menus, titles, and status information
  • a desktop-level clock and shell-facing window metadata

Visual materials and effects

The rendering system supports a polished visual layer throughout the shell and the UI toolkit. This includes:

  • glass-style surfaces
  • blur-based materials
  • shader-driven lighting and depth cues
  • smooth rounded geometry
  • scalable vector-style shape rendering for interface elements
  • consistent text and surface styling across windows and widgets

These effects are part of the compositor and UI stack itself, so they can be used across the desktop rather than being isolated to one application.

Application UI toolkit

PlexyDesk includes a UI layer for building applications that look and behave like part of the environment. Supported interface building blocks include:

  • labels and buttons
  • text input and text areas
  • sliders, switches, checkboxes, and progress controls
  • separators, panels, rows, and columns
  • list views and icon views
  • sidebars, toolbars, breadcrumbs, status bars, and drawers
  • menu integration for desktop menubars

The toolkit also supports layout controls such as padding, spacing, alignment, flexible sizing, and batched updates for responsive interfaces.

Multi-display and layout awareness

PlexyDesk is built with display layout awareness in mind. The configuration and compositor layout model support:

  • more than one monitor
  • explicit placement of outputs in desktop space
  • per-layout presets
  • desktop-space positioning that keeps pointer movement and window placement coherent across screens

Backgrounds and appearance

The shell supports desktop appearance controls such as:

  • theme selection
  • UI scale factor control
  • wallpaper backgrounds
  • animated background modes
  • compositor tuning for chrome, blur, and window presentation
  • dock and terminal appearance settings through configuration

Stability through application isolation

PlexyDesk applications can render their own content locally and then submit frames to the compositor. In simple terms, that means the shell manages the desktop while applications manage their own drawing. This separation helps keep the shell in control of composition and reduces the amount of direct rendering work the shell has to do for every application surface.

Internal building blocks

Area Purpose
src/ Compositor, backend, renderer, input, protocol, and shell code
lib/ Client-side support libraries and event loop code
include/plexy/ Public API headers such as plexy_ui.h
examples/ Small client and UI examples
apps/ Application experiments such as terminal, browser, clock, calculator, and file manager
tasks/ Engineering notes, implementation summaries, and optimization work

Explore the project

  • Architecture - a deeper technical explanation of how the compositor and client stack fit together
  • Developer Guide - where the important source files and subsystems live
  • Examples - small programs that show what PlexyDesk applications can look like
  • Development Status - implementation notes and the current shape of the project

Current state

PlexyDesk already includes a functioning compositor shell, a built-in dock and menubar, a GPU-driven rendering path, and a native application UI toolkit. Work is ongoing across performance, compatibility, and broader desktop behaviour, but the front-page story of the project is already clear: PlexyDesk is a complete graphical shell with its own rendering model, desktop components, and application framework.