by Brent Simmons

That About Wraps It Up for Stock Mac UI

The latest macOS is a nice step toward a good-looking Mac UI, but I do wish it had gone farther.

I am in particular not a fan of how Mac toolbars look. I don’t like the full-height sidebars and I especially don’t like the Liquid Glass buttons.

I looked around at what other Mac apps are doing. I asked on my microblog which gets syndicated to Mastodon and I also looked at replies to Isaiah’s similar question from a few days ago.

What I found should be no surprise: many of the apps people think look good are not using stock UI.

You already know this. I don’t think I need to prove it. But one app may serve as an illustration: Things.

Things is a perennial callout for its design and for its Mac-like-ness. But it is not really a stock Mac app at all. The toolbar is not at the top of the window (not an NSToolbar) and it’s not customizable. There is no hint of Liquid Glass style translucency anywhere in their main UI. The content doesn’t slide under the sidebar, for instance. (The one place I can find anything obviously Liquid Glass is the toolbar buttons in the settings window.)

I’ve long been a devoted proponent of using stock Mac UI for, I always thought, good reasons: users are already familiar with that UI and it’s less work to create and update every year.

Plot twist

I think those reasons (user familiarity and developer effort) may not stand up entirely. At least not these days.

Users have shown — again, I don’t need to prove this — that they don’t think about a stock Mac app vs. custom. Do they dislike Things for not having a toolbar at the top of the window that they can customize in the usual way? No. (The only people who think that way are longtime Mac developers like me.)

Are users able to understand the UI to popular Mac apps — to Things, Slack, Craft, OmniFocus, NotePlan, Bear, Reeder, Telegram, Acorn, Tapestry, Obsidian, Audio Hijack, etc. — without much trouble, no matter how stock or not-stock they are? Yes.

Do they know when an app is an Electron app? Nope: they don’t even have a concept of Electron apps and they wouldn’t care if you explained it to them. (Why should they?)

Users may be already familiar with stock Mac UI (and maybe not, actually, depending on what apps they use) — but I don’t think that matters at all anymore.

So what about developer effort

The idea was that by using stock Mac UI you the developer would be carried along — you’d get most of the macOS changes every year mostly for free or with not that much work, since you’d kept up every year.

But my app NetNewsWire has a very stock Mac UI, and Liquid Glass adoption last year was a lot of work. Using stock Mac UI didn’t save us much — in fact, we had more work to do compared to the apps with more custom UI.

I’ll go back to Things. I’m not picking on them, to be clear. Quite the opposite! I very much respect their work, even though I have in the past wished it were more Mac-like (again, in the way only a longtime Mac developer would).

Here’s their blog post from a year ago on adopting Liquid Glass. They did some work, for sure, at their usual high level of quality. And I’m not denigrating that. But it looks like a lot less work than we had to do on NetNewsWire.

And that’s my point: the level of developer effort was higher for the stock Mac app.

The secret third reason for using stock Mac UI

To recap: the reasons for using stock Mac UI are 1) user familiarity, which we’ve known for a while just isn’t a thing, and 2) hoping to be able to expend less developer effort, which we’ve seen can work against you.

But there’s another reason: the stock Mac UI is designed by Apple, the best designers in the world, and do you really think you can do better? Really?

The app world is full of people who think they’re better and they’re really, really, really not.

Well, I still think Apple has the best collection of UI designers in the world, but, for whatever reasons, the guidance from above on how the Mac UI should look is missing the mark. I’m not blaming the people doing the work — they’re doing great work with the direction they’re given.

So this — bad direction — is where the secret third reason falls down. And we’re left with no real reason to stick with stock Mac UI (except for wanting approval from longtime Mac people like me, and you really shouldn’t care about that at all).

Messing around last night

With this in mind I wondered how far I could get in removing the parts of Liquid Glass I don’t like in NetNewsWire. Turns out I could get pretty far, though it comes at the expense of using NSToolbar (as predicted).

Note: this stuff is just on a branch. One night of play, not real design or consideration. (But this is code, not mockups.) It’s not about to ship this way. But I’ll share anyway, because it does hint at some possible ideas for NetNewsWire’s future.

