No description
Find a file
2026-01-01 23:10:02 +01:00
docs tuiiii 2025-12-31 15:02:21 +01:00
src staging system 2026-01-01 23:10:02 +01:00
.envrc add devenv config 2025-12-31 00:36:47 +01:00
.gitignore add devenv config 2025-12-31 00:36:47 +01:00
Cargo.lock staging system 2026-01-01 23:10:02 +01:00
Cargo.toml staging system 2026-01-01 23:10:02 +01:00
demo.yabu testing, fixes and refactors 2025-12-30 22:13:02 +01:00
devenv.lock add devenv config 2025-12-31 00:36:47 +01:00
devenv.nix add devenv config 2025-12-31 00:36:47 +01:00
devenv.yaml add devenv config 2025-12-31 00:36:47 +01:00
lisp-game-engine-spec.md initial 2025-12-29 20:30:58 +01:00
README.md Readme 2025-12-30 22:51:13 +01:00

Yabu (藪)

A Lisp for collaborative game jams.

Yabu combines a JIT-compiled Lisp with ideas from Unison and Tomorrow Corporation's game tools. Functions are identified by the hash of their content, not their name. Rename a function and nothing breaks, write the same logic twice and it's deduplicated automatically.

The language includes a built-in Entity Component System. Define components with typed fields, write systems that query entities, and spawn things into the world. When you start the game window, Yabu records every frame: inputs, random seeds, timing. Stop the game and you have a complete recording you can replay, scrub through, or share.

Namespaces work like git branches for your code. Fork off to experiment, diff against main to see what changed, merge when you're happy. Definitions sync peer-to-peer—connect to a friend and their functions appear in your REPL.

(defcomponent Position [x :f32 y :f32])
(defcomponent Velocity [dx :f32 dy :f32])

(defsystem move [pos :Position vel :Velocity]
  (set! pos.x (+. pos.x vel.dx))
  (set! pos.y (+. pos.y vel.dy)))

(spawn [Position {:x 100.0 :y 100.0}
        Velocity {:dx 1.0 :dy 0.5}])

Run with cargo run. Type :help for commands.