Spent some time reworking pilky's Coppice for the new design language, moving the symbology to SF Symbols, trying to get glass in the right places, patching out all of the old licensing system. It's hard enough porting your own app, nevermind somebody else's vast codebase, but I'll get through it eventually 🙂
We talked for years about bringing Coppice to iPad and the App Store, but those plans just kept getting punted as the short-term todo list got longer. And with new OS redesigns and frameworks being a moving target, there's a lot of investment needed just to tread water, so I expect this to be a long-term project
Coppice is a pretty complex AppKit app, about 70,000 lines of code, with plenty of NIBs and lots of Combine. Finding every nook and cranny in the app that needs a redesign for Liquid Glass, figuring out where it is in the codebase, and how it interacts with everything else, would be impossible without Xcode's 3D layer visualizer. On top of that, the data model is broken in the last set of commits, so I have a lot of spelunking ahead of me just to get it working again. Making progress though
Here's a before/after of the empty Coppice UI so you can see the changes I've made so far, and the nature of my redesign
We're getting somewhere with the design. AppKit has a lot of rough edges with Liquid Glass, and it doesn't seem like they've bothered to update Interface Builder for any of the recent control styles either, but it's been an interesting challenge nonetheless
Problem of the day revealed: M3Data's plist parser was stumbling on 1s and 0s being interpreted as bools instead of their actual number type. Quick fix deployed, and now Coppice opens documents again 🥳

Another reveal: NSToolbar's .flexibleSpace doesn't provide progressive blur by default, but .space does 🤦‍♂️

All in a good day's work.

If you want to see how Coppice was built, pilky's dev livestreams are still up on YouTube, with hundreds of hours of AppKit and related discussion. As we approach a year since his passing, and as I prepare a significant update to Coppice, it's kinda nice to revisit them

https://www.youtube.com/@mcubedsoftware/videos

Coppice

Coppice is an app for the Mac that lets you collect your thoughts and ideas, link them together, and visually lay them out on an infinite canvas. Coppice is developed live on Twitch, with VODs put up on this channel afterwards.

YouTube
Putting a significant amount of work in while I wait for App Review; not gonna be shy about changes to Coppice — there was a lot I wanted to add to it even before it was passed to me, like quality of life additions, interaction and terminology changes, and more. I'm seeing how much I can get away with without digging a hole for myself; this week I'm the AppKit whisperer
Bringup of Coppice 2026.0 so far: 317 changed files, 2041 additions, 8575 deletions

I had often asked for color pages in Coppice, but it was always on the back burner behind a lot of other pressing todo list items. So I figured I may as well dig in now and see if I could do it myself

~several hours later~

Related: IB autolayout can go IN THE BIN 🚮

👨‍✈️ What I'm currently working on in Coppice is now available on TestFlight if you're running macOS 26 or newer. I would love for some external feedback, as it's a big app with a lot of corners to test and I don't have a pre-existing bugs list

https://testflight.apple.com/join/Z2j1UB3Y

Finding new places to insert NSGlassEffectView
Here's a before and after of the last (final) release of Coppice, and what I've been working on since
There's really nothing in the way of unfinished leftover features in the Coppice codebase. Pilky was a meticulous planner, and would do several rounds of concept mockups and unit tests before touching anything at the UI level. I'm the opposite, I need to get stuck in and try things, so my Xcode projects are all filled with little treats for later — alternate UIs, experiments, etc
Coppice is in a pretty good state now, with just one critical issue I'm aware of before I would be happy to start preparing to submit it to the App Store. It will be free to download for sure, though I still have to figure out how to justify ongoing development and keep the app healthy. I think we all know by now that Mac apps can't survive in this day and age on one-time purchases 😐
Lots of miscellany in my build to build changes now with Coppice. Bigger, more-rounded buttons on the welcome screen. 'Jump to Page' is now 'Open Quickly', composed some new, better SF Symbols to use for some verbs in the app, page titlebars have been realigned and centered, and the page editor background now blends into the window. Also reworked the QuickLook renderer, which wasn't drawing arrows on the canvas
Was reading the @johnvoorhees review of Coppice and it prompted me to build in a little Apple Intelligence feature to automatically name your pages based on their content. Fast and helpful even on an M1

