| Crates.io | bevy_firefly |
| lib.rs | bevy_firefly |
| version | 0.18.0 |
| created_at | 2025-11-23 17:53:43.700817+00 |
| updated_at | 2026-01-14 18:35:20.94365+00 |
| description | 2d lighting crate for the Bevy game engine |
| homepage | |
| repository | https://github.com/PVDoriginal/firefly/ |
| max_upload_size | |
| id | 1946810 |
| size | 352,979 |
Firefly is an open-source, 2d lighting crate for the bevy game engine.
I am working on it as part of my college thesis. It uses certain geometrical and computational algorithms to take advantage of Bevy's ECS and put less strain on the GPU.
My final goal is to have a lighting crate with features akin to the ones of more mature game engines, while keeping performance as high as possible and minimizing the end-user API.
Firefly already has many of the essential features of the respective 2d lighting pipelines of Unity and Godot. There are still many more planned though!
Short video showing off soft shadows and z-sorting:
https://github.com/user-attachments/assets/1984ef2a-0edd-4a40-93cb-a901057a9b74
Credit for the characters and assets to Kimberly and her upcoming game!
Here's the same game but with light banding and hard shadows:
https://github.com/user-attachments/assets/6118f75e-b797-41bb-998e-381dc9d84cb9
Credit for the characters and assets to Kimberly and her upcoming game!
Here's a video of the crates example, showcasing normal maps and z-sorting:
https://github.com/user-attachments/assets/fd9453ba-e42a-4155-b96b-889bfdceea48
And here is a video of the stress example.
https://github.com/user-attachments/assets/c9b8c716-a0c4-4604-8fbb-50d6bbbe8aad
To use this crate, simply run cargo add bevy_firefly or add firefly to your Cargo.toml file.
You can see all the firely versions here.
Here is a basic example of integrating firefly into a bevy app:
use bevy::prelude::*;
use bevy_firefly::prelude::*;
fn main() {
App:new()
.add_plugins((DefaultPlugins, FireflyPlugin))
.add_systems(Startup, setup)
.run();
}
fn setup(mut commands: Commands) {
commands.spawn((
Camera2d,
FireflyConfig::default()
));
commands.spawn((
PointLight2d {
color: Color::srgb(1.0, 0.0, 0.0),
range: 100.0,
..default()
},
Transform::default()
));
commands.spawn((
Occluder2d::circle(10.0),
Transform::from_translation(vec3(0.0, 50.0, 0.0)),
));
}
Check out the examples and the crate documentation to learn more about using it.
Some of the existing features are:
Some of the currently planned features are:
Feel free to open an issue if you want to request any specific features or report any bugs!
Also you can ask any questions over on discord!
| bevy | bevy_firefly |
|---|---|
| 0.18 | 0.18 |
| 0.17 | 0.17 |
| 0.16 | 0.16 |
You can check out bevy_light_2d and bevy_lit. They were both a big inspiration when starting out with this crate!