Syrillian Engine is a Rust-based, real-time, mainly 3D game engine, focusing on flexibility, modularity, and a straightforward, entity-component-driven workflow.
It's designed to be frictionless and extensible. We aim to provide a robust foundation for building modern 3D applications, cross-platform rendering pipelines, and visually pleasing gameplay.
This project is trying to be uniquely simple and frictionless.
Syrillian aims to show how flexible Rust can be as a general programming language. With the milestone to provide a simple, iteration-strong game engine, which people have fun making games with. The goal is to look beyond the boundaries so that users can simply focus on frictionless development that feels like magic, not like fighting a language.
The goal is that even new developers, and people familiar with other languages, have a comfortable dip into the Rust game-dev atmosphere and the growing Syrillian ecosystem!
Feel free to add your own expositions here :)
An animated rabbit, roaming in the scene *click to view the video*
Picking up a physics-enabled cube with an animated shader, which is emitting a lightsource From this Example
- Simple "Just get it started" approach. High focus on user-side simplicity, and even fresh rust users should feel welcome.
- Lots of preset (components, prefabs, compatibility)!
- Mesh and Physics, Visual debugging features.
- Game Objects that are builder extensible. Providing a fluid object creation and behavior specification workflow.
- The open-source internals that make this project possible:
- Have a modern Rust Toolchain installed.
- Have a GPU
- Add it as a dependency to your cargo project:
cargo add syrillian-
Clone the repository:
git clone https://github.com/Kek5chen/syrillian.git cd syrillian -
Build the engine library:
cargo build
-
Try out a demo example, included in the repository:
cargo run --example my-main
NixOS Development Flakes are provided with the project.
If successful, a window should appear, displaying a rendered scene.
We, optionally, provide the SyrillianApp Proc Macro.
Usage example:
// make sure to get your imports and dependencies right, (for the dependencies, syrillian, env_logger, log), (for the imports use std::Error, and necessary modules from syrillian)
// The macro will provide you with a simple main runtime and (optional) logging
#[derive(Debug, Default, SyrillianApp)]
struct YourGame;
impl AppState for YourGame {
// will be called once
fn init(&mut self, world: &mut World) -> Result<(), Box<dyn Error>> {
world.set_window_title("Example App");
world.new_camera();
world.spawn(&CubePrefab::default()).at(0, 0, -10); // Spawn Cube at (0, 0, -10).
world.print_objects(); // Print Scene Hierarchy to Console
Ok(())
}
// use the update function if you are making updates to the game state every frame
fn update(&mut self, world: &mut World) -> Result<(), Box<dyn Error>> {
Ok(())
}
// there's also "late_update", and more...
}It's simple... Really!
The whole feature map has moved into GitHub Issues
Contributions are welcome! If you find a bug or have a feature request:
- Open an issue describing the problem or feature.
- Discuss solutions or improvements.
- Optionally, submit a pull request with your changes. Very welcome!
Ensure your code follows Rust’s formatting and clippy checks:
cargo fmt
cargo clippyThis project started as a hobby project - a big personal gem - and had poured hundreds of hours of solo-development into it before catching onto the first early contributors. This project is not monetized or developed to be monetized.
Any help, getting this project [better, stable, improved, ..] is very welcome, and we'll try to show or explain anything that's not clear. Even feedback or rants on the user-facing API are more than welcome. We wish to provide patterns that make the engine as simple to use as possible.
Join the community on Discord.
Syrillian Engine is distributed under the MIT License. See LICENSE for details.
Syrillian Engine ❤️ Building the backbone of your next great 3D experience.

