{"id":19958656,"url":"https://github.com/wick3dr0se/egor","last_synced_at":"2026-03-09T08:05:10.356Z","repository":{"id":169114174,"uuid":"615945876","full_name":"wick3dr0se/egor","owner":"wick3dr0se","description":"A dead simple cross-platform 2D graphics engine","archived":false,"fork":false,"pushed_at":"2026-03-01T16:36:18.000Z","size":70474,"stargazers_count":122,"open_issues_count":8,"forks_count":10,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-03T16:56:52.654Z","etag":null,"topics":["egui","graphics-engine","rust","wgpu","winit"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wick3dr0se.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-03-19T06:25:24.000Z","updated_at":"2026-03-01T20:31:01.000Z","dependencies_parsed_at":null,"dependency_job_id":"efbbf887-9181-4faf-941d-7c000e13fbe9","html_url":"https://github.com/wick3dr0se/egor","commit_stats":null,"previous_names":["wick3dr0se/bashbar","wick3dr0se/egor"],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/wick3dr0se/egor","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wick3dr0se%2Fegor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wick3dr0se%2Fegor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wick3dr0se%2Fegor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wick3dr0se%2Fegor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wick3dr0se","download_url":"https://codeload.github.com/wick3dr0se/egor/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wick3dr0se%2Fegor/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30123425,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-05T11:11:57.947Z","status":"ssl_error","status_checked_at":"2026-03-05T11:11:29.001Z","response_time":93,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["egui","graphics-engine","rust","wgpu","winit"],"created_at":"2024-11-13T01:44:00.399Z","updated_at":"2026-03-05T11:53:30.872Z","avatar_url":"https://github.com/wick3dr0se.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\u003ch1\u003eegor\u003c/h1\u003e\n\u003cp\u003eA dead simple cross-platform 2D graphics engine\u003c/p\u003e\n\n![Screenshot](media/ss.png)\n\n\u003ca href=\"https://crates.io/crates/egor\"\u003e\u003cimg src=\"https://img.shields.io/crates/v/egor?style=flat-square\u0026color=fc8d62\u0026logo=rust\"\u003e\u003c/a\u003e\n\u003ca href='#'\u003e\u003cimg src=\"https://img.shields.io/badge/Maintained%3F-Yes-green.svg?style=flat-square\u0026labelColor=232329\u0026color=5277C3\"\u003e\u003c/img\u003e\u003c/a\u003e  \n\u003ca href=\"https://opensourceforce.net/discord\"\u003e\u003cimg src=\"https://discordapp.com/api/guilds/913584348937207839/widget.png?style=shield\"/\u003e\u003c/a\u003e\n\n\u003c/div\u003e\n\n## Why Egor?\n\n**Egor** is dead **simple**, **lightweight** and **cross-platform**. The same code runs on desktop, web (WASM) and mobile with minimal boilerplate. It's built from small, composable crates on top of modern graphics and windowing abstractions\n\n**Egor** gives you the essentials for 2D apps and games:\n\n- Efficient 2D rendering (shapes, textures, text)\n- Keyboard \u0026 mouse input\n- Camera \u0026 world-space transforms\n- Interactive UIs with optional **egui** integration\n- Optional hot-reload during development\n\nHow many Ferris crabs can **Egor** handle? Find out in our [Ferrismark benchmark](#performance)\n\n## Platform Support\n\n| Target     | Backend(s)               | Status     |\n| ---------- | ------------------------ | ---------- |\n| Windows    | DX12, Vulkan, OpenGL     | ✅ Stable  |\n| MacOS      | Metal, Vulkan (MoltenVK) | ✅ Stable  |\n| Linux      | Vulkan, OpenGL           | ✅ Stable  |\n| Web (WASM) | WebGPU, WebGL2           | ✅ Working |\n| Android    | Vulkan, OpenGL           | ✅ Working |\n\n## Getting Started\n\nAdd **egor** to your project:\n\n```bash\ncargo add egor\n```\n\nExample:\n\n```rust\nlet mut position = Vec2::ZERO;\n\nApp::new()\n    .title(\"Egor Stateful Rectangle\")\n    .run(move |FrameContext { gfx, input, timer, .. } | {\n        let dx = input.key_held(KeyCode::ArrowRight) as i8\n            - input.key_held(KeyCode::ArrowLeft) as i8;\n        let dy =\n            input.key_held(KeyCode::ArrowDown) as i8 - input.key_held(KeyCode::ArrowUp) as i8;\n\n        position += vec2(dx as f32, dy as f32) * 100.0 * timer.delta;\n\n        gfx.rect().at(position).color(Color::RED);\n    })\n```\n\nFor full documentation see the [official docs](https://docs.rs/egor/latest)\n\n### Running a Native Build\n\nSimply run `cargo`:\n\n```bash\ncargo run\n```\n\n### Running a WASM Build\n\n**Setup**\n\nCreate an `index.html` next to your `Cargo.toml`:\n\n```html\n\u003c!DOCTYPE html\u003e\n\u003chtml\u003e\n  \u003chead\u003e\n    \u003cmeta charset=\"utf-8\" /\u003e\n    \u003cmeta name=\"viewport\" content=\"width=device-width,initial-scale=1\" /\u003e\n    \u003clink data-trunk rel=\"rust\" /\u003e\n    \u003cstyle\u003e\n      body {\n        margin: 0;\n      }\n      canvas {\n        display: block;\n        width: 100vw;\n        height: 100vh;\n      }\n    \u003c/style\u003e\n  \u003c/head\u003e\n\u003c/html\u003e\n```\n\nRun `trunk` (defer to [Trunk docs](https://docs.rs/crate/trunk/latest) for setup):\n\n```bash\ntrunk serve\n```\n\n### Running an Android Build\n\n**Setup**\n\nMake sure your crate is a library:\n\n```toml\n[lib]\ncrate-type = [\"cdylib\", \"rlib\"]\n```\n\nHave a lib.rs with your `egor::main` function:\n\n```rust\negor::main!(main);\npub fn main() {\n    App::new().run(...)\n}\n```\n\nThe `egor::main!(main)` macro defines the required `android_main()` entry point on Android and forwards execution to your `main()` function. On other platforms it expands to nothing (see the secs_particles demo for reference)\n\nAdd an Android build target (if needed):\n\n```bash\nrustup target add aarch64-linux-android\n```\n\nEgor defers Android toolchain setup and build workflow to xbuild. See the [xbuild - getting started](https://github.com/rust-mobile/xbuild?tab=readme-ov-file#getting-started) for SDK/NDK and device setup\n\nBuild with `xbuild`\n\n```bash\nx build\n```\n\n### Try Out Subsecond Hot-reloading\n\nCompile with the `hot_reload` feature enabled. Hot reload will automatically wrap `AppHandler::update` when the feature is active\n\nRun `dioxus-cli` (defer to [Dioxus CLI docs](https://docs.rs/crate/dioxus-cli/latest) for setup):\n\n```bash\ndx serve --hot-patch\n```\n\n\u003e [!NOTE]\n\u003e Subsecond hot-reloading is experimental; native is working\n\n## Performance\n\nTo stress test **egor**, we made [ferrismark](demos/ferrismark), a bunnymark like demo capable of rendering millions of Ferris crabs at stable FPS on modest hardware\n\n\u003cimg src=\"media/ferrismark.png\" height=\"400\" /\u003e\n\n## Demos\n\nTo try ferrismark or see more of **egor** in action, check out [demos/](demos)\n\nRun any demo with (see `--help` usage) xtask:\n\n```bash\ncargo xtask run \u003cdemo\u003e\n```\n\n## Contributing\n\n**egor** is moving fast. Before opening a PR or submitting a change, please read [CONTRIBUTING.md](CONTRIBUTING.md)\n\nCheck out some [issues](https://github.com/wick3dr0se/egor/issues), open a new one, drop a PR or come hang in [Discord](https://opensourceforce.net/discord)\n\n---\n\n**egor** is maintained with ❤️ by [Open Source Force](https://github.com/opensource-force)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwick3dr0se%2Fegor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwick3dr0se%2Fegor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwick3dr0se%2Fegor/lists"}