github BarutSRB/OmniWM v0.6.3
OmniWM v0.6.3

5 hours ago

What's New Since 0.6.2

0.6.3 adds focus-without-raise, configurable fullscreen margins, Start at Login, Quake Terminal microphone support, and low-perturbation performance captures. It also hardens settings recovery, focus ownership, animation, lock-screen handling, Hidden Bar, and the AX apply path.

Before You Upgrade — Breaking Changes

  • Your settings.toml is replaced with defaults on first launch unless you edit it first. 0.6.3 requires two new fields that a normal 0.6.2 file does not contain. Without them, OmniWM preserves the old file byte-for-byte as settings.toml.corrupt or settings.toml.corrupt.1, replaces the live file with full defaults, and starts from those defaults. Nothing is destroyed, but your configuration stops applying until you restore it.

    To avoid the reset entirely, merge these values into the existing sections before upgrading:

    [focus]
    raiseOnMouseFocus = true
    
    [gaps]
    fullscreenUsesOuterGaps = false

    raiseOnMouseFocus = true keeps the 0.6.2 hover behavior — the new default is false. fullscreenUsesOuterGaps = false matches the new default and preserves existing fullscreen geometry.

    If 0.6.3 has already reset a normal 0.6.2 file, quit OmniWM, recover from whichever of settings.toml.corrupt or settings.toml.corrupt.1 contains the preserved file under your XDG config directory (normally ~/.config/omniwm), add both fields, and restore the corrected file.

  • Settings now use the complete current schema. Missing or decode-invalid required values no longer inherit defaults. 0.6.2 repaired absent keys and a few specific invalid values — many malformed TOML types already failed decoding there — so the practical change for anyone who hand-edits settings.toml is that a missing required key now invalidates the whole file and triggers the preserve-and-reset above. The hotkey list must contain every assignable action exactly once; unknown, unassignable, missing, or duplicate action IDs invalidate the file. Unknown non-hotkey extension keys at the top level and inside known tables remain diagnosed and preserved across successful saves; unknown keys nested inside arrays such as appRules are diagnosed but may be dropped on save. A third distinct invalid file fails closed if both write-once recovery slots are already occupied.

  • Focus Follows Mouse no longer raises windows by default. Hover focus now targets the specific window without deliberately activating its app, issuing AX Raise, or changing SkyLight ordering. Enable Raise Window When Focus Follows Mouse or set focus.raiseOnMouseFocus = true for the 0.6.2 full-fronting behavior.

  • Overview keyboard navigation changed. Arrow keys navigate spatially. Left and Right stay inside the current workspace, moving between windows that share a row and wrapping at that row's ends. Tab and Shift-Tab now cycle forward and backward through all matching windows instead of acting as horizontal navigation.

  • IPC visibility is more exact. SkyLight ordered-out windows now report isVisible: false / is-visible: false and are excluded by query windows --visible. Automation that treated visible-workspace membership as sufficient may receive fewer windows.

  • Display query output gained a field. query displays adds the fullscreen-uses-outer-gaps display field and its fullscreenUsesOuterGaps JSON property, which the display-changed subscription payload carries as well. Full table, text, and TSV output gain a FULLSCREEN GAPS column, so positional parsers must update. This is additive on IPC protocol 11; no command path, query name, selector, or existing wire field was removed or renamed.

  • Trackpad scroll sensitivity is normalized. Hand-edited values outside 0.1...100 are clamped before use, while nan, inf, and -inf use the default value of 5. The normalized value is written on the next successful settings save.

  • Direct OmniWMIPC source consumers have three removals. IPCWorkspaceSummary, IPCAutomationManifest.subscriptionDescriptor(for:), and IPCSocketPath.resolvedSecretPath(environment:fileManager:) are gone. The secret path can be composed with secretPath(forSocketPath: resolvedPath(...)). OmniWMIPC is not published as a library product, so this does not change the shipped v11 wire protocol or normal omniwmctl use.

No hotkey action IDs or default bindings changed in 0.6.3. The config and runtime-state locations, IPC socket path, and CLI command paths are also unchanged, and OmniWM still requires macOS 26+ on Apple Silicon.

Headline Features

  • Start at Login is now available under Settings → General → Startup. OmniWM mirrors the live macOS registration state, explains when approval is required, and links to Login Items. This is per-machine system state, not a portable TOML key. #593
  • Fullscreen outer margins can be kept globally or per display for OmniWM Full Screen, Niri maximized layouts, and the Single Window “Full Screen” fit. Workspace Bar reservations remain in effect; native macOS Full Screen is unchanged. The default is off, preserving previous fullscreen geometry once the settings file is updated or regenerated.
  • Focus without raise lets Focus Follows Mouse change keyboard focus without intentionally bringing an obscured window forward. The new setting can restore the previous raise-and-front behavior. #602
  • Performance Capture can be started from Diagnostics or the status menu, and Issue Reporting reflects a capture that is already running. It records bounded OmniWM-process CPU, energy, wakeup, I/O, and memory deltas alongside owner-local counters with low measurement perturbation, auto-stops after ten minutes, and retains the newest five performance captures. Problem captures also gain end-to-end frame lineage through intake, layout, AX writes, retries, and WindowServer observation.
  • Quake Terminal microphone support lets hosted terminal apps request audio-input permission through OmniWM. macOS may show an OmniWM microphone prompt the first time a child app requests it; omniwmctl remains unentitled. #597