I think I found my critical issue in Coppice, and it's due to NSTextView downgrading from TextKit 2 to TextKit 1 if you access .layoutManager on macOS 26 😅 It isn't triggered by apps built with an older SDK.

It seems like setting (the private) NSTextViewAllowsDowngradeToLayoutManager=NO completely fixes the issue?

This might be a problem I need Apple input on…

Props to Codex for pointing me to the problem location (in this 70Kloc codebase), but actually debugging the issue required digging through AppKit and UIFoundation in Hopper. Codex looped me round in circles with multiple superficial fixes, that worked, but left the underlying problem, so I threw it all out.

AI can do many things, but it can't replace a developer with deep platform knowledge

I've pushed this build of Coppice with the list style bugfix to TestFlight; there are still other bugs with paragraph styles but that's a job for tomorrow. This version of Coppice is drawing very close to release
Powering through the last remaining issues in Coppice. I think the last thing I have to do now before a release is rewrite all the documentation 🥴 It has felt like a herculean effort getting this up to speed, but we're there now
What do you /meaaan/ all you do is insert a StoreKit SubscriptionStoreView and it does all the work for you and you're done?
Still reeling over how easy StoreKit makes this look, but OK. I think this is how I'm going to handle 'monetizing' Coppice. Completely optional, same price as the original Coppice Pro. It's there if you want to make ongoing development possible, and you can completely ignore it if you don't. It's a bit more formal than a tip jar, and honestly I'd like the app to live on forever healthily
Polishing the last few things in Coppice before I start posting release candidate builds. It has a beautiful new version of the icon from @matthewskiles, too 😄
Need a closeup of that @matthewskiles icon, though. Just look at that thing 🤤
Having to rewrite everything in terms of TextKit 2 is causing a cascade of other issues and is really trying my patience. Who decided this was a smart thing to do when targeting macOS 26? 😐 Dealing with a UI redesign is bad enough, but a complex rich-text layout rearchitecture on top is too much
Made it through my final bit of UI in Coppice, so I can start crafting marketing screenshots and testing the waters with App Review 😄
Coppice for macOS 26 stats: 54 commits, 440 changed files, 5,760 additions, 9,456 deletions. It's the biggest AppKit project I've worked on in nearly 15 years
February 14.

💜 A year ago today we lost one of the kindest, most-generous developers in the Mac community, Martin Pilkington (pilky). He was known for and worked on many projects over the years, but Coppice was his labor of love. I have been working the past couple of months on rebuilding Coppice for macOS 26, Liquid Glass, and the App Store, and I'm thrilled that today is the day I get to release it into the world — with all of its previously-'Pro' features available for free

https://apps.apple.com/app/coppice/id6741889046?mt=12

Coppice App - App Store

Download Coppice by Steven Troughton-Smith on the App Store. See screenshots, ratings and reviews, user tips, and more apps like Coppice.

App Store
Taking on somebody else's codebase is not easy; there were so many things on Coppice's roadmap that I would like to get to, and that's why there is an optional 'Coppice Pro' subscription in the app. It provides no extra features or capabilities, but just lets you say that this is an app you care about, and an app you want to keep growing. Feel free to ignore it completely. If you previously owned 'Coppice Pro' on the pre-App-Store version, all of those features are now available to you for free
Thank you very much to @matthewskiles too, who contributed a new version of Coppice's already-beautiful app icon that fits the macOS 26 icon template. I think pilky would have loved it

pilky had two white whales: one, was bringing Coppice to the App Store.

The other, was Coppice for iPad.

Hopefully, that's a story for another time

I handed Codex a Coppice document and told it to just figure out the data model, then create a complex document of its own, and it effectively gave me the evidence board meme 😂

Jokes aside, this gives me an incredibly powerful tool for creating sample Coppice documents to test all kinds of things, and for free

