Window management in macOS is weird

Now and then I get tempted by those fancy tiling window managers, like yabai and AeroSpace. I read through the documentation, look for demos on youtube, search through hackernews and reddit to get a feel on how things work and what other people are saying — only to ultimately do nothing with the information I’ve learned.

Why? Well, those tiling window managers look super productive, utilising every pixel of your precious screen real-estate and offering keyboard shortcuts to switch windows and applications at the speed of light. However, I’m often left wondering: what am I optimising for? Turns out that it’s not the tiling that I’m intrigued about, but the ability to switch windows, and thus context, faster. You see, I often have 10+ applications open, some with multiple windows, and command-tabbing between them starts to come with a certain cognitive overhead.

the macOS application switcher
From left to right: Finder, Bear, Sublime Text, Safari, WebStorm, Music, Things, Ghostty, GoLand, Slack, Chrome and Sublime Merge

In this post, I’ll take a closer look at macOS’s window-management features and see what can be done with the tools Apple gives us out of the box. It turns out there’s a lot of depth to how things operate on the Mac—let’s dive in!

Workspaces

One of the reasons that window management in macOS feels a bit awkward to use is because you’re actually managing workspaces, not individual windows. This is also where the distinction between a window and an application comes in.

Have you ever noticed how switchting to an application, using ⌘ + ⇥ or the Dock, does not necessarily move focus to a specific window? Well, that’s because you’re switching applications and most applications can run in the background without an active window. Allow me to explain using a real-world analogy!

Take the Pages application, for instance. Once you open the Pages app, your desktop can be viewed (conceptually) as a document writing/editing workspace, much like a physical desk. Each Pages window could then be viewed as a physical paper on that same desk. Closing a window would then be the equivalent of filing that document in your drawer, or tossing it in the bin. You could throw all your papers in the bin (closing all windows) and grab a new one (Pages → New document). The menubar being detached from your window emphasizes this idea even more: the whole screen is your workspace, not just the active window.

Now, if you switch to another application, like Safari to read the news, this could then be viewed as temporarily laying your newspaper on top of those documents you’re writing. If you were to come across an article in the news that you’d like to include in one of your documents, you’d just shuffle some papers around and do some old-skool cut and paste. The shuffeling around of pieces of paper, both documents and your newspaper, is your window management on the Mac: you’re doing a singular task (writing documents mixed with some research) and every open window aids in accomplishing that task. Once that task is done, you clean up your desk by closing those applications.

Remember how I said that most applications can run without an open window? There are exceptions, like applications that don’t support working with several documents at once. A good example of this is the Reminders app, which could be viewed as a single notebook where you jot down your to-dos. It doesn’t make sense to lug around multiple notebooks to keep track of your to-dos (apparantly), and this is something Apple has taken to heart in Reminders’ design.

All of this also explains why maximizing windows isn’t really a thing on the Mac. Your whole screen is considered a workspace, as opposed to Windows, where the workspace is considered to be within the window itself. In recent macOS versions, the green button will make your window go into full-screen mode (more on that later!) but originally, it optimized the window size for the content it’s displaying. By the way, this behaviour is still available with double clicking the window title, or clicking the green button while holding (option)!

With this in mind, shortcuts like ⌘ + H (hide window), ⌘ + ⇧ + H (hide all other windows) and ⌘ + M (minimize) start to make a lot more sense. Imagine you’re writing and need a dictionary. You won’t stow it far away; you’ll just slide it out of sight so you can focus on your writing.

Actual Workspaces

Back in 2007 or so, with the release of Mac OS X 10.5 (Leopard), Apple introduced spaces. Spaces allow for grouping windows in a separate, virtual, space. In our physical desk analogy this would be akin to swiveling your deskchair to the desk behind you where you’d be doing someting entirely diffrent than writing and editing documents. It could be the desk where you typically do your drawing!

The distinction between window vs. application still applies: you could spread out several windows of the Pages application across several spaces. Let’s say you’re writing two different papers, each on a very different subject. You could have two spaces, each with a Pages window and a dedicated Safari window for research. Within that space you’ll then just switch between those two windows.

