News

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.

Read the full release notes on GitHub →

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

AUR
yay -S halley xdg-desktop-portal-halley

Development Version

dev package
yay -S halley-git

From Source

source build
git clone https://github.com/saltnpepper97/halley
cd halley
git checkout v0.9.0
cargo build --locked --release --workspace

Notes

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.