I also revised the Mac App Store screenshots for Coppice, now that I've had a little more time 🙂
I didn't give Codex any specs, I didn't give it any code, I just gave it a file format it /had never seen before/ and asked it to make some more documents like that. It's astonishing

'Codex, insert some pictures of birds for me'

I mean. An attempt was made! 🤣

If Apple Intelligence could actually perform like other cloud-based models, this whole document-generation feature could actually be a real feature I could put in the app.

Alas.

(Also this is a ton better than Keynote's $20/mo Creator Studio slide generator, already. Just saying. I'll happily take your money instead 🥲)

"Make a stress-test document for me"?

No problem.

Codex is now so familiar with Coppice documents that I can hand it a *screenshot* of an existing Coppice document and it will build it.

First image here is an image from the old Coppice website. I gave it to Codex and asked it to recreate the document.

Second image is the recreation. Layout very similar, formatting, links intact, structure in the sidebar. And it did a cheap vector pass at recreating the image too.

As a reminder: it /had never seen this document format until an hour ago/

One thing these Coppice docs confirm to me is that I need to enable more page colors in the UI. I didn't limit Codex to the pre-set colors in the app, and I'm glad I didn't. That'll be the first thing I expand in the next feature update
@stroughtonsmith but can you do the opposite? Can you give it a screenshot of the app and the document format and have it build you a from scratch version of the app without any legacy code to compare and contrast?
@everyplace you're not gonna bait me that easily
@stroughtonsmith ha! I bet you were already thinking about it. Okay an even more amusing test: Coppice to OmniGrafflle bidirectional converter. Or maybe… Freeform?
@stroughtonsmith those are definitely something
@stroughtonsmith I'm quite tempted to feed it Clone Hero scores that I can only find with Expert level tracks, and ask it to generate me Easy, Medium, and Hard scores working back from the Expert score...
@stroughtonsmith How are you screenshotting with window tinting? It always gets disabled when I take a screen shot
@yidev take a normal desktop screenshot, then mask the window in Photoshop or Pixelmator using the quick select tools
@stroughtonsmith Now tell it to change the dotted lines to look like conspiracy yarn!
@stroughtonsmith don’t you need to pay for Codex?
@ePirat it's the same $20 I'm paying for ChatGPT, but I think you're missing the point. I'm not suggesting the AI is free, I'm saying I got this incredible new capability 'for free'. Previously, I would have to spend the time building sample docs by hand
@stroughtonsmith Oh ok, thanks for clarifying. I am curious about the format, is it something someone could infer how it works by looking at it or is it some complex binary one?

@ePirat given enough time and experimentation, you could have figured it out, yeah. I had it create a 'spec' to bring future chats up to speed, so you can understand the level of complexity involved:

https://gist.github.com/steventroughtonsmith/7c6eae6b1894c02d4824e35d857f4311

Codex-generated reverse engineering of the Coppice document format (WIP)

Codex-generated reverse engineering of the Coppice document format (WIP) - CoppiceFileFormat.md

Gist

@stroughtonsmith I’ve followed your experiments with LLM-assisted coding for apple and wanted to ask, if possible: what’s the most efficient way for you to work right now, Codex in Xcode or using more “standard” tools like Claude code/vscode plugins?

Background: I’m a software developer with zero experience in app development for mobile, but I’ve always wanted to make a small video editing app (just applying existing CoreML models really) and I feel like my time has finally come

@trankon it's a little complicated right now, because the best way is clearly by using the Codex app and the 5.3 model, but it doesn't have Xcode's ability to safely edit your project file, so it tends to stuff things in files that already exist in your project unless you force it to try editing your project file by hand. If Apple updates their version of Codex to use 5.3, then stay in Xcode

@stroughtonsmith awesome, thanks a lot! I’ve started using Codex quite a bit in non-Apple contexts, so I think/hope I’ll be fine.

Incredibly exciting! If I have some time on the weekend I’ll report back how it goes :)