Window Management and Focus

  • Tiled windows dragged by their native title bar now return to their authoritative tile after mouse-up, including delayed AX and WindowServer echoes. Modifier-driven Niri interactions and remembered floating geometry remain intact. #561
  • Temporarily hidden tiled windows reveal at the current accepted layout frame instead of stale historical geometry.
  • Windows returned to tiled mode before quitting now remain tiled after restart while retaining remembered floating geometry for a later toggle.
  • System-modal dialogs and hands-off application surfaces no longer trigger automatic focus recovery or get displaced by newly admitted floating windows. Focused dialogs also survive identity rekeys. #565 #577
  • When a focused floating app quits, OmniWM restores the workspace's retained tiled focus without disturbing Niri viewport or Dwindle selection state.
  • Background apps' stale AX focused-window callbacks can no longer steal focus from the actual frontmost app. Managed-focus retries are bounded and stale owned surfaces are retired. This is automatic; no per-app focus-stealing override was added. #594
  • Private window activation now posts a complete synthetic click, preventing Ghostty from retaining a missing mouse-up and buffering rendering. #569
  • Niri no longer snaps the viewport backward when the trailing column grows or leaves full-span mode. #580 #590

Overview, Animation, and Surfaces

  • Overview transitions now use a display-link session on each participating display, reverse safely when toggled mid-transition, and close cleanly when display topology changes.
  • Overview spatial navigation now respects visual rows and Niri column geometry, while Tab cycling stays linear across filtered results.
  • Dwindle animations begin only after their matching layout plan is accepted, so stale or replaced plans cannot leave phantom motion running.
  • Animation ticks avoid redundant AX size writes when trusted geometry confirms the size is unchanged. Border motion and size-preserving tab-rail moves are grouped into the display-link SkyLight transaction to reduce visual drift.
  • Abandoned gestures settle and release their display-link sessions instead of leaving animation work alive.

Lifecycle, Responsiveness, and Settings

  • Layout refresh and animation work pause while the screen is locked, then resume only after a usable post-unlock topology sample, protecting native-fullscreen and window state across lock and wake transitions.
  • Trackpad frames are coalesced in a bounded mailbox and duplicate scroll delivery is removed, preventing burst input from accumulating amplified motion.
  • Hidden Bar refreshes from app, display, activation, and panel lifecycle events instead of polling every second. It also discovers status items created by already-running apps and bounds unknown/open menu recovery.
  • Prevent Sleep now holds one continuous assertion only for the enabled active user session, releasing it on disable or session resignation and reacquiring it on return.
  • AX frame writes, notification queues, input queues, diagnostic storage, surface lifetimes, and focus retries are bounded and cleaned up deterministically under bursts and shutdown.
  • Core runtime paths avoid redundant AX/Core Foundation bridging, specialize frame-only updates, reuse unchanged reconciliation snapshots, and cache Overview and layout work to reduce allocation and copy churn.
  • The Diagnostics Private-API Probe now tests only eligible unmanaged foreign windows, confirms transaction movement through WindowServer, and restores a window only while its process, window ID, and observed origin still match.
  • Symlinked settings.toml files now survive atomic saves and recovery while preserving the resolved regular-file target and permissions. Dangling, cyclic, and non-file targets fail closed. #583

CLI, Documentation, and Thanks

  • The CLI reference now documents the complete existing command surface and clarifies layout-aware behavior. These documentation additions do not add or remove command paths.
  • The documentation now links the community-maintained OmniWM Computer Use skill and OmniCast Raycast extension.
  • The in-app and README credits now include crbelaus with BlueLabs affiliation, and ryoppippi (@ryoppippi) joins Omni Sponsors.
  • Alexander Dergachev (@Cy6erBr4in) contributed Start at Login in #593, Yuri Chukhlib (@YuriNachos) contributed the Overview navigation foundation in #581, crbelaus (@crbelaus) contributed symlink-aware settings in #583, and Ngo Quoc Viet (@NgoQuocViet2001) completed the CLI reference in #579 and joins the contributor list.

Release Integrity

The OmniWM app is Developer ID signed, Apple-notarized, stapled, and Gatekeeper verified.

  • OmniWM-v0.6.3.zip SHA-256: ac3443418394c6f9ed1f9980d44a176ba2cf7aa576ccddcea67683f9e1ce2e25
  • GhosttyKit.xcframework-v0.6.3.zip SHA-256: 5a5c57b470ce184cfa57e13b59732cb7d367101934658b4f9e5cf32a282264bb

Don't miss a new OmniWM release

NewReleases is sending notifications on new releases.