Window managers on macOS (and Windows) are auxiliary programs that try to complement the system’s own handling of windows, and are not as powerful as X11 window managers. However, there are a few exceptions, and as I started using bigger and bigger (and more) displays I’ve been using them on a daily basis.
My requirements change over time and in different circumstances (sometimes I need an automatic tiling window manager, sometimes I just want good window snapping to predefined zones), so I experiment a fair bit–the listing below contains most of my favorites over time in various operating systems.
Resources
Apps are listed as primarily keyboard or mouse driven even though most support both kinds of input. What matters in that classification is the fastest way to arrange windows.
Some commercial solutions (and potentially insecure Mac solutions like yabai
, which require you to explicitly disable System Integrity Protection) are intentionally ignored.
Category | Platform | Link | Notes |
---|---|---|---|
Automatic Tiling | Linux | niri | A scrollable tiling Wayland compositor inspired in PaperWM |
Hyprland | a highly customizable dynamic tiling Wayland compositor |
||
cortile | An auto tiling manager that provides tiling window management atop existing window managers |
||
PaperWM | A scrollable tiling GNOME Shell extension |
||
Windows | komorebi | Seems to support a number of common tiled layouts |
|
Whim | i3-inspired, configured using C# scripting |
||
Amethyst Windows | An XMonad-like tiling window manager for Windows |
||
glazewm | i3-inspired with rules for specific windows or monitors |
||
Workspacer | Also XMonad-like, configurable via C# |
||
macOS | Amethyst | An XMonad-like tiling window manager for the Mac that I quite like. |
|
CLI | tile | a CLI tool that can be used to script window manipulation |
|
Keyboard Driven | Windows | win-vind | vim keys everywhere |
macOS | ShiftIt | My fork of ShiftIt, which was somewhat popular among my colleagues at SAPO. |
|
Magnet | simple, straightforward, very effective, available in the App Store |
||
Moom | My 2012-2021 window manager, which allows you to store predefined layouts but wasn’t scriptable. The 2024 edition adds FancyZones-like functionality and a bit more flexibility. |
||
Manual Tiling | AeroSpace | My 2024 favorite for tiling. Provides a fast, snappy i3-like tiling window manager for macOS with its own workspace support, and the default config uses |
|
Mouse Driven | Linux | tilingshell | a GNOME extension that provides an absolutely excellent FancyZones-like functionality |
Windows | FancyZones | Arguably the best Windows 10 PowerToy, has awesome zone snapping features that have (so far) no equivalent. Excellent for multiple displays. |
|
macOS | Loop | Uses a radial menu to manage windows |
|
Penc | a trackpad-oriented window manager with gestures for moving, resizing and snapping windows |
||
Dynamouse | not really a window manager, but a way to associate multiple pointing devices with specific displays |
||
Swish | a gesture-driven window manager with window snapping and some grid functionality |
||
Hookshot | Actually a mix of keyboard and mouse driven actions, but very much mouse driven with quick actions. |
||
Divvy | traditional, quick mouse-drawn window snapping (Moom implements a similar approach) |
||
Lasso | mouse-driven, grid-oriented, with support for custom layouts |
||
BetterSnapTool | My 2024 favorite for FancyZones-like functionality on the Mac. |
||
Scriptable | spacehammer | A prebuilt, highly sophisticated Fennel configuration for Hammerspoon |
|
Autumn | a nice, also JavaScript scriptable window manager that includes an IDE. In May 2021, the IDE hangs up weirdly in Big Sur, so I opted for Phoenix instead. |
||
Phoenix | My 2021 favorite, fully scriptable in JavaScript. Can replace both Moom and Amethyst for me with this config. |
||
Hammerspoon | Scriptable in Lua or Fennel |