Halley v0.3.0 — Landmark Placement, Presentation Fullscreen, and Native TTY Polish
Halley v0.3.0 is a major usability and compositor-behavior release focused on making the field feel more natural, more stable, and more predictable.
The biggest change is the new placement model: expanded windows can now overlap like objects on a corkboard, while collapsed nodes, cores, and pinned landmarks remain readable non-overlapping map objects. Maximize and fullscreen have also been reworked into presentation states, so they no longer shove the field around or mutate other windows. This release also brings pinned windows/nodes/cores, config error overlays, fractional scaling, wp_presentation, better game/fullscreen handling, Aperture improvements, and a large batch of TTY, spawn, focus, and monitor fixes.
Highlights
- MAJOR: Expanded windows can now overlap, while collapsed nodes and core landmarks remain non-overlapping map objects.
- MAJOR: Pinned windows, nodes, and cores are now supported with
mod+p, pin badges, pinned Bearings visibility, and configurable pin styling. - MAJOR: Maximize and fullscreen are now presentation states, preserving field geometry instead of moving, pinning, shoving, or restoring other objects.
- MAJOR: Native TTY/game behavior is much smoother, with
wp_presentation, better frame pacing, cursor handling, fullscreen video fixes, and safer direct scanout behavior. - MAJOR: Config errors now appear in-compositor, with detailed scrollable diagnostics for startup, reload, IPC reload, and file-watch failures.
- MAJOR: Fractional scaling support has landed, including preferred scale updates as surfaces move between monitors.
- MAJOR: Aperture is more configurable, with cursor-following, fixed-monitor, or every-output placement plus per-output IPC/CLI status.
- MAJOR: Spawn, reveal, monitor routing, and focus behavior received a large stabilization pass, especially across multi-monitor setups.
Added
- NEW:
wp_presentationsupport so Wayland clients can receive frame timing feedback after TTY and winit frames. - NEW: Global
placement:config block for expanded-window spawn strategy, landmark behavior, and post-placement reveal settings. - NEW:
input.raise-on-clickso clicking a window can raise it independently from click/hover focus mode. - NEW: Fractional scale protocol support, with DPI-based output scale guesses and preferred scale updates.
- NEW: Configurable Aperture placement for cursor-following, fixed-monitor, or every-output modes.
- NEW: Aperture peek styling, including corner, rounded background, radius, clock styling, and
examples/aperture.rune. - NEW: User-pinned windows, nodes, and cores with default
mod+p, pin badges, pinned Bearings visibility, and bundled SVG badge rendering. - NEW: Configurable pin badge size and background colour through
field.pins.sizeandfield.pins.background-colour. - NEW: Top-right config error overlays with scrollable diagnostics, hover pause, right-click dismissal, wheel scrolling, and configurable error colour.
- NEW: Strict config validation diagnostics for unknown keys and invalid literals, including path, line, source text, and suggestions where available.
- NEW: Fade close animation through
animations.window-close.style "fade". - NEW: Visual-only maximize/unmaximize animation through
animations.maximize.
Changed
- MAJOR: Field placement now allows expanded windows to overlap, while collapsed nodes and core landmarks remain non-overlapping readable map objects.
- MAJOR: Pinned landmarks remain solid blockers during spawn, drag, and resize.
- MAJOR: Maximize and fullscreen now preserve field geometry and no longer shove windows, landmarks, cores, clusters, or pinned objects.
- MAJOR: Normal windows can now stack above maximized/fullscreen windows, with click, trail navigation, and focus cycling able to raise them again through normal stack order.
- MAJOR: Pinning now transfers through cluster/core flows, keeping pinned state consistent across create, absorb, collapse, expand, and dissolve operations.
- MAJOR: Xwayland startup was reworked around event-loop socket watchers, safer listener handoff, close-on-exec lock files,
-listenfddetection, and portalDISPLAYactivation export. - MAJOR: TTY
wp_presentationdelivery now uses the DRM vblank completion path, reportingVsync,HwCompletion, and realHwClocktimestamps when available. - MAJOR: Aperture standalone rendering now maintains per-output layer surfaces and keeps clocks/animations advancing without busy sleeping.
- Deprecated rule
overlap-policyas a migration no-op; usespawn-placementandcluster-participation "float"instead. - Removed the resize overlap overlay because overlap is now normal expanded-window behavior.
- Split the large overlay renderer into focused modules while preserving the public overlay API.
- Moved pure overlap contact physics into
halley-core. - Renamed the default explicit field-drag pointer action from
field-jumptopan-field, with aliases kept for compatibility. - Removed empty npm package manifests from the repository root.
Fixed
- MAJOR FIX: Fullscreen/game behavior is much safer, including pointer-lock stability, cursor handoff, fullscreen video pacing, and prevention of unwanted collapse or compositor resize.
- MAJOR FIX: Direct scanout is now blocked when a fullscreen candidate is covered by a higher-stacked active window, while preserving existing NVIDIA/direct-scanout behavior.
- MAJOR FIX: Multi-monitor routing is more reliable, with better pointer monitor tracking, launch monitor bounds, layer-surface commit routing, and scoped viewport pan animations.
- MAJOR FIX: Spawn and reveal placement are more stable, especially after manual pan-away, late geometry commits, late app-id/title rules, and empty-monitor resets.
- MAJOR FIX: Config reloads now apply live more reliably, including gathered config files and active render cache invalidation.
- MAJOR FIX: TTY redraw work is better scoped per output, reducing unnecessary cross-monitor redraws from cursor motion, timer frames, fullscreen video, and maximize animations.
- MAJOR FIX: Native Wayland games such as Tiny Glade behave better, with fixes for pointer-lock camera spins and blocked interactive compositor resize while grabbed/fullscreen-like.
- MAJOR FIX: Steam startup/login behavior is handled separately so its login overlap behavior does not leak onto the main Steam client.
- Fixed window borders drawing above foreground windows by keeping borders at the owning window’s z-depth.
- Fixed hover focus changing stacking; only explicit raise actions now alter overlap order.
- Fixed trail navigation so it intentionally raises the selected active window.
- Fixed active-window pin badges so they render with the owning window’s z-order.
- Fixed overlay/popup text input focus restoration.
- Fixed collapsed-node slide behavior after manual and automatic collapses.
- Fixed automatic active-window-limit collapse timing during visual active-transition animations.
- Fixed initial spawn push-away so opening a new expanded window no longer shoves existing expanded windows.
- Fixed fullscreen state preservation across monitor changes.
- Fixed portal save dialogs and nested Firefox popup click routing.
- Fixed hover-mode spawning and keyboard launch actions using stale monitor state.
- Fixed
close-focusedtargeting for focused collapsed cluster cores. - Fixed maximized windows keeping shadows and preserving maximize sessions through XDG fullscreen transitions.
- Fixed automatic decay/manual collapse paths so fullscreen/game surfaces are not collapsed into nodes.
- Fixed
gatherdeep-merge behavior throughrune-cfg0.4.6. - Fixed
move-windowso it no longer implicitly pans the field at monitor edges;pan-fieldkeeps the old edge-pan drag behavior.
Compatibility notes
- Rule
overlap-policyis now deprecated as a no-op during config migration. - Use
spawn-placementfor per-rule placement overrides. - Use
cluster-participation "float"for floating dialog behavior. - The old
field-jumpanddrag-pannames remain available as aliases for compatibility, but the preferred action name is nowpan-field.
Upgrade notes
Existing configs should migrate through the bootstrap/default merge path, but this release introduces several important new config areas:
placement:input.raise-on-clickfield.pinsaperture-peekanimations.window-close.styleanimations.maximizeoverlays.error-colour
After upgrading, reload your config and check the new in-compositor diagnostics overlay if Halley reports validation errors.