The Shape of Everything

The Shape of Everything
A website mostly about Mac stuff, written by August "Gus" Mueller

From "Whatever, Jamie" (a confusing newsletter name if you’re not familiar with it):

This last decade has seen an inundation of new JavaScript runtimes (and engines in equal measure), enabling us to run JavaScript in all manner of contexts with precise fitness for task. Through these, we've seen the language spread to the Cloud, the edge, Smart TVs, mobile devices, and even microcontrollers.

In this article, we'll explore what's driving this diversity, and why no one runtime or engine suffices for all purposes.

I found this whole post pretty amazing. I considered myself well versed in the various JavaScript engines out there, but it turns out there a lot more than I knew of.


The following sections are general guidelines that describe fundamental Mac layout principles of center equalization, text and control alignment, appropriate use of white space, and visual balance. Following these guidelines will help you create functional and aesthetically pleasing windows that are easy for Mac users to understand and use.


Before you start animating, ask yourself: what’s the purpose of this animation?

Morphing of the feedback component below helps make the experience more unique and memorable. This works as long as the user will rarely interact with it. It’ll then become a pleasant surprise, rather than a daily annoyance.

Used multiple times a day, this component would quickly become irritating. The initial delight would fade and the animation would slow users down.

This is one things that drives me a little nuts about the Apple Watch. The animations feel incredibly sluggish and notifications are slow to dismiss. It usually happens when I'm about to start a workout and inevitably I end up putting the UI in a state that I don't want.

September 4, 2025

Acorn 8.2 is out. You can use either the Acorn ▸ Check for Updates… menu item, or use the App Store to update if you purchased it from there. The full release notes are available as well.

Here are my favorite things:

Export Gets Improvements Including Image Diffing

Acorn's export diffing options

When I wrote the new image diffing features for Retrobatch, I knew I wanted to bring those to Acorn as well. Acorn 8's Export window now has the option to show differences as a highlighted overlay between the original and exported image. I've also brought over the split view as well.

When I wrote the new diff view, I knew I wanted to have it shared between the two apps, and I did a lot of work to make sure all of Acorn's main canvas features went into it as well. So things like overscroll, zooming to where the cursor pointer is, click-drag to move, shared shortcuts for zooming, deep image support, wide gamut support, etc. were all there. It was super gratifying to have that just work.

And that new canvas was so nice, I ended up using it in other locations in Acorn. The RAW Import window gets the new canvas, so does the Image ▸ New View… window. I've even added a mostly hidden new action in the Command Bar called "Compare Two Front Windows" which will bring up a new diff window between two images you have open.

Non-Destructive Linear & Radial Multi-Stop Gradient Filters

Acorn's multistop non-destructive gradients

This is a feature I've wanted for years, and while I've always had the idea in my head how to do it, I just always kept pushing it off for some reason. At some point this past month, I think I just got tired of seeing it on the list, and finally decided to give it a proper go.

I'm pretty happy with how it turned out, and how performant it is. I even did a bit of extra work to make sure there's some dithering in there for the linear gradient, so you won't get any annoying color banding with certain colors.

Lots of Little Things, Thanks to Some Torn Ligaments