Switching between windows can be done by using mission control, which zooms out the space and shows all windows spread across your screen. ⌘ + ⇥, good ‘ol reliable, also works just fine. There’s also the shortcut ⌃ + F4, which cycles through all windows within a space. More than enough options, although the last shortcut might increase the risk of RSI.

But what if you want to reserve a whole desk for just one thing, like reading the news? Well, in that case you just click the green window control button to enter full-screen mode. This dedicates an entire space to a singular window!

Various window options tucked away behind the green traffic light button
The various window options tucked away behind the green traffic light button, shown on hover.

There’s even a way to smush two full-screen windows together, where each gets a half of the screen real-estate. I’m not entirely sure who this is for, it feels a bit redundant, but hey, it’s there!

Anyway, with spaces, switching between tasks is now something that you can easily do. Swivel your virtual deskchair once more by:

  • a three-finger swipe left or right on your trackpad
  • opening mission control and selecting the desired space
  • keyboard shortcuts, either with ⌃ + ←, ⌃ + → or ⌃ + [0-9]

With spaces, there’s an extra layer introduced: first we had a desk that would get cluttered and would require cleaning up every once in a while, now we have several desks, so cleaning up has become, optional? Neat (pun intended).

Stage Manager

But wait, there’s more! Apple introduced Stage Manager back in 2022 with the release of macOS Ventura. With Stage Manager you can group certain windows together a bit more tightly than you can with Space. It’s not on by default and can be enabled either in the System Settings or using the Control Center.

With Stage Manager you can work with one window at a time, reducing the clutter on your screen of having multiple windows open, or you can group several windows together. The best physical world analogy for this grouping functionality that I can come up with right now, is that it’s much like putting documents together with a paperclip. You have your room with a bunch of desks and each desk has a bundle of papers held together with a paperclip. Now you can switch tasks, while switching tasks!

The Xzibit meme from pimp my ride, making fun of nested spaces
I’ve tried Stage Manager a few times and while it can be useful in and by itself, it’s not something that I consider useful in combination with Spaces. It’s just too much in my opinion. It’s also a bit finnicky in multi-monitor setups.

Oh, now that we’re on the topic of finnicky, there’s one odd thing I noticed with Stage Manager: the keyboard shortcuts ⌘ + ` and ⌃ + F4 don’t behave like you’d expect them to anymore. With Stage Manager enabled, ⌃ + F4 will cycle through your stacks instead of through the open windows within your space, and ⌘ + ` will cycle through all open windows within your stage, instead of through the windows of an active application. I’m not sure what’s going on that made this little shake-up necessary, but I doubt it will matter much for keyboard warriors. Stage Manager was clearly designed to be used with a trackpad or mouse.

Window Tiling

So far we have three-ish ways to handle our proliferation of windows, and as if that wasn’t enough, Apple added a fourth tool to the toolbox last year with the release of macOS Sequoia: window tiling.

They basically added the same window snapping/tiling feature that Microsoft introduced with Windows 7, which is still a quite welcome addition after all this time! Third party applications like moom or rectangle offer more functionality, though, so I reckon that people who value tiling like this would’ve already picked their poison by now.

My workflow

I don’t think Apple has envisioned a one-size-fits-all solution to window management. Instead, they’ve provided a variety of tools and left it up to us to figure out how to use them. You can pick the parts you like and cobble together your own workflow, even if it feels a bit awkward at times. Think different indeed.

As for me, what I’m really after is less friction when switching between windows and applications. A tiling window manager could solve this issue because it forces you to be mindful of what you’re filling your screen with. However, window tiling feels pretty rigid, and the fact that macOS isn’t as pliable to do your bidding as other OS’ is also a bit of a factor. Does that mean that I’m going to accept defeat? Absolutely not!

For starters, I’m going to be a bit more deliberate about where I keep my windows and try to use spaces a bit more effectively. My primary work will happen at Desktop 1. Supporting applications will find their home on Desktop 2, Desktop 3 is reserved for communication (Slack, mail, etc.) and finally, Desktop 4 is reserved for multimedia, like playing some tunes while I do my thing. This approach greatly reduces the number of windows on any given desktop, and I hope that this in turn will make the window switching affair a bit smoother.

I’m currently looking into tools like Karabiner Elements and Hammerspoon to enhance my workflow even more, but that’s material for another post!