Click the small version to get the big version.

(Note that the column view in the second screenshot is going to ship in 7.2. That part’s already done, and it has nothing to do with Liquid-Glass-or-not. Also note: the article theme in use is part of the standard NetNewsWire app right now, not a new thing.)

The obvious first best thing I could do to improve this is to add some color to the toolbar icons and spread them out better. Maybe add some ability to customize, even though it’s not a standard Mac toolbar.

Of course you might look at this and think “Blech! Looks so old! Spare me!” Totally fair!

But it felt cute. Might delete later

After Fixin’ the Bugs

Fixed ’em. Fixed ’em all. Well, almost all — down to 10 bugs on the NetNewsWire bug tracker. (See the Mac 7.1.3 release notes and iOS for the big list of just-fixed bugs.)

This means I’ve gotten the app to the place I’ve wanted to get to for a long time, where the bug count is manageable and close to zero.

So it’s 10 bugs at this writing — and 556 feature requests. Bug fixing never ends, yes, but the good news is that we can finally get going on these feature requests.

So many feature requests

Some of the feature requests are obviously popular: custom smart feeds, content filtering, thumbnails in the timeline, traditional layout on Mac, and similar.

Other requests are less obviously popular but would be appreciated by a number of people: more syncing systems, appearance settings, sorting options, etc.

Some other requests are very small, would take just one or a few lines of code, and seem like an easy win — like ignoring elements with the .instapaper_ignore class.

There are also the feature requests that are fairly niche, which would be a bit of work and not likely to benefit very many people at all, such as a horizontally flipped layout or app-specific proxy settings. But we consider these seriously too — I’ve been surprised when things like this are way less niche than I thought or somehow more important than I guessed.

And these days there are the AI feature requests too, mostly for content filtering and summarizing. We will not be doing any AI features, even local AI features, any time soon. I’m cautious about this kind of thing and I know how difficult it is to remove features, and I don’t know right now that AI is right for this app or how it might be right. We’ll see.

How do I decide which features to do when?

It’s not as simple as just picking the most popular items and doing those first.

One thing to consider is which features depend on others: for example, showing thumbnails in the timeline depends on adding support for enclosures and Media RSS to the feed parsers, which is a separate feature request, which has its own value besides the thumbnails in the timeline.

(Some feeds — Mastodon feeds, notably — include their images as Media RSS enclosures, which is weird but true, and the article display should show those images.)

Another consideration is NetNewsWire’s job in supporting the web. Which features advance the goal of interoperability and making the web itself the social network? This is why NetNewsWire exists, after all.

Other considerations — besides how many people would benefit, besides the web — include how much work, how hard to test, how risky the changes, and any cognitive and anxiety load it may place on users.

And then there’s also my personal whim! I tend to favor features that existed in NetNewsWire of Yore (NetNewsWire 3.3.2, which we’re still chasing in some ways). Some random feature might compel my attention — maybe it’s an interesting challenge, a thing I’ve wanted to do for 20 years, something I’ve wanted to learn about, or maybe I can’t explain why I want to do it, but I do, and that’s that.

You can follow along if you like. I organize future releases as milestones in GitHub. Just note that I make changes all the time — nothing is set in stone until it actually ships.

Tech Choices

Of course it’s okay to criticize people for their tech choices — for returning to X, for instance, as MacStories recently did.

I’m not on X and there’s no way I would return. Fuck that place and fuck Elon Musk. (Yes, there’s a brentsimmons there, but it’s not me. I deleted my account.)

But it’s not like my tech choices are free of fascists and collaborators — and yours almost surely aren’t either.

Do you have an iPhone? A Mac or iPad?

Do you order from Amazon, buy groceries from Whole Foods, or use any of their other properties (Prime Video, Twitch, Audible, etc.)? Do you use AWS or any websites that rely on AWS?

Do you use GitHub or Office or Windows or Azure or Typescript? How about DuckDuckGo, which uses Bing?

Do you run Linux, which now includes AI-assisted code? Do you use Claude or ChatGPT or any of those?

Do you use any Meta social networks (Facebook, Threads, Instagram)?

Do you write Ruby code? (Which features DHH prominently on its home page.)