So as I was walking out of the climbing gym a few weeks ago, I stepped off a curb, caught an edge in the ground with my foot, and rolled my ankle. There was a pop, myself on the ground, and a lot of pain. The end result was me moving around on crutches for a while and not a whole lot to do but sit with my ankle wrapped and elevated. (I thought I had broken it, but X-rays said otherwise. Apparently I'm a bit of a wuss?)

So I took the opportunity to whittle away at little things, and even add some of my own personal features.

Acorn's new blend mode icons
  • The blend mode popup now shows a little icon next to each item with a little representation of what each blend mode does. This is super informative if you have no idea what some of these blend modes will do.
  • Smart Layer Export now has an option for shared backgrounds between exported layers.
  • Command-Option-J is a new shortcut for duplicating the currently selected shape(s). You can also use the Quick Process menu to copy a selected shape a specific amount, but sometimes you just want to duplicate something quickly.
  • Zoom modifiers when using the panning tool via the space bar. You can now press the space bar and then the command key to switch to the zoom tool (or use space bar + command + option to zoom out).
  • Acorn will update its selection mode icons when you’ve pressed one of the modifier keys for adding, subtracting, or intersecting the selection (shift, option, shift+option).
  • A new preference tab named “Mueller”. This is a little vain, but I often find myself wanting to add little tweaks just for me that I know not everyone will like. These tweaks have mostly come out of working on updates for Liquid Glass (more on that below), and I just felt like there should be a general place to do this. I know an “Appearance” tab might make more sense - but I already have ideas for other things that could go in there.

    Who knows (besides me of course) what else might show up there eventually, and it might even go away some day. But for now it's a place where you're going to be able to change the personality of Acorn a little bit. For now there's two options: hiding the Arial font in the font picker, and changing the app icon in the Dock.
Creator Preferences

File Compatibility

There’s now an option to save a flattened composite of each layer in .acorn files. This is a per image setting, and you can find it in the File ▸ File Info… window under “General”. When enabled Acorn will write a composite of your layer data into the saved .acorn file exactly as it’s rendered on canvas. This includes layer filters, masks, rasterized vectors, etc. This is super useful if you’d like to pull out full-fidelity representations of your layer data—something that’s super easy to do using SQLite:
select writefile('/tmp/' || layers.name || '-' || layers.uti || '.png', value) from layers, layer_attributes where layers.id = layer_attributes.id and layer_attributes.name = 'composite';

This is not currently a global setting, since it will increase the size of your .acorn images, but using the following defaults command will turn it on by default:
defaults write com.flyingmeat.Acorn8 alwaysSaveLayerComposites 1

Acorn’s file format is easy to grok and documented here: https://flyingmeat.com/acorn/docs/technotes/ACTN002.html.

I really want it to be easy for other apps to read Acorn image (even Retrobatch!). And with SQLite being the basis for Acorn image files, it's incredibly easy to get that data out.

macOS 26 Tahoe and Liquid Glass Support

Obviously I've been working on macOS 26 Tahoe support this summer for Acorn. While it was relatively easy to get something up and working with Liquid Glass, it's taking a bit more work to iron out all the details and work through OS bugs. Right now Acorn 8 supports macOS 14 Sonoma and later, so I'm not quite ready to leave those folks behind.

If the macOS 26 betas are any indication, Apple still has a lot of work left to make Tahoe amazing. I'm hoping they take their time and wait until later in the fall to ship the next great version of macOS. Acorn is going to take this approach at any rate. My goal is to make Acorn feel at home in macOS Tahoe, but still retain its own personality as well.

I work every day in macOS 26 right now, and Acorn 8.2 is fully supported even in the betas. All of Acorn's functionality is there, even if the UI isn't all glass all the time yet.

August 26, 2025

Dan Hollick on Making Software: What is a color space?:

In which we answer every question you've ever had about digital color, and some you haven't.

He's not kidding.

Your computer has an operating system, which uses a color space. But your computer also runs applications, which might use a different color space. Those apps can render content, like images and videos, which might be in yet another color space. And then your monitor has its own color space, which might not even match the color space of the operating system. You could even have multiple monitors, each with different color spaces. Yep.

This is a pretty great writeup, and required reading for anyone who deals with color profiles and color spaces. I had only one quibble, and that was the bit which said sRGB was only capable of 8 bits per channel (that's how it's usually used on the web, but you can have 8, 10, 12, 16, 32 bits per channel sRGB images).

Besides being super informative and delightful (I laughed out loud when I saw "A DIAGRAM SHOWING HOW TO CONVERT RGB TO HSL."), the layout of the page is top notch. I'm envious of Hollick's work.


My mind went back to a statement from a street performer in Cape Town the previous day: “Check this out, I’m about to be amazing!” At the time I had joked about using his catch phrase for my climbing, but I hadn’t really meant it because this whole time I’d been so focused on the opposite: staying humble, no egos allowed.

What if that was the kind of energy I needed right now though? What if there was something in between my meek humility on this trip and the toxic rage from my youth? The paradigm shifted a little more. Why not try a little reckless egotism? It’s just a form of belief, after all, and didn’t that stranger’s bravado mirror the exact kind of belief I’d once wielded like a weapon? Maybe he had stumbled across the alchemical gold without even realizing it.

“I’m about to be amazing,” a shy voice whispered in my head as I pulled off the ground and the world around me faded away, leaving just the void of a perfect crack stretching out before me into the abyss.

I love reading Goris's posts on climbing. She’s constantly traveling to amazing places and then writes about them in a way that makes me super envious. Why can’t I write like this?

Even if you're not a climber, you'll probably find her writeup engaging. And if you are a climber, you'll want to read it because you'll certainly learn a thing or two.


From a post on Zed.dev: Introducing DeltaDB: Operation-Level Version Control:

Our vision is turn your IDE into a collaborative workspace where humans and AI agents work together across a range of time scales, with every insight preserved and linked to the code forever. To make this possible, we're building DeltaDB: a new kind of version control that tracks every operation, not just commits.

DeltaDB uses CRDTs to incrementally record and synchronize changes as they happen. Its designed to interoperate with Git, but its operation-based design supports real-time interactions that aren't supported by Git's snapshots.

That sounds pretty neat, and I'm really interested to see how it goes.

Zed fascinates me for some reason, and I can't quite pin down why. Is it because of the hardware accelerated text rendering? Is it because it's crazy fast? It's written in Rust? Some combo of those and other things? Beats me, but I think Zed is cool.

It's also worth noting that Zed raised $32M in a Series B investment. I had no idea they were funded. In my brain it was a plain old open source product, but it looks like they have some serious funding to make it.

August 20, 2025

Retrobatch 2.3 has been released. Some of the highlights:

Image Diffing: You can now compare your modified image against the original image using new handy new toolbar modes, or keyboard shortcuts.

PDF Rasterizer (Pro only): Convert all vector and text components of a PDF to full page images (handy for folks who want to "bake" their PDFs so text or elements can't be removed to find hidden information).

Send Notification node: Does what it sounds like — send out system notifications for when a workflow starts, ends, or for each image processed.

The Write node now has options to make indexed PNG files. This replaces the dedicated "Indexed PNG" node, so it's all wrapped together in a single node now.

There are little changes and bug fixes of course. The full release notes are available as usual. If you already have Retrobatch 2 installed, use the Retrobatch ▸ Check for Updates… menu item to update to the latest version.

One thing I did, which isn't in the release notes, is the preview canvas got a big upgrade as far as zooming, panning, and deep color support. I did a lot of refactoring when I was implementing the image diffing tools because I wanted to bring that feature to Acorn as well. So with some smart subclassing and such, I've got a shared Metal accelerated canvas that works for both Acorn and Retrobatch. This new class is used in quite a few places in the next release of Acorn (Web Export, RAW Image preview, New View windows, etc), and obviously in Retrobatch's main preview window. It's nice having a fully built out class that can I can just drop in for standard image editing behaviors.


Macrowave: Turn Your Mac Into a Private Radio Station

It's a Mac and iOS app for sending and receiving audio.

I don't have a need for this app, but I saw the UI and instantly wanted to play with it. It's a nice throwback to the MacAmp or Winamp days.

August 1, 2025

Sub Club Podcast: The Past, Present, and Future of Building on Apple.

Another interview with John Gruber about the history of developer relations with Apple.

I thought this was a great episode, and it brought back some memories. I can remember when Apple would call you up and let you know early bird pricing for WWDC was about to go away. How quaint that seems now. (I even went to WWDC on their dime back in the late 90s when I was working for Mizzou).

I still get on well with the folks in Apple Developer relations, and I guess I always have. Maybe because I've been developing on the Mac for so long, and I tend to keep a cool head about things? Of course there's always ups and downs, but I try to remember there are very different divisions in Apple, with different opinions on how things should be. "Apple" isn't really a single entity anymore, at least from my perspective.

August 1, 2025

The Talk Show: Ep. 427 ‘THE SHIFT-2 CROWD’,, With Jason Snell:

Jason Snell returns to the show to talk about the early PC platform rivalries of the 1980s, iOS 26 leaks (and Apple suing YouTuber Jon Prosser), the various Apple OS 26 public betas and the state of Liquid Glass, and more.

I thought the discussion on Liquid Glass, especially the state of it on the Mac, was pretty good. Like Gruber and Snell, I worry that the Mac is more of an afterthought when it comes to the new UI.

One can hope that it gets better as the betas come along (as they always do).


Tim Wood on Mastodon:

OK, OK, ok, story time.

Way back when (early 90s), when Omni was consulting for McCaw Cellular (or AT&T Wireless, not sure which it was at the time), we were working on apps for NeXTSTEP for sales, customer care, and such for cell phones, nation wide. We'd occasionally get a crash reports and I don't even remember how those got back to us back in the day before automated collection and reporting, but eventually we were able to reproduce it.

I won't spoil the punchline as there's only two paragraphs remaining, so go treat yourself.

June 14, 2025

Acorn was in Apple's WWDC 2025 keynote! How f'n rad is that?

So a little before WWDC I got a chance to fly down to Cupertino in the dead of night, to secretly adopt Acorn's UI to use the new look and feel of Apple's forthcoming Liquid Glass. NDAs were signed and I can't say much—other than it was super quick to adopt for Acorn's main canvas window. Acorn is a mostly Objective-C app¹ with a codebase that's effectively 20 years old now, so that speaks to how relatively smooth this transition should be.

I was super stoked to be able to do it, and though I'm sure there will be the usual bumps along the way (especially for iOS devs), it's great to have a new UI playground to run around in.

You can watch Acorn's 15 seconds on the big screen with this timestamped YouTube link: Apple's WWDC 2025.

¹ As John Gruber pointed out during The Talk Show Live From WWDC 2025, which you should also watch.

June 1, 2025

Mark Alldritt: Script Debugger Retired:

The day has finally come. After 30 years of continuous development, Script Debugger has been retired and will no longer be available for sale. Please see this post for more information.

I just looked up when I made my first purchase of Script Debugger — version 4.5 in 2009 for $199, and it was worth every penny.

I still use Script Debugger to this day.

30 years of development is a long time, and Script Debugger is such a great app. Congrats Mark - you made something awesome.

May 25, 2025

Brent Simmons: My Wildly Incorrect Bias About Corporate Engineers

Before I went to work for Audible (five years ago now — time flies!) I had a bias about engineers that worked for large corporations. I assumed that they weren’t as good as indies and engineers at small companies, or else they’d actually be indies or work at small shops like Omni.

And so I learned very quickly when I started at Audible that I was very wrong. I was impressed, and grew more impressed as time went on, by my fellow engineers’ rigor, talent, professionalism, care, and, especially, ability to work with other people toward common goals.

Not long after Brent joined Audible, I clearly remember him telling me that there were really smart people there who were amazing coders. And he was completely shocked by this. The look on Brent's face was just pure amazement, and he was so happy about it!

I laughed and laughed at him. Of course there's talented people there! Only crazy people are willing to put up with having to file business taxes, mess with social security, find healthcare, deal with all the stuff you have to handle to be indie. And you don't even have to be a particularly good programmer. You just have to be persistent.

Sometimes I really miss working with other folks, so I'm especially happy for Brent that his exit to retirement was working with a great group of people, in a giant ass company. Everyone should experience that at least once.

And now Brent is retiring! I've known this for a while as well, because he's insanely excited and absolutely won't shut up about it (in a good way). I bet he's even counting down the number of meetings he has left at this point.

Pure freedom to work on what you want, for the rest of your life. And of course he's going to be coding, because Brent is a developer, and I don't think you could stop him anyway.

Congrats, Brent.


Christopher Nguyen:

Edit is a new command-line text editor in Windows. Edit is open source, so you can build the code or install the latest version from GitHub!

Edit is a small, lightweight text editor. It is less than 250kB, which allows it to keep a small footprint in the Windows 11 image.

I'll probably never use it, but I find Edit delightful. It's a new 64 bit CLI editor, with curses like menus. It's 2025, and … just look at it!

April 24, 2025

Christian Ekrem: Coding as Craft: Going Back to the Old Gym:

But the core of programming – the thinking, the designing, the architectural decisions – these are the parts I want to preserve as my craft. These are the muscles I want to keep strong by training in the old gym.

Just as a chef might use a food processor for tedious prep work but would never dream of automating the creative aspects of recipe development and flavor balancing, we should use AI for what it’s good at while preserving the parts of coding that bring us joy and growth.

I love using AI tools to help me figure out things or to brainstorm, but it's the little highs I get when I solve a good problem that I don't ever want to go away.

April 20, 2025

From The Verge earlier this week:

During Meta’s antitrust trial today, lawyers representing Apple, Google, and Snap each expressed irritation with Meta over the slides it presented on Monday that The Verge found to contain easy-to-remove redactions. Attorneys for both Apple and Snap called the errors “egregious,” with Apple’s representative indicating that it may not be able to trust Meta with its internal information in the future. Google’s attorney also blamed Meta for jeopardizing the search giant’s data with the mistake.

Presumably, the folks from Meta used a PDF editor to draw a black vector box around the sections to be redacted. The problem with this technique is that you can open up that same PDF in an editor and delete the box to see what’s underneath.

The correct solution would have been to rasterize the PDF (which is the process of turning vectors to pixels), so any attempt to remove the redacting box would reveal an empty area. When you rasterize a page, you’re essentially baking the PDF.

As John Gruber notes:

You can properly redact a PDF digitally, but botched digital redactions are so commonplace (and at times disastrous and/or humiliating) that when then Attorney General William Barr released the Mueller Report in 2019, the DOJ printed the unredacted original, did the redactions on paper, and then scanned it back in to create the redacted PDF.

But there’s an easier way: use Retrobatch of course!

The workflow would look something like this:

You read the PDF, split the pages up, add a matte background to each page which also happens to rasterize it as well, paste the pages back together with the PDF Maker node, and then write the PDF back out.

You can also control the resolution of the rasterization by using the “Set DPI” node before the page splitter.

I think there’s enough specialized PDF tasks that need to be done that I should probably make whole PDF category in Retrobatch, including a standard PDF rasterization node.

April 18, 2025

Gabriel Nicholas at Wired: The Subjective Charms of Objective-C

But the longer I spent writing Objective-C, the more I felt it hid rather than revealed. Long, sentence-like function names buried the most pertinent information under a fog of dependent clauses. Small features required long-winded pull requests, making it easy for engineers to get distracted during reviews and to miss bugs. Objective-C’s excess words, multiplied across thousands of files and millions of lines of code, made for an exhausting codebase.

My own experience with Objective-C has been very different. I wonder if that’s because I work as a solo developer, and the architecture of my apps has always been stable? I always found the early mantra “If it feels hard, you’re probably doing it wrong” when working with AppKit and Objective-C to be more true than not.

Anytime I hit a stumbling block something like “The Way of the Code Samurai” from Wil Shipley would play through my head. Were people who disliked Objective-C fighting it rather than flowing with it?

To me, Objective-C has always felt expressive and capable, doubly so when I first started using it. After coding in Java for years I felt like I could fly.

Swift is the thing now, and both Acorn and Retrobatch use it for parts. But Swift is a heavy and unsettled language, not to mention extremely slow to compile.

I hope someday we’ll get a version of Swift that isn’t chasing whatever the hot new coding paradigm currently is, and isn’t weighed down by ever expanding complexity. I think that could be pretty nice.

Chris Lattner, the creator of Swift, in an interview:

“Swift, the original idea was factor complexity (…) massively failed, in my opinion (…) Swift has turned into a gigantic, super complicated bag of special cases, special syntax, special stuff”

I wonder, what comes after Swift?

April 17, 2025

Alex Harri: A Flowing WebGL Gradient, Deconstructed:

This effect is written in a WebGL shader using noise functions and some clever math.

In this post, I’ll break it down step by step. You need no prior knowledge of WebGL or shaders — we’ll start by building a mental model for writing shaders and then recreate the effect from scratch.

This was an absolutely wonderful read on constructing a nice looking animated WebGL shader, from the very basics up to the end product.

New to me in this post was the concept of stacking sine waves — what a clever idea.

You might remember Harri’s post “The Engineering behind Figma’s Vector Networks” from back in 2019.