Skip to content

veilDocsStart

Features and status

What is supported, experimental, planned or not supported, feature by feature.

Copied from README.md in veil’s repositoryView on GitHub (opens in a new tab)

Supported means: implemented, covered by automated tests, and checked in a compositor (so far a headless sway, see the status above). Experimental means that it works, with a limit you should know about, or that it has not been checked where it matters. Planned features come after 1.0.

FeatureStatusNotes
Pictures: PNG, JPEG, WebP, BMP, TIFF, GIF and the other formats of the image (opens in a new tab) crateSupportedDrawn at the monitor's physical resolution, then the decoded copy is freed. Pictures over 16384 pixels per side, or that would need more than 512 MiB, are refused.
Videos, looped, without audioSupportedAny format the installed GStreamer plugins play. Checked: H.264, HEVC, VP8, VP9 and AV1, and ten containers (MP4, WebM, Matroska, QuickTime, AVI, Ogg, ...).
Scaling: fill, fit, stretch, center, tile, and a background colourSupportedFor pictures and videos (tile acts as center for a video).
HiDPI and fractional scalingSupportedChecked pixel by pixel at scales 1, 1.25, 1.5 and 2.
Every monitor, or the ones you name; a wallpaper per monitor; monitors plugged in laterSupportedWith pictures. With a video, see the next row.
Monitor changes while a video playsExperimentalA change of any monitor (plugged in, unplugged, rescaled, powered on) crashes the daemon inside GStreamer (known issue 1). Under the systemd unit it is back with its wallpapers in about three seconds.
veil set, clear, pause, resume, toggle, status, outputs (also as JSON), quit, pingSupportedStable exit statuses. A control socket for scripts and status bars (docs/ipc.md).
A new wallpaper replaces the old one only once it is readySupportedA video takes over when its first frame is on screen; a file that cannot be shown leaves the old wallpaper alone.
Wallpapers saved and shown again after a restartSupportedPer monitor, in ~/.local/state/veil/state.json.
Configuration fileSupported~/.config/veil/config.toml (docs/configuration.md).
systemd user unitSupportedReady once every monitor shows its wallpaper, restarted after a crash, a watchdog.
Pause a video behind a fullscreen window (or windows that cover it)Supported on sway, experimental on HyprlandRead from the compositor's IPC. On Hyprland 0.56.2 a fullscreen window paused its output and closing it played the video again (2026-10-20); with --pause-on covered and other cases it was checked against a fake Hyprland only.
Stop a video while the screen is locked or the monitor is offSupported on sway, experimental elsewhereWorks on any compositor that stops taking the video's frames, as sway does; not checked on Hyprland (lock and DPMS). The video starts again from its beginning.
Hardware video decodingExperimentalNVIDIA (nvcodec) decodes on the GPU, but every frame is converted to RGB on the CPU (known issue 7). Intel and AMD (VA-API) should avoid that conversion; not checked yet. Software decoding always works.
Animated GIFsSupportedPlayed as videos; needs GStreamer's libav plugins.
HyprlandExperimentalveil's main target. Images, video on two monitors and the automatic pause ran on Hyprland 0.56.2 (2026-10-20); smoothness, scales, lock, power-off and crash recovery were not checked there.
Other compositors with layer-shell (river, niri, Wayfire, labwc, KDE Plasma)ExperimentalShould work; nobody has reported yet. No pause behind windows there (the lock and power-off stop still applies).
Shell completions (bash, zsh, fish, nushell) and man pagesSupportedGenerated by the binary itself.
Nix flake and packageSupportedThe package brings its GStreamer plugins.
Prebuilt binaries for x86_64 and aarch64 LinuxExperimentalSee Prebuilt binaries; published with each release. The x86_64 tarball ran on Debian 12 and 13, Ubuntu 22.04 and 24.04, Fedora 44 and Arch; aarch64 was not run. With GStreamer before 1.26, animated GIFs do not play (known issue 8).
GNOME, X11NoGNOME has no layer-shell.
HEIF/HEIC, AVIF, JPEG XL; animated WebP and PNGNoRefused with the reason; an animated WebP or PNG shows its first frame.
Audio, frame-rate cap, playback speed, loop pointsPlannedAfter 1.0.
Playlists, directory rotation, transitionsPlannedAfter 1.0. veil set from a script or a timer works today.
Pause when idle or on battery; pause behind windows on niri and riverPlannedAfter 1.0.
NixOS and home-manager modules, AUR, .deb and .rpm packagesPlannedAfter 1.0.