Do you have an Android phone or use Google search or Gmail or write code in Go?

(Etc.)

* * *

I use Apple stuff and write apps for Mac and iOS, after all, which means my work benefits Apple, which is doing far, far worse things than the MacStories folks could or would ever do.

And yet here I am continuing to write apps for Apple platforms.

Again, yes, it’s not just okay but proper to criticize public people for their tech choices, but I try to remember my own imperfect choices before I do. And, more importantly, I try to remember who the actual enemies are. (Trump, his oligarchs, ICE, Stephen Miller, every single Republican politician, etc.)

These days we need all the righteous fury we can rally — and we also need the clarity to know where to focus it.

James Dempsey’s Breakpoints Jam in Seattle Aug. 20

One of the highlights of any year for me is when I get to play in a James Dempsey Breakpoints Jam — and we’ve got one coming up in a few days!

It’s this Thursday Aug. 20 at Stoup Brewing in Ballard. Start gathering around 6 pm to hang with fellow Apple nerds. The show will start around 7 pm.

See the Xcoders post James Dempsey and the Breakpoints Jam — More Details for the full scoop (including details on where at Stoup, the food truck, etc.).

This year’s band, the conditional Breakpoints, will be me, Laura Savino, and Ken Case. We’ve played together in various configurations before — the Seattle band works. 😎

If you live in or near Seattle, I really hope you can make it! And say hi. I’m friendly. So’s everybody in the band. 🏝️

New NetNewsWire Crash in iOS 27 Beta Has Made Me a Bit Salty

I returned from a lovely summer vacation (family, beach) to find that iOS 27 beta has fucked up the transition between split view and compact — I’ve got a boatload of crashes, mostly on Pro Max devices and a few on iPad.

Here’s a representative crash log. The feedback in TestFlight all talks about rotating the phone.

Here’s the thing: iOS app development (and Mac, but to a lesser extent) is just constant churn. I thought I was getting a year off this year! But nope. There’s always something.

My theory is that the automatic split view collapsing, which NetNewsWire uses, is just no longer an option, and I’ll have to specify a separate compact view controller.

So that’s just a bunch more work and testing, including testing on previous iOS versions (we go back to iOS 17), and not improvements like performance enhancements and new features. It’s just treading water. It’s a waste of time. For what reason? Why?

Update the next day (24 July 2026): This bug appears to be have been fixed by Apple in iOS 27 beta 4 build 24A5390f, released July 20, before my report here. I can confirm that I’ve not seen this crash in this new build.

Thank you to the team that prioritized and fixed this!

NetNewsWire Status

It’s been a year since I retired — my last working day was June 6, 2025 — and I like being able to say that I’ve spent the year adding nothing, not one penny, to shareholder value. 🌴

* * *

My hope for retirement was to get a lot of work done on NetNewsWire.

A year ago it was in sore need of modernization, tech debt pay-off, and bug fixes. People were asking for features, but the foundation needed a ton of work before I could get on to adding new rooms.

Here are some highlights of what we’ve done with 2,188 commits in the past year:

  • Adopted Swift structured concurrency and async/await
  • Adopted Liquid Glass UI while still supporting recent OSes
  • Ported our XML, HTML, and date parsers from Objective-C to Swift
  • Fixed a ton of bugs, including crashing bugs
  • Reduced battery use, memory use, hang rate, scroll hitch rate, and disk writes
  • Did a bunch of performance enhancements, including (especially) finding places where the app could just do less work
  • Did a bunch of hygiene things — got GitHub CI running again, started using SwiftLint, turned on treat-warnings-as-errors, started work on localizability, switched to Logger, added tests
  • Simplified and refactored code, deleted code, renamed things, etc. — gained clarity in a bunch of places
  • Added support for Cache-Control headers for feeds, so publishers can tune how often NetNewsWire checks their feeds
  • Optimized iCloud syncing (still more to do on that one)
  • Dealt with deprecations (switched to NWPathMonitor, for instance)
  • Added diagnostics and error reporting to the UI — iCloud Storage Stats and the Error Log are shipping, and more like these are currently in beta: Dinosaurs, Current Activity, Activity Log, and Account Stats.

