❌

Reading view

Banktivity Document Model and Rewrite

Ian Gillespie (2025):

Banktivity has traditionally been what’s known as a document-based app. It lets you create and open independent files (or documents), each with its own data. In contrast, many modern apps—Music, Calendar, Photos—are library-based. These apps typically have a single window and a unified data set.

We’ve long appreciated the flexibility our document model provides. But in practice, most of our customers use only a single file. And more critically, this architecture makes it much harder to integrate Banktivity with the broader Apple ecosystem.

[…]

The shift from a document-based model to the new Organizer framework marks a major step forward for Banktivity. It simplifies how users interact with their data while laying the foundation for deeper system integration, background syncing, and a more seamless multi-device experience.

This follows MoneyWell also getting rid of the document model. From my perspective, it’s a shame. I prefer the flexibility of being able to have different accounts in different documents, choosing where to store the documents, and even splitting the same account across multiple documents for performance reasons.

Ian Gillespie (2025):

Ledgers contain an entire, independent set of accounts, categories, investments, goals, budget and so on. Many customers will only have one Ledger for the finances they manage. But we also know there is a good number of customers out there that manage finances across family members, non-profits and small businesses – for these customers, support for multiple Ledgers is crucial.

[…]

While UI is what you see, most of the hard work has been in the architecture. The Library framework — the backbone that replaces our old document system — is in place. That means we can now reliably connect your Banktivity User Account with all of your Ledgers, whether local or synced to the cloud.

Ian Gillespie:

Refactoring Banktivity from a document-based app into a library-style app was a significant undertaking. It changed some very fundamental assumptions in the code. Ledgers can now be opened and closed in the background, multiple windows and scenes can be active at once, and the Organizer has to coordinate local files, cloud sync, user accounts and application state in ways the old document architecture never had to.

Banktivity 10.0 laid the foundation for that transition. With Banktivity 10.1, a major focus has been strengthening that foundation. We’ve spent a lot of time simplifying the underlying architecture, eliminating race conditions and threading issues, and improving how ledgers are opened, closed and managed.

Previously:

  •  

SuperDuper 4

Dave Nanian:

The new version of SuperDuper is a ground-up rewrite, a tip-to-tail reinvention of what SuperDuper looks like, how it works, what it can do, and where I can take it in the future.

[…]

Documents have been retired and replaced with Copy Jobs, which are stored internally and organized by source. If you want to copy Macintosh HD, that’s where you start. Click, and you’re presented with one or more template copy operations, or you can start from scratch.

Configuration is done right inline by clicking bold, underlined link elements and selecting options from pop-ups. The effect of your choices is immediately reflected in What’s going to happen?, ensuring you know what to expect when you click Copy Now.

SuperDuper has been around for 22 years, and I’ve been using it since version 2 in 2006. Shirt Pocket had always been great about keeping the copy engine up-to-date with all the changes in macOS and its increasingly baroque file system structures. But the outward appearance of the app hadn’t changed much, aside from losing the brushed metal, and neither had the feature set. I know all too well how much work it can be as a solo developer just to keep an app working. Ironically, the better you are at adapting to the changing OS, hiding the complexity, and presenting a simple interface, the more it looks like you aren’t doing much. Actually, if you follow Nanian’s blog, you can see a fraction of all the stuff going on under the hood—tricky edge cases, macOS bugs, and undocumented behaviors that must be handled so that you can essentially just press a button and get a proper bootable backup.

Eventually, he found the time to rewrite the app, both the engine (which is faster and more robust) and the user interface (which is greatly expanded). My first reaction was: this is SwiftUI, isn’t it? And it is. You can just tell by the way the text reflows, all the different colored buttons and blobs, the hover effects, and how the design heavily emphasizes scrolling. (Like System Settings, it doesn’t remember scroll positions. Nor does it remember which disclosure triangles are expanded.) The keyboard navigation and focus behavior are off in places. For reasons I don’t understand, SwiftUI gets a lot of this wrong out of the box. In some cases, like the outline view for creating a copy rule, keyboard support was manually added and works as expected. But there are other places where arrow keys and type-selection don’t work. Sometimes I need extra clicks to get the proper focus. Sometimes the arrow keys scroll the window instead of changing the selection.

