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.
Divvy has a pretty UI to choose the size and location of windows, and puts little buttons in the top corner of windows to change their size and location.
Rectangle provides hot keys and an icon in the menu bar to set window size and location.
I use rectangle now, but have used divvy in the past and I think is better for people who like to use their mouse vs hot keys.
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.
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.
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/...
Does anyone have nix flake for this? I am trying out several window managers after yabai. Aerospace is just laggy sometimes, not sure if it is to do with the events I emitted for it to display nice workspaces in sketchybar.
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
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.
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.
I don't get it. Why anyone would need to use tile manager in macOS?
How often do you need to have apps side by side?
In most cases, just making the app full screen and switch between windows with 4 finger swipes does the job beautifully.
Enlighten me please
Literally all the time. Slack on the right quarter. The rest is browser / terminal / ide / others in various combinations depending on the task. Quite often it's browser + log tailing. Every app also has subdivisions: vs code can be multi-file + terminal. Terminal itself is multiplexed. Browser is Zen with side-by-side pages quite often.
If you ask me, this will cause more distraction than being productive. In your example, would Slack be needed all the time, so it would worth keeping a quarter of the screen?
Then IDEs for example have a lot of menus, panes, buttons and everything. You would have much less space for the actual code if you not have it in full screen mode.
It might be personal style, but I find having 3 full screen windows and swtiching between them (with the most used, browser, in the middle) with a quick swipe is the most productive.
Not on MAcOS, but I imagine the reason is the same as mine for using tiling on Linux.
If you are using a small laptop your argument holds.
However, the larger your monitor the more the benefits of having things side by site. I do it all the time. A document I am writing an email about and the email open side by site. Editor, terminal and VCS GUI open at the same time. Documentation and code open side by side. Template and web browser. Accounting software and bank statement. File manage and absolutely anything. Chat window and whatever you are discussing.
I find it easier and more productive most of the time.
I won't speak to "needing" a tiling window manager but "just making the app full screen and switch between windows with 4 finger swipes does the job beautifully" - you you.
I have disabled most gestures, animations, and multiple desktops (spaces?) in macos. The swiping between each of these full screen apps is painfully slow to me. It's compounded by needing to pass through an app to get to one on the other side, meaning it could be 2 or 3 swipes before the app I need is the one on screen. When I see someone swipe the wrong direction and quickly swipe back it makes me cringe.
When I want an app on screen I don't want to perform mental calculation for how many steps away, nor do I ever want to have to pass through an app to get there.
I used to switch spaces but it’s worst for mental load than having everything on the same screen for big screens. I have 3 32inch screens (2 vertical on each side) and full screen apart from IDE like does not often makes sense. So splitting is like having smaller screens at all time and remove the need to find back which virtual screen has which apps. Like there is chrome on several virtual spaces if you cmd-tab on chrome it does not always choses one one you want. You have to get back manually at the screen which is cumbersome.
When I use only the MacBook I tile less and use more virtual screens to organize the windows because there is less real estate.
Slack, several chrome (render of code, doc, clickup etc), terminal, IDE, postman, datagrip all within a shortcut of being focused and without changing the whole screen.
I guess that depends on your needs but having the equivalent of 8 screens the size of the MacBook at all time it’s really awesome and makes me really productive, r-cmd allows me to focus on app app with a shortcut so it’s really fast. No more switch between desks is a relief to find back where my windows are
There are definitely times it is useful. For example, a web browser with docs next to an IDE, or perhaps some other workflow where you are transcribing from one app to another. I will agree most of the time I do prefer full screen and use virtual desktops to swap back and forth, but it depends on the scenario. Also, some apps just don't need that much screen real estate (like my terminal, spotify, discord, chatgpt, etc.) and often look perhaps even odd full screen, so I just tile them into quarters on one virtual desktop.
If I’m writing something using a reference text (code+docs or anything else), if I have to fully the transition the screen between the editor and the reference, I will forget whatever I just read and intended to write. I need the reference in my peripheral vision so I can rapidly glance back and forth between the two.
The usual setup = terminal is the central half with nvim being one half of that, sometimes also split into two side by sides, sometimes not; two terminal tabs in the right pane (zellij). Browser = left quarter. Right quarter is whatever, slack, gmeet etc.
Nobody needs anything, it's all about preference. I keep apps side-by-side all the time, but by using the same style of window manager across each OS I use (I use Mac, Win, and Linux) I'm able to keep a similar workflow, instead of needing to cater to each OS' prescribed workflow.
You sound like you're asking me why my favourite colour is red, because it's perfectly fine to have blue as a favourite colour. Of course it is fine, I just like red better.
No no, I can't find a reason to use a highly configurable tiling manager tool for that. Something like Moom will do the job.
But then I can't find a reason to have more than two windows in a viewport
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.
error[E0554]: `#![feature]` may not be used on the stable release channel
Now I get I may have to switch to some beta rust version, so I did a "brew install rustup" and tried again "cargo build --bins --release" but same error.
It'd greatly help if there was a step-by-step installation guide. I'm not into rust, so I'm getting a bit lost here.
I think the problem is, that I installed rustup with homebrew. When I installed rustup in the official way, with the shellscript, I was able to compile according to instructions. Might be my installation though.
I've moved from window managers to deterministic app switching with Rcmd mapped to capslock and dual cmd being tied to some window arrangement and screen swapping karabiner commands.
I've switched to what I consider a french cleat system where I have task specific app/window sets and only keep a single task open at a time.
Similar to how french cleat walls are for general storage but then you can arrange all tools for a project on a specific cleat for the duration of the project.
How many apps must a person use in reality that rcmd+letter isn't sufficient for deterministic switching?
Any web app that isn't just general browsing I have mapped to a safari app now, gmail, llms, etc. chrome's tab management is just a joke.
Never understood this.. Window arrangements depends on what I'm doing inside those app, and where I want it. That's not a static thing. I use rcmd as well, but I usually like to keep the app I am using in the middle of the screen. Perhaps with something on the side (since I have a large 4K) as there's plenty room for it.
I mostly full-screen each app, deterministic switching means I only real need alt layouts if something forces a cross window dnd. But I just use capslock+cmd and jkl; plus a few other keys to handle any adhoc positioning I need. j is left quarter, jk left half, jkl left 3/4, kl middle half, l fullscreen, etc, hitting them again cycles to top half bottom half.
So with left hand caps+cmd and right hand home row I can basically do any of 1/4 2/4 3/4 4/4 increment combos with one chord and hit them again for top half bottom half.
I don't really do single quarters ever except on far left or right so that's why l is mapped fullscreen.
it works very well, was a long time user of btt before I got tired of it randomly failing.
a karabiner script handles the key chords and dumps them to yabai
I used to use tiling window managers on macOS and in the end it got a bit tiring that after every update something broke. It seems like all of them are fighting the system in some very brittle ways.
In the end I just learned some shortcuts that Apple provides for moving windows around. I still much prefer working on Linux, but this is at least usable and i do not have to fix it that often.
I used to be a big user of tiling window managers but, more recently, I’ve discovered that the workflow of something like Moom is nicer in more situations.
Moom is an absolute crucial piece of software that I've gladly paid for upgrades to over time to support it.
There's also BetterSnapTool, which I used to use, but I think switched to Moom for specific features at one point in time. It's even cheaper and still receiving updates to continue working.
The main reason I use Moom is being able to move and resize windows using nothing but the keyboard, which is something most tiling window managers completely ignore.
@rcarmo Totally agree on keyboard-first workflow. It's interesting how
different tools optimize for different input methods. Some prioritize
trackpad gestures, others keyboard shortcuts. Would love to see more
hybrid approaches.
What is quite upsetting about macOS tile managers is they only seem to work with windows in 'maximum' mode rather than 'full screen', so you always end up wasting screen real estate at the top. (ghastly!)
I see from the animated gif Rift is like this, and Rectangle is too.
I personally hate full screen mode. Not sure why it bothers me so much to not see window decorations and menus, but it drives me crazy. I go out of my way to ensure they fill full screen, but just a maximum size, not full screen mode. To each their own I guess.
I have been using Loop(https://github.com/MrKai77/Loop) after trying some of the alternatives listed here and wanted to post that as it was not mentioned. It is something that solves what I was looking for in window management on macos and just putting it out here :).
After playing with it for all of 30 seconds, my thoughts are:
1. It's ridiculously fast. Not that it matters that much, Aerospace is fine for me.
2. I somehow doesn't require any accessibility permissions... so it "just works" after running the CLI...
3. One thing I immediately noticed, is that it looks like moving a window to be accordion can be done in the same workspace?
So far I'm very impressed... not sure if I'm impressed enough to switch yet though... but being in rust does make it slightly easier for me to contribute
yabai uses native macos spaces and generally requires sip to be disabled to have a good experience(windows can't be moved between spaces without)
rift is essentially aerospace but implemented in a yabai style. yabai style meaning using low level, private apis and generally focusing more on performance. whereas aerospace prides itself on only using one private api.
usage wise, aerospace and rift both use a virtual workspace system where all of your (work)spaces are in one macos space so no red tape has to be cut in order to move windows from ws -> ws and so forth
Does rift handle native MacOS tabs like the ones ghostty and finder use? I might give it a shot. I have been having a couple of issues with Aerospace lately.
No, rift also has problems. For example, if I have Calendar on the left, and Finder on the right, and I open a tab in Finder, then it looks like it works.
However if I close the 2nd Finder tab, then Calendar maximizes below Finder.
Also I am wondering if you could estimate how difficult it would be to implement something like Niri? I much prefer the scrolling style tiling, but none of the MacOS WMs seem to be going that route (other than PaperWM.spoon which is not for me).
to answer both comments:
i've been working on a way to handle tabs but it's hard to find a solution that isn't half-baked due to the lack of info on tabs given by the os (there are no events or anything, just on a11y attribute that give info on tabs)
as for a scrolling layout, its possible, but does not fit that well with rifts layout, even thought you can get something similar using trackpad swipes to switch between workspaces
Aerospace readme says they have a solution for tabs in mind based on their big refactor.
Haven’t looked into what this looks like, but understandable that it hasn’t made its way to rift yet. I will be trying out rift and report any issues on Github.
I think the root cause is that the default window manager was just horribly designed for a long time. Instantiating new windows of an App is still a horribly designed, deeply frustrating workflow on Mac OS that is just seamless and easy on Linux and Windows. I ended up linking Aerospace to some godawful Applescript just to be able to open a new Safari window without being flung across spaces to an existing Safari window first.
Apple does some things best in class but the core design of windowing & using applications is just awful imo.
This is not true. The private api's we use are not hacks to work around macos spaces and are actually the basis of how appkit and the os in general works. They are essentially guaranteed to be stable and also not to be removed because they have been in use for many many years with no change.
The private api's that have been broken (as experienced by yabai) are strictly related to things that rift does not interact with like moving windows between macos spaces(since we use a virtual workspace system).
I have been using aerospace which provides very similar window managing to i3 and so far I have had no issues. I personally don't like the animations or the typical "ricing". Installing random, unmaintained software just for the looks sounds extremely reckless to me
I've tried using i3-likes on MacOS but the lack of a mod key is really hurting usability for me. Also, they tend to not be like dwm where each screen has its own virtual desktops, which is not how I'm used to work.
I use aerospace combined with karabiner, the latter of which allows me to set caps lock - a key I never really use, to meh & hyper. Worth checking out if youre missing a mod key
A killer feature that none of the tiling managers for macOS will ever implement for reasons I don’t know why:
Make it so I can double tap the cmd key to see outlines of windows and allow me to swipe using the touch board to shift windows around into pockets space.
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.
[1] https://rectangleapp.com/
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.
Shoutout to Rectangle for having Spectacle keybindings option. Maybe one day I will learn the normal ones but I am too used to them at this point
Similar experience and pov here -- but w/ Divvy^1 (not Rectangle).
1. https://mizage.com/divvy/
So this app you recommend is not open source and does the same thing as Rectangle?
Divvy has a pretty UI to choose the size and location of windows, and puts little buttons in the top corner of windows to change their size and location.
Rectangle provides hot keys and an icon in the menu bar to set window size and location.
I use rectangle now, but have used divvy in the past and I think is better for people who like to use their mouse vs hot keys.
Divvy has custom hot keys! My prev comment's main point was "keyboard only FTW".
I too recommend Rectangle. It made transition from Linux significantly less painful.
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.
flexible usually means "it does what I want".
tons of useless features means it does what other other people want.
With 5k/6k displays ordinary tiling is a joke: windows are too big. So apps like moon are far better option.
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~komorebi is coming to macOS[1] soon :)
[1]: https://youtu.be/u3eJcsa_MJk?si=UnHjFXBsWir4QiTz
If you indent your pasted stuff by four spaces, HN treats it as code. That might help.
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.
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/...
Is this Tahoe exclusive? I had never seen it before.
no, those shortcuts also work on earlier versions
Thank you, I had no idea it existed !
If you're at the point of installing tiling window managers on MacOS.. Linux is what you want
Does anyone have nix flake for this? I am trying out several window managers after yabai. Aerospace is just laggy sometimes, not sure if it is to do with the events I emitted for it to display nice workspaces in sketchybar.
I might try this later.
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
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.
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!
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.
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...
funnily i don't use alt much on emacs and this went smooth as butter.
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.
I don't get it. Why anyone would need to use tile manager in macOS? How often do you need to have apps side by side? In most cases, just making the app full screen and switch between windows with 4 finger swipes does the job beautifully. Enlighten me please
Literally all the time. Slack on the right quarter. The rest is browser / terminal / ide / others in various combinations depending on the task. Quite often it's browser + log tailing. Every app also has subdivisions: vs code can be multi-file + terminal. Terminal itself is multiplexed. Browser is Zen with side-by-side pages quite often.
If you ask me, this will cause more distraction than being productive. In your example, would Slack be needed all the time, so it would worth keeping a quarter of the screen? Then IDEs for example have a lot of menus, panes, buttons and everything. You would have much less space for the actual code if you not have it in full screen mode. It might be personal style, but I find having 3 full screen windows and swtiching between them (with the most used, browser, in the middle) with a quick swipe is the most productive.
> would Slack be needed all the time
For my work - mostly yes. If it's not needed, it's not there.
> Then IDEs for example have a lot of menus, panes, buttons and everything.
I've got them all closed. Whatever panes are needed, they're only open then.
Not on MAcOS, but I imagine the reason is the same as mine for using tiling on Linux.
If you are using a small laptop your argument holds.
However, the larger your monitor the more the benefits of having things side by site. I do it all the time. A document I am writing an email about and the email open side by site. Editor, terminal and VCS GUI open at the same time. Documentation and code open side by side. Template and web browser. Accounting software and bank statement. File manage and absolutely anything. Chat window and whatever you are discussing.
I find it easier and more productive most of the time.
I won't speak to "needing" a tiling window manager but "just making the app full screen and switch between windows with 4 finger swipes does the job beautifully" - you you.
I have disabled most gestures, animations, and multiple desktops (spaces?) in macos. The swiping between each of these full screen apps is painfully slow to me. It's compounded by needing to pass through an app to get to one on the other side, meaning it could be 2 or 3 swipes before the app I need is the one on screen. When I see someone swipe the wrong direction and quickly swipe back it makes me cringe.
When I want an app on screen I don't want to perform mental calculation for how many steps away, nor do I ever want to have to pass through an app to get there.
I used to switch spaces but it’s worst for mental load than having everything on the same screen for big screens. I have 3 32inch screens (2 vertical on each side) and full screen apart from IDE like does not often makes sense. So splitting is like having smaller screens at all time and remove the need to find back which virtual screen has which apps. Like there is chrome on several virtual spaces if you cmd-tab on chrome it does not always choses one one you want. You have to get back manually at the screen which is cumbersome. When I use only the MacBook I tile less and use more virtual screens to organize the windows because there is less real estate. Slack, several chrome (render of code, doc, clickup etc), terminal, IDE, postman, datagrip all within a shortcut of being focused and without changing the whole screen. I guess that depends on your needs but having the equivalent of 8 screens the size of the MacBook at all time it’s really awesome and makes me really productive, r-cmd allows me to focus on app app with a shortcut so it’s really fast. No more switch between desks is a relief to find back where my windows are
There are definitely times it is useful. For example, a web browser with docs next to an IDE, or perhaps some other workflow where you are transcribing from one app to another. I will agree most of the time I do prefer full screen and use virtual desktops to swap back and forth, but it depends on the scenario. Also, some apps just don't need that much screen real estate (like my terminal, spotify, discord, chatgpt, etc.) and often look perhaps even odd full screen, so I just tile them into quarters on one virtual desktop.
If I’m writing something using a reference text (code+docs or anything else), if I have to fully the transition the screen between the editor and the reference, I will forget whatever I just read and intended to write. I need the reference in my peripheral vision so I can rapidly glance back and forth between the two.
Animations take too long with the swiping. Having apps on the same virtual desktop all the time.
On a larger screen: Opening a terminal alongside the editor or a browser. Or opening two browser windows when working on two documents.
All the time. 49'' screen is built for that.
The usual setup = terminal is the central half with nvim being one half of that, sometimes also split into two side by sides, sometimes not; two terminal tabs in the right pane (zellij). Browser = left quarter. Right quarter is whatever, slack, gmeet etc.
Nobody needs anything, it's all about preference. I keep apps side-by-side all the time, but by using the same style of window manager across each OS I use (I use Mac, Win, and Linux) I'm able to keep a similar workflow, instead of needing to cater to each OS' prescribed workflow.
Because I like it a lot better?
You sound like you're asking me why my favourite colour is red, because it's perfectly fine to have blue as a favourite colour. Of course it is fine, I just like red better.
You cant think of any reason you’d want two windows in a viewport at the same time? Not one?
No no, I can't find a reason to use a highly configurable tiling manager tool for that. Something like Moom will do the job. But then I can't find a reason to have more than two windows in a viewport
That depends the size of the viewport
Pretty cool, but nothing beats Swish if you're using a Macbook trackpad https://highlyopinionated.co/swish/
"Highly opinionated" indeed ;)
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/
For me it's about the least amount of hand/wrist movement. Trackpad + Swish feels natural and reduces strain.
I'm getting an error during compiling. I did a "brew install rust", cloned the project then did "cargo build --bins --release" and got the error
error[E0554]: `#![feature]` may not be used on the stable release channelNow I get I may have to switch to some beta rust version, so I did a "brew install rustup" and tried again "cargo build --bins --release" but same error.
It'd greatly help if there was a step-by-step installation guide. I'm not into rust, so I'm getting a bit lost here.
Not sure why it doesn't install automatically, but you should be able to install nightly with `rustup toolchain install nightly`.
I think the problem is, that I installed rustup with homebrew. When I installed rustup in the official way, with the shellscript, I was able to compile according to instructions. Might be my installation though.
I've moved from window managers to deterministic app switching with Rcmd mapped to capslock and dual cmd being tied to some window arrangement and screen swapping karabiner commands.
I've switched to what I consider a french cleat system where I have task specific app/window sets and only keep a single task open at a time.
Similar to how french cleat walls are for general storage but then you can arrange all tools for a project on a specific cleat for the duration of the project.
How many apps must a person use in reality that rcmd+letter isn't sufficient for deterministic switching?
Any web app that isn't just general browsing I have mapped to a safari app now, gmail, llms, etc. chrome's tab management is just a joke.
What do you use to manage window arrangements?
Never understood this.. Window arrangements depends on what I'm doing inside those app, and where I want it. That's not a static thing. I use rcmd as well, but I usually like to keep the app I am using in the middle of the screen. Perhaps with something on the side (since I have a large 4K) as there's plenty room for it.
I mostly full-screen each app, deterministic switching means I only real need alt layouts if something forces a cross window dnd. But I just use capslock+cmd and jkl; plus a few other keys to handle any adhoc positioning I need. j is left quarter, jk left half, jkl left 3/4, kl middle half, l fullscreen, etc, hitting them again cycles to top half bottom half.
So with left hand caps+cmd and right hand home row I can basically do any of 1/4 2/4 3/4 4/4 increment combos with one chord and hit them again for top half bottom half.
I don't really do single quarters ever except on far left or right so that's why l is mapped fullscreen.
it works very well, was a long time user of btt before I got tired of it randomly failing.
a karabiner script handles the key chords and dumps them to yabai
Do you have a repo anywhere? Would love to give your setup a go. I use a mish mash of yabai + Amethyst + skhd + karabiner.
I used to use tiling window managers on macOS and in the end it got a bit tiring that after every update something broke. It seems like all of them are fighting the system in some very brittle ways.
In the end I just learned some shortcuts that Apple provides for moving windows around. I still much prefer working on Linux, but this is at least usable and i do not have to fix it that often.
I used to be a big user of tiling window managers but, more recently, I’ve discovered that the workflow of something like Moom is nicer in more situations.
Moom is an absolute crucial piece of software that I've gladly paid for upgrades to over time to support it.
There's also BetterSnapTool, which I used to use, but I think switched to Moom for specific features at one point in time. It's even cheaper and still receiving updates to continue working.
What features do you like in Moom?
It doesn’t force you with tiles (on 6k xdr tiles are a joke).
Its two-stage popup is a game changer. Ie you show it via caps-a, then press one letter to move window anywhere.
And it allows you to specify any arbitrary size and position and save that to the specific one letter.
It’s a shame I can’t find a single screenshot of this killer feature and I write this from a phone.
The main reason I use Moom is being able to move and resize windows using nothing but the keyboard, which is something most tiling window managers completely ignore.
@rcarmo Totally agree on keyboard-first workflow. It's interesting how different tools optimize for different input methods. Some prioritize trackpad gestures, others keyboard shortcuts. Would love to see more hybrid approaches.
Is there an equivalent for Linux?
What is quite upsetting about macOS tile managers is they only seem to work with windows in 'maximum' mode rather than 'full screen', so you always end up wasting screen real estate at the top. (ghastly!)
I see from the animated gif Rift is like this, and Rectangle is too.
I personally hate full screen mode. Not sure why it bothers me so much to not see window decorations and menus, but it drives me crazy. I go out of my way to ensure they fill full screen, but just a maximum size, not full screen mode. To each their own I guess.
I have been using Loop(https://github.com/MrKai77/Loop) after trying some of the alternatives listed here and wanted to post that as it was not mentioned. It is something that solves what I was looking for in window management on macos and just putting it out here :).
this is cool, I love multiple options on macOS.
What’s the difference between this and yabai or aerospace?
After playing with it for all of 30 seconds, my thoughts are: 1. It's ridiculously fast. Not that it matters that much, Aerospace is fine for me. 2. I somehow doesn't require any accessibility permissions... so it "just works" after running the CLI... 3. One thing I immediately noticed, is that it looks like moving a window to be accordion can be done in the same workspace?
So far I'm very impressed... not sure if I'm impressed enough to switch yet though... but being in rust does make it slightly easier for me to contribute
yabai uses native macos spaces and generally requires sip to be disabled to have a good experience(windows can't be moved between spaces without)
rift is essentially aerospace but implemented in a yabai style. yabai style meaning using low level, private apis and generally focusing more on performance. whereas aerospace prides itself on only using one private api.
usage wise, aerospace and rift both use a virtual workspace system where all of your (work)spaces are in one macos space so no red tape has to be cut in order to move windows from ws -> ws and so forth
Does rift handle native MacOS tabs like the ones ghostty and finder use? I might give it a shot. I have been having a couple of issues with Aerospace lately.
No, rift also has problems. For example, if I have Calendar on the left, and Finder on the right, and I open a tab in Finder, then it looks like it works.
However if I close the 2nd Finder tab, then Calendar maximizes below Finder.
Same. That's the worst part of Yabai
Also I am wondering if you could estimate how difficult it would be to implement something like Niri? I much prefer the scrolling style tiling, but none of the MacOS WMs seem to be going that route (other than PaperWM.spoon which is not for me).
https://github.com/karinushka/paneru does that
to answer both comments: i've been working on a way to handle tabs but it's hard to find a solution that isn't half-baked due to the lack of info on tabs given by the os (there are no events or anything, just on a11y attribute that give info on tabs)
as for a scrolling layout, its possible, but does not fit that well with rifts layout, even thought you can get something similar using trackpad swipes to switch between workspaces
Aerospace readme says they have a solution for tabs in mind based on their big refactor.
Haven’t looked into what this looks like, but understandable that it hasn’t made its way to rift yet. I will be trying out rift and report any issues on Github.
I'm pretty new to Mac and didn't know Paper had a port, what isn't to your liking?
Just not a fan of this just being a Hammerspoon thing instead of a proper WM.
I'm using aerospace. If I'm fine with performance, does rift provide anything else?
Same boat, but vs amethyst. It's worked very well for me the last few years.
been using magnet for a long time, it lets you map custom key-combos to put windows in specific slots
https://magnet.crowdcafe.com/
There got a lot of tiling window manager for macOS. People create another and another and another new ones.
I think the root cause is that the default window manager was just horribly designed for a long time. Instantiating new windows of an App is still a horribly designed, deeply frustrating workflow on Mac OS that is just seamless and easy on Linux and Windows. I ended up linking Aerospace to some godawful Applescript just to be able to open a new Safari window without being flung across spaces to an existing Safari window first.
Apple does some things best in class but the core design of windowing & using applications is just awful imo.
How did OP get semi rid of the macos top menu bar?!
> It uses private APIs reverse engineered by yabai and other projects
Don't get used to this. Because of private API use, this project will break at some point after some macOS update.
This is not true. The private api's we use are not hacks to work around macos spaces and are actually the basis of how appkit and the os in general works. They are essentially guaranteed to be stable and also not to be removed because they have been in use for many many years with no change.
The private api's that have been broken (as experienced by yabai) are strictly related to things that rift does not interact with like moving windows between macos spaces(since we use a virtual workspace system).
I have been using aerospace which provides very similar window managing to i3 and so far I have had no issues. I personally don't like the animations or the typical "ricing". Installing random, unmaintained software just for the looks sounds extremely reckless to me
Another one for my collection: https://taoofmac.com/space/apps/window_managers
I've tried using i3-likes on MacOS but the lack of a mod key is really hurting usability for me. Also, they tend to not be like dwm where each screen has its own virtual desktops, which is not how I'm used to work.
in rift each screen/space has its own virtual workspace manager so they are fully isolated from eachother!
I use aerospace combined with karabiner, the latter of which allows me to set caps lock - a key I never really use, to meh & hyper. Worth checking out if youre missing a mod key
A killer feature that none of the tiling managers for macOS will ever implement for reasons I don’t know why:
Make it so I can double tap the cmd key to see outlines of windows and allow me to swipe using the touch board to shift windows around into pockets space.