ESUG 2026 in Plovdiv, Bulgaria Plovdiv was a very pleasant visit. Living in Cologne, I'm fairly used to having a lot of history around - a bit over 2,000 years of it. Plovdiv is a whole level more extreme: 8,000 years of continuous settlement, and with a location like that, centuries of shifting rule and changing hands to match. A guided city tour walked us through a good chunk of that: Thracian r
1 September 2026
Soil: catching write conflicts, optimistically Every transaction in Soil gets to act as if it has the whole database to itself - read whatever it wants, take its time deciding what to change, and work all of that out without ever announcing itself to anyone else running at the same time. That's a comfortable illusion right up until two transactions both decide to change the same thing. Something h
31 August 2026
Soil: MVCC and snapshot isolation The last post walked through what a commit actually does: serialize outside any lock, then take one global lock just long enough to bump the database version, check for conflicts, write the journal, and apply it. Only one writer gets to be in that critical section at a time - the same trade-off SQLite makes. Readers, though, were said to bypass that lock entirely
11 August 2026
OpenAPI, brought up to spec The last post told JSONSchema's origin story: it exists because ApptiveGrid needed OpenAPI, and OpenAPI needs a way to describe request and response bodies. OpenAPI is the other half of that story - a Pharo implementation of the OpenAPI 3 specification, three packages deep: `OpenAPI-Core` models a document as an object tree and can validate a whole document against the
1 August 2026
Soil: transactions and how a commit happens The last post gave every object a stable id and a way to find its current bytes through the index. That's enough to read and write single objects. What's still missing is the thing that makes a database out of that: a way to change several objects at once and have it count as one atomic step. That's a transaction, and this post is about what one actually
30 July 2026
Soil v5 released I announced this release at ESUG 2026 in Plovdiv, but only now found the time to actually write it up. Soil v5 is out. Quick side note on what that even means: Soil doesn't do releases as git tags or semantic versioning. We never found MAJOR.MINOR.PATCH to be as clear as it pretends to be, so instead there's just a branch per version - v1, v2, v3, and so on - each one a moving poi
29 July 2026
JSONSchema, picked back up JSONSchema didn't start as its own thing. It exists because ApptiveGrid needed OpenAPI, and OpenAPI needs a way to describe request and response bodies - which means it needs JSON Schema. Building a JSON Schema engine in Pharo was table stakes for having a documented API at all, so that's what got built: a small, generic core, cleanly separate from ApptiveGrid itself, pl
28 July 2026
Soil: identity and the heap The last post ended with two loose ends. A reference from one cluster to another is stored as an "id", but I never said what an id is. And I kept talking about clusters "on disk" without saying where on disk, or how you get from an id to the actual bytes. Both ends meet in the same place, so let's tie them off together. Why a reference can't just be a position The tempt
27 July 2026
ESUG 2025 Gdansk itself caught me off guard. Walking through the old town, brand new buildings sit right next to houses that look centuries old. Not all of it is old, and not all of it was destroyed and rebuilt - it's a mix, with some streets and buildings historically reconstructed after the war and plenty of genuinely new construction alongside them. Being there as a German added its own layer o
25 July 2026
Soil: serializing a graph In the last post we turned a single object into a self-describing stream of bytes and read it back. That was the easy half. Real objects don't live alone. They point at other objects, those point at more, and before long you have a graph. Sometimes that graph shares a node from two places, and sometimes it points back at itself in a cycle. This post is about writing such
23 July 2026