@stroughtonsmith one of the research projects i wish i had time for is to compare the effectiveness of LLMs vs traditional fuzzers for doing this sort of thing. would be interesting to compare how long afl or libfuzzer takes to start generating interesting coppice documents for testing
@joe I feel like I could write a research paper on each of the different tasks I've handed to an LLM and had it figure out instantly
@stroughtonsmith well i still can't help but look ahead a year or two when either the free VC money runs out, or the model companies succeed in becoming the monopoly over data and computering, and their models become more expensive and worse and we have to turn back to non-LLM techniques to do things

@joe @stroughtonsmith Let's assume the price of models from Anthropic/OpenAI/etc shoots up and no one wants to use 'em.

Open weights models are a few months behind the SOTA closed models, are getting better quicker, and can be served profitably. (Inference is already profitable for model providers, it's training that is a giant expense).

I can't predict the market but we've crossed a threshold where today's models are good enough to write code, so people will continue using them to write code.

@mergesort @stroughtonsmith it’s hard to beat the user end experience of a tool that can attempt an ok job at almost anything without specialization. but even on device, LLMs are probably overall more compute intensive and less predictable than the right tool for the job

seems like a natural evolution of the “agent” model that the undifferentiated LLM eventually becomes a frontend to more specialized models or traditional tools. that would also make it more practical to run those models locally

@joe @stroughtonsmith I think this flattens a few arguments into one that each deserve expansion.

1. Many people say LLMs when they mean agents and vice versa, so it's a bit hard to pull 'em apart.
2. But even LLMs that all "work the same way" aren't really undifferentiated, post-training base models changes the characteristics a ton.
3. Using an LLM out the box is mostly fine, but the progress in developing harnesses is what's making AI very capable at coding, and that's only getting better.

@joe @stroughtonsmith Also I should clarify when I say run an open weights model I do not mean on your laptop. I mean some enterprising company loads up a Kimi or GLM model and serving that to end users, possibly on the hardware that died with Anthropic and OpenAI's hypothetical demise.

@mergesort @stroughtonsmith > the progress in developing harnesses is what's making AI very capable at coding, and that's only getting better.

maybe i'm getting the terms mixed up but that's what i'm thinking of. AIUI the effective LLM coding tools aren't literally making the LLM generate a tree of source files but also are generating directed commands using traditional tools to manipulate the code base. it seems to me like that could generalize beyond codegen and existing UNIX tools

@joe @stroughtonsmith Oh it definitely should generalize! But I’m not sure I understand if we’re disagreeing or not? What I’m saying is that open models + good hardnesses (as you correctly suggest the system telling the LLM what to do) are already capable enough to write code today (or to be used in the assistance of writing good code). Because of that I don’t think we’re going back to writing code by hand even if/when the VC money runs out.
@mergesort @stroughtonsmith yeah i don't think we're disagreeing. eventually hardware and software design will progress to the point where we can get this sort of experience with only local compute
@mergesort @stroughtonsmith (assuming the big companies don't leave a smoking crater in the semiconductor, RAM, and hard drive industries behind them)

@joe @stroughtonsmith Even if they do it would probably be a dot com type blip, where ultimately the market demand comes back.

I do think we'll get *this* level of performance locally, but by that point many people will want a smarter model that makes less mistakes, knows you more intimately, etc. There are eventually diminishing returns to what people need (or are willing to pay for), but even with a fast take off I don't think we're getting to that at least until the 2030s.

@stroughtonsmith Wonderful effort! Consider me a subscriber
@stroughtonsmith Why use Liquid Glass?
@brandonbutler because that's the system design language, and I don't support older OSes
@stroughtonsmith Wearing your heart on your sleeve as you worked toward rereleasing his software, and sharing the process in public, feels to me like a perfect tribute 🌟
@stroughtonsmith I’m confused… you mention the previous ‘pro’ features are now free, but there’s still a ‘pro’ subscription IAP. What’s that about? (I’m not being accusatory, I’m not on my mac, so I can’t actually see. I can only see what the IOS app store allows me to see).
@octothorpe it explains in the app — there's an optional subscription if you like the app and want to help support ongoing development. It provides no additional features and doesn't ask you

@stroughtonsmith ah, got it! Thanks!

(It’s so annoying that the AS doesn’t go into detail about this).