caribou
A polyglot substrate that runs multiple languages on a shared heap, scheduler and module registry — so languages share modules, types and object instances across boundaries without killing performance. Built for game and multimedia engines, plugin extensions, and actor/agent systems.
A Haxe host owns the loop and the shipped binary; gameplay, UI and tools are scripted in whatever language suits them and hot-reload in place.
Third-party extensions ship as scripts or native C libraries, resolved through one registry and sandboxed by the same scheduler as everything else.
Thousands of cooperative fibers across languages sit in one scheduler and one heap — actors message each other by reference, not by wire format.
A game engine written in Haxe can drive gameplay systems scripted in Wren, hand native objects across the boundary, and hot-reload scripts at runtime — without rebuilding native components.
A C or Rust library declared with caribou_abi::plugin! and dropped in plugins/ becomes a module like any other: its classes appear under math.* in Haxe, import the same way in Wren, and can hold a guest closure and call back into it.
Annotate a Wren signature with #export = "add(n: Num) -> Num", or let Caribou infer it.
Native objects pass across boundaries by reference — the heap is already shared.
Guest scripts reload while the process runs, in development and shipped builds alike.
Haxe still pulls from haxelib, Wren from Hatch, Python from pip, Lua from luarocks. Nothing is re-packaged for Caribou, and the set is open — a frontend joins by filling in a seam table.
Haxe compiled to HashLink bytecode, run on a tiering JIT. Usually the host: it owns the process entry point, the main loop and the shipped executable.
ash.rayzor.tech ↗Standalone Wren with a tier-up JIT and the Hatch package tool. On Caribou it matches its own benchmark timings and memory under heavy GC pressure.
wrenlift.com ↗The frontend lane. Zyntax is a complete JIT compiler frontend for further languages and DSLs — Python and Lua come from it — and its modules register beside Wren and Haxe in the same namespace.
in progress zyntax.org ↗C libraries built with caribou_abi::plugin! drop into plugins/ and are treated as first-class languages in the registry.
Each guest exposes a struct of function pointers covering heap allocation, collection and scheduling. By default they point at its own implementations.
Adapter crates overwrite those tables with Caribou's implementations before the runtime allocates a single byte.
Standalone suites still run against native implementations, unmodified. Adapter builds run the same guest binaries over Caribou.
One install script gives you the caribou command — pulled from the rolling nightly release, verified, and dropped on your PATH. Prefer to build it yourself? See building.md.
One script drops the caribou binary on your PATH. Prebuilt for macOS, Linux and Windows, aarch64 and x86_64.
# macos · linux $ curl -fsSL caribou.rayzor.tech/install.sh | sh # windows · powershell > irm caribou.rayzor.tech/install.ps1 | iex
Point caribou at the program your compiler already produces. Guest modules beside it are discovered and loaded.
caribou run bin/game.hl caribou run --report bin/game.hl caribou run --mode hybrid --wren tiered bin/game.hl
build packages the program and every language's modules — plus native plugins — into one .cb file. A run needs the file and nothing else.
caribou build bin/game.hl caribou build bin/game.hl -o dist/game.cb caribou run dist/game.cb
describe reports what a module, plugin library or project root exports across the shared namespace.
caribou describe src/game/hud.wren caribou describe plugins/libphysics.so caribou describe .