Why Does Chrome Show Up Twice in StackWM?
The real story behind Chromium's mysterious 'ghost windows' — and what we're doing about it.
Ever switch windows in StackWM and notice Chrome (or Arc, Brave, Edge) appearing more than once? You're not imagining things — and you're definitely not alone.
This quirk affects every window manager on macOS, not just ours. Here's what's actually going on.
The Mystery of the Ghost Windows
Chromium-based browsers are busy creatures. Behind the scenes, they create all sorts of helper windows that macOS treats as real, legitimate windows:
- Little Arc — Arc browser's nifty floating preview feature
- Picture-in-Picture — that tiny video window that follows you around
- Extension panels — popping in and out as you browse
- DevTools — your trusty debugging companion
- Background helpers — invisible windows doing invisible work
To macOS, these all look like "real" windows. The system dutifully reports them to StackWM, which then dutifully shows them to you. The problem? Most of these aren't windows you care about when you're switching tasks.
These ghost windows often have telltale signs:
- Blank or generic names like "Chrome"
- A weird
AXUnknownlabel in the accessibility tree - Tiny dimensions (sometimes just a few pixels)
- Near-transparent or completely invisible
Why macOS Can't Tell the Difference
Here's the frustrating part: macOS doesn't have a reliable way to say "this is a real window the user cares about."
StackWM asks macOS, "Hey, what windows are open?" and macOS replies with everything — including windows that are essentially just rendering surfaces, memory buffers, or extension containers. From the operating system's perspective, it's being helpful. From your perspective, it's clutter.
Chromium creates these auxiliary windows for perfectly valid reasons: rendering web content offscreen, managing browser extensions, handling media playback, powering web apps. But the line between "internal machinery" and "user-facing window" gets blurry fast.
How StackWM Fights Back
We've taught StackWM to be a bit more skeptical about what counts as a "real" window. It now applies a series of gut-checks before showing something in GlobalSwitcher:
| What we check | Why it matters |
|---|---|
| Transparency | If a window is nearly invisible (alpha ≤ 0.01), it's probably not for you |
| Size | Windows smaller than a postage stamp are likely helpers, not browsers |
| Identity crisis | An AXUnknown subrole screams "I'm an internal tool, not a user window" |
| Nameless windows | Real browser windows usually have actual titles |
| The buddy system | If Chrome already has a normal window open, hide the weird ones |
These heuristics catch most of the ghosts — but not all of them. The arms race continues.
Does This Actually Matter?
Honestly? Not really. This is a visual annoyance, not a broken feature.
Your windows still tile correctly. Focus still works. Keyboard shortcuts, layout memory, push/pull — all unaffected. You might see Chrome listed twice in the switcher, but selecting either one will get you where you need to go.
The only real impact:
- GlobalSwitcher looks slightly cluttered
- Overlay indicators might occasionally miscount
That's it. Your workflow isn't broken; it's just a bit untidy.
Everyone Deals With This
If it makes you feel better, we're not the only ones wrestling with this. The yabai community — one of the most sophisticated window managers out there — has lengthy discussions about Arc's Little Arc windows and window detection quirks that sound very familiar.
When even the pros haven't fully solved it, you know it's a genuinely tricky problem.
What's Next
We're exploring a few longer-term improvements:
- Smarter window classifier — a unified system that both GlobalSwitcher and Overlay can rely on
- Cooldown period — wait a moment before showing brand-new windows, filtering out flashes and ghosts
- Your rules — eventually, let you manually mark certain windows as "always ignore"
Quick Fixes for Right Now
If the duplicate entries are driving you nuts:
- Switch by app, not window — use Cmd+Tab or StackWM's app-level switching for browsers
- Close the extras — shut down unused PiP windows and extension panels when you're done
- Skip Little Arc — if you don't use Arc's preview feature, disable it
Last updated: February 6, 2026
Questions? Drop us a line.