Release News
A Steadier Experience
Halley 0.9 makes everyday work steadier with reliable fullscreen and XWayland behavior, fractional display scaling, expressive window rules, and separate screenshot and screencast privacy.
Halley 0.9 brings more dependable fullscreen navigation, cleaner game mode changes, input methods that resume after locking, and pinned windows that stay open. It also gives you more control over how windows open, what you share, and how each monitor scales.
Existing configurations are preserved. Choose the new rules, blur methods, capture commands, and movement actions that suit your workflow, then verify and reload.
Privacy and capture
Share exactly what you mean to
Screencast privacy rules
Portal privacy rules can block individual windows and layer surfaces from screen shares. Monitor shares show the content behind a blocked window, and a blocked window that uses backdrop blur no longer hides the rest of the monitor.
Shared-window indicator
Windows that are being shared directly show a local indicator, so you can see what leaves your screen. The portal source selector is keyboard navigable across visible, shareable windows and monitors.
Standard output capture
Authorized tools can capture outputs through ext-image-capture-source-v1 and ext-image-copy-capture-v1 on native and nested backends. Capture stops on lock, suspend, or output loss.
Direct captures
halleyctl and the SDK capture an explicit output, node, or region without opening the selection overlay. Saved captures show the usual preview unless --silent is requested.
Separate screenshot privacy
block-screenshot omits matching windows and their popups from Halley's built-in screen and region screenshots, revealing the content behind them. Direct screenshots of protected windows fail. This is separate from portal screencast privacy and does not cover third-party capture tools or direct capture protocols.
Rules and appearance
Choose how windows open and look
Window rules that work together
Match groups and exclusions can select windows by application, title, parent relationship, startup period, keyboard focus, or individual-window screencast status. Opt into window-rule-mode compose to combine matching rules, with later explicit properties taking precedence; existing rules keep their first-match behavior.
Opening behavior and decoration controls
Rules can choose an initial output, Field position, focus, fullscreen, or maximized state, and control borders, shadows, and content corner radius. Appearance and privacy rules reload for existing windows; opening settings apply when a window first maps.
More blur choices
Gaussian and box backdrop blur join the default Dual Kawase method. Switch methods with a configuration reload while retaining existing blur activation, rounded clipping, and client-requested regions.
A continuous window frame
Compositor titlebars meet window content without a visible seam, including with backdrop blur. Rule-enabled window blur follows the displayed client rectangle through fullscreen and maximize transitions.
Displays and motion
Scale, pacing, and placement
Per-monitor scaling
view.output.scale accepts numeric and fractional values with live reload. Applications, compositor UI, pointer coordinates, and native-resolution captures scale together, and halleyctl outputs reports the effective scale.
Frame pacing
commit-timing-v1 and fifo-v1 let clients schedule frames precisely on native and nested backends without blocking input, rendering, or unrelated clients.
Animated, exact movement
CLI and keyboard window moves animate with their own animations.window-move easing or spring. halleyctl node move to X Y places a window exactly, and --distance moves it a chosen number of Field units.
Across monitors
The cursor and dragged windows cross gaps between configured monitors, and the selected monitor follows a focused window that moves to another output.
Pan from anywhere
Bind pan-field-always to start a camera drag over windows, titlebars, nodes, or wallpaper. It respects fullscreen, camera owners, shell overlays, and pointer constraints. Pans end with the button that started them.
Contributed by @Ketari-G · Pull request
Reliability
Fullscreen and games you can rely on
Monitor-aware navigation
Alt+Tab, Apogee, and centered navigation preserve every application's fullscreen state when selecting a window on another monitor. On the same monitor, ordinary applications leave fullscreen cleanly and identified games park until resumed.
Steadier XWayland
XWayland fullscreen, game mode, minimize, and restore keep client state, geometry, and animations consistent, including when the underlying surface is replaced.
Smoother transitions
Fullscreen, maximize, and windowed transitions keep both client images within the same rounded, animated bounds. Transitions follow client acceptance, keep outgoing content live while waiting, and fade compositor chrome back in as fullscreen exits.
Keyboard correctness
Keys and lock-key modifiers follow Wayland event order, held keys survive extra keyboards, and Caps, Num, and Scroll Lock indicators stay in sync across devices.
Pinned windows stay open
Pinned windows are exempt from automatic decay. You can still collapse them manually, and unpinning starts a fresh decay timer.
Retrieve the window you selected
Running-window selections through Lift and the API select the correct monitor and workspace, reveal stack and overflow members, restore collapsed windows, and center Field targets.
Empty clusters keep their controls
Moving the last window to another monitor preserves the close-binding hint. Hints remain visible across monitor focus changes, while two-press deletion stays scoped to the selected monitor.
Desktop integration
Fit more of the desktop
Dialogs that stay with their parents
xdg-dialog-v1 and xdg-foreign-v2 let applications and portal dialogs, including Firefox's Save As, declare their parents and stay above them. Closing a focused Field dialog returns focus to its nearest eligible parent.
Input methods survive locking
Native Wayland input methods stay connected across screen lock and resume after unlocking. Composition and keyboard grabs are suspended during the lock, lock-screen input stays isolated, and unfinished composition is discarded at the lock boundary.
Accessibility
Initial compositor accessibility information is exposed through AccessKit, with opt-in supervision of a trusted Orca executable across restarts.
Power and idle
wlr-output-power-management lets approved tools control individual displays on the native backend, and the org.freedesktop.ScreenSaver service handles GTK's idle-inhibition fallback.
Nix and NixOS
A pinned Nix flake provides the compositor, companion tools, portal integration, a development shell, an overlay, and a NixOS session module. The accessibility supervisor test uses the Nix-provided executable path.
Contributed by @pirate-boop · Pull request
Installation
Get v0.9.0
AUR
yay -S halley xdg-desktop-portal-halleyDevelopment Version
yay -S halley-gitFrom Source
git clone https://github.com/saltnpepper97/halley
cd halley
git checkout v0.9.0
cargo build --locked --release --workspaceNotes
Still Growing
- Existing configurations are not rewritten. Omitted settings, including view.output.scale and animations.window-move, use built-in defaults. Run halleyctl config verify before reloading.
- The private IPC protocol is now version 28. Rebuild companion tools such as halleyctl and the portal together with the compositor. The public API remains version 1.
- The companion portal is now 0.3.0. Upgrade it alongside Halley and halleyctl to keep screen sharing compatible.
- Use Lift 0.4.1 with Halley 0.9. It updates the API dependency so live window and cluster subscriptions decode the current snapshots.
- New bindings such as pan-field-always and node-move distances have no defaults. Add them to your configuration if you want them.
- Screencast and built-in screenshot privacy are separate controls. Configure each for the capture paths you use; neither blocks third-party direct capture protocols.
- Scene, input, fullscreen, configuration reload, and session code now have clearer ownership. Pull requests run Rust, Nix, and headless XWayland checks; local testing guidance is documented in the repository.
Thanks
Thank you
Thank you to Ketari-G for contributing pan-field-always, and to pirate-boop for fixing the accessibility supervisor test under Nix builds.
Thank you to everyone testing Halley in daily use and reporting the issues that shaped this release.