What's New Since 0.7.6
OmniShell replaces the fixed workspace bar with an editable desktop shell: install styles from a gallery, arrange them in a visual editor, run Luau apps in windows OmniWM tiles, and decide which servers each widget or app may contact. OmniWM 0.8.0 also adds a workspace-aware window switcher, keyboard modes for shortcut clashes, drop zones and drags across displays, vertical Niri columns that scroll past the screen edges, and updates you can install from the update popup. Main-thread stalls measured during focus navigation drop too, with the figures and their limits under Performance.
OmniShell styles and widgets
- Restyle or replace your desktop shell. The workspace bar, Hidden Bar panels, popouts, edge drawers and Dynamic Islands are now drawn by editable, sandboxed widgets written in Luau, a small scripting language. In Settings > Styles & Widgets you can drag widgets between lanes and recolor a style to follow macOS or your wallpaper.
- Start from a full-width Default bar. Default, the only style inside the app, runs across the top of the screen, and when it covers the native menus, its Apple and app menu widgets open them from their buttons.
- Install styles from the gallery or from any public GitHub repository. Settings > Styles & Widgets > Get Styles downloads Celestial, Lake, Matrix, Nocturne, Sakura, Wayline and Vitreus, each with preview pictures. Add from GitHub… warns before install that a style runs code in OmniWM.
- Try Vitreus, a liquid-glass style. Vitreus, a port of natepayn3's Vitreus (MIT), adds glass Island and Frame layouts and panels you can pull out, stick to a screen edge or store on a top shelf. It also names every workspace on its marks and shows app icons beside them, which preview their windows on hover and move a window when you drag one to another workspace, plus a scratchpads list, a System Stats button and fuller notification rows.
- Get the same features in the shared styles. Default, Celestial, Lake, Matrix, Nocturne, Sakura and Wayline draw their widgets from one shared set, including a calendar popout, synced lyrics and per-app volume.
- Browse and act on macOS notifications from the bar. With Full Disk Access to read the list and Accessibility for actions, you can dismiss a notification, clear them all or reply where the notification supports it.
OmniShell apps in windows OmniWM owns
- Build Luau apps that open in their own tiled windows. OmniWM tiles, focuses and closes these windows like any other, and you can open an app from the palette, a shortcut or the command line. Utility windows such as Preferences drag without the lag macOS adds to child windows. Windows don't come back after a restart.
Network permissions
- Choose which servers each widget or OmniShell app may contact, and which programs it may run. Each can reach only the servers it declares, and the first time it contacts one you have not decided on, OmniWM shows one prompt with its name and its own stated reason. A native program asks for your trust before it first runs and again whenever it changes.
- Review it all on one page, or set it for an organization. Settings > Network & Permissions lists the servers and native programs of every installed widget and OmniShell app. Managed preferences can preapprove or block servers and stop native programs, but these controls don't cover update checks, style downloads, terminals or links opened in a browser.
Workspace Bar and menu bar
- Use Hidden Bar again on macOS 27.2. Hidden items work again there and also under a full-width bar, and right-clicking the OmniWM icon opens the Hidden Bar right under it, though items that need the native menu bar revealed can still flash.
- Choose what the status menu shows. A new Status Menu tab under Settings > Menu Bar can hide its controls and rows, while Quit always stays.
Window management
- Switch windows with thumbnail previews. Turn on Settings > Window Switcher to cycle through windows in a preview grid, by default with Command + Tab (active workspace) and Option + Tab (all workspaces). Thumbnails need Screen Recording and the shortcuts need Input Monitoring.
- Use keyboard modes to hand shortcuts back or run single-key actions. New unassigned actions add Pause, which gives shortcuts back to the focused app, and one-shot Prefix and sticky Window modes that run single keys you set (these two need Input Monitoring).
- Keep native edge resizes of tiled windows. Turn on Keep Native Edge Resizes so a normal edge or corner drag no longer snaps back, except at a workspace's outer Dwindle edge.
- Fix everyday window behavior. Windows an app hides but keeps alive, such as Messages after you quit it, now leave the layout while hidden, and the wallpaper no longer shows for a moment during a workspace switch. A new window from a busy app, such as Ghostty on a second display, now stays where the app put it for about 30 ms instead of 120 ms before OmniWM moves it, which shortens its flash on the wrong display.
- Stay safe when permissions or the lock screen change. Turning off Accessibility while OmniWM runs now stops its services until access returns, and on Macs with Platform SSO, sign-in agents on the lock screen can't resume layout early and move windows onto one workspace.
Niri and Dwindle
- Choose swap or insert by where you drop, even on another display. With the mouse-move modifier held, dropping on a tile's center swaps and dropping near an edge inserts, and drops on another display work the same way between Niri and Dwindle in any combination.
- Navigate to off-screen columns from the screen edge. Clicks and hover at a Niri screen edge no longer land on the window parked behind it, and a directional fin moves one column instead.
- Scroll vertical Niri columns past the top and bottom edges. With Screen Recording permission, an inactive column past the top edge stays on screen as a live, clickable picture while the real window stays parked. Apps that stop drawing while parked, such as Ghostty, show their last image, and without the permission the usual macOS edge behavior stays.
- Tune Niri with new options. You can keep focus follows mouse from focusing a partly offscreen neighbor, let trackpad scrolling go past the first or last column, and swap a lone window with its neighbor instead of stacking it.
Overview and gestures
- Chain workspace swipes, and choose what happens at the ends. A swipe started while the last one is settling continues from its destination, so quick swipes can cross several workspaces, and at the ends you can cycle, stop or move on to an empty workspace.
- Read fingers and directions more reliably. A palm or hand edge resting on the trackpad no longer turns a two-finger scroll into a three-finger swipe, and a workspace swipe or Overview gesture that starts diagonally can now settle its direction instead of doing nothing.
Command palette, Launcher and Quake
- Run saved commands, scripts and command-line tools from Launcher. The palette's Applications mode is now Launcher, and saved commands and scripts run in the built-in Quake terminal, another terminal or the background. Terminal and iTerm2 may ask for macOS Automation access.
- Leave private items out of clipboard history. History now skips what macOS marks as excluded, such as AutoFill passwords, one-time codes and private-browsing copies. The check adds about 26 µs per changed clipboard capture, on the clipboard worker rather than the main thread.
- Use Kitty or foot as the Quake terminal. Choose one under Settings > Quake Terminal > Terminal; Kitty's shell sessions survive toggles and OmniWM relaunches.
- Run the built-in Quake terminal on a newer Ghostty. Its embedded Ghostty engine is updated to the November 7, 2026 source.
Settings, updates and first launch
- Install updates from the update popup. An Install and Relaunch button downloads the release, checks its digest, version, signature and notarization, swaps the app in place and relaunches. It appears only when OmniWM can write to its own app and the installed app is signed and notarized, so Nix store, read-only and locally signed installs keep the manual actions.
- Find settings faster, and get started from a Welcome window. Settings is now grouped into searchable pages, and rejected settings file edits show a notice on screen. New and upgrading users see Welcome to OmniWM once, and the permissions window now has a Don't ask about Screen Recording again checkbox.
Automation and command line
- Control more from hotkeys and
omniwmctl. Keyboard Shortcuts gains unassigned actions for volume, media, shell drawers and widget popouts, andomniwmctlcan run them too. It can also act on a window or its Niri column without moving focus, and its queries report focus history and each widget's state.
Performance
- Stop window title changes stalling focus navigation. In Release builds on an Apple M4 Max with macOS 27.2 and Swift 6.5-dev, over 30 s of focus commands every 150 ms through IPC while one app changed its title 76 times per run, the focus command round trip fell from 201.8 ms to 16.8 ms at the 95th percentile (-92%) and from 481.2 ms to 25.2 ms at its maximum (-95%), with the median unchanged at 8.1 ms. These are round-trip times, not display latency.
- Hide the focus border without waiting on WindowServer. Fast focus sweeps across Niri columns froze individual animation frames for 55-400 ms. In three alternating runs per Release build on the same setup, each 25 s of focus commands every 100 ms over IPC across 9 columns, the longest interval between animation ticks fell from 193-272 ms to 14-20 ms and the longest focus command round trip from 160-238 ms to 19-22 ms, with the median unchanged at 7.6-7.8 ms. These are round-trip and main-thread times, not display latency.
- Keep Niri slides on time. In Release builds on the same Mac with macOS 27.3 at 144 Hz, about 7 focus commands a second over IPC for 45 s, three runs each: with Vitreus and 9 windows, late animation ticks fell from 6.2-6.7% to 1.9-2.2% once the bar stopped repeatedly resizing itself and hidden windows were read in one query. With 12 windows, using the positions OmniWM set for parked windows instead of asking WindowServer during a slide cut late ticks by a further 90%, from 60-73 to 5-9 per run. Retain and release calls per focus move fell 36%, and the process used 6.13 s of CPU per run instead of 7.74 s. These count late ticks and CPU, not display latency.
- Move the focus ring, tab rails and edge pictures in WindowServer. Their ordinary moves and ordering no longer wait on AppKit frame updates, though resizes and display changes still do. Each tab rail now also sits above its window's focus ring. The ring no longer lags behind a slide, so it can lead a slow app for a moment during the fastest part of one.
- Take more mouse input off the main thread. Unmodified wheel input, two-finger scrolls and clicks OmniWM isn't capturing now pass on their own thread, and Mouse Warp crossings run on a dedicated pointer thread. A captured trace of the old Mouse Warp path showed the main run loop busy for up to 435 ms; measured live on one staircase display arrangement, 26 crossings completed 107-322 µs (median 208 µs) after the event reached the pointer thread, independent of main-thread stalls.
Translations and documentation
- Translate more of the shell. Built-in widget option titles and choice labels can now be translated, with Simplified Chinese complete. Most are still English in other languages, as are many of the Styles & Widgets editor's new labels in every language.
- Learn the Niri keys in your browser. The website's playground adds nine short lessons, then free play.
Breaking changes and upgrade notes
- The workspace bar is now OmniShell, and its style sets the layout. The old fixed bar views are gone. With Default, the bar becomes 32 pt, full width and over the menu bar, reserves layout space and shows System Stats, and a style's values take precedence over the same
[workspaceBar]andmonitorBarOverrideskeys insettings.toml. Change them in Settings > Styles & Widgets > Bar. The System Stats button needs thesystem-statswidget in one of the bar's groups. - Full-width bars change a macOS setting. Unless it sits at Below Menu Bar, an enabled full-width bar, including Default's, sets macOS's Automatically hide and show the menu bar to Always. Your previous choice returns when the last such bar moves to Below Menu Bar, is disabled or hidden with Toggle Workspace Bar, or OmniWM quits normally, if the macOS setting still matches what OmniWM applied. A crash can leave automatic hiding on; relaunch OmniWM and do one of those to restore your choice.
- Some widgets ask for new optional permissions. Per-app volume and the audio spectrum ask for System Audio Recording, the calendar widget for Calendars, the Wi-Fi network name for Location and the Bluetooth widget for Bluetooth. Lake's Reminders component asks for Reminders, which Vitreus's calendar drawer also needs to show and add reminders. Log out, restart and shut down buttons in Celestial and Vitreus may ask for macOS Automation access. Reading notifications needs Full Disk Access.
- IPC protocol is now 22, previously 19. Update
omniwmctland custom IPC clients alongside OmniWM; an older client reports a version mismatch. The bundled CLI already uses the new protocol, which addsomniwmctl shell, window IDs on mark lists, column modes on workspace queries and focus history on window queries.omniwmctl command open-command-palette applicationskeeps its name and opens Launcher. - Settings schema is now 5, previously 4. You don't need to edit anything: the six resize span actions change from IDs like
setContainerPrimarySpan.decrease10Percentto grow and shrink IDs likeresizeContainerPrimarySpan.shrink, with your bindings kept. The upgrade writes asettings.toml.pre-v5backup, then rewrites the file once, which can reorder keys and removes comments; malformed bindings are rejected and left unchanged. OmniWM 0.7.6 can't load a schema 5 file, so restore the backup if you go back. If you add[[monitorGapOverrides]]-style tables by hand, first delete any leftover line such asmonitorGapOverrides = []. - Mouse drops and Niri screen edges changed. With the mouse-move modifier, only a drop on a tile's center now swaps, in both layouts. A drop near an edge inserts, and Shift, which used to select insert in Niri, changes nothing. Clicks and hover at a Niri screen edge use the fin instead of reaching the parked window, and where a fin's edge also leads to another display, Mouse Warp and native crossings wait until you push outward 96 points, while window drags keep crossing immediately.
- Three bar behaviors changed. Reveal on Modifier Hold now applies only to bars with automatic hiding on, so if you used a modifier alone to hide the bar, turn on Automatically hide and show the workspace bar, which also enables hover reveal. Below Menu Bar now turns Fill Left of Notch off without changing the saved setting, so a bar with both settings moves below the menu bar. Clicking a Hidden Icons Bar icon opens the app's menu in a dropdown when OmniWM can read it. Apps without a readable menu, including items hosted by MenuBarAgent on macOS 27.2, keep their native activation behavior.
- App Rules and Adobe windows may change placement. A rule that used to lose to a more specific one now applies the settings it sets, and Adobe Creative Cloud windows tile unless an App Rule with the Float layout says otherwise.
- The Quake terminal moves with Command + Option drag. Plain Option drag now reaches Ghostty and selects a rectangular block of text. In apps that capture the mouse, such as tmux or vim, use Shift + Option drag for that selection.
- Some Settings pages moved. Hotkeys is now Keyboard Shortcuts and Monitors is now Displays. Niri Layout and Dwindle Layout are now tabs of Layouts, beside a Spacing tab that takes the window gaps from General. Borders is now the Window Borders tab of Appearance, where System-wide Window Corners also moved. Workspace Bar is now Styles & Widgets, Hidden Bar sits under Menu Bar, and App Rules has its own page as well as its menu item.
- System requirements are unchanged, but building from source is not. OmniWM still runs on macOS 26 or later. Building it now requires a macOS 27 Mac with Xcode 27, the Swift 6.5 development snapshot pinned in
.swift-versionand installed through swiftly, and Lix or another Nix with flakes formake setup. Older toolchains reject the package.
Thanks
Thank you to:
- Luke Stephens for the workspace-aware window switcher with thumbnail previews and its Window Order setting.
- Richard Ginzburg for targeted window and column actions in
omniwmctl, keeping the view still when Overview moves a column, keeping the focused column in place when an earlier one leaves, re-tiling background windows from the workspace bar without taking focus, a column of its own for a released scratchpad window, thefocus-rankfield and--sort mru, the matching palette dismiss fade, removing the WhatsApp ghost column, and palette, shell, test and completion fixes (#878, #879, #881, #927). - Panuphong Burakitphachai for the option to move a lone Niri window without stacking it and hotkeys that open or focus Launcher apps.
- Zhizhen He for positional Dwindle drops (#875, #897, #910), Dwindle resize limits for collapsed splits, live Dwindle neighbor resizing during native drags, native resizes that survive drag handoffs (#1071, #1094, #1096, #1097), Keep Native Moves Across Displays (#933, #957), symlinked shell and settings configuration (#979, #992, #993, #998, #1005, #1020, #1025), file watches that don't exhaust descriptors (#1006, #1026), widget fallbacks (#980, #981), Canary update checks and labels (#983, #995), switcher previews for one or two windows, dangling CLI symlinks, Below Menu Bar placement (#1013, #1070), per-display reveal modifiers, Hidden Bar native popovers, clean environments in reused terminals, per-display Niri trackpad centering, notification dismissal with missing details, permission prompt fixes (#1022, #1023), Vitreus notch and overflow fixes (#1068, #1079), bounded lifecycle Accessibility probes, wallpaper capture cropping, widget option translations (#968, #972), Debug rendering budgets, hosted app IPC wire files, documentation (#951, #989, #990, #1011, #1024, #1057), and tests, CI and website upkeep (#912, #913, #915, #925, #926, #928, #948, #971, #982, #1003, #1004, #1010, #1028, #1062, #1077, #1078, #1084, #1093, #1098, #1102).
- mao for stopping services when Accessibility is revoked, letting a diagonal swipe settle its direction, and recovering previews when ScreenCaptureKit stops answering.
- Brendan Doney for swipes that follow the gesture's axis, bar space in Fill Left of Notch, swipe behavior at the ends, chained swipes per display, and borders with no color.
- millia ampora for Install and Relaunch and its launch fix, glass and snapshot resize previews (#899, #917), mouse input off the main thread (#888, #935), lighter WindowServer and Accessibility work (#864, #865, #869, #884, #936, #1053, #1054), Hidden Bar on macOS 27.2, under full-width bars and inline (#975, #976, #977, #1041), root widgets that declare their hosts, the Icon color option, widget option declarations, menu widgets left of the notch, skipping the Screen Recording prompt, border fixes (#857, #858), Niri span, resize and full screen fixes (#873, #874, #903), the resize action migration, floating windows across displays, Adobe tiling, parking after framing, mark and column data in IPC, strip scrolling in Overview, blur during swipes, live wallpaper capture, shortcuts on non-QWERTY layouts, Launcher follow-ups in #997, shell and input fixes (#919, #941, #970, #973, #1001, #1075, #1108), the Niri playground, Fluxer links, and tooling, tests, CI, design and documentation work (#886, #887, #906, #920, #921, #929, #930, #931, #959, #964, #965, #966, #987, #988, #1007, #1008, #1019, #1021, #1036, #1037, #1038, #1058, #1059, #1069, #1084).
- Anton Plotnikov for hotkeys that open the command palette in a mode.
- CarlitoGrey for tracking lock state from session notifications and restoring minimized windows from the workspace bar.
- Chanatun Kohsuwan for keeping Overview search below the notch.
- Taylor Bell for the planning and tests behind atomic Niri window gather.
- CallMeLaNN for zsh completions loaded through
eval. - Aleksei Gurianov for Niri edge overscroll and readable Settings tabs when a page opens from search.
- Henrik Larsson Hestnes for letting Option drag reach Ghostty in the Quake terminal.
- Kiel Ed for fully visible hover focus in Niri.
- Fakhri Shirinov for ignoring palms when counting trackpad fingers.
- Fletcher Alderton for the configurable status menu.
- Steven Nance for keeping the Quake tab bar fill inside its bounds.
- Moritz Sanft for mouse wheel sensitivity and keeping portrait windows off neighboring displays.
- Josh Taylor for
omniwmctl --versionand-V. - Nuno Lopes for keeping the Global label of overridable settings from crashing accessibility.
Full changelog: v0.7.6…v0.8.0
Official website and documentation: https://omniwm.app
Installation guide: https://omniwm.app/guides/install/
Release Integrity
Asset hashes are sealed by the release manifest after final note review.