Back to blog
technicalmacoschromiumknown-issue

Why Does Chrome Show Up Twice in StackWM?

The real story behind Chromium's mysterious 'ghost windows' — and what we're doing about it.

StackWM Team

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 AXUnknown label 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 checkWhy it matters
TransparencyIf a window is nearly invisible (alpha ≤ 0.01), it's probably not for you
SizeWindows smaller than a postage stamp are likely helpers, not browsers
Identity crisisAn AXUnknown subrole screams "I'm an internal tool, not a user window"
Nameless windowsReal browser windows usually have actual titles
The buddy systemIf 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:

  1. Smarter window classifier — a unified system that both GlobalSwitcher and Overlay can rely on
  2. Cooldown period — wait a moment before showing brand-new windows, filtering out flashes and ghosts
  3. 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.