A 3D game engine written in Go, built on raylib.
Entity-component system, real-time physics, shadow mapping, and a built-in scene editor.
$ git clone https://github.com/MironCo/mirgo_engine.git
$ cd mirgo_engine
$ make run Everything you need to build 3D games in Go
GameObjects with attachable components, generic GetComponent[T]() lookups, tags, and scene queries.
Gravity, rigidbodies, box/sphere colliders, AABB collision resolution, spatial hashing, raycasting.
2048×2048 depth map, directional light, PCF 5×5 soft shadows, slope-scaled bias.
Diffuse + wrap lighting, Blinn-Phong specular, fresnel, rim lighting, tone mapping, gamma correction.
Unity-style editor with free-fly camera, object selection via raycast, transform gizmos, inspector panel.
Data-driven level layout. Load/save at runtime, hot-editable scene format.
Register custom component factories by name, reference from scene JSON, auto-serialization, scaffolding tool.
WASD movement, mouse look, gravity, jumping, and player collision resolution out of the box.
Up and running in under a minute
Go 1.24+, a C compiler (GCC), and an OpenGL 3.3+ GPU.
git clone https://github.com/MironCo/mirgo_engine.git
cd mirgo_engine
make run # Build the Rust CLI utils (once)
cd utilities && make
# Scaffold a new script
./mirgo-utils newscript MyScript {
"type": "Script",
"name": "MyScript",
"props": {
"speed": 1
}
} Clean, composable, no singletons
Game
└── World
├── Scene
│ └── GameObjects
│ ├── Transform
│ ├── Tags
│ └── Components[]
├── PhysicsWorld
│ ├── Spatial Hash
│ ├── Collision Pipeline
│ └── Raycasting
└── Renderer
├── Shadow Map Pass
└── Lighting Pass Components access the world through GetGameObject().Scene.World — no singletons, no constructor injection. The interface prevents circular dependencies between packages.
Every component implements Start(), Update(deltaTime), and gets automatic access to its parent GameObject, the Scene, and the World.
Find objects by tag with FindByTag(), by name with FindByName(), or use generic GetComponent[T]() lookups on any GameObject.