Why I built Mica
I didn't want to pay for a Mac app I was sure I could write myself. I was right about that, and wrong about which parts would be hard.
I share my screen a lot. Interviews, calls with the team, the occasional demo. And every single time there was the same small ritual first — close the messages, drag the folders off the desktop, quit the thing I'd rather not explain, remember the notification that's about to arrive mid-sentence. Ten seconds of tidying, done badly, under mild time pressure.
At some point I went looking for something that did it for me and found Stealthly. It's a good app. It does exactly this, it's well made, and the person behind it deserves to be paid for it.
I didn't want to pay for it.
Not because the price was unreasonable — it isn't. Because I looked at the feature list and thought: I know how most of that works, and the parts I don't know I'd like to. That reflex is usually a trap. It's the thing that turns a €20 purchase into three weekends. I decided to fall for it anyway, on the grounds that I'd rather have the knowledge than the twenty euros.
So I built Mica. It's free, open source, and it's been running on my machine for weeks.
What I was right about
The features are not hard. Hiding the Dock is one private call. Hiding windows is NSRunningApplication.hide(). Detecting a screen share is a single window server flag — CGSIsScreenWatcherPresent reads the count of active capture streams, which means one signal covers Zoom, Meet, Teams, QuickTime, OBS and ⌘⇧5 alike. I never had to write a list of apps to watch for, and I never have to update one.
The design decision I'm happiest about came early: don't sandbox it, and don't automate other apps. Most Mac utilities in this space drive System Events, Finder and Shortcuts over AppleScript, which is why they ask for Accessibility permission and why macOS shows you a scary dialog on first run. Going straight to the underlying APIs means Mica asks for no permissions at all. No Accessibility, no Screen Recording, no Full Disk Access. For an app whose entire pitch is privacy, being the app that doesn't ask to watch your screen felt like the only defensible position.
That also turned out to be a real advantage over the paid option, not just a philosophical one. Stealthly's App Store build can't do full auto-detection, because the sandbox won't allow it. Mine can, because it isn't in the store.
What I was wrong about
I thought the features were the work. The features were about a third of it.
The rest was macOS being macOS. CoreDock.framework doesn't exist any more on macOS 26 — those symbols live in HIServices now, which I found out the way everyone finds these things out. Hiding the wallpaper without also hiding your desktop icons means putting a borderless window at exactly the right window level: above the Dock-owned wallpaper, below the Finder-owned icons, on every display, rebuilt whenever you plug a monitor in. There is no API that turns Focus on, so Do Not Disturb runs two Shortcuts you create by hand — every automated approach I tried either needed Full Disk Access or raced the daemon that owns the database.
Then there's the problem nobody mentions: what happens if it crashes while everything is hidden.
If Mica dies mid-session, you're left with no Dock, no desktop icons, a flat wallpaper and Do Not Disturb stuck on, with nothing on screen to explain why. So before it touches anything, it writes a snapshot of your prior state to disk and flushes it with F_FULLFSYNC. The next launch finds that snapshot, puts everything back, and deletes it. Recovery deliberately skips window restore if the machine rebooted in between — hidden-application state doesn't survive a restart, so replaying it could only ever wrongly un-hide something you hid yourself after logging back in.
That's maybe forty lines of code and it took longer to reason about than any feature in the app.
The bug that locked me out
Hiding other apps' menu bar icons has no API either. The trick everyone uses — Bartender, Ice, Hidden Bar — is to add your own status item and make it enormous. macOS lays the menu bar out right to left, so an item wide enough pushes everything to its left off the edge of the screen.
Which works, until the spacer ends up on the wrong side of your own icon.
I did that to myself. Mica hid its own menu bar icon along with everything else, which meant no popover, no settings, no way to switch it off — on a machine that had just hidden its Dock and desktop. The only way out was a keyboard shortcut I happened to have set.
The fix has two halves, and the second one is the one that matters. Before collapsing, Mica moves its spacer clear of its own icon. Then, after collapsing, it checks that its icon is still somewhere clickable — and if it isn't, it undoes the whole thing and tells you why. A privacy feature that can't verify it did what it claimed should back out, not carry on. That's now the rule the whole app is written to.
The unglamorous tail
The part I hadn't costed at all was distribution.
macOS keys permission grants to your app's code signature. Sign ad-hoc and that signature changes on every build, so macOS treats every update as a brand new app and your users re-grant everything. To avoid that you need a stable certificate, which means an Apple Developer account, which means either €99 a year or a free certificate that expires in twelve months. And none of it removes the Gatekeeper warning on first launch — that needs notarization, which needs the paid tier.
So the app that exists to avoid a small payment eventually points at a slightly larger one. I've left it free for now: signed, not notarized, right-click to open the first time. There's a release pipeline that builds and signs the disk image on a tag, and the website's download button always points at the newest one.
Was it worth it
If you only count the money, obviously not. I spent multiple weekends to avoid a one-time purchase, which is a terrible hourly rate.
But I now know how macOS actually composites the desktop, what the window server will and won't tell you, why permission prompts appear when they do, and how to make an app that can be killed at any moment leave the system exactly as it found it. None of that was on the feature list. All of it is the reason I did it.
And the thing I built does something the paid one can't, is free for everyone else, and I can change it whenever it annoys me.
The reflex was a trap. I'd fall for it again.