A list of highlights means I’m glossing over — or not even mentioning — things I really want to tell you about!

For instance, at one point I got frustrated with how I was handling Mac crash logs, so I wrote a little system that downloads them from my server and does symbolication. It’s simple but it makes a big difference — and it means not migrating to some commercial system, and having to add their SDK to the app, for this.

* * *

That last bullet point, the one with all the links, is all about giving users insight into what’s happening so that, when the app doesn’t behave as they expect, they can see what’s going on.

Even when they can’t fix the problem themselves, they can at least then copy-and-paste and tell me what’s up so I don’t have to guess. Between this and various bug fixes and improvements I’m able to spend less time on support, which means more time for coding — and, eventually, more time for the new features people are asking for.

* * *

We’re not done with foundational work, but it’s getting close. It’s so much nicer working on this app now than it was a year ago, and I’m so glad we spent the year this way.

I say we on purpose — I may contribute the most, but we have a bunch of other contributors, and I thank them all for all their much-appreciated help. Our most prolific contributor after me is Stuart Breckenridge, who did the Liquid Glass work (among other things) — and who has a new browser-based RSS reader named Gobbler that you should check out!

* * *

PS In the past year we also switched from Slack to a Discourse forum, so support and discussions can be on the web instead of hidden away. 😀

I Tried to Explain What I Do

I’ve known for decades that most of family and friends (except for family and friends in tech) have no idea what I do — they just think it’s math-heavy and mysterious.

Well. It’s definitely not math-heavy and it shouldn’t be mysterious. So I figured I’d write up What I Do.

Even if I never actually send this page around to everybody — because that would actually be kind of weird, like giving them homework to understand me, me who suddenly (suddenly?) seems like a complete narcissist — it was a good exercise for me to do anyway. Especially the part about explaining why I write NetNewsWire.

Seattle Xcoders Talks This Week Considered Unmissable

The title is a little over the top, but barely — we have two fantastic talks this Thursday (March 5) that you should go to. (I’ll be there!)

Laura Savino will present “Learn Out Loud”:

As devs today, we’re supposed to demonstrate immediate skills in tools whose configs change once a fortnight, while shipping cutting-edge features in long-standing apps (that may still have a legacy bug or two). Laura is a trained teacher and Photoshop engineer who brings humor and solidarity to today’s dev environment with concrete advice on the mechanics of real learning and change, including encouraging without proselytizing, being vulnerable about what you don’t know, and staying curious amidst existential dread.

If you’ve seen Laura talk before, then you know how good she is, and you know how you come away with insights and ways to be a better engineer and better human-who-works-with-people. Every single time.

This is one of those very rare chances to see Laura in a small setting before she does this talk at a conference keynote. Like seeing the Beatles in a small bar in Liverpool, only it’s Laura in Seattle. 🎸

Jake Savin will present a talk on using Claude to do a really big ambitious job — rebuilding UserLand Frontier as a modern app:

It’s a huge job and Jake’s made a ton of progress — and he’s learned a lot about how to use Claude to make these kinds of projects work. As we learn to use LLMs to do more and more ambitious things, we’ll be walking in Jake’s footsteps. Jake will provide a map of this new territory.

I’m not the only one to have a try — more than one try, actually, as recently as last year — at rebuilding Frontier. It took Jake and Claude together to make this work (and it’s not done yet, but far advanced from any previous try).

I’m so ready to have Frontier back in my toolbox — and ready to learn from Jake on how he’s making this happen.

What’s Frontier?

UserLand Frontier is Dave Winer’s app from the ’90s, and it was with that app that Dave invented and/or fleshed-out and popularized much of the open web that we take for granted today: blogs, RSS, podcasts, and web services, for starters. This is a historically important piece of software, and Jake is bringing it to the modern age.

Anyway — here’s the scoop on where and when to be:

Where
North Seattle College
9600 College Way N

Room LB 1106 in the library

When
Thursday, March 5, 2026
6:30 pm — gather and mingle
7:00 pm — watch Jake’s and Laura’s talks

For anyone who wants to hang out after — we go to the nearby Watershed Pub and Kitchen (all ages friendly).