I used to be a heavy user of i3. It's very flexible and configurable, and you can do much more than just moving windows. But after I switched to Mac, I couldn't find a tiling window manager that was both feature-rich and stable. After trying several options, I just use Rectangle[1]. It's not a window manager; it only provides shortcuts for window placements like simply moving windows to left/right/top/bottom or splitting the screen into 3/4/6 sections and place windows. It covers 80% of my needs and there are no pitfalls or unexpected behavior, so now I'm happily using it. Another reason is that I'm getting old and tired of using very flexible software with tons of custom configs.
One thing rectangle does that I absolutely love is todo mode. I don’t actually use it for todo but having a windows set to always be visible and have the full window shortcut adjust based on that, cheffkiss.
Maybe I misunderstand what you mean, on one hand you say you want a window manager that's feature rich, on the other you say you're tired of using very flexible software with tons of configs. Aren't those two at odds with one another?
I wouldn't consider having good default configs and being feature-rich at odds with eachother. Ghostty is feature-rich but needs no config. There's no reason yabai needs to be so highly composable that it doesn't even have a hotkey listener by default and and instead points you to another piece of software that only translates hotkeys to shell commands and is no longer being maintained. i3 at least has a pretty usable default config.
Rectangle+Apptivate made me stop looking for an i3 alternative, after years. The first for moving windows, the second for switching between them with super+number, just like i3.
ooh nice. I'll have to check this out. I tried yabai and it just wasn't stable enough to use. Messed around with a few others and eventually gave up on the idea of a TWM on Mac altogether
This might not be sufficient for a lot of folks and I do notice sometimes a bit of struggle here and there, but for someone like me who mostly uses one widnow at a time on the Mac, or two screens when I have a external monitor setup along wiht my laptop, this thing kinda does it for me (but then I have never been a heavy "tiling" user at all) – https://support.apple.com/en-in/guide/mac-help/mchl9674d0b0/...
I get why full-screen plus trackpad gestures feel great on macOS—if you mostly work in a single window, that’s enough. But when the workflow becomes multi-window (terminal, editor, browser DevTools, logs, docs), predictable layouts start to matter. Tiling tools aren’t just “put two windows side by side”—they:
- Cut context-switching overhead: focus moves and rearrangements happen via keyboard without breaking flow.
- Create reusable “work panels”: replicate the same layout across projects/spaces, so you don’t keep “placing windows.”
- Make high-res displays useful: on 5K/6K or ultrawide, precise partitioning beats full-screen.
My compromise on mac is “light management” (Rectangle/Moom with a handful of shortcuts) for ~80% of needs; when I need stronger workspace semantics, I use Aerospace/Rift. Not everyone needs tiling, but once window count and switching frequency rise, its value becomes obvious.
I wanted to build my own window manager at some point, but was quickly scared away by the lack of a proper API on MacOS. You basically need to hack your way around it by using the accessibility API instead. I see this project uses Objective C bindings and the accessibility API and am wondering how easy it was to debug, write features and what kind of tooling was used for this.
The Accessibility framework is not what I would call a "hack" personally. It was quite well thought out and fully featured
I've spent the last month working on something similar in Rust with various macOS framework bindings and it's not really that scary
You don't really need anything other than a Rust dev env, rust-analyzer and a browser window with the Apple docs website and the objc2 crate docs.rs site open - no special XCode craziness required
Having just gone through really yak shaving Aerospace into a spot that I'm happy with, I'm curious how folks on here manage having so many overlapping keyboard shortcuts?
Maybe it's just me, but I want to map to many things to some combination of hjkl just for the ergonomics...
Aerospace's modal feature sort helps solve that shortcut conflict... How are others dealing with this?
They’re not, is the impression I get. I usually run into a shortcut conflict within the first few minutes of actual day-to-day use.
I switched to Aerospace about a year ago. I hide everything behind a leader key: alt+space. That brings me into Aerospace’s normal mode. I have a few alt-shortcuts there for quick access: e.g. alt-{hjkl} for moving between panes. But most things are in a dedicated mode. I have a ‘go-to’ mode and a ‘move-to’ mode. Once in either mode, pressing any letter or number will go to/move a pane to space corresponding to the letter/number. So for instance, if I want to move my terminal to space ‘t’ then I type `alt+space g t`. To move to the space I type `alt+space m t`.
I’ve been enjoying this setup because it feels like a natural extension of my terminal setup: zellij/tmux with leader key ctrl+space and helix (also modal) inside.
One thing I constantly struggle with in Aerospace, though, is its tendency to keep windows hidden after switching screens. You have to hunt for them in the bottom-right corner and just hope you can drag them back into view.
I tried Aerospace but the default was to map all alt keys to 26 different workspaces, eradicating all the built in emacs-like key shortcuts available in every app.
That plus there's zero tutorial on the basic key mapping, just a bunch commands and no hints about where to look for how to use it...
It is the most hostile piece of software I have encountered in years and I just spend the past few weeks mucking with sway and hyprland on Linux, and mucking in Linux bootloaders so that I can enter the disk encryption password both by serial port and the physical keyboard.
So I solved it by deleting aerospace and waiting to try a different rolling window manager, which will be Rift. I suspect in the end I'll just write my own tiling window manager. It certainly seems like there's one for every person who has ever had the whim to do so...
I did something similar. I use Karabiner and I mapped the right Option key on my external keyboard to Option+Shift (A1), and right Control key to Control+Option+Shift (A2). I've configured Aerospace such that if I want to change focus, I use `A1 + hjkl` to move the focus around, and if I want to move windows around, I use `A2 + hjkl`. I use `A1 + ui` to switch workspaces, and `A2+ui` to move windows between workspaces. For shifting focus between monitors its `A1+m,` and moving between them `A2 + m,`
By far these are the shortcuts I use most often and if there are apps with conflicting shortcuts, I change those to something else. I haven't thought about it much but I'm sure I can extend this pattern further for better ergonomics. It works great so far.
Meh (ctrl alt shift) and hyper (ctrl alt shift cmd). And I bind caps lock to meh on long press and esc on tap.
This gives me plenty of easily reachable hot keys. Eg I can switch between spaces with meh + number. I have terminal hot window bound to meh + space. Moving focus between windows is meh + hjlk.
Note that using Hammerspoon, you can build your own window manager.
Personally, I really like how Divvy (https://mizage.com/divvy/) uses a modal (press cmd-alt-ctrl-x, then press a single key to chose a layout for the frontmost window), but it's no longer maintained.
I use MiroWindowsManager (Hammerspoon plugin) to get what I need for window management on MacOS: the ability to position any window in any quadrant by 3 different variations of chord division, at will .. with the same hotkeys.
This means I can put things where I need it in milliseconds.
I've been using divvy, had no idea it isn't maintained... but I'm not sure if I'd need any more features outside of what it already does. What items do you want to see them add?
One reason I prefer Divvy^1 is that my custom keyboard shortcuts are usable whether typing directly the on laptop w/ trackpad, or (more frequently) on external keyboard.
[1] https://rectangleapp.com/
1. https://mizage.com/divvy/
Deleted Comment
tons of useless features means it does what other other people want.
This makes context switching bearable when working on several things.
Dead Comment
Dead Comment
On Windows there is no such thing as Moom, so I use tiling manager like komorebi.
As a person switching between different OSs and devices, it’s a shame that rift seems to not use well-established key binding like alt+hjkl.
Also for 5k+ display (or ultrawide) this kind of window tiling is a must (which komorebi has)
~Welp, I tried, but HN seems to render this not like I paste it~[1]: https://youtu.be/u3eJcsa_MJk?si=UnHjFXBsWir4QiTz
Deleted Comment
I've spent the last month working on something similar in Rust with various macOS framework bindings and it's not really that scary
You don't really need anything other than a Rust dev env, rust-analyzer and a browser window with the Apple docs website and the objc2 crate docs.rs site open - no special XCode craziness required
Maybe it's just me, but I want to map to many things to some combination of hjkl just for the ergonomics...
Aerospace's modal feature sort helps solve that shortcut conflict... How are others dealing with this?
I switched to Aerospace about a year ago. I hide everything behind a leader key: alt+space. That brings me into Aerospace’s normal mode. I have a few alt-shortcuts there for quick access: e.g. alt-{hjkl} for moving between panes. But most things are in a dedicated mode. I have a ‘go-to’ mode and a ‘move-to’ mode. Once in either mode, pressing any letter or number will go to/move a pane to space corresponding to the letter/number. So for instance, if I want to move my terminal to space ‘t’ then I type `alt+space g t`. To move to the space I type `alt+space m t`.
I’ve been enjoying this setup because it feels like a natural extension of my terminal setup: zellij/tmux with leader key ctrl+space and helix (also modal) inside.
One thing I constantly struggle with in Aerospace, though, is its tendency to keep windows hidden after switching screens. You have to hunt for them in the bottom-right corner and just hope you can drag them back into view.
I'm with you. Heres workaround: Instead of doing brute force, try toggling floating mode while the windows is focused.
That plus there's zero tutorial on the basic key mapping, just a bunch commands and no hints about where to look for how to use it...
It is the most hostile piece of software I have encountered in years and I just spend the past few weeks mucking with sway and hyprland on Linux, and mucking in Linux bootloaders so that I can enter the disk encryption password both by serial port and the physical keyboard.
So I solved it by deleting aerospace and waiting to try a different rolling window manager, which will be Rift. I suspect in the end I'll just write my own tiling window manager. It certainly seems like there's one for every person who has ever had the whim to do so...
By far these are the shortcuts I use most often and if there are apps with conflicting shortcuts, I change those to something else. I haven't thought about it much but I'm sure I can extend this pattern further for better ergonomics. It works great so far.
This gives me plenty of easily reachable hot keys. Eg I can switch between spaces with meh + number. I have terminal hot window bound to meh + space. Moving focus between windows is meh + hjlk.
Personally, I really like how Divvy (https://mizage.com/divvy/) uses a modal (press cmd-alt-ctrl-x, then press a single key to chose a layout for the frontmost window), but it's no longer maintained.
Thus, using OpenAI's Codex, I generated a modal window manager (https://github.com/ahamez/dot_hammerspoon/blob/master/wm.lua).
Thought it would be interesting to share this approach!
This means I can put things where I need it in milliseconds.
One reason I prefer Divvy^1 is that my custom keyboard shortcuts are usable whether typing directly the on laptop w/ trackpad, or (more frequently) on external keyboard.
1. https://mizage.com/divvy/
Dead Comment