Patina
Patina is the shared window frame, components and design language of a family of egui desktop apps. Photograph and UnAmp are the first.
You can skin each app completely differently. What they share is how they behave: one window frame, one skin format and one set of rules. It's unity in variety, the way a terrace of identical houses painted in different colours is beautiful: the structure stays, the skin varies. See docs/design.md.

Use
[]
= "0.1"
use ;
let style = from_visuals;
let radius = corner_radius;
top
.frame
.show;
The full wiring is in src/frame.rs and examples/gallery.rs.
It covers the viewport, clear colour, edges and input hook.
Patina re-exports egui, and an app has to use the same egui version.
Components
frame: the app's own window frame, with a header bar, minimise/maximise/close buttons, resize edges and rounded corners. Moving and resizing go to the compositor.appearance: follows the desktop's light/dark setting through the XDG portal.skin: skins in the suite format, which every app reads, with app sections, a shared user folder and the built-ins Dark Orange, Calendar, Notebook and Steam Classic. See docs/skinning.md.tree: a sidebar folder tree that lists folders on worker threads, so slow network shares never block the UI.ime:drop_repeated_preedits, forApp::raw_input_hook. Without it, a focused text field on GNOME's Wayland keeps the window repainting at full speed.
Known problems and what's understood about them are in docs/known-issues.md. Traps any egui app can fall into, such as burning a core while idle, are in docs/egui-pitfalls.md.
Develop
Decisions are recorded as ADRs in docs/adr, and we recommend the same for every Patina app.
License
BSD-3-Clause