[![Badge License]][License]
![Badge Language]
![Badge Commit]
[![Badge Issues]][Issues]
[![Badge Discord]][Discord]
[![Badge X]][X]
[![Badge Ko-fi]][Ko-fi]
pleamar is a language and a Rust runtime for your desktop shell: bars,
launchers, notification centres, docks, lock screens and widgets, written as **scenes** where every property is a spring and the animation never
waits for the logic.
---
**[
Install
][Install]**
**[
Guide
][Guide]**
**[
Reference
][Reference]**
**[
pleamar-wm
][pleamar-wm]**
**[
Marea
][Marea]**
**[
Discord
][Discord]**
---
`examples/glass.plm`, running: a clear lens, a plate that frosts itself where what is behind is busy, smoke and milk.
# Shell, window manager, companion: three pieces
**pleamar is a shell toolkit, like Quickshell.** You write your bar, widgets and
launchers with it, and they run **on the compositor you already use** —
Hyprland, Sway, niri, KDE… No need to change anything else.
The other two are separate, and optional:
- **[pleamar-wm]** is a Wayland compositor built on top of pleamar, where the
window manager itself is a pleamar scene. Only if you want a whole desktop
of it; you don't need it to use pleamar.
- **[Marea]** is my own shell, written in pleamar: a good example of how far a
scene can go.
So if you are on Hyprland and just want a new bar, pleamar is all you need.
### Where it runs
| | |
| --- | --- |
| **Hyprland, Sway, niri, river, Wayfire, Labwc…** | ✅ Its home: bars, panels and shells anchor to the screen (layer-shell) |
| **KDE Plasma (Wayland)** | ✅ Bars and shells work; what is Hyprland's own —its workspaces— does not |
| **GNOME (Wayland)** | ⚠️ Only scenes in a normal window: GNOME has no layer-shell, so a bar cannot anchor. pleamar-wm can be picked as a session next to it |
| **pleamar-wm** | ✅ A whole desktop of its own |
| **X11 sessions** | ❌ pleamar is for Wayland |
# What's new
- **A logic that plays** (0.3.0): the logic can hear every frame and say where
things are in that very frame, know which keys are held and where the mouse
is, ask what touches what, make sound —a WAV, an Ogg, or a tone made on the
spot— and read a game controller. With it, an image can be a sheet of
pictures (`cell:`) or pixel art kept sharp (`pixels`). Small games on the
desktop, in the same file as the bar.
- **Glass over the scene's own drawing** (0.3.0): a lens over a picture or a
text of the scene's now bends that too, on any compositor.
- **Glass that behaves like glass** (0.2.35): the lens bends what is behind it as
a pane would —a bevel, Snell's law, a colour for each index, a rim that
mirrors—, and three new words say what kind of glass it is: `frost: auto`
keeps it clear over something plain and frosts it where words or lines are
behind, `smoke` darkens it for white text, `milk` whitens it for dark text.
- **Live pictures of your windows** (0.2.20, cheaper in 0.2.32):
`thumbnails.live` gives a window's picture as a texture that follows it, for
overviews and switchers that move.
- **Effects that cost less** (0.2.33): groups with opacity, blur or glow that do
not reach each other are painted together —60 blurred groups went from 4.7 ms
to 0.3 ms of recording a frame—, and a scene with one surface keeps far less
memory (1.2 GB to 0.2 GB in the shell that reported it).
Every release, with what changed: [Releases].
# Features
- **Animation that never depends on logic**: the scene declares what moves and
with which spring; a render thread walks it at the screen's pace. With the
logic stalled for 600 ms, 38 frames still come out at 17 ms each.
- **A language of its own, checked on load**: a misspelled name is an error with
file, line, arrow and «did you mean…?», never an `undefined` at runtime.
- **Every property is a spring** — interrupt it halfway and it turns without a jolt.
- **Shapes that melt into each other**: shadow, rim, light, gradients, glass
that bends what is behind it (clear, frosted, smoked or milky), blur, glow,
particles and your own WGSL shaders, all signed distance underneath.
An svg comes in as paths, by layers, and melts with what carries it.
- **Luau logic in a sandbox**, on its own thread, behind permissions you approve —
a plugin runs with what you allow it, never with everything you can do.
- **Enough for a small game**: a handler for every frame, held keys, the mouse,
what touches what, sound, game controllers, sheets of pictures and pixel art.
- **System services with no code**: clock, audio, battery, network, media,
notifications, tray, windows and their thumbnails, brightness, files — named
in the scene and filled.
- **Lock screens** on `ext-session-lock`, where the compositor guarantees nothing
else is seen while it lasts.
- **The password dialog**: a scene can be the session's polkit agent and draw it
itself, when a program wants root.
- **Live reload**: save the file and it reloads without losing what was in motion;
save it broken and the last good scene stays, with a band saying where.
- **Its own compositor**: [pleamar-wm] runs other programs' windows inside a scene,
so the window manager is one more file you can rewrite.
- **Your AI agent knows it**: the installer teaches Claude Code, Codex and
OpenCode to build and verify pleamar scenes for you.
- **And it can use your desktop**: in [pleamar-wm] an agent gets a pointer
and a keyboard of its own — it clicks and types in your browser while your
mouse and keyboard stay yours, and you see it work. It speaks
[Cua Driver](https://github.com/trycua/cua)'s protocol.
- **Light**: 81 MB and a first frame in 175 ms, against 336 MB and 1876 ms for
the same bar in Quickshell.