2026 - The Year of Deshittification

With software enshittification hitting all-time highs every week, I just reached my tipping point.

Why is it always Apple

For whatever reason, my Apple calendar will no longer update one specific Office account. All of my other accounts (Apple, Gmail, Microsoft, whatever) work just fine and have for many years. This one specific account was working well for 3-4 years and then one day, it just stopped. I didn’t update my computer, I didn’t reset my password, it just stopped updating calendar events. I’ve tried closing/opening apps, disabling/re-enabling the account, and all the way to wiping and re-provisioning the account. No luck. The same account’s Mail works perfectly fine, no issues. It’s strictly the Calendar that’s botched.

The only thing that works is re-starting my computer, after which the calendar events update ONCE and that’s it. Like, what the fuck even is that? From Apple, of all companies too.

While sharing this problem with a friend, he reminded me of a problem he’s had for over a year - which is that the Apple Passwords app will eventually use all of the memory on his computer, and then crash. It’s a password manager, holding a few kilobytes of data, yet it ends up consuming gigabytes of (ever more precious) memory. This has persisted across OS updates and even through a fully wiped and re-installed-from-scratch computer.

The root cause is probably this memory leak (because, seriously, what else could it even be) - and we’re here a year later without a resolution.

Then, of course, there is just the absolute shitshow of Liquid glAss.

I guess I should be more forgiving... Apple is just one of those upstart little companies with only 166 (thousand) employees, and a measly 4 trillion USD in market cap.

I’m not claiming that Apple is the worst offender in the enshittification of software, not by a long shot, but they are one of the most wealthy offenders. More importantly, their customers generally loved their products before year-after-year of unforced errors and own goals. I still think the calibre of the hardware itself is unmatched, but the software is a far cry from even being “good”. The nicest thing I have to say about their software is that it “exists”.

Actually, not just Apple

I have a lot of problems with other software that I use, but I’m not as interested in shit-talking and name-dropping much smaller companies or teams, because that’s not the point of this rant...

Actually, that’s a lie

Accounting software - you suck.

Not the part of the software that has to deal with the nightmare of rules/submissions, which in itself, was a problem created by accounting firms - so I have little sympathy. But, accounting software that costs a ton of money, because it can cost a ton of money, not because it’s good. The overwhelming part of most accounting software could be written by a high school student.

Pull data from API, store data in tables, apply labels, multiply numbers... [clap ... clap ... clap]

What about OSS

OSS always has a pass.

I’m solidly in the group of devs who don’t particularly care how other projects/teams manage their issue backlogs. Especially if I’m not contributing my time or money to their project. When there is something about a project that I don't like - a project that I'm basically freeloading, mind you - I’ll either fork it and fix it, look for an alternative, or build a subset. That’s not always possible - but I’d wager it should be more common than it is.

What am I going to do about it

Weirdly enough, I have some sympathy towards the problem of trying to build fully generalized software to cover the workflows of millions/billions of people, I really do. It’s an incredibly hard problem. A problem that these companies intentionally took on in order to make a bunch of money, snuff out the competition, and keep users in their ecosystems. Now that they’ve done all that, they abandon the users that got them there, in favour of more profits (or even more users).

Though, I think Casey Muratori explains it all much better than me (though, he talks about software in general, less about the greed side):

So, with all of the above in mind, I’ve got a list of projects that I’ve wanted to make for years and I think 2026 is finally the time to pull the trigger on them (or get the ones that I’m mostly done to completion).

Bespoke Minimalist Software tailored just for me

I like puns or catchy acronyms, but they didn’t convey the point well enough, so since I’m talking about deshittification, I think it’s enough to refer to these as my BMs.

I have been writing (and will continue to write) a set of replacement software designed specifically for myself and no one else, with as much of the 80/20 rule covered as possible. As always, as few runtime dependencies as possible (zero ideally - but that might not be feasible).

The key will be “minimal”. My rule of thumb is to take whatever list of features I think I need and half it, then half it again. Everything takes less code when you ONLY target features you must have, not ones that would be nice to have.

I have a laundry list of software I would like to replace with something smaller, harder, better, faster, stronger, but these are the first few that I intend to finish this year (alphabetical order).

Apple Notes Exporter

Sadly, Apple Notes is one of the best Apple products I use, but I’m always nervous that I might just lose the thousand or so notes I have - and relying on Apple Notes keeps me locked into their ecosystem for my daily driver.

A few years ago, a friend lost ALL of their Apple Cloud information one day, and Apple was not able to recover it - no rhyme, no reason - so this is a thing. That’s not a huge concern for me, since I have a reasonably decent backup solution, but the fact that it could summarily happen at any point is crazy.

As I have a very specific way I use, browse, and link notes, and have a specific output format and structure in mind - the existing solutions for Apple Notes exporters won’t work well for me. First off, most of the recent ones are absolute slop, the ones that aren’t are 10’s of thousands of lines of code (somehow).

There is only one good one out there, so big shout out to threeplanetssoftware - but, for what I need it for, it’s huge (10k lines over 65 files), hard for me to tweak, and ... Ruby...

Last year, I took a weekend to write the bulk of what I wanted to do, and it only came to 500 lines of Rust to parse through a file and convert all the notes to Markdown (it takes 1-2 seconds, single threaded - so still slow, but perfectly fine for a daily export). It’s missing 1 small feature and has 2 Markdown bugs (about strike-through and italics, specifically), which I want to tackle before I can consider it almost-completed work.

It can't be completed in its current form, though. It’s far too bloated and takes too long to compile. I wanted to play around with SQLX (an amazing library) which required pulling in Tokio. Somehow, this turned into hundreds of transitive dependencies, including Serde... Welcome to 17 second clean debug build hell - for almost zero application code.

