A small screenshot tool for Wayland, written in Rust. Inspired by Spectacle and MarkShot.
No GTK/Qt — the overlay is a raw wlr-layer-shell surface rendered in software with tiny-skia, UI renders with Slint
- Area and fullscreen screenshots
- Notification via
rustbus - Animation on startup
- Annotation tools:
-
- Brush
-
- Arrow
-
- Line
-
- Primitive shapes
-
- Text
-
- Numbered circles
-
- Blur
-
- Scaler
This project depends on libxkbcommon (via smithay-client-toolkit) and fontconfig (via Slint's system font loading) at build time, both found through pkg-config. A Nix flake is included with a dev shell that provides them:
nix develop
cargo build --releaseWithout Nix, just make sure pkg-config plus the dev headers for libxkbcommon and fontconfig are installed and cargo build --release should work directly.
Use --release — the overlay redraws itself continuously while open, and an unoptimized debug build is easily 30x slower per frame, which is very noticeable as input lag while dragging.
Copying to clipboard shells out to the wl-copy binary from wl-clipboard — it must be installed and on $PATH at run time, separately from the build-time dependencies above. nix build .#default wraps the binary with it automatically; outside Nix, install wl-clipboard through your distro's package manager.
cargo run --releaseor (for instant fullscreen shot):
cargo run --release -- --fullscreen Drag a rectangle, hit Enter to save it to screenshot.png in the current directory, or Esc to cancel.
| Key | Action |
|---|---|
Ctrl + C / Enter / Space |
Copy selected area to clipboard |
Ctrl + S |
Save selected to .png in ~/Pictures/Screenshots directory |
Ctrl + Z |
Undo last annotation |
ricture uses a TOML config file located at ~/.config/ricture/config.toml (expample here):
[general]
save_path = "/home/user/Pictures/Screenshots"
enable_notifications = true
[appearance]
rect_color = "#ffffff" # '#rrggbbaa' is also validA Cargo workspace, one crate per concern:
crates/capture(ricture-capture) — pure Wayland screen capture. No UI, no rendering; just talks towlr-screencopyand hands back raw RGBA pixels.crates/overlay(ricture-overlay) — the interactive part: the layer-shell surface, input handling,tiny-skiarendering and the Slint UI. Knows tools only through thericture-toolstraits.crates/tools(ricture-tools) — annotation tools: theTool/Gesture/Annotationtraits, theDocumentholding annotations, and the tool implementations. Adding a tool = implementingTooland listing it indefault_tools().crates/config(ricture-config) — TOML config parsing and validation.crates/export(ricture-export) — PNG saving and clipboard copying.crates/notify(ricture-notify) — desktop notifications.crates/ricture(ricture, the binary) — thin entry point that wires the other two together and does the final crop + save.
GPL-3.0 — see LICENSE.