All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
1.5.0 - 2026-05-26
- optional image formats behind explicit Cargo features (JPEG, WebP, AVIF, …), with PNG still in defaults (#324, @Gigas002).
- optional
eglfeature and EGL path decoupled from a minimal default build (#320, @Gigas002).
- initialize DRM only when the capture path needs it (#326, @Decodetalkers).
- wait for frame completion after
FrameState::Finishedto avoid corrupted frames (#328, @HiFiveJazz). - simpler resize / filter path for the region selector (#329, @Gigas002).
- incorrect color channel assignment in ext-image-copy format handling (
bd0af7d, @Gigas002).
- image encodings other than PNG require explicit Cargo features (#324, @Gigas002).
- Migration: enable the codecs you need (
jpeg,webp,avif, …) inCargo.tomlwhen building or depending on libwayshot.
- Migration: enable the codecs you need (
- Cargo features gating clipboard, color picker, logger, notifications, selector, AVIF, and JPEG XL (#306, @Gigas002).
- extended
[notification]config:icon,timeout_ms,urgency,app_name,success_summary,failure_summary,sound_name,transient,category(@Gigas002). - split CLI implementation into focused modules (
clipboard,color_picker,notification,logger,screenshot, …) (#306, @Gigas002). - Freeze before capture is on by default; set
freezein config, or pass--no-freezeon the CLI to disable (same idea as notifications) (#309, @Gigas002). --delaybefore taking the shot (#318, @Gigas002).- shell completions generation (#319, @Gigas002).
- optional geometry string after
-g(e.g.wayshot out.png -g $"$(waysip -d)") (#333, @Gigas002). --geometry-foreground-colorand--geometry-background-colorfor the region overlay (#335, @saghen).[geometry]config (foreground_color,background_color) for the region overlay (252c175, @saghen).[notification]actionconfig for a custom shell command when the notification is clicked (8039061, @Suryansh-Dey).--coloroptional output format (plain,hex,hex-alpha,rgb,rgba,hsl) (d32e90c, @Gigas002 and @0xsamalt).--open-locationto open the saved image path (#283, @Suryansh-Dey).--silentalias--no-notifications(19a605b, @Gigas002).
- Nix flake dev shell and package (#336, @saghen).
- CI split into workflow files, plus
cargo denyand related checks (#315, @Gigas002). - JPEG XL (
jxlfeature): jxl-encoder (pure Rust, AGPL-3.0-or-later) replaces jpegxl-rs and system libjxl.[encoding.jxl]keys (lossless,distance,effort) are unchanged; encoded files may differ slightly from libjxl at the same settings. CI and the Nix flake no longer install libjxl.
color_picker/selectorfeature wiring and docs (#339, @saghen).- Dependabot GitHub Actions config regression (#345, @Gigas002).
- clipboard uses explicit MIME types per encoding instead of autodetect (
be5683b, @RustyCoderX). - empty
-ggeometry string no longer falls through to interactive region selection (99ba370, @Gigas002).
- wayshot and waymirror-egl are GPL-3.0; libwayshot stays BSD-2-Clause (#311, @Gigas002).
- Migration: confirm licensing and redistribution obligations for anything you ship or vendor; see
LICENSE-GPLandLICENSE-BSD.
- Migration: confirm licensing and redistribution obligations for anything you ship or vendor; see
-g/--geometryaccepts an optional geometry string (e.g. from slurp /waysip -d); a token immediately after-gis now treated as that string, not the output file (#333, @Gigas002).- Migration: if you relied on
wayshot -g FILE(output path right after-g), usewayshot FILE -ginstead. Invocations likewayshot -g --clipboardare unchanged.
- Migration: if you relied on
1.4.6 - 2026-03-09
sizeandpositionfields onOutputInfo(b5c5896, @Decodetalkers).
- screencast / capture API cleanup (
9722235, @Decodetalkers).
- ext-image-copy frame state can advertise multiple SHM formats; handle the full set instead of assuming one (#307, @Decodetalkers).
- replace
unwrap()calls with properResulthandling (#294, @0xsamalt). - avoid cloning the image buffer where a shared view is enough (#290, @Nuhiat-Arefin).
--silent(quiet non-error output) (#280, @Suryansh-Dey).
1.4.5 - 2026-01-20
reexportnow exposesExtForeignToplevelHandleV1(the handle type), notExtForeignToplevelListV1(2259223, @Decodetalkers).
1.4.4 - 2026-01-20
- correct re-export of
ExtForeignToplevelHandleat the crate root (2709211, @Decodetalkers).
1.4.3 - 2026-01-20
- Color capture (sampling) API (#258, @Decodetalkers).
- Screencast EGL path, r-egl-wayland integration, static EGL (no
egl::Instance), DMabufAsRefusage, and waymirror-egl rework (#270, @Decodetalkers).
- Error types and handling (#252, @dhruvDev23).
- libdrm-oriented buffer logic where applicable (#270, @Decodetalkers).
- Rotation: do not swap width/height when the image buffer is already correctly oriented (#256, @AndreasBackx).
- Avoid panic when ext-foreign-toplevel-list is unavailable; degrade gracefully (#266, @Decodetalkers).
- EGL capture: roundtrip errors, FD leaks, and incorrect color in some paths (#270, @Decodetalkers).
- Many capture / screenshot entry points now take arguments in a fixed order: target → options → cursor → optional region (#270, @Decodetalkers).
- Migration: update call sites to the new parameter order; consult current
libwayshotmethod signatures.
- Migration: update call sites to the new parameter order; consult current
WayshotTarget/ foreign toplevel handles must be chosen from targets libwayshot already knows about (not an arbitrary foreign id alone) (#270, @Decodetalkers).- Migration: enumerate toplevels via libwayshot, then select the matching target.
try_init_bufno longer returns the initialized buffer from the same return channel; use()/Erroronly (#270, @Decodetalkers).- Migration: follow the updated init + capture flow in the docs / examples.
- JPEG XL-specific options in the config file (#255, @Gigas002).
- PNG-specific encoder options in the config file (#268, @Gigas002).
1.4.2 - 2025-12-18
- ext-image-copy path enabled for capture (#245, @xonx4l).
- DMabuf screen logic for the screencast path (refresh / GBM discovery, libwaysip bump, docs) (#248, @Decodetalkers).
- return GBM errors instead of panicking (#247, @dhruvDev23; first contribution).
- region and screenshot capture had incorrect dimensions under ext-image-copy (also fixes cross-output area selection in the CLI) (
e9ba46b, @Decodetalkers).
1.4.1 - 2025-12-15
- public
screencastmodule and helpers, split from the screenshot-oriented surface (279896a, @Decodetalkers). - size API on output / screencast capture (
c4dc48e, @Decodetalkers).
- screencast capture path refined for OBS-style integration (
d481448, @Decodetalkers).
- output capture sometimes missed the negotiated frame format (
c4dc48e, @Decodetalkers).
Sizeis now generic (Size<T = u32>) (279896a, @Decodetalkers).- Migration: specify
Size<u32>(or anotherT) where type inference no longer resolves, and update patterns that assumed a non-genericSize.
- Migration: specify
1.4.0 - 2025-12-13
- BGR888 buffer format support (#82, @vivienm).
FrameGuard,ScreenCapturer, andLogicalRegion/EmbeddedRegion(#90, @Shinyzenith, @AndreasBackx).- Freeze capture pipeline (#90, @Shinyzenith).
- Scaling / HiDPI handling in the capture path (#90, @Shinyzenith, @AndreasBackx).
- zwlr-screencopy DMabuf capture and EGL helpers (
waymirror-egldemo) (#122, #90, @CheerfulPianissimo). - public
capture_output_frame_get_state_shmfor negotiated SHM format (#151, @Decodetalkers). capture_output_frame_shm_fd_with_formatandget_available_frame_formatsfor portal-style integration (#207, @nicolo-mn).- ext-foreign-toplevel and related protocols; richer
OutputInfo(scale, xdg output metadata) (#206, @Rishik-Y). - JPEG-XL via
jpegxl-rs(#193, @Gigas002). - unit tests for
error,output,region(#228, @xonx4l).
- fewer allocations, slice-based APIs (#99, @murlakatamenka).
- clipboard / process helpers use
rustixinstead ofnix(#120, #90, @Shinyzenith, @AndreasBackx). - callback APIs use generics instead of caller-supplied
Box(#150, @Decodetalkers). - optional
imagecodec features line up with crate feature flags (#179, @Decodetalkers). - DMabuf is only wired for zwlr-screencopy; ext-image-copy does not use DMabuf in this release (
cd1da42,630e8bad, @Decodetalkers).
- ext-image-copy buffer placement with screencopy (
c48fac4, @Decodetalkers). - layer-shell overlay on niri (roundtrip / anchor) (
28331dcc, @uncomfyhalomacro).
- legacy
screenshotAPIs deprecated or restricted where ext-image-copy differs from zwlr-screencopy; usescreenshot_freezeinstead (c0065d3,21cfa0f, @Decodetalkers). Some paths (e.g. color picker) keep the old API on purpose (73df58e).- Migration: move affected call sites to
screenshot_freeze; re-read deprecation on the symbols you use.
- Migration: move affected call sites to
FrameGuardcarries side / transform metadata (1af8f788, @Decodetalkers).- Migration: update construction and pattern matches to include the new fields.
clapderive CLI: optional[OUTPUT],--log-level,--encodingand kebab-case options with aliases (#90, @AndreasBackx).- freeze mode before region / output selection (#90, @Shinyzenith).
--clipboardwith optional background daemon (#91, @Shinyzenith; also #90).- WebP, AVIF, JPEG-XL (#98, #141, #193; @Gigas002 in #141 and #193).
- default filename patterns and
--timestamp(#93, @Shinyzenith). - directory as output path resolves filename inside it (#96, @Shinyzenith).
- TOML config and
--config(#154, @Gigas002). --file-name-formatwith~and env expansion (#145, @Gigas002).
- libwaysip 0.4 and API follow-ups (#152,
7d32d38,8f97ffe, @uncomfyhalomacro).
- colored output, help text, and option renames (“friendly CLI”) (#134, @Gigas002).
- Migration: update scripts and wrappers that parse
--help, grep for old long option names, or assume plain stderr; use the current kebab-case flags and checkwayshot --helpfor aliases where the old spellings still work.
- Migration: update scripts and wrappers that parse
- region selection uses libwaysip in-process instead of spawning slurp (#152,
586ee25, @Decodetalkers).- Migration: drop expectations that
slurpis run externally or that-sforwards arguments to slurp; adjust automation that wrapped or mocked slurp; rely on wayshot’s built-in selector (and libwaysip behavior) only.
- Migration: drop expectations that
-/ stdout no longer creates an empty file in cwd (a5575b6, @uncomfyhalomacro).- embedded region selection on adjacent outputs (#199, @Pestdoktor).