Skip to main content

Built on

Balaur reuses the Rust ecosystem rather than re-implementing it. These are the major libraries underneath, and what each one does for the engine.

LibraryWhat it does in Balaur
hecsThe ECS every node is an entity in
Rapier2D and 3D physics, built with enhanced-determinism
wgpu via kiss3dRendering, windowed and offscreen; winit for the window
eguiThe immediate-mode UI scripts draw, and the editor itself
rodioAudio playback
gilrsGamepads
RuneThe scripting language and VM, lightly forked so powf/powi are deterministic
glamxMath: glam re-exported whole, plus pose and rotation types. Shared with Rapier and kiss3d so nothing converts
libmBit-identical transcendentals on every platform, under both glam and the engine's own math
gltf, imageModel and texture loading
ureq, tungstenite, rustlsHTTP, websockets, TLS
serde, tomlScenes, assets, project files, packs
notifyThe file watcher behind hot reload
tracingLogging, into the editor's Output dock
clapThe balaur command line
libloadingRun-time extensions from shared libraries

Every crate in the workspace, with its dependencies, is listed in the generated Crates reference.

glamx, glam and libm

These three look like three choices and are really one. glamx is dimforge's extension crate over glam — it adds Pose2/Pose3/Rot2 and re-exports everything else, so depending on it is depending on glam. Balaur names only glamx; use glamx::Vec3 is the single spelling across the workspace.

libm is underneath both. Rapier's enhanced-determinism builds glam against libm instead of the platform's math library, and the workspace pins those features itself so they hold in every build rather than only when physics happens to be in the dependency graph. The engine calls libm directly for the transcendentals that do not come out of a glam type — skeleton rest poses, slerp, IK, easing curves, and the math module scripts call. Same library, reached two ways. See Determinism.