That said, this is one of the best SwiftUI interfaces I’ve seen. I think it successfully preserves the spirit of the app, making it really easy to configure things and see what’s going to happen, while streamlining the way documents/jobs are managed and expanding what you can do. It’s still essentially one window (plus a Settings with one checkbox), and you can still use it in the old way, but now you can also run multiple jobs at once and inspect their histories.

Click the Preview button and SuperDuper will run the copy without making changes and present you with a report that shows exactly what would have been updated, added, deleted, etc., had this been a real run.

This is great to have. If there are particular folders or files you want to check, you can browse the source tab of the preview to see what’s excluded or find them in the destination tab to see whether they would be added, updated, removed, or kept. The interface to browse this is a sort of columns view with only one column. It’s fast and easy enough to use, but keyboard navigation doesn’t work properly. I longed for it to be an outline view so that I could quickly expand an entire subtree and see at a glance which files would be changed. I also wished that it would show how much data would be copied.

SuperDuper 4 is much faster than before. And I’m not just talking 20% or 30% faster. Smart Updates are between 2x and, with the new Turbo feature, an order of magnitude faster.

It’s hard to benchmark such things, but my general impression is that this is true. The longstanding Smart Update feature copies only the files that have changed. This seems quite a bit faster than before and slightly faster than Carbon Copy Cloner. The new Turbo feature uses the FSEvents log to optimize finding such files. If macOS knows which folders might contain changes, SuperDuper can focus on those and not waste time scanning ones that are identical. When this works, it feels almost impossibly fast. SSD-to-SSD backups of my Mac’s boot drive will take 1–3 minutes instead of more like 20 minutes. This also seems to be faster than Carbon Copy Cloner’s similar Quick Update feature.

Unfortunately, for reasons seemingly out of the app’s control, sometimes Turbo isn’t possible. This can happen if you’ve modified the copy job or if there’s been a huge amount of file system activity since the last backup so that FSEvents doesn’t contain the necessary information. In such cases, SuperDuper will fall back on doing an old-school Smart Update. I found that excluding my destination drive from Spotlight made it much more likely that Turbo would work.

As much as I like Turbo, I don’t end up using it except for the daily scheduled backup of my boot drive to an always-connected SSD. For my other backups, I have multiple destination drives for each source, and I find that the user interface doesn’t scale so well to configuring a separate job for each. That leads to lots of scrolling. So, instead, I use just one job per source and select the destination I want before starting each backup. This counts as editing the job, so it won’t be able to Turbo, but I find that backups to slow spinning hard drives take a long time either way and are dominated by the copying speed rather than the scanning speed.

Successful and failed runs are shown at the bottom of the copy job, with color-coded dots that can be clicked to display details.

This is my favorite bit of interface design in the new version. It very compactly shows you the recent history for that copy job using the same format that’s used for showing the completion status of the most recent run. I can quickly see all the information I usually care about, and you can click a button to see more detailed information if necessary. The downside is that you can’t see as much information at once—or across multiple jobs—as if there were a dedicated log window, and it only shows the most recent 7 runs. But I think this tradeoff is well in keeping with the app’s spirit of making things simple and clear rather than offering every possible option.

The most baffling part of the interface is that after each backup completes or fails it shows an “Apple Intelligence Summary”. Much space is devoted to labeling this and to assuring you that none of your data went into the cloud. I just don’t see what the point of this is. 99+% of the time, my backup either succeeded or failed for a very predictable reason like running out of space. Why do we need AI for this? I trust the AI summary less than I would a hard-coded string from the developer. Perhaps in an obscure situation that the developer didn’t anticipate Apple Intelligence would be able to offer a useful interpretation, but I have yet to see that.

At a technical level, SuperDuper has been split into a “helper” or “server”, which runs the copy, and an interface, which is the part you interact with. That means that, once registered, you can quit the SuperDuper application and your backups will still run. They’ll even run if you log out!

It doesn’t much matter to me that it can back up without launching the app—I like to see its progress—but I appreciate the new architecture for scheduled copies. Schedules are now much better integrated into the app proper rather than being driven through AppleScript.

You can run any number of copies at the same time. If you have four backups you need to do, just click Copy Now for each, and they’ll all run simultaneously.

