
Today’s issue: A Nobel prize for words of affirmation, the reason behind my rapidly receding hairline, and finding out what programming language LLMs like the best.
Welcome to #511.


“Dear Kenton (and Matt), please buy Deno” - Ry
It’s been 6 years since Cloudflare released Durable Objects, and I still have no idea wtf they are (sorry Sunil 🥲). But then Ryan Dahl released an open source, self-hosted version of DO called celld this past week, and as much as I wanted to just pretend to be excited and continue to be blissfully unaware, I have a newsletter to write.
So… what’s a durable object?
The internet, ok developers on X, like to throw around the term “actor model” (not helpful). At its core, a durable object is a worker process, SQLite, and replicated off-machine storage (like S3 or R2). Writes aren’t confirmed until replicated, so if the process dies for any reason, the off-machine copy restores the state meaning the worker can stop, start, or move without losing data.
Celld uses the same API as Cloudflare’s durable objects and even works with wrangler, but the components are designed to work on any cloud platform.
Here’s how it works:
Virtual Machines: A virtual machine can contain many cells (durable objects) and is the source of the cell’s compute. Because the project is self-hosted, the type of compute you use will depend on how reliable and fault tolerant your project needs to be.
Cells: Each cell living on the virtual machine has its own SQLite database and worker process. This combination provides the stateful compute that this pattern is known for.
Replication: When a cell update’s its state, the write-ahead log (WAL) is sent to object storage on a different machine. For self-hosted projects this could be S3, R2 or some other blob storage. If a worker crashes, the state can be restored from the WAL.
Bottom Line: Ry said this project is a “love letter” to Kenton Varda’s idea, but reading between the lines, is “love letter” synonymous with “please acquire my business 💕”?


When you just closed your $57M Series B
Despite the fact that Convex has millions of instances running in production, enterprise plans, and EU data residency, you still might have been waiting to try the product because you’re not sure it’s going to be around in a few years.
If that’s the case, then Convex’s announcement that it raised a $57M Series B should be great news. Not only is the company in it for the long haul, but it’s also building the foundation for the next era of software.
If you’re interested in what this looks like, you should check out Abstract, a one-day conference in San Francisco on Sept. 2 for humans who care about the art of software and design.
In the meantime, read more about Convex, its raise, and why it’s the best backend for your agent.

They’re hosting a live workshop on How to build reliable workflows and agents using AI coding assistants and an open-source orchestration platform.
function once(fn) {
let called = false;
let result;
return (...args) => {
if (!called) {
called = true;
result = fn(...args);
}
return result;
};
}
let attempts = 0;
const connect = once(() => {
attempts += 1;
if (attempts === 1) {
throw new Error("Connection failed");
}
return "Connected";
});
try {
connect();
} catch (error) {
console.log(error.message);
}
console.log(connect());

Juri wrote about building maintainable Angular apps at scale. We’ll never understand the pain that went into gaining this knowledge.
Philip Zeyliger officially declared the end of the “no-code” era of software. Pouring one out for the Airtable / Zapier stack I ran my business on for the last decade.
Your app is slower on a mid-range Android in a parking garage than it is on your desk, and Observe is Expo’s way of showing you exactly how much, and which release caused the problems. [sponsored]
Tyler Sticka wrote about the new and improved text-stroke CSS property. I am equal parts excited and scared for what Lynn Fisher is going to do with this.
Emil Kowalski argues that the design process needs more friction. Feels a little too similar to Trojan’s ribbed condom campaign, but I’ll take his word for it.
Senko Rašić took offense to people saying “code was never the hard part”. I too, am offended because of coding was never the hard part, why did a trailing space in wp-config.php accelerate my hair loss?
Only idiots write manual tests – modern engineering teams like Notion, Dropbox and LaunchDarkly use Meticulous to maintain e2e UI tests that cover every edge case of your web app. [sponsored]
Dan Luu did some research to figure out the best programming language for LLMs.
Fresh off getting acquired by Qualcomm, Chris Lattner and co released version 1.0 of Mojo, the python-like programming language for AI hardware.
Jared Sumner got Claude to make real progress on one of Math’s hardest problems by telling it “keep going” and “believe in yourself”. Will he win the first Nobel prize for words of affirmation?
The bug is that called is set to true before fn finishes. If fn throws, the wrapper still considers it successfully called, so every later call returns undefined instead of trying again.
Set called to true only after fn completes successfully:
function once(fn) {
let called = false;
let result;
return (...args) => {
if (!called) {
result = fn(...args);
called = true;
}
return result;
};
}
let attempts = 0;
const connect = once(() => {
attempts += 1;
if (attempts === 1) {
throw new Error("Connection failed");
}
return "Connected";
});
try {
connect();
} catch (error) {
console.log(error.message);
}
console.log(connect());