Port a Classic Java App to Rust
Rebuild MyBatis JPetStore 6 in Rust, layer by layer: Axum for Stripes, SQLx for MyBatis, Askama for JSP, and one static binary where the app server used to be. Free and text-first.
Branch lines
Text-first courses that end with something you built. Free courses are open to everyone and read right here; paid ones go deeper on learn.mikezupper.com.
Each tick is a lesson, and the commits are the curriculum.
From JPetStore, Aug 12, 2026
Free 12 lessons
Ends in one 7.4 MB binary.
$5 9 lessons
Ends in a 7.7 MB FROM scratch image on a VPS.
From Chess, Aug 13, 2026
Free 14 lessons
A Rust engine in WebAssembly, a Lit board, 54 tests.
From DuckDB, Aug 15, 2026
Free 9 lessons
A 34 MB wasm SQL engine, about 7.7 MB gzipped, in a browser tab.
Free 11 lessons
Twelve Lit components on a TC39 signals store.
$5 7 lessons
Real browsers, real WebAssembly, real workers.
Rebuild MyBatis JPetStore 6 in Rust, layer by layer: Axum for Stripes, SQLx for MyBatis, Askama for JSP, and one static binary where the app server used to be. Free and text-first.
The sequel to the free JPetStore port: containerize the binary into a 7.7 MB scratch image, put it on a VPS behind automatic TLS, replicate the database off-box, and roll back by tag. Nine lessons, $5.
Build a complete chess game that runs entirely in the browser: a Rust engine compiled to WebAssembly, a Lit web component in front of it, and real tests at every layer. Free and text-first.
Put a real SQL engine in a browser tab. Build the data layer of an analytics app on DuckDB compiled to WebAssembly — a worker, a database file that survives reloads, prepared statements, window functions, and a SQL console you write yourself. Free and text-first.
Build a real analytics interface on web components: a TC39 signals store, a debounced query runner that cannot render a stale result, twelve Lit components with their own shadow styles, D3 charts, and a design system that recolors from one slider. Free and text-first.
The sequel to the free DuckDB series: a test suite for code jsdom cannot run. Real browsers, real WebAssembly, real workers, deterministic fixtures, fake-timer proofs for a debounced query runner, and end-to-end checks that a database file survives a reload. Seven lessons, $5.