Learn Lisp and game programming as one thing, not "game dev, incidentally in Lisp." Every lesson builds a real, playable game; every game teaches a Lisp idiom and a game-programming concept at the same time.
📖 Read it at lisp-gamedev.b12n.app — the
same lessons as docs/guide/, laid out for reading.
This course is built almost entirely from real, already-shipped game code across eight sibling repos, spanning five Lisp dialects and three runtimes (JVM, native-Chez-Scheme, native-C++/LLVM) plus the browser and mobile. You'll build your own games on one primary dialect (JVM Clojure), while every lesson shows you the same idea already running in the others.
Phase 2 is the part most people come for. These are recorded from this
repo's own exercises/ code, on the course's own vendored raylib engine —
not from the sibling suites:
![]() Lesson 1 — Pong |
![]() Lesson 2 — Breakout |
![]() Lesson 3 — Snake |
![]() Lesson 4 — Space Invaders |
![]() Lesson 5 — Tetris |
![]() Lesson 6 — Flappy Bird |
Before any of those, Phase 1 has you build the loop itself — a ball that bounces, and eyes that follow the mouse:
![]() Bouncing ball |
![]() Following eyes |
Full gallery, with what each one teaches: docs/demos/README.md.
Maintainers regenerate them with bb record.
Complete beginners are covered from lesson 1, nothing is assumed. Already know a language, or already know some Lisp? Every "fundamentals" lesson has a skip-this-if-you-already-know-it callout at the top, so you can move at your own pace.
Prerequisites (verified in docs/guide/phase-0-first-contact/index.md):
- JDK 22+ (this course uses raylib's real C API over JDK's Panama FFI - older JDKs can't do this)
- Clojure CLI
- Babashka (
bb) for all course tooling
git clone git@github.com:burinc/b12n-gamedev-course.git
cd b12n-gamedev-course
bb tasks # see everything you can run| Phase | What you build | Status |
|---|---|---|
| 0: First Contact | Nothing yet, just watch the same tiny game already running, in a browser tab and natively | ✅ done |
| 1: Foundations | Clojure basics (skippable), the course's own game-loop engine, your first real programs | ✅ done |
| 2: Arcade Classics | Pong → Breakout → Snake → Space Invaders → Tetris → Flappy Bird | ✅ done |
| 3: Same Game, Three Lisps | Port one of your games across three FFI philosophies | ✅ done |
| 4: Systems & Architecture | Fixed timestep, ECS, particles, procedural generation, simple AI | ✅ done |
| 5: Realistic Capstones | Ship a mobile game, a web game, or go deep into multiplayer/3D | ✅ done |
| Track B: Web Games | A standing remix playground of nine browser games, jump in anytime | ✅ done |
Full course entry point: docs/guide/index.md.
Every lesson past Phase 2 curates real code from these repos rather than re-inventing it:
b12n-raylib-clj, JVM Clojure, this course's spine dialectraylib-jlt, Jolt (native Clojure, Chez Scheme, no JVM)b12n-raylib-jnk, jank (native Clojure, C++/LLVM, no JVM)b12n-cljsapp, ClojureScript browser games, zero installb12n-herfi, 3D multiplayer, hand-rolled ECSb12n-ohuntley, 3D zombie-survival game, procedural generation + AIb12n-rogue-shooter, mobile scrolling shooter, ClojureDart + Flutter + Flameb12n-crystal-ball, mobile GLSL shader pipeline, ClojureDart + Flutter + Flame
Note on the sibling repos. The three raylib suites above are public today. The five below them (
b12n-cljsapp,b12n-herfi,b12n-ohuntley,b12n-rogue-shooter,b12n-crystal-ball) are still private, along with theb12n-wikispages some lessons link to, so those links will 404 for now. They're being opened up as the course progresses, and the lessons that depend on them carry a note at the top saying so. Phases 0 to 3 are complete and fully runnable on the public raylib suites alone.
This repository is dual licensed, because it's part course and part codebase.
- Course material in
docs/, all the lesson pages and guides, is under CC BY-SA 4.0. Share it, adapt it, teach from it. Just credit it and keep derivatives under the same license. SeeLICENSE-docs.md. - Code in
src/,exercises/andtest/is under the Eclipse Public License 2.0, the same license Clojure itself uses. SeeLICENSE. - The raylib binaries in
libs/are third party, from raysan5/raylib, redistributed under the zlib license. Seelibs/LICENSE-raylib.txt.
Teaching from this course at a meetup, a classroom or a company onboarding session needs no permission beyond attribution.







