# wlr-capture
[](https://github.com/sjourdois/wlr-utils/actions/workflows/ci.yml)
[](https://crates.io/crates/wlr-capture)
[](#license)
The shared engine behind the [wlr-utils](https://github.com/sjourdois/wlr-utils)
tools ([`wlr-chooser`], [`wlr-pip`]). Two reusable bricks plus the overlay UI
helpers they share:
- **`wl`** — a native Wayland client that enumerates foreign toplevels and outputs
(`ext-foreign-toplevel-list-v1`) and captures them at full resolution via
`ext-image-capture-source-v1` + `ext-image-copy-capture-v1`. It computes the
format-correct stride (so it works where `grim 1.5` fails with "Invalid
stride"), and prefers a zero-copy GPU dma-buf path (allocated through `gbm`)
with an automatic CPU shm fallback. Capture is occlusion-independent and
damage-driven (windows on other workspaces stream live).
- **`render`** — an egui → `egui_glow` rendering core on an EGL/GLES context bound
to a `wl_surface`, plus zero-copy dma-buf → GL texture import
(`EGL_EXT_image_dma_buf_import`). Any windowing host binds a `Gpu` to its
surface and drives one egui frame per repaint.
- **`theme` / `i18n` / `icons`** — TOML theming, Fluent localisation (13
languages), and `.desktop`/icon-theme app-icon resolution.
## Status
This is primarily an **internal library** for the wlr-utils binaries; the public
API is not yet stabilised and may change between minor versions. It is published
so the tools can depend on it from crates.io. The `gpu` feature (on by default)
pulls in `gbm` for the dma-buf path; disable it (`--no-default-features`) for a
pure-CPU build.
## License
Licensed under either of [Apache-2.0](../../LICENSE-APACHE) or
[MIT](../../LICENSE-MIT) at your option.
[`wlr-chooser`]: https://crates.io/crates/wlr-chooser
[`wlr-pip`]: https://crates.io/crates/wlr-pip