This is the most important new feature for me. I used to do all my clone backups with SuperDuper. But, over years, my backup needs grew. I now have five main source drives to back up. They are much larger than before, and APFS on spinning hard drives is really slow. Thus, the backups, even with Smart Update, can take a long time. That was a lot to manage with old versions of SuperDuper. Carbon Copy Cloner has long supported multiple simultaneous backups so that I could connect a bunch of destination drives, tell it to start, and when I came back they’d all be done. I didn’t have to be there to wait for each backup to finish and then start the next.

It was just so much easier, so I started using Carbon Copy Cloner for most of my backups. But I still liked SuperDuper and trusted its copy engine, so I continued to use it to do some of the backups of my most important drive (the internal SSD). I think it’s good backup practice to have redundancies, not just in terms of multiple physical drives and storage locations but also for the software creating the backups. Both are quality apps, but it’s possible that there’s a bug or a misconfiguration on my part that might prevent the copying of a file that I need. Why put all my eggs in one basket? Now that SuperDuper also supports multiple simultaneous backups, I’m using it for half the backups of all my drives. On one backup day I’ll do all SuperDuper backups, then the next time I’ll do all Carbon Copy Cloner backups. (I continue to use Time Machine and Arq for additional redundancy.)

If you try this, I strongly recommend writing down which app you used for each destination drive and then doing all future backups to that drive using that same app. And it works better to do the first SuperDuper backup with Erase and Copy rather than trying to Smart Update a Carbon Copy Cloner backup.

There are a variety of reasons for this, but the main one is the different ways that the apps deal with APFS snapshots. Both use snapshots on the source to ensure they’re copying from a consistent state. And both mark completed copies with snapshots on the destination. But the retention of the destination snapshots is very different.

Carbon Copy Cloner can keep them around essentially as long as you have enough free space. It can also prune them out of order, so that you have daily snapshots for the last month and weekly ones going back further. This is managed by the app, though you can also manually delete snapshots yourself using Disk Utility.

SuperDuper’s snapshots are automatically managed by the macOS. I’m personally less fond of this design because in practice the system will choose to clean up old snapshots almost right away. I can’t count on being able to restore from any backup but the most recent. To me, this is a shame because APFS supports multiple snapshots, and there’s plenty of space on the drive to store them, but I can’t use them. It’s just not a design goal of the app.

Again, this ties back to how SuperDuper values simplicity. If it made longer-lived snapshots that weren’t cleaned up automatically, you might get into a situation where you (or another app) wanted to add files to a drive and couldn’t because it seemed to be full. You’d have to understand snapshots or have an app that could delete the SuperDuper snapshots to free up space. Third-party apps aren’t supposed to delete snapshots belonging to other apps, which is why you don’t want to mix SuperDuper and Carbon Copy Cloner on the same destination. If the former needs more space to complete a backup, it won’t be able to purge snapshots created by the latter.

The status information for the backups that are in progress is shown right in the Sources section of the main window. You can see at a glance which drives are being copied and when they’re all estimated to finish. I haven’t found the estimates very accurate, so I’d prefer to see the start time and the percent complete. Flipping between multiple active jobs to check their detailed progress is kind of a chore, but if all you need is the summary information you can close the app and monitor it from the new menu bar icon.

SuperDuper 4 now supports copying to and from any file system the Mac supports. Using a “Photos” drive with both Windows and Mac that’s formatted as exFAT? No problem: you can copy it.

It can also copy individual folders rather than just entire volumes, if you drag them into the sidebar.

I’ve added Shortcuts support, so you can create a shortcut that runs before or after a copy, on success, or on error. Want to send an email on success or failure? Beep when copies are done?

[…]

Not only does SuperDuper let you call a shortcut from a copy—you can create, run, and check on a copy job from a shortcut!

There’s a lot of potential here, and the completion shortcut receives a bunch of JSON describing what happened so that it can make decisions about what to do. On the other hand, I would rather see AppleScript support, as I find Shortcuts confusing and inconvenient. I wish that common completion actions like sending e-mails were built into the app so that they were easier to set up. (You can choose to eject the drive, post a notification, or sleep the Mac without having to write a shortcut.)

In all the years SuperDuper has been on the market, we’ve never charged for updates and never even raised the price. That’s 22 years of free updates.

The Apple Silicon version was a paid upgrade, but you could run SuperDuper 3 in Rosetta with an old license and still get all the features.

Version 4 costs $43.95, with various upgrade discounts based on the purchase date. There’s no discount if you purchased before July 2020, but us old timers got so many years of free updates it was one of the best deals ever in Mac software. Regardless, it’s not a high price for peace of mind. The new version is, I think, a massive improvement, maintaining the spirit of the original while modernizing and expanding it.