Stripping those dependencies brings me down to 2ish seconds of a clean debug build.

Backup Tools

This is an already “solved” problem for me, but I want something better than my Bash script with simple, date-based diffs. The backup workflow is great, but the restore workflow would be such a slog.

Since my goal with the existing solution was “don’t lose data” - it’s been “solved” for a couple of years.

The prospect of probably needing to spend hours manually merging files during a restore is the new problem, which is unsolved. The other problem is that it’s technically MacOS only, due to an intentional (and good) design decision I made - but with my move away from Apple as a daily driver, I should really plan for the Linux variant as well.

Much like the SSH scenario (below), this is an elevated-security situation for me, as any software I use to solve this would be running over all of my files and source code. There’s no reason not to trust tools like Borg, Restic, or Rustic - but I can’t really be certain something malicious isn’t injected into one of these tools, or that they’re not bought out in the future which could mess with the supply chain.

Very importantly, the “hard” parts are already done, dealing with collecting files, encrypting them, and then transferring them. The remaining work is surrounding a better collection algorithm which does a better job at tracking incremental file renames/moves - so that I can restore with less grief. I’ve hammered down this algorithm which creates a JSON manifest, but haven’t programmed it yet. However, if I were really smart, I’d probably just try to emulate/modify what Git or Mercurial does instead - since collection/restore/tracking is a solved problem already.

I’ll be re-writing from Bash to Rust as part of this too - for better automated testing, and for the memes.

iPad SSH Client

After trash talking Apple, it’s funny to mention an app as one of these projects, but as I’ve said, their hardware is great. The iPad is no exception (iPadOS on the other hand ...). There’s no correspondingly high quality Linux-centric tablet yet, so here we are.

I sometimes want to do a little work from my iPad and ssh’ing into a VM on my network is a convenient way to do it. However, anything I stick my SSH keys into, I consider to be an elevated-security situation, and downloading some random app off the App Store that claims to be private (but has unfettered network access) isn’t my cup of tea.

The most reasonable option would be to audit and then compile Blink from source. I’ve thought to do that, but then last year, I wondered how hard it was really to make a simple terminal. It’s one of those things I spent hours using per day, but never really understood how it worked, or why there are so many variants out there.

It was actually from watching some of Casey’s videos about creating a simple terminal when he was feuding with some Windows developers that inspired this project. This was also a few months before Ghostty was released and boiled over, before simmering down to a regular terminal’s level of hype.

It turns out that creating a SwiftUI application to be an SSH client which rendered my Linux VM was actually incredibly trivial. I had that working in a day or two, custom written in Swift with no non-Apple dependencies, and I’ve been able to go in and do some basic server management with it since. It has colours, sounds, and other bells and whistles.

However, what it currently isn’t is a full development machine, because the piece I hadn’t handled were two of the escape characters which allow Neovim and other terminal editors to arbitrarily control buffers. It’s not a lot of work, but I’ve only had a couple of instances where I’ve actually wanted to use Neovim from my iPad, but it would be nice to finally unlock those.

My one grief with this software though was also caused by that Casey video - where I wanted to see how my SwiftUI-rendered “terminal” would perform when cating a large file. It was okay, but the lagginess I saw annoyed me.

So... Obviously, the next thing to do was to learn how to write Metal shaders from scratch to solve this. I’d written some DirectX 11 shaders back in the day, but Metal is pretty different. I made a lot of progress on the GPU renderer, but I didn’t finish it yet, so I still only have that software renderer.

What’s interesting here, though, is whether I want to continue with my iOS/MacOS exclusive approach for this hardware shader, or to re-write it in something cross-platform to replace my terminals on Linux and Mac. That re-write feels like overkill, but the Apple terminal sucks too - at least for correctly handling colours... Umm... Or maybe that has changed this past year?

Neovim not VSCode

I’ve already written two plugins I use in Neovim, but I still rely on VSCode about half the time. I generally like Neovim, but the keybindings are my biggest gripe with them.

I’ve given thought to write my own text editor, similar to Focus - but I work in so many languages, that I’d end up needing to duplicate a lot of the Treesitter/LSP work, which is the reason why I only use Neovim 0.12+. So, writing my own editor, what have I really achieved at that point (maybe someday).

My plan of attack to go full Neovim this year is to maintain the current number of plugins I use (Folke’s Snacks is my “monolithic” plugin, the rest are LSPs, or ones I’ve written).

The most controversial step will be to strip away the ridiculous default keybindings, and implement only a subset of them I use (I have a similar plan for XCode). I’ve got a lot of thoughts and opinions on Neovim’s keybindings, but I’ll save that rant for another day.

Password Manager

I use a combination of password managers for different circumstances. A recent update to one of them slowed it to a crawl and made unlocking the manager semi-broken.

As my passwords are all unique, very high entropy, and impossible to remember - not being able to access my password manager would be a huge pain.

There is also something uncomfortable about the concept of opening an app on my computer, just to copy and paste a password into a browser. It feels so stupid ... And before anyone wonders, there is no world where I’d use password manager browser plugins as those are the cause of most password manager CVEs.

This got me thinking of a much more simplistic model, where I have an encrypted database or file, with a CLI front end running a SIMD fuzzy search. I use fuzzy search when navigating around my projects... Using it to navigate my passwords would feel natural and end up making for a faster workflow. Though, the slowest part of the workflow is unlocking the password manager every time I use it, which would still be an unsolved problem here.

I'll write about them when I'm done

I've got a lot of thoughts and opinions already on those projects, but I'll save most of them until the projects are completed this year.

In spite of everything I wrote above, the Neovim keybindings one might actually be the most frustrating element to all of this. Not because the problem isn't solveable (it is, quite easily) but moreso due to the weird Stockholm syndrome people online have about Neovim's objectively shitty default keybinds.