This site has been promising programming courses since the day I left corporate. Today the first one is live, and it’s free start to finish: Port a Classic Java App to Rust.


The pitch, in one paragraph

If you wrote Java for a living any time in the last twenty years, you know JPetStore. Stripes on top, Spring in the middle, MyBatis underneath, a WAR file on Tomcat at the end — the reference app a whole generation learned layered architecture from. The course takes that exact app and rebuilds it in Rust, layer by layer, over twelve lessons: Axum where Stripes was, SQLx where MyBatis was, Askama where the JSPs were, SQLite underneath, and at the end one 7.4 MB binary that does everything the original does. Pet pictures included. Literally — they’re embedded in the executable.

How it teaches

Text first. No videos to scrub through, no “like and subscribe.” Every lesson explains an idea against the Java equivalent you already know, shows each new pattern once in full, then assigns the repetitions — you write the other five queries, the other two newtypes. Every lesson ends with a running app, an objective done-when check, and a git tag in the companion repo so the complete diff is always one click away. Optional challenges go further: close a timing side channel, implement Luhn, try to break the port.

What the port refuses to keep

The original is a wonderful teacher partly because it’s a museum of 2002 practices. Three of them get deliberately fixed, each with a “here’s what the original did and why we won’t” lesson: passwords stored in plaintext become argon2 hashes, the credit card column simply doesn’t exist in our schema, and the hand-rolled sequence table gives way to autoincrement. Everything else ports faithfully, dated quirks and all.

The numbers at the finish line

Lesson 12 puts the result on a scale. Eight direct dependencies, each introduced by name in the lesson where it earns its place. A 7.4 MB release binary as the entire deployment artifact. About 7 MB of memory while serving pages. Thirty-five tests — unit, property-based, and request-level — including the property test that found a money-overflow bug my example tests never would have. The comparison against a JVM running an app server is in the lesson, asterisks and all.

Start here

The course lives at mikezupper.com/courses, no signup, no paywall, no email gate. Lesson 1 has you running the original in Docker and a hello-world Axum server side by side within the hour.

Two paid follow-ups are in the works for when the free course leaves you wanting more: deploying the binary properly, and turning the server-rendered store into an API with a client-side UI across the CSR, SSR, and SSG spectrum.

If you take the course, I genuinely want to hear how it goes — especially if you break something. Find me on X @mikezupper or email [email protected].