- Stupid Simple – You can grok the whole engine without falling into a rabbit hole
- Cross-Platform – Same code runs native & on the web via WASM
- Zero Boilerplate – Primitives, textures, input, text & more without writing a book
- Extensible & Minimal – If it's not required, it’s probably not included (by default)
- Primitives
- Textures
- Input Handling
- Camera System
- Text/Fonts
- Plugin System
Target | Backend(s) | Status |
---|---|---|
Windows | DX12, Vulkan, OpenGL | ✅ Stable |
MacOS | Metal, Vulkan (MoltenVK) | ✅ Stable |
Linux | Vulkan, OpenGL | ✅ Stable |
Web (WASM) | WebGPU, WebGL2 | ✅ Working |
Note
Mobile (Android/iOS) isn't (intended to be) supported & neither is touch input
Add egor to your project:
cargo add egor
Example:
App::init(MyState::default() | _, ctx | ctx.set_title("Stateful App")).run(|state, ctx| {
let dx = ctx.input.key_held(KeyCode::ArrowRight) as i8
- ctx.input.key_held(KeyCode::ArrowLeft) as i8;
let dy = ctx.input.key_held(KeyCode::ArrowDown) as i8
- ctx.input.key_held(KeyCode::ArrowUp) as i8;
state.pos += vec2(dx as f32, dy as f32) * 100.0 * ctx.timer.delta;
ctx.graphics.rect().color(Color::RED).at(state.pos);
})
To see more of egor in action, checkout demos/
Tip
Running a demo for WASM? You’ll need to move index.html into a demo, or just use the included run.sh script (see usage). It simplifies running native, WASM & hot-reload builds
Simply run cargo
:
cargo run
Run trunk
(defer to Trunk docs for setup):
trunk serve
Add the plugin:
cargo add egor_subsecond --git https://github.com/wick3dr0se/egor --package egor_subsecond
App:init(...).plugin(HotReloadPlugin::new(MyPlugin))...
Run dioxus-cli
(defer to Dioxus CLI docs for setup):
dx serve --hot-patch
Note
Subsecond hot-reloading is experimental; native is working
egor is moving fast.. Got an idea, bugfix, or question? Check out some issues, open a new one, drop a PR, or come hang in Discord
egor is maintained with ❤️ by Open Source Force