Talu is a professional-grade 2D game framework that combines the safety and performance of Rust with the simplicity of WolfLang. Designed for developers who want to build games quickly without sacrificing power.
- 🚀 High Performance: Built on top of Rust and Raylib 5.5 for blazing-fast rendering.
- 📜 Scripting Mastery: Express your game logic easily with WolfLang.
- ⚖️ Built-in Physics: Integrated physics module with collision detection.
- 🎮 Input System: Comprehensive keyboard and mouse input handling.
- 🎨 Render Primitives: Draw rectangles, circles, and lines with ease.
- 🛠️ Developer-First: Real-time panic-catching UI that prevents crashes and shows debug info.
- 📦 Modular Packages: Organize your projects with independent
package.taluandconfig.wolfsetups. - 🔧
taluCLI: Full project lifecycle management — scaffold, run, build for distribution, and manage Rust plugins without touching Cargo directly. - 🔌 Live Plugin System: Write engine extensions in Rust (
cdylib) and load them into any project viapackage.talu. Plugins register custom WolfLang functions at runtime.
Ensure you have the Rust toolchain installed on your system.
Clone the repository and build both the engine and CLI:
git clone https://github.com/BombaStudio/Talu.git
cd Talu
cargo build --releaseThis produces two binaries in target/release/: talu-engine (the runtime) and talu (the CLI). Add them to your PATH or use them directly from target/release/.
talu new mygame
cd mygame
talu runtalu new scaffolds a ready-to-run project with package.talu, config.wolf, main.wolf, and empty assets/ and packages/ directories.
Talu comes with several pre-built examples:
talu run engine/examples/platformer
talu run engine/examples/rigidbody_boxes
talu run engine/examples/clickertalu build ./mygameProduces a self-contained mygame/dist/ folder with the engine binary, all scripts, assets, and plugins — ready to zip and share.
A Talu project typically consists of:
package.talu: Defines the configuration, entry script, and Rust plugins.config.wolf: Window and engine initialization parameters.your_script.wolf: Your game logic (must definestart()andupdate()).
config = config.wolf
run = main.wolf
plugins = my_rust_plugin, another_plugin
The plugins key automatically resolves and loads platform-specific Rust dynamic libraries (.so, .dll, .dylib) from your packages/ directory or the engine root.
Talu fully supports WolfLang's native module system.
import "packages/my_math.wolf" as math
fn update()
let res : int = math::add(5, 10)
end
Check out the User Manual for a deep dive into the engine's capabilities.
Plugins let you extend WolfLang with custom functions written in Rust. Scaffold and build one with the CLI:
talu new-plugin my_plugin
cd my_plugin
# edit src/lib.rs to register your functions
talu build-plugin .Then reference it in your project's package.talu:
config = config.wolf
run = main.wolf
plugins = my_plugin
| Command | Description |
|---|---|
talu new <name> |
Scaffold a new project |
talu run [path] |
Run a project (default: current directory) |
talu build [path] |
Package a project into a distributable dist/ folder |
talu new-plugin <name> |
Scaffold a new Rust plugin crate |
talu build-plugin [path] |
Compile and install a plugin into packages/ |
- 📘 User Manual: Detailed API references, project structure, and scripting guide.
- 📘 Tutorials: Step-by-step guides to build your first game with Talu.
- 📜 Changelog: Track all the latest updates, features, and bug fixes.
- 📂 Examples: Explore pre-built projects like the Platformer and Physics simulations.
| Category | Function | Description |
|---|---|---|
| Rendering | drawRect(x, y, w, h, r, g, b) |
Draws a colored rectangle. |
drawCircle(x, y, rad, r, g, b) |
Draws a colored circle. | |
drawLine(sx, sy, ex, ey, r, g, b) |
Draws a colored line. | |
| Physics | check_collision(x1, y1, w1, h1, x2, y2, w2, h2) |
Returns true if two rects overlap. |
| Input | is_key_down(key) |
Checks if a key is currently held. |
is_key_pressed(key) |
Checks if a key was pressed this frame. | |
| Utility | print(msg) |
Prints a message to the console. |
random_float(min, max) |
Generates a random float. |