
Raytraced Lighting, Bevy Jam Voting, and a Hanabi Particle Editor
2025-06-16
The RustWeek talks are out! Including some from Alice (of Bevy) and Jos (of POLDERS).
There are a number of Bevy Jam entries that could have been showcases this week, but I've decided to not include them to avoid impacting voting during the voting period (Don't forget to vote!)
There's also some exciting work on raytraced lighting, a new Observers working group, and in the wider community: a prototype of a Hanabi Particle editor.
Solari
Solari is the name given to Bevy's raytraced lighting effort, which has seen two plugins merge in #19058.
RaytracingScenePlugin
includes BLAS and TLAS building, geometry and texture binding, sampling functionsPathtracingPlugin
is a non-realtime path tracer intended to serve as a testbed and reference
It is notable that this is early work! This merged work is not something you can drop into a game. However you can run the solari
example to see the reference path tracer in action if you have a suitable GPU.
Observers
With the Observers Overhaul working group in action, #19596 has renamed Trigger
to On
, moving the common OnEvent
prefix off of the event, improving ergonomics.
app.add_observer(|trigger: On<Explode>| {
info!("Entity {} exploded!", trigger.target());
});
These improved ergonomics become even more apparent when considering future proposals, such as multi-event observers:
trigger: On<(
Add<Pressed>,
Remove<Pressed>,
Add<InteractionDisabled>,
Remove<InteractionDisabled>,
Insert<Hovered>,
)>,
Observers also got a documentation refresh in #19590 and Entity::PLACEHOLDER
was removed in #19440, turning Trigger::target()
return value into an Option<Entity>
.
Core Widgets
"Headless widgets" are a fairly common feature of modern UI frameworks, bundling all of the functionality you'd want without the visuals, which can make it easier to build accessible, functional UI.
#19366 introduces the first widget: the Core Button.
Specialized UI Transform
#16615 makes a distinction between Transform
for UI work with the new UiTransform
and UiGlobalTransform
.
Improve Bevy's double-precision story for third-party crates
#19194 improves Bevy's double-precision story, making a few necessary changes to bevy_math
so that a new bevy_dmath
which supports double-precision can exist.

Showcase
Bevy work from the #showcase channel in Discord and around the internet. Use hashtag #bevyengine.

Hanabi Particle Editor
showcase
A prototype editor for Hanabi Particle assets. Built with Bevy as the viewer and gpui for the editor

DAW: Flight sim
showcase
Recent changes to this flight sim include upgrading to Bevy's atmospherics and rendering of rear-view mirrors.

Bunguette
showcase
Bunguette was made using Bevy for the TGC Game Jam. Gameplay preview is available on YouTube and you can play it on Itch.io.

WIP 3D space sim
showcase
A WIP 3D space sim. It's multiplayer and set in a simulated galaxy, with physics based on real Newtonian mechanics. The focus of the game is PVP with the goal of expanding your empire with colonies. The game is built on cBournhonesque’s [lightyear](https://github.com/cBournhonesque/lightyear] for multiplayer networking and big_space.

Bevy as Touchdesigner Plugin
showcase
touchdesigner is a creative technology platform and rendering editor that is used to power large scale interactive installations. in the video here the result of a render in touchdesigner is passed into a node running bevy's post-processing chromatic aberration effect, which is modulated by another lut texture generated by touchdesigner. this is all done using cuda/vulkan interop via wgpu-hal with all textures kept on device!

Moebius shader
showcase
A Moebius shader inspired by this YouTube video. There are no plans to open source the implementation at this time.

Crates
New releases to crates.io and substantial updates to existing projects
bevy_simple_screen_boxing
crate_release
bevy_simple_screen_boxing is a plugin that aims to make Pillarboxing/Letterboxing easy to use. Add the CameraBoxingPlugin
, and then add the CameraBox
Component on any Cameras you want to have boxing on.

Devlogs
vlog style updates from long-term projects
POLDERS: The Bevy Engine in Action - Jos Feenstra
devlog
Jos's talk from RustWeek 2025, covering "Dionysian Rust" in the context of Polders and Bevy.

