Sign in

Alex Good

@patternist.xyz
4.9K followers 291 following 62 posts

I work on local-first software, currently building Automerge at Ink and Switch. Find me at patternist.xyz

PostsRepliesMedia
Alex Good @patternist.xyz · 22/07/2026
Really enjoying reading through the code for [bombadil](github.com/antithesishq...). It has that lovely quality where I find each file is comprehensible on it's own, without having to have the definitions of every type in the codebase loaded into my brain.
github.com
GitHub - antithesishq/bombadil: Property-based testing for web and terminal UIs
Property-based testing for web and terminal UIs. Contribute to antithesishq/bombadil development by creating an account on GitHub.
0100
Alex Good @patternist.xyz · 05/06/2026
Yep but I'm quite happy just using nix directly 🙂️
020
Alex Good @patternist.xyz · 05/06/2026
The VM which I spin up is running NixOS and Zed runs `direnv` when opening a remote project. If the project is already using nix then everything just works. If not then I have to spend a few minutes writing a `flake.nix` to make sure language servers etc. that Zed needs are available in the VM.
230
Alex Good @patternist.xyz · 05/06/2026
URLS like this: `zed://ssh/[<user>@]<host>[:<port>]/<path>` will open Zed in remote development mode. I use this a lot. Any development I do these days is done in a project specific VM. I have a little CLI tool which clones a repo, spins up a VM, and gives me a zed remote URL to open zed in the VM.
2151
Alex Good @patternist.xyz · 29/05/2026
The phrase "tool call" is completely semantically satiated for me. It's just become a series of hooting sounds. Whenever I say it I feel like I'm an owl.
291
Alex Good @patternist.xyz · 22/12/2025
Looking forward to this!
0121
Alex Good @patternist.xyz · 07/11/2025
jujutsu has support for tags now! Tags are the only reason I've had to use the `git` CLI in the last few months. Hurrah! github.com/jj-vcs/jj/re...
github.com
Release v0.35.0 · jj-vcs/jj
About jj is a Git-compatible version control system that is both simple and powerful. See the installation instructions to get started. Release highlights Workspaces can now have their own separa...
0110
Reposted by Alex Good
Automerge @automerge.org · 16/10/2025
We have a shiny new website courtesy of @spiralganglion.com and @seaofclouds.com 🙌 🚀 Check it out: automerge.org
A screenshot of the Automerge landing page. It says "Version control for your data. Automerge is a local-first sync engine for multiplayer apps that works offline, prevents conflicts, and runs fast."
210718
Reposted by Alex Good
Automerge @automerge.org · 15/09/2025
😲 We have a ✨packed✨ agenda for the September edition of the Automerge Community Call on the 24th! Updates & talks featuring @chee.party, @daffl.me, @spiralganglion.com, @seaofclouds.com, @patternist.xyz, @expede.wtf, and John Mumm! Don't miss out — RSVP here: luma.com/70fuozje
luma.com
Sept '25 Automerge Community Call · Luma
🍂 September Automerge Call ✨ Get ready to kick off the fall with the Sept '25 Automerge Community Call! Whether you’re a seasoned contributor, a curious…
0126
Reposted by Alex Good
Ivy Reese @spiralganglion.com · 31/08/2025
16610
Alex Good @patternist.xyz · 28/08/2025
Moving ranges of text is really thorny. The problems are with concurrent changes, there's loads of annoying edge cases. E.g. I move paragraph A to be inside paragraph B and you concurrently move paragraph B to be inside paragraph A.
010
Reposted by Alex Good
Automerge @automerge.org · 24/07/2025
Want to hear about the latest in Automerge? Come join the Community Call Kickoff on August 20 (and sign up for the calendar while you're at it!) lu.ma/zv6tpuu4
lu.ma
Automerge Community Call · Luma
☀️ Automerge Community Call Kickoff! 🌿🍉 Celebrate the season and kick off something new with our new Automerge Community Call! We’re gathering for a relaxed,…
1208
Reposted by Alex Good
pvh @pvh.ca · 15/07/2025
Automerge 3 is here: the heart transplant is complete! Huge improvements in memory usage and (in most cases) correspondingly big performance improvements too. Backwards compatible on disk and the network so there's no reason not to upgrade today: automerge.org/blog/automer...
automerge.org
Automerge 3.0 | Automerge CRDT
Automerge is a local-first data sync engine that makes it easy to build collaborative apps. Today we're excited to announce version 3.0 of Automerge!
413032
Alex Good @patternist.xyz · 15/07/2025
That's a typo on my part, I've fixed it now, the actual figure is 1.3 _Mb_
030
Alex Good @patternist.xyz · 25/06/2025
Oh that looks great! I just finished Plausibility, so this is next up.
010
Alex Good @patternist.xyz · 25/06/2025
I very much enjoyed "The Origins of Evolutionary Innovations", which examines in more detail what kind of relationship you need between genotype and phenotype in order to have robust, evolvable organisms.
130
Reposted by Alex Good
Local-First Conf @localfirstconf.com · 25/06/2025
Watch @patternist.xyz talk about Beelay, a (reasonably) generic encrypted sync protocol for CRDTs. youtu.be/neRuBAPAsE0?...
youtu.be
Alex Good - Beelay, a (reasonably) generic encrypted sync protocol for CRDTs
For the last six months the Automerge team has been working on implementing end-to-end encryption and access control for local first applications as part of ...
0122
Reposted by Alex Good
Fred Hebert @ferd.ca · 09/06/2025
Why do some have a shit time with LLMs for programming while others love it? To succeed, the latter group tacitly creates tons of scaffolding and gain weird new skills. While it works, this posts explains how doing all that is an incidental consequence of bad interaction design in coding AI agents.
ferd.ca
The Gap Through Which We Praise the Machine
My current theory of agentic programming: people are amazing at adapting the tools they're given and totally underestimate the extent to which they do it, and the amount of skill we build doing that i...
515052
Reposted by Alex Good
Ink & Switch @inkandswitch.com · 10/06/2025
Malleable software: Restoring user agency in a world of locked-down apps www.inkandswitch.com/essay/mallea...
inkandswitch.com
Malleable software: Restoring user agency in a world of locked-down apps
The original promise of personal computing was a new kind of clay. Instead, we got appliances: built far away, sealed, unchangeable. In this essay, we envision malleable software: tools that users can...
014139
Alex Good @patternist.xyz · 16/05/2025
Local first development is funny sometimes. I just noticed that a sync server I run for a small project was storing it's data `/tmp` - which gets deleted every day. No one noticed for three months because everyone has the data locally so the only symptom was slightly degraded sync in the mornings.
1295
Reposted by Alex Good
Local-First Conf @localfirstconf.com · 26/04/2025
We’re excited to announce that @patternist.xyz member of the @inkandswitch.com team, will be speaking about Beelay, a new generic sync system.
0162
Alex Good @patternist.xyz · 19/02/2025
It preserves all the history but it's not syncing the game state, it's syncing the level editor. What you're looking at is someone playing the game whilst someone else concurrently edits the level.
120
Alex Good @patternist.xyz · 16/01/2025
I'm using Silverblue on my AMD Framework 13. I had a strange issue getting it booting for the first time (github.com/fedora-silve...) but since then it's been fine. This laptop doesn't have nvidia hardware though so 🤷.
010
Alex Good @patternist.xyz · 18/12/2024
Under the hood this is using automerge to sync state between two Godot editors.
1493
Alex Good @patternist.xyz · 05/12/2024
This reminds me of the "dust hypothesis" in Greg Egan's Permutation City. The idea being that given a cloud of dust with enough particles you could map each state of the dust cloud to each state of the brain and thus interpret the dust cloud as a simulation of a brain.
020
Alex Good @patternist.xyz · 28/11/2024
We have CodeMirror bindings github.com/automerge/au... which you could try hooking up.
github.com
GitHub - automerge/automerge-codemirror
Contribute to automerge/automerge-codemirror development by creating an account on GitHub.
132
Alex Good @patternist.xyz · 27/11/2024
I sat down at my desk this morning so full of ideas about what I was going to do today. I have now spent the whole morning fighting with GitHub Actions.
2170
Alex Good @patternist.xyz · 23/11/2024
Excellent! I love this sentiment from the site: "what if building websites didn't have to be so complicated", 💯. Drop me a DM and let's arrange a call.
030
Alex Good @patternist.xyz · 23/11/2024
The quick start definitely needs some work. Any chance you would be up for a chat about it? I want to improve the docs so I want to hear from new users about what is confusing or strange.
110
Alex Good @patternist.xyz · 22/11/2024
I wrote this up in a little more detail patternist.xyz/posts/ad-hoc...
patternist.xyz
Ad-Hoc Data Visualisation in the Terminal with <code>gnuplot</code>
090
Alex Good @patternist.xyz · 22/11/2024
Just discovered that `gnuplot` has a `kittycairo` backend which can output an image directly to a terminal which supports the kitty graphics protocol. This makes writing little one off scripts which produce a nice graph much easier.
A screenshot of a JavaScript function which calls `gnuplot` with the `kittycairo` backend so that it outputs the plot directly to the terminalA picture of a plot rendered in the terminal.
1163
Alex Good @patternist.xyz · 22/11/2024
Babies are also a great progressive overload weight training program, no need for spreadsheets, just keep feeding them.
1100
Alex Good @patternist.xyz · 20/11/2024
Exactly this 😃
010
Alex Good @patternist.xyz · 20/11/2024
I've changed my homepage (and handle) from memoryandthought.me to patternist.xyz. Mostly because I was bored of the old one.
150
Alex Good @patternist.xyz · 18/11/2024
We're working on something like this at I&S. Initially we're building E2EE for Automerge but I think there's a good chance we'll end up with something that can readily be generalised. Here's some lab notes from @expede.wtf who's leading that project www.inkandswitch.com/beehive/note...
inkandswitch.com
Beehive lab notebook: Local-first access control
Local-first access control
150
Alex Good @patternist.xyz · 15/11/2024
I got two usb-c, a usb-a, a display port and an hdmi.
010
Alex Good @patternist.xyz · 12/11/2024
Reporting back. I am very happy with this device! The keyboard and touchpad are not quite as satisfying as they could be but still very good. The speakers sound great to my unrefined ear. Also, everything just worked out of the box with Fedora. This is the happiest I've been with a new laptop.
110
Alex Good @patternist.xyz · 08/11/2024
This article has convinced me that I should try Bluefin lwn.net/Articles/954.... Gonna be an exciting weekend.
lwn.net
Project Bluefin: A customized Fedora Silverblue desktop image [LWN.net]
030
Alex Good @patternist.xyz · 08/11/2024
Oh interesting, thanks for the tip! This looks like it's related to Bluefin, do you happen to know what the relationship between Bluefin and Silverblue is? They seem like really similar projects from the outside.
100
Alex Good @patternist.xyz · 08/11/2024
I'll report back once I've got it set up 🙂. As to Manjaro, I prefer vanilla Arch if I'm going to be in the Arch ecosystem. The appeal of Silverblue is that I'm intrigued by the immutable model they are using and I want to have a play with ostree.
110
Alex Good @patternist.xyz · 08/11/2024
My Framework 13 arrived today. I'm extremely excited to never buy another laptop again. I might try a different distro to my standard Arch Linux this time around. Maybe Fedora Silveblue.
A Framework 13 laptop with the keyboard and bezel removed, exposing the internal components.The same laptop with the keyboard and bezel fitted so it looks just like any other 13 inch laptop.A set of stickers including one which says "You should be able to fix your stuff"
4260
Alex Good @patternist.xyz · 06/11/2024
What I'm suggesting doesn't require any changes to the file format so it's backwards compatible in that sense. But older implementations might see different materialised state to newer ones
100
Alex Good @patternist.xyz · 06/11/2024
As to the "cards" problem. I think that generating a unique ID for each card and modelling your data as a map from ID to card is reasonably straightforward and works for most cases at the moment.
110
Alex Good @patternist.xyz · 06/11/2024
I think we can achieve a better API with a smaller change than this. Merging conflicting objects at the same key would be a lot less surprising than the current behaviour IMO, there are still lots of edge cases but I think object initialization is the _most_ surprising thing at the moment.
230
Alex Good @patternist.xyz · 06/11/2024
TLDR; when an two objects are conflicting at the same key merge them rather than choosing one or the other.
120
Alex Good @patternist.xyz · 06/11/2024
I want to implement something like what @martin.kleppmann.com suggested in this discussion: github.com/automerge/au...
github.com
Behaviour of concurrently created objects under the same key · Issue #4 · automerge/automerge-classic
After some discussion around #1, I've been thinking about what the "minimally confusing" semantics for nested maps/objects should be. Scenario: Several users have a shared Trellis document. The cur...
200
Alex Good @patternist.xyz · 06/11/2024
I think for people (like me) who are coming from a filesystem or database world "data loss" is a specific term which means the data is unrecoverable in principle. I do think it's important to distinguish this from "it's a hard programming task to recover". Maybe we should call it "hidden data"?
100
Alex Good @patternist.xyz · 06/11/2024
That said I agree with your main point that this behaviour is undesirable and I want to change the merge behaviour in Automerge to be more intuitive.
100
Alex Good @patternist.xyz · 06/11/2024
I think "data loss" is an incorrect characterization here. The data is still in the document history (I think in all the libraries you've mentioned) and can still be retrieved. It might be tricky to do from a DX perspective but that's very different to data loss IMO.
200
Alex Good @patternist.xyz · 02/11/2024
Maybe you could have redundant versions of the AppView run like DNS root nameservers? That would require an equivalent of domain name registration fees to fund the operators I guess. E.g. you have to pay a similarly nominal fee to register a PDS for indexing by an AppView? (Just spitballing)
020