AlmidePRE-1.0

Almide · the story so far

250 days, from 10,000 lines to 700,000.

What the README said I was building, what actually shipped, and what got thrown away on the way. All of it taken from the repository's own history.

ALMIDELANGUAGE / OPEN SOURCE
250days since the first commit, March 7 to November 11, 2026
17,044commits, on 234 of those 250 days
277releases, the first one two days in
69×growth in Rust, from 10,128 lines to 698,358

Lines of Rust in the repository, at each milestone

↔ Swipe or scroll horizontally to view the full diagram.

0 100k 200k 300k 400k 500k 600k 700k Mar Apr May Jun Jul Aug Sep Oct Nov v0.1.0 · 10,128 v0.10.0 · 74,363 v0.20.0 · 115,143 v0.30.0 · 239,200 v0.40.0 · 222,211 v0.60.0 · 315,364 v0.69.1 · 662,638 now · 698,358

Every .rs file in the repository, comments and blank lines included. It went down once, in late July, when the standard library was rewritten in Almide itself.

PROLOGUE — MAR 7 TO 9

A language AI can write in the fewest tokens.

The first commit is March 7. Two days and 143 commits later, v0.1.0 is out. The README said:

Almide is a language for AI to write code directly and efficiently. The design goal is that LLMs can express intent in the fewest tokens and with the least thinking.

It was 10,000 lines of Rust. A lexer, a parser, a type checker, a formatter, and two outputs: Rust and TypeScript. No proofs, no checkers. The goal was that it be easy to write.

CHAPTER 1 — MAR 9 TO 14

Four releases in one day.

v0.2.0, v0.2.1, v0.2.2 and v0.3.0 all shipped on the same day as v0.1.0. Generics and tuples came the next day. v0.5.0, on March 11, brought borrow inference, the first sign of what the language is about now.

Two habits started that week. v0.5.7 is titled MiniGit survives 40 of 40 trials: I had started counting whether a model's program actually passes. And v0.5.13 began A/B testing syntax across models.

CHAPTER 2 — MAR 17 TO 30

Add it, then throw it away.

For two weeks nearly every release removed something. ++ gave way to +. uuid and crypto left the standard library. The JavaScript output was folded into TypeScript. do blocks left the language. newtype gave way to aliases. Implicit conversion was removed.

Then v0.9.5: the wasm target reaches full stdlib parity, and the TypeScript target is removed. The outputs had gone from Rust and TypeScript, to three, back to two, and ended as native and WebAssembly. The dual target was not the plan. It is what was left after three weeks of trying.

By v0.10.0 on March 30 it was 74,000 lines. Seven times bigger in three weeks, and already past what one person reads end to end.

CHAPTER 3 — APRIL TO MAY 21

Making it a tool.

The pace dropped. April averaged 30 commits a day, less than half of March. From April 22 to May 1 there are no commits at all, the only gap of three days or more in the whole 250.

What shipped was for people using it: the compiler split into nine crates, installers that don't need Rust, a loop that tuned diagnostics on recorded model failures, and v0.14.6, the LLM-first release, with copy-pasteable fixes and almide fix. A REPL and an editor server followed.

There were side roads. An LLVM backend was moved off the main line. A GPU shader target shipped. Copy-on-write went in for every value type, and mut became a keyword.

CHAPTER 4 — MAY 22 TO JUN 10

Four days that set the core.

May 23: wasm performance reaches parity with Rust's wasm. May 24: the 336-byte hello world. May 25: Perceus, memory management with no annotations and no GC. May 26: a proof in Lean 4 that every allocation is freed.

Speed, size, memory, proof, on four consecutive days. The first proof arrived on day 80.

Then June 8 and 9. v0.26 has 22 patch releases in those two days, one cross-module bug fixed and shipped at a time.

CHAPTER 5 — JUL 5 TO 20

Never emit wrong bytes.

No minor release for 25 days. Then v0.28.0: the v1 trust-spine ships as an opt-in verified wasm codegen that never emits wrong bytes. The aim had moved from producing the right output to refusing to produce one that can't be checked.

Ten days later it became the default. The day after that, v0.30.0's title reads: 0.29.0's silent wrong values fixed. It had been made the default and was silently wrong, and the release title says so.

CHAPTER 6 — JUL 24 TO AUG 1

Doubting what was being measured.

Seventeen minor releases in nine days. Their titles tell it:

a gate that was measuring the wrong program · green can no longer lie: sixteen gates that measured nothing are re-armed · a CI step that installed nothing reported success · three measurements are retracted · a 4.4x win given back

The checks were green and checking nothing. The speedup was a measuring error. They were found one at a time and taken back in public. This is also the only stretch where the code got smaller.

CHAPTER 7 — AUG 2 TO 30

Redrawing the surface.

With the inside settled, the part authors see was redone. Error propagation went from implicit to explicit: the automatic ? was deprecated and removed on the same day. The whole try_ family of functions was deleted. v0.60.0's title is three words: the structural leg ships.

CHAPTER 8 — SEPTEMBER TO NOV 7

It doubles.

From v0.60.0 to v0.69.1, Rust went from 315,000 lines to 663,000. Proofs went from 10,000 lines to 24,000. Tests in Rust went from 30,000 to 125,000. Commits per day went from 58 to 184.

And the README changed its first sentence:

Almide is a statically-typed language for code that AI writes and edits. The claim is not that the model gets it right. It is that when the model is wrong, the compiler says so at author time and names the fix.

EPILOGUE — NOV 10 AND 11

Showing it to people.

On day 250 I posted it in public for the first time. The post was removed automatically, and the comments it did get were hard ones. Given one of those functions, would you know what it does?

So I measured. Of 18,843 functions, 12 are called by nothing. One 493-line file had been edited three times after nothing included it anymore. 95 files had been cut by size instead of by what they do. Then I added a check so those numbers can only go down.

What the README said it was

March
A language AI can write in the fewest tokens
March to October
A language optimized for AI-generated code
November
A language that says so when the AI is wrong

It started as making code easier to write and became catching it when it's wrong. Nearly everything that was thrown away, retracted or retired along the way happened during that turn.

THE HOURS

How many hours a day.

Commit times can answer part of this. On an average day with commits, there was at least one commit in 13.6 different hours of the day. In October and November it was more than 18.

That is not my time. 38 days have commits in 20 or more hours of the day, and 784 commits landed between 3 and 5 in the morning. Nobody does that. It is the agents, running while I slept. What the numbers show is how long the work was running, and I don't have a record of how long I was at the desk.

Commits per day, by month

↔ Swipe or scroll horizontally to view the full diagram.

69 Mar 13.0h 30 Apr 8.6h 24 May 8.5h 51 Jun 15.4h 55 Jul 12.9h 58 Aug 14.1h 88 Sep 13.7h 148 Oct 18.5h 184 Nov 18.8h

Under each month: the average number of hours of the day that had at least one commit.

WHAT WAS HARD

The parts that cost the most.

  • Throwing away working code. The TypeScript target, the JavaScript target, the LLVM backend and the first wasm emitter all worked, and all were removed.
  • 22 patch releases in two days. Each one a bug somebody would have hit.
  • Shipping a default that was silently wrong. And writing that in the release title the next day.
  • Finding that green meant nothing. Sixteen checks that passed without checking, and a CI step that reported success after installing nothing.
  • Giving back a 4.4x speedup. Because the measurement was wrong, not the code.
  • Doubling in two months. Past the point where I can read it, which is the problem the whole design is now about.
  • Hearing it from people who write compilers. And finding they were right about some of it.

Back to the front page