Educational
Tutorials, deep dives, and other information on developing Bevy applications, games, and plugins
Bevy's immutable components: managing side effects in a parallel world - Alice Ivy Cecile
educational
Alice's RustWeek 2025 talk on immutable components
Improve Bevy's double-precision story for third-party crates authored by jnhyatt
Update add flake.nix example authored by Myxogastria0808
deny(missing_docs) for bevy_ecs_macros authored by theotherphil
Fix PickingInteraction change detection authored by kristoff3r
Gradients example: Fit in initial window authored by SpecificProtagonist
Unify system state authored by re0312
Require naga_oil 0.17.1 authored by JMS55
Add more wgpu helpers/types authored by JMS55
Add CameraMainTextureUsages helper method authored by JMS55
Clarify docs for transmute_lens functions authored by theotherphil
Specialized UI transform authored by ickshonpe
Allow not emitting `BundleFromComponents` with `Bundle` derive macro authored by TheNeikos
Remove entity placeholder from observers authored by ElliottjPierce
Fix new typos authored by hukasu
Use component_access_set to determine the set of conflicting accesses between two systems. authored by andriyDev
Delete `System::component_access()`. authored by andriyDev
Mention Mut in QueryData docs, clarify behaviour of Mut vs &mut in Mut docs authored by theotherphil
Add a despawn_children method to EntityWorldMut and EntityCommands authored by Sigma-dev
Remove workaround for image resize warning authored by SpecificProtagonist
Add missing docs for ImageLoader authored by theotherphil
Minor clear color doc improvements authored by SpecificProtagonist
Rename `JustifyText` to `Justify` authored by ickshonpe
Add extra buffer usages field to MeshAllocator authored by JMS55
Make camera controller not trigger change detection every frame authored by JMS55
Adding PartialEq to some UI and Text types authored by eckz
Introduce `CheckChangeTicks` event that is triggered by `World::check_change_ticks` authored by urben1680
Fix uninlined format argument lint authored by ZioKli
Write real docs for `SystemSet` authored by alice-i-cecile
Rename some pointer events and components authored by Jondolf
Fix iOS simulator build authored by madsmtm
Fix `pbr` example text rotation authored by rparrett
Core button widget authored by viridia
Copy stress test settings for many_camera_lights authored by tjlaxs
Rename bevy_ecs::world::Entry to ComponentEntry authored by alice-i-cecile
Component lifecycle reorganization and documentation authored by alice-i-cecile
Added async_executor to the array of features enabled by multi_threaded within bevy_tasks crate to prevent compile-time error when default-features are disabled. authored by DeveloperMindset123
Implement SystemCondition for systems returning Result<bool, BevyError> and Result<(), BevyError> authored by gwafotapa
Update example doc link for `ImageLoaderSettings`. authored by yrns
Fix `bevy_core_widgets` crate description typo authored by lewiszlw
Thoroughly document the current state of observers authored by alice-i-cecile
don't deny warnings on wasm-atomics CI job authored by mockersf
Initial raytraced lighting progress (bevy_solari) authored by JMS55
Fix `headless_renderer` example and mention `Screenshot`. authored by kpreid
Make the `ObservedBy` component useful to public consumers authored by alice-i-cecile
Make `GILRS` and `WINIT_WINDOWS` public authored by joshua-holmes
Rename `Trigger` to `On` authored by Jondolf
Modified the "scroll.rs" example to use the new spawning API. authored by Wiwip
Make `IrradianceVolume` require `LightProbe` (and document this). authored by kpreid
Stop storing access for all systems authored by chescock
`System::check_change_tick` and similar methods take `CheckChangeTicks` authored by urben1680
Fix incorrect description of ClusteredDecal authored by chendaohan
Bump ron version to 0.10. authored by andriyDev
Fix `LoadContext` docs. authored by yrns
Fixing running `ci` locally in MacOS authored by eckz
Add example to `Single` docs (#19461) authored by Joel-Singh
Fixing `AutoFocus` not working if it's spawn before Startup authored by eckz
Want to contribute to Bevy?
Here you can find two types of potential contribution: Pull Requests that might need review and Issues that might need to be worked on.
Pull Requests Opened this week
Feature: 2d Point Lights. authored by Adriigbs
Document `TextShadow` not supported by `Text2d` authored by ickshonpe
Add bevy_fbx, an FBX loader based on ufbx authored by VitalyAnkh
ECS: put strings only used for debug behind a feature authored by mockersf
Ugrade to `wgpu` version `25.0` authored by tychedelia
Object-centered text layout authored by ickshonpe
Mesh serialization authored by yrns
Enable ambiguity detection in CI. authored by andriyDev
Robust Scrolling Example authored by tim-blackbird
Impl system condition combinators for `Result`-ful run conditions authored by gwafotapa
Move `TextShadow` to `text` widget module authored by ickshonpe
Update ImageMeasure to apply aspect ratio to min/max height/width authored by UkoeHB
Add method on `WorldQuery` to apply deferred mutations authored by ecoskey
`EntityWorldMut` methods do not automatically overwrite `Relationship` components authored by urben1680
Fix uneven heading levels in pull_request_template.md authored by kpreid
doc improvement for StateTransition authored by Wuketuke
Fix SubStates with multiple source states not reacting to all source changes authored by mgi388
bevy_solari: RIS for Direct Lighting authored by JMS55
Benchmark replacement of immutable components with hooks authored by CrushedPixel
Prevent `AnimationGraph` from serializing `AssetId`s. authored by andriyDev
Exposes `Observer`'s system's name authored by hukasu
Make observers metadata / storage publicly visible authored by alice-i-cecile
Add more PreviousViewData authored by JMS55
Allow users to fix glTF coordinate system imports authored by janhohenheim
Remove cursor caching authored by janhohenheim
Restructure the logic in `AssetServer::load_internal` to avoid using weak handles. authored by andriyDev
rename Transform::compute_matrix to to_matrix authored by atlv24
Clarify GlobalTransform::to_isometry doc authored by atlv24
rename GlobalTransform::compute_matrix to to_matrix authored by atlv24
Adding TextOutline component to add outlining by upstreaming implemen… authored by TotalKrill
Issues Opened this week
Include shared docs in both trait and derive documentation authored by alice-i-cecile
Unknown lint warning spam when building with stable rust. It doesn't seem like there's any way to conditionally enable lines in the cargo.toml when only using nightly though? authored by alice-i-cecile
Occlusion culling is culling objects erroneously on some hardware authored by RosyArts
Missing migration guide for `WINIT_WINDOWS` authored by IceSentry
`ComponentId` system param authored by lotus128
Move `bevy_text`'s `text2d` module into `bevy_sprite` authored by ickshonpe
`TextShadow` doesn't work with `Text2d` authored by djeedai
Don't automatically derive BundleFromComponents with Bundle authored by alice-i-cecile
Access serde attributes with reflection authored by Leinnan
Add a despawn_children method authored by Freyja-moth
AnimatableProperty trait's get_mut signature should access to resource authored by guzuomuse
build-wasm-atomics job spuriously fails in CI: function `check` is never used authored by alice-i-cecile
Observers don't respect the "stack nature" of commands authored by Pascualex
macos26 authored by cherish-ltt
Statically designate event targets authored by alice-i-cecile
Storing extra data at relationship components is too easily lost authored by urben1680
Observers cannot be retargeted after spawning authored by alice-i-cecile
ImageMeasure does not apply aspect_ratio to max width/height authored by UkoeHB
StateTransition schedule is inconsistent authored by Wuketuke
SpotLight + Camera on the same entity causes incorrect culling authored by NickTheFox99
Objc2 framework panics on MacOS 26 developer beta authored by realhackcraft
Directional lights ignore walls on WebGPU when the camera is too parallel to them authored by janhohenheim
Bevy caches invalid cursor settings authored by janhohenheim
Observers panic when an earlier observer despawned the entity authored by janhohenheim
texture_atlas.rs formatting authored by iizudev
Allow decals to only affect meshes on the same render layer authored by chendaohan
Handle unsuccessful add and remove of entities in `RelationshipTarget` authored by Dampfwalze
Add new GLTF character model and loader functionality #19509 authored by SachinSSh
Add an extension trait for `TypeIdMap` to query values using generics authored by Shatur
Split the `Window` component for more granular change detection authored by alice-i-cecile
Document how propagate(false) works authored by viridia