
Photo by Jefferson Santos on Unsplash
I release software when I think it is finished.
This is not the same thing as it being finished.
MenuTidy, QuitProtect and RainbowApple all worked on the day I first shipped them. They solved the problem I had built them to solve, on the Mac I had built them on, in the ways I had thought to try. I was pleased with them. I still think I had every right to be.
Then other people arrived.
They opened issues. They described things I had not noticed, asked for things I had quietly wanted myself, and tried the apps in combinations I could never have reproduced alone. One of them sent code. Some brought wonderfully precise reports; others brought a single observation that turned out to have an entire feature hiding behind it.
All of it happened in public, on GitHub, between people who owed me absolutely nothing.
MenuTidy began with a fairly literal job: hide the menu-bar icons you do not need until you do need them. Click the chevron, the hidden things appear; click it again, they go away. Small, predictable, done.
Except that an expanded menu bar left expanded is not especially tidy.
An issue from fuzzy76 asked for auto-collapse: once the pointer leaves the menu bar, wait a little while and put everything away again. It was exactly the kind of feature that feels obvious only after somebody else has said it aloud. I built it first as a hidden setting, lived with it, and eventually gave it a proper place in Settings. The countdown resets if you return to the bar. The delay is yours to choose. It is off by default, because an update should not quietly alter the behaviour for an existing user.
The same contributor later found a Tahoe problem in Reveal Hidden Icons. The first click on an icon did nothing; every click after that worked. That is a particularly irritating species of bug, because it behaves just well enough to make the person reporting it wonder whether they imagined the failure.
They had not. macOS was ignoring the first accessibility action. MenuTidy now handles that, and the icon responds on the first click as it always should have done.
Neither change revolutionised the app. One switch, one retry. But together they made MenuTidy feel less like my solution to my menu bar and more like a product built for other people’s Macs.
QuitProtect had the more dramatic contributions.
Somebody I had never met opened multiple pull requests against it. RSS1102 translated the app into Simplified Chinese and added an optional on-screen guide for the quit gesture. The translation did more than add another language: it forced me to make the shared pieces used across my apps properly localisable. Work offered to one tiny utility improved the foundations beneath a much larger collection.
The guide prompted one of my favourite exchanges I have had while making software. The first version of the on-screen guide stayed visible for a couple of fixed intervals after a gesture. The numbers worked, but they could not explain themselves. They were padding around a signal the engine did not yet provide.
So the contribution evolved. The engine learned to say when a quit gesture begins and when it ends, across every path, and the unexplained numbers disappeared. What remained was a single minimum display time tied to something real: a user must be able to read the message.
That is better code than the first version, certainly. More importantly, it is a better design.
Even the pull request I did not merge improved the app. Reading it sent me back through QuitProtect’s permission handling line by line, where I found a failure much worse than the proposed change: if Accessibility permission was revoked while the app was running, QuitProtect could carry on claiming protection was active after its keyboard hook had died.
The contribution was closed with thanks. The bug it led me to was fixed. There is no tidy GitHub statistic for that outcome, but it is open source working exactly as I would want it to.
RainbowApple is almost comically small. It puts the six-colour Apple back over the grey one in the corner of the menu bar. That is the whole product: one picture, in one place.
Small does not mean simple. It means every error occupies a larger percentage of the idea.
Feedback around RainbowApple made me look harder at both halves of its promise. The logo could vanish when a menu-bar utility with a focusable window became the frontmost app, because RainbowApple was asking the wrong application where the menu bar lived. The colours themselves were wrong too: I had divided the complete glyph—including the leaf—into six bands, rather than striping the body and painting the leaf green. Five colours on a six-colour apple, sitting in plain sight since the first build.
Once other people are looking, “it looks right to me” stops being a test plan.
The app now asks the application that actually owns the visible menu bar, rejects impossible rectangles instead of faithfully caching them, measures the real bar rather than trusting an old constant, and draws the stripes against the apple’s body. The icon and screenshots were rebuilt from the same corrected artwork. One glyph, one place, much more carefully earned.
I made these apps open source because I believe software should be inspectable. If a utility is going to watch your keyboard, rearrange your menu bar or paint over a piece of the system interface, you should be able to see exactly what it does. I did not assume that opening the repository meant a crowd would form around it.
Mostly, one has not. Open source is not a spell you cast over a repository to summon free labour, and I would distrust anyone who treated it that way.
What it does create is a door.
Somebody can report the awkward edge their Mac found. Somebody can challenge a decision, translate an interface, improve a piece of code, or ask for a new feature. I can explain why I made a choice, change my mind in public, and leave the reasoning behind for the next person. A closed pull request can be as valuable as a merged one. A two-sentence issue can become the feature that makes an app finally feel complete.
The generosity is not merely that people give their time. It is that they lend me their perspective. I know every line of these projects, which is precisely why there are things in them I can no longer see.
MenuTidy, QuitProtect and RainbowApple are all better products than the ones I first released. Not a little more fashionable, not swollen with features: more considerate, more reliable, and more honest about the systems underneath them. I wrote most of the code, but I could not have arrived at these versions alone.
That is what I love about the open source community. You can put a small thing into the world believing you have finished it, and somebody you have never met will care enough to help you see what it could become.