I’ve already said that I use both SuperDuper and Carbon Copy Cloner. I think both are excellent—great apps with great customer support. With SuperDuper 4 they’re more similar than in the past, but they remain very different. If you must pick one, I would say that Carbon Copy Cloner is better if you want lots of options and control; if you want persistent snapshots, verification, copying of cloud-only files, or detailed logging; or if you have a very large number of backups. (It does have a Simple Mode, but it’s arguably too simple and limiting.)

SuperDuper is better if you care about bootable backups or want something simple but not too simple. There’s documentation, but you probably won’t need it because so much is explained within the app’s interface. It’s just really easy to set up a backup, see what it’s going to do, see what it’s currently doing, and see what it did before. Pretty much everything happens in a single window, without tabs or separate modes. SuperDuper is all about striking a good balance for most people, doing the right thing with a minimum of fuss.

See also: Adam Engst and Accidental Tech Podcast.

Previously:

Update (2026-08-14): The developer wrote in to say that SuperDuper does try to remember the scroll position in the main window, just not across launches. With the current version, 4.0.2, I find that this mostly works but that it gets thrown off if I’ve expanded any of the triangles to see more details about the currently running job. Then my carefully positioned view will be shifted a bit when I come back to it. It’s hard to get this exactly right.

He also had a great tip about a hidden feature that can relieve some of the scrolling issues I encountered: you can click multiple times on a drive in the list of sources to have it jump to the next active job for that drive, scrolling it to exactly the right spot. When the sidebar has keyboard focus, you can also do this by pressing the Spacebar.

See also: Dan Moren.

Update (2026-08-20): SuperDuper 4.0.3:

For those with a lot of volumes, there’s now a sort control for the source list: you can alphabetically by type, or purely alphabetically.

There’s now an option in the sort pop-up that adds a few sections to the source list.

I like being able to separate the source drives from the destination drives. The update also improves VoiceOver support.

Update (2026-09-09): See also: John Gruber.

Previously:

Update (2026-09-16): SuperDuper 4.0.6:

Click the n copies running pill to filter to just those jobs. If you have a lot of copy jobs for a given source, you can filter the list with a click.

[…]

SuperDuper now picks a band size that suits the image’s size, balancing the number of bands with their size.

[…]

There’s now a third-party application, Open Backup, that can notify mobile devices (iPhone and Android) when backups run.

  •  

Pastebot 3 for Mac

John Voorhees:

What sets Pastebot 3 apart is its addition of deep automation tools. Not only does the update add MCP support, making it an excellent tool to use with Claude or ChatGPT/Codex, but it includes a brand new CLI that you or an agent can use from Terminal or incorporate into scripts you build.

[…]

New filters have been added that allow you to transform clippings using text transformations and even shell scripts. Using the ability to script custom filters, I’ve begun adding a few of my own to Pastebot for things like adding and removing bullets from multiple lines of text.

I’ve long been aware of this app but hadn’t paid much attention because I’m happy using LaunchBar as my clipboard and snippet manager. LaunchBar has some transformations built-in, and I’ve built up a collection of my own scripts, but it’s appealing that Pastebot comes with so many out of the box.

From Pastebot’s main UI, you can select multiple items at once and right-click to add them to a Stack, or you can pick them one at a time in any order you’d like. As you select items, they’re numbered in the order you’ll paste them into a document using a keyboard shortcut. It’s an excellent feature for filling out forms or copying data from one spreadsheet to another.

Juli Clover:

There are also rule-based Smart Pastebins for automatic organization, like every link or image copied from Safari. Smart Pastebins can be filtered by clipping size, type, file extension, creation date, text, text length, and more. Multiple parameters can be combined for detailed filtering, and custom notes can be added to clippings to make them easy to find via search.

[…]

Tapbots says Pastebot 3 was built to work with Apple's Universal Clipboard feature, and when enabled and active, anything you copy on your iPhone is saved in Pastebot automatically.

John Gruber:

Chief among my favorite features:

  • Remembers up to 1,500 clippings (up from a mere 1,000 in v2).
  • Syncs via iCloud. If I copy something on one Mac, it’s in my Pastebot history on my other Macs.
  • That sweet Tapbots UI.

Marcus Mendes:

Importantly, Pastebot 3 requires macOS 26 Tahoe or later and comes with a 14-day free trial. Users can buy the app directly from Tapbots for $39 or subscribe through the App Store for $2.99 per month or $24.99 per year.

[…]

The direct purchase includes one year of updates, with additional years available for $19 each. Users who stop paying for updates can continue using the latest version covered by their purchase. Pastebot 2 owners can also get a $12.99 upgrade discount by entering their existing license key at checkout.

scottybee:

They are not offering any upgrade path for MAS customers. The reason they stated was “upgrade pricing has always been our way of thanking people who bought directly from the site.”

Paul Haddad:

I generally try to avoid complaining about App Store review, since I do think they have a really hard job to do. But I’m about 2 more PB3 rejections from just giving up.

Previously:

  •  

Flickr 5.0

Phil Gyford:

Flickr recently updated their iOS/iPadOS app to version 5 (App Store link) and, while it’s not radically new, for a service whose changes have been incremental over recent years it contains a lot of differences. However I’ve yet to find any official changelog or update information.

[…]

When displaying multiple grouped photos from a person you’re following, it is no longer possible to view all the subsequent ones, other than the three or four initially displayed.

In the list of your Followers’ photos, their name now appears under their photos, so you must scroll down beyond the photos to see who took them.

[…]

When zooming into a photo the app no longer loads a higher resolution version, so now the zoomed-in version will be very pixellated.

He has a long list of missing features that may or may not be coming back. And there’s what seems like a major change: tags can no longer use capital letters.

The main changes I noticed were:

  • In the Home/Discover view, when there’s a large group of new photos, you can only go into the group and view them individually, swiping to see each one. There’s no longer a way to see the whole group at once and scroll through it. (And tapping on the group icon or number of photos doesn’t do anything.)

  • Double-tapping to favorite doesn’t work in some situations.

  • The interface is more busy, showing more interaction chrome like other social media sites, rather than focusing on the photos.

  • Swiping/navigation seems more clear than before, though without the old app side-by-side I can’t be exactly sure what’s changed.

Update (2026-07-16): Wesley Moore:

The Android version has been updated too:

“Flickr is back and better than ever — rebuilt from the ground up with a fresh new look and feel.”

I would guess it’s been built with cross-platform technology as it looks the same and came out the same time as iOS. The performance is terrible on Android. Scrolling my Photostream is juddery on my Pixel 9a (120 Hz display). It’s worse on my Android tablet.

Scrolling between photos swipes the whole UI (not just the photo), there’s also a flash of white loading the new photo. Needs some serious iteration.

See also: Reddit.

Update (2026-07-27): A. Lee Bennett Jr.:

Hooray! #Flickr restored a thumbnail view of all items from a specific post.

It turns out that Flickr 5.0.3 reverts back to the 4.x codebase.

Flickr (Reddit):

We know the new app hasn’t met the bar you expect from Flickr. Since launch, we’ve heard your feedback about bugs, missing features, and rough edges, and we want to acknowledge that directly. Here is where we currently stand:

iOS: We’re in the process of rolling back the iOS app to the previous version while we address these issues. You should see this reflected in the App Store shortly.

Android: The Android app will remain on the updated version. Due to technical limitations and the risks involved in reverting, a rollback isn’t possible on this platform. Instead, expect frequent updates as we fix bugs and restore preexisting features.

Across both platforms, this app refresh represents a significant, long-term investment in the Flickr app. The app was long overdue for an update and getting it right matters to us. Thank you for your patience, and for continuing to share what’s missing and not working. It’s shaping exactly what we address next.

  •  

ChatGPT Work and ChatGPT Classic

John Gruber, earlier this week:

When ChatGPT is attached to an open document in another app, it’s not a snapshot at the moment of attachment, like what you’d get by copying and pasting the whole thing into the chat, or by dragging the current version of the file into the chat. It’s a live ongoing attachment, so as the attached document/note changes, ChatGPT sees the changes. It’s such a great feature, and I don’t think it exists on any platform but the Mac. And it couldn’t exist on iOS, by design, doesn’t allow for inter-application communication.

I worry for ChatGPT’s future, though.

Juli Clover:

OpenAI today announced ChatGPT Work, a ChatGPT agent with built-in Codex that can complete tasks across web, mobile, and desktop using information from your apps. ChatGPT Work can execute multi-step tasks, using scheduling to work independently. Like Claude Cowork, ChatGPT can use your computer to do tasks in the background across apps.

[…]

With OpenAI merging Codex and ChatGPT, there is a new ChatGPT desktop app that’s available across Mac and Windows. Users who have the Codex app installed can update it to turn it into the new ChatGPT desktop app. The existing ChatGPT desktop app is being renamed ChatGPT Classic.

Zac Hall:

You can watch today’s livestream announcement video below[…]

[…]

It’s possible to have ChatGPT Classic, ChatGPT, and Codex installed, but the way forward seems to be just running the new ChatGPT desktop app. Codex users can still use the Codex app icon, but the app will be called ChatGPT.

The ChatGPT Classic app looks more native Mac-like, so that might be an issue for users.

Steve Troughton-Smith:

LOL @ OpenAI replacing the native AppKit ChatGPT app with the Electron Codex app after @gruber’s recent posts on the topic 😂

(It’s almost like Apple doesn’t have clear messaging on the right way to build native desktop apps anymore, and, if Apple doesn’t know, why on earth would third-party developers make that investment)

Federico Viticci:

The rollout of the unified ChatGPT for Mac app really isn’t going well on X/Reddit 🥶

They kinda fumbled it and I think Anthropic did a slightly better job on first try. Even OpenAI’s existing iOS app makes more sense than their new Mac layout right now.

The difference between “normal” chatbot chats, Work/Cowork harnesses with connectors, and Code/Codex local threads and filesystem access is the new UX hell for these companies.

Steve Troughton-Smith:

The chat experience is ChatGPT. Now it’s squirreled away in a sub section of a sub pane inside a vastly more-complex app. It’s hard to imagine anybody who actually wants to use ChatGPT wants to use it this way, Electron or not. And as a Codex user, I resent having my Codex deleted and renamed ‘ChatGPT’ instead. I don’t want my ‘chats’ anywhere near my ‘work’. This feels like a stupid move that will decimate casual ChatGPT desktop usage

John Gruber (Mastodon):

Looks like I picked the wrong week to quit sniffing glue.

See also: Dithering.

Previously:

Update (2026-07-13): Tony Arnold:

Oh yeah, the new ChatGPT app is as bad as first impressions made it out to be. It’s not just a slow, RAM hungry shell of a thing, but the design and UX are a poorly thought out kitchen sink approach.

Codex has never been great, but this is a confusing mess.

Benedict Evans:

Wow, what a total mess. What is the difference between a project, a task and a chat? Why did chats get a crappy floating window but tasks and projects don’t? Why does choosing ‘plugins’ get me ‘templates’? Am I not allowed to finish ‘setup’ if I don’t use Slack or Google Drive? Why…

Via John Gruber (Mastodon):

OpenAI’s internal org chart is a complete disorganized mess. This new app perfectly reflects that.

The old ChatGPT app was focused. That’s the app that still ships for mobile (which includes iPad, which tells you whether OpenAI thinks iPad is a real computer or a big iPhone), and is, for some Mac users, left installed on their systems as “ChatGPT Classic”. The new app is an incredibly confusing sloppy mess. At a glance it looks like a polished app. But the UI is just slop. It has the veneer of a polished app without actually being organized or structured or labeled in ways that add clarity and coherence.

John Gruber:

So I don’t see “the prompt in the app to download the new ChatGPT desktop app”. If I download the new app manually, I get a disk image. After mounting the disk image, the instructions say to double-click the “ChatGPT” app on the disk image — not to drag it to the Applications folder. If I do that while the old ChatGPT app is still running, it bounces back and forth a few times but nothing new gets installed and nothing old gets removed or renamed. I’m just left with the classic ChatGPT app, still named “ChatGPT”.

If I run the installer on the disk image when the old ChatGPT app is not running, the old app gets replaced by the new one in my Applications folder, and the old app is moved to the Trash. There is no app named “ChatGPT Classic”.

I mean, their Help document does say “the new app may install alongside your current app”, and “if both remained installed”, so they seem just as confused as I am.

Update (2026-07-14): Adam Engst:

And as much as I’ve been focusing more of my attention on Anthropic’s Claude because of concerns I have about OpenAI and its management, ChatGPT has more active users (~1.1 billion) than Google’s Gemini (~900 million), and many more than Claude (~245 million, in part because it’s more focused on enterprise uses).

As such, it’s worth noting three recent changes with ChatGPT: a massively confusing app replacement, the end of the ChatGPT Atlas Web browser, and improvements to ChatGPT Voice.

Update (2026-07-17): M.G. Siegler:

Let’s give OpenAI some credit, once they realize they made a mistake, they act quickly to correct it. Today’s case in point: with an update, ChatGPT now features ChatGPT once again. No, that’s not a joke, and yes, it does speak to a very obvious self-own.

John Gruber:

How in the world did they ship this without sync?

[…]

Bringing back “chat” to ChatGPT is literally the least they needed to do. Hiding chat in an obscure corner of the interface from an app named “ChatGPT” would be like removing text editing from TextEdit.

  •  

Rewriting Apple’s TrueType Hinting Interpreter in Swift

Scott Perry:

My team rewrote Apple’s TrueType hinting interpreter in Swift, ask me anything.

[…]

I feel like naming just one would be a disservices to all of the features that made this effort possible (C interop, generics, noncopyable/nonescapable types) but at the end of the day I think the star of the show was the optimizer; despite being faster than the code it replaced, the new code is super readable and that was only possible because the optimizer was able to completely eliminate all of our abstractions.

The new version is faster, but the main motivation was security concerns.

Dmitrii Kalianov:

Is hinting useful/being used in the days of hi-dpi displays? I was under impression that Apple switched to grayscale anti-aliasing and ditched hinting.

Scott Perry:

For the most part hinting isn’t really necessary anymore, but thanks to being Turing-complete it has been Hyrum’s law-ed by at least one CJK font that uses hinting to lay out strokes in its characters.

Alex Rosenberg:

There were three major TrueType implementations at Apple IIRC:

  • The original 68K one
  • A rewrite for Copland that lived with ATS/ATSUI after Copland was cancelled
  • iPhone shipped one derived from heavily-modified FreeType that was current until today

Scott Perry:

One of the axioms for this project was that I wanted my team to write the most boring code possible—nearly identical structurally to the code it was replacing, because to do otherwise would introduce binary compatibility risk. The other axiom was 100% test coverage for all new code as it landed, with the same units testing both interpreters.

Rosyna Keller:

Is the font parsing code itself still C++?

Scott Perry:

There is also a “Safe Font Parser” for WebKit in Lockdown Mode, but it supports a subset of all the myriad features provided by font formats.

Previously:

Update (2026-06-16): Scott Perry (Hacker News):

Font parsers process data from untrusted sources, making the TrueType hinting interpreter a security-critical attack surface. To make the format more resilient on Apple platforms, we rewrote its hinting interpreter from C to memory-safe Swift for the Fall 2025 releases. In addition to memory safety, we also improved performance: on average, our Swift interpreter runs 13% faster than the C interpreter it replaced.

[…]

Binary compatibility was crucial for this project to succeed: existing programs had to continue to function the same as they did before, effectively unaware that a new implementation was in place. This means not just interface compatibility but pixel-identical glyph rendering as well, relative to the C implementation.

[…]

To ensure correctness, we developed two test suites. The first was a unit test suite that can target both implementations, providing exhaustive (99.7%) code coverage for both. This suite is included with the open source release of the Swift interpreter.

Then, to represent real-world workloads, we used a fuzzer to minimize a corpus of 10 million PDF files down to 4,200 without any loss of code coverage.

[…]

Following WebKit’s Safer Swift Guidelines, the example below demonstrates how to wrap a bridged structure from C in a projection type that uses Ref for lifetime safety, brokers bounds-safe access to the underlying data, and returns idiomatic Swift types to its callers.

The interpreter source is on GitHub.

Marcin Krzyzanowski:

@_lifetime(copy code, copy twilightZone, copy glyphZone)

See also: Phillip Tennen’s Writing a TrueType font renderer (Hacker News).

Previously:

  •  

Rewriting Notion in SwiftUI

Hartley Charlton:

Apple this week confirmed that Notion is migrating its user interface to SwiftUI, citing the app’s desire for greater performance and UI consistency than its existing web-based stack can deliver.

[…]

The callout was clearly deliberate; Notion is one of the most widely used productivity apps on the Mac, and has long been criticized for the sluggishness that comes with its Electron-based architecture.

Previously:

  •  
❌