Projects /
Smalltalk from Scratch
A complete Smalltalk-80 interpreter and modern runtime in C# — Blue Book bytecodes, a coldstart image loader, SDL2/SkiaSharp display, and a 884-test CI suite running headless on GitHub Actions.
Smalltalk-80 is one of the most influential programming systems ever built. It introduced the object model that everything from Java to Ruby inherited, defined the live programming environment that IDEs still imitate, and shipped with a BitBlt graphics kernel that remained in use for decades.
This project builds it again from the Blue Book — the 1983 specification — in modern C#, then asks what it would look like with forty years of hindsight applied.
The two repositories
Smalltalk-80 is the faithful interpreter: bytecodes, primitives, and object memory that match the Blue Book specification. It loads a coldstart image from JSON, runs the full class hierarchy, and gives you a working Smalltalk-80 system with a live image and a real System Browser.
Smalltalk-2026 is the modernisation: the same system with its 1980 display layer replaced. Form, BitBlt, and Pen are deleted. The display is SDL2 and SkiaSharp. The font engine handles Unicode. The test suite runs headless on GitHub Actions. The image saves and restores cleanly across sessions.
Architecture
The interpreter is a precise implementation of the Smalltalk-80 virtual machine: a context-based execution model, a full primitive table, and a garbage-collected object memory. The compiler is the original Smalltalk-80 compiler — running inside the image, written in Smalltalk — not a C# reimplementation.
The cold start loads the object graph from a JSON snapshot (coldstart.json) derived from the original 1980 image. No GC runs during load. The system reaches its first Transcript show: in under a second.
Modern graphics
The original BitBlt architecture — a 1-bit-per-pixel blitter that composited the entire display — was replaced with a Canvas abstraction backed by SkiaSharp. The replacement is structurally smaller and faster. More importantly, it gives the Smalltalk code access to antialiased text, colour, and arbitrary resolution without changing the message protocol.
The Form class — a Smalltalk-80 foundational type that 200 methods depended on — was eliminated in a controlled six-day migration. Each dependency was identified, repointed at the new Surface abstraction, and tested before the next one was touched.
Testing
The test suite runs at 884 tests across eight test classes, covering bytecodes, primitives, the compiler, the class hierarchy, and the display pipeline. Tests run in headless mode under GitHub Actions with a virtual framebuffer. The CI workflow includes a full save/restore cycle as a separate job.
Articles
The full story is told across seven articles in the Smalltalk from Scratch series.