<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://plexydesk.org/index.php?action=history&amp;feed=atom&amp;title=Architecture</id>
	<title>Architecture - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://plexydesk.org/index.php?action=history&amp;feed=atom&amp;title=Architecture"/>
	<link rel="alternate" type="text/html" href="https://plexydesk.org/index.php?title=Architecture&amp;action=history"/>
	<updated>2026-04-03T19:22:36Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://plexydesk.org/index.php?title=Architecture&amp;diff=3&amp;oldid=prev</id>
		<title>Plexydesk: Add architecture overview</title>
		<link rel="alternate" type="text/html" href="https://plexydesk.org/index.php?title=Architecture&amp;diff=3&amp;oldid=prev"/>
		<updated>2026-03-21T19:32:55Z</updated>

		<summary type="html">&lt;p&gt;Add architecture overview&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Architecture =&lt;br /&gt;
&lt;br /&gt;
PlexyDesk combines a compositor, desktop shell, client libraries, and a custom display protocol into one system.&lt;br /&gt;
&lt;br /&gt;
== High-level model ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Layer&lt;br /&gt;
! Role&lt;br /&gt;
|-&lt;br /&gt;
| Client application&lt;br /&gt;
| Creates windows and widgets through PlexyDesk APIs&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;libplexyui&amp;lt;/code&amp;gt;&lt;br /&gt;
| High-level C API for widgets, layout, events, and styling&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;libplexycanvas&amp;lt;/code&amp;gt;&lt;br /&gt;
| Local rendering of widgets, text, layout, and GPU effects&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;libplexy&amp;lt;/code&amp;gt;&lt;br /&gt;
| Protocol and DMA-BUF frame handoff support&lt;br /&gt;
|-&lt;br /&gt;
| Unix socket protocol&lt;br /&gt;
| Communication path between clients and compositor&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;plexyshell&amp;lt;/code&amp;gt;&lt;br /&gt;
| Compositor and desktop shell runtime&lt;br /&gt;
|-&lt;br /&gt;
| Backend stack&lt;br /&gt;
| DRM/KMS, input handling, OpenGL, and compatibility bridge code&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Render flow ==&lt;br /&gt;
# A client creates UI using functions from &amp;lt;code&amp;gt;plexy_ui.h&amp;lt;/code&amp;gt;.&lt;br /&gt;
# The client renders its widget tree locally using &amp;lt;code&amp;gt;libplexycanvas&amp;lt;/code&amp;gt;.&lt;br /&gt;
# The rendered frame is handed to the compositor using the PlexyDesk protocol and DMA-BUF-backed buffers.&lt;br /&gt;
# The compositor composites all visible client surfaces, applies shell chrome and effects, and renders desktop elements such as the dock and menubar.&lt;br /&gt;
&lt;br /&gt;
== Design direction ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Important runtime pieces ==&lt;br /&gt;
* &amp;lt;code&amp;gt;src/shells/gnu_liquid/main.cpp&amp;lt;/code&amp;gt; is the active compositor runtime entry point described in the Makefile&lt;br /&gt;
* &amp;lt;code&amp;gt;src/renderer/&amp;lt;/code&amp;gt; contains compositor rendering, background, dock, menubar, shader, and async rendering code&lt;br /&gt;
* &amp;lt;code&amp;gt;src/backend/&amp;lt;/code&amp;gt; contains DRM and display backend support&lt;br /&gt;
* &amp;lt;code&amp;gt;src/input/&amp;lt;/code&amp;gt; contains libinput integration and focus policy code&lt;br /&gt;
* &amp;lt;code&amp;gt;src/server/&amp;lt;/code&amp;gt; contains socket server code for the compositor side of the protocol&lt;br /&gt;
* &amp;lt;code&amp;gt;src/wayland/&amp;lt;/code&amp;gt; contains bridge and interoperability work including XWM-related files&lt;br /&gt;
* &amp;lt;code&amp;gt;src/core/&amp;lt;/code&amp;gt; contains shell runtime, event loop, dock manager, and display layout state&lt;br /&gt;
&lt;br /&gt;
== Public API surface ==&lt;br /&gt;
The public API is exposed through headers in &amp;lt;code&amp;gt;include/plexy/&amp;lt;/code&amp;gt;. In particular, &amp;lt;code&amp;gt;plexy_ui.h&amp;lt;/code&amp;gt; documents:&lt;br /&gt;
* application lifecycle&lt;br /&gt;
* window creation&lt;br /&gt;
* widget creation&lt;br /&gt;
* flexbox-like layout controls&lt;br /&gt;
* styling helpers&lt;br /&gt;
* event callbacks&lt;br /&gt;
* desktop menubar integration&lt;br /&gt;
&lt;br /&gt;
== Repository structure ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Path&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;src/&amp;lt;/code&amp;gt;&lt;br /&gt;
| Main compositor, runtime, renderer, input, backend, and bridge code&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;lib/&amp;lt;/code&amp;gt;&lt;br /&gt;
| Shared client-side support libraries&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;include/plexy/&amp;lt;/code&amp;gt;&lt;br /&gt;
| Public headers for application authors&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;examples/&amp;lt;/code&amp;gt;&lt;br /&gt;
| Small standalone sample applications&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;apps/&amp;lt;/code&amp;gt;&lt;br /&gt;
| Larger experiments such as terminal, browser, clock, and utilities&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;tasks/&amp;lt;/code&amp;gt;&lt;br /&gt;
| Engineering notes and implementation logs&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Development note ==&lt;br /&gt;
The Makefile notes that the old &amp;lt;code&amp;gt;src/uikit/&amp;lt;/code&amp;gt; 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.&lt;br /&gt;
&lt;br /&gt;
== Related pages ==&lt;br /&gt;
* [[Getting Started]]&lt;br /&gt;
* [[Developer Guide]]&lt;br /&gt;
* [[Examples]]&lt;/div&gt;</summary>
		<author><name>Plexydesk</name></author>
	</entry>
</feed>