6 NOTES · NEWEST FIRST
Field notes.
Measured, then written.
Why each brick exists and what keeping it fast takes: the ports, the lessons and the numbers behind them, each one measured. By Chris Cooley ↗.
-
2026-10-31 BLOG
Before AI: 2015
Drawn by hand. Eleven years later: remade in minutes, then an arcade.
Fizlet started long before Fizlet. In 2015, years before AI coding tools, Chris Cooley drew three clickable micro animations by hand: headphones that plug in and play, a cup of coffee that fills, a laptop that opens and types. The Wayback Machine captured them on 23 April 2015. We pulled them out of the archive and played them three ways: as they were, remade in Fizlet, and as an arcade.
-
2026-10-31 FIELD NOTES · SIZE
How small is small
The kernel, every brick and the hero budget, in bytes.
"Tiny" means nothing without a number. Fizlet's kernel is 3,413 bytes gzip on 0.21.0, against a budget of 4,096 that fails the build when crossed. Every brick has its own budget, a page hero has one too, and the site shows only numbers the build measured. Here is each number, and how we get it.
-
2026-10-31 FIELD NOTES · MULTIPLAYER
Lockstep multiplayer in a few KB
Inputs, not state. Twelve bytes a message.
@fzlt/core/presenceis 1,834 bytes gzip. Every peer runs the same fixed-step game from the same seed, and only inputs cross the wire, 12 bytes a message. Our room server is in-house: a Cloudflare Worker with one Durable Object per room, run for our own games. It seats players and relays messages; it never runs the game. It isn't a hosted service, so the Build your own room server guide specs its protocol for yours. This note covers only what has shipped, and how each part is tested. -
2026-10-31 FIELD NOTES · RECALL
Recall: the page always comes back
One ledger for every change, and how we test it.
Fizlet runs on someone else's page, so it has to be able to leave. Every change it makes to the page goes through one ledger, and
destroy()puts back everything the engine still owns, newest first. The DOM then matches a snapshot taken before the engine started. A newer edit by the page always wins. -
2026-10-31 FIELD NOTES · NAMING
Why fzlt
Four letters, picked so nothing else answers to them.
Fizlet™ is the name you remember. fzlt™ is its short mark: the npm scope, and the mark for tight spaces. We picked it on purpose, so nobody mixes it up with anything else. Today you install Fizlet with
npm i @fzlt/core. -
2026-10-29 FIELD NOTES · E3 PORTS
Moving the games onto a 4 KB kernel
Every game got bigger. Here is each byte, and what it bought.
Five games now run on Fizlet's kernel, which has a 4 KB gzip budget: DOM Battlefield, Battlefield Blitz, Null Invaders, Byte Runner and Sherman Bytes. Every one got bigger in gzip bytes, by 7 to 21%. Most of the growth is the shared button kit. The rest buys steps that never allocate, runs that replay from a seed and one shell for three games.