
Atmosphere Occlusion, Popover widgets, and window-breaking rendering
2025-11-03
Two interesting ECS PRs landed this week. One was a performance-related PR enabling dense iteration for FilteredEntity(Ref|Mut) in more cases and the other is pre-requisite work for Relationship-related query support: Support non-archetypal QueryData.
Improvements to testing infrastructure for FixedTimesteps, two new standard widgets, and more also landed.
The community comes through with a 1.5 year old 4x game, 4 player p2p networking, as well as more research-level work implementing new 2d lighting implementations and out-of-window rendering.
Atmosphere occlusion and PBR shading

#21383 introduces the occlusion of directional lights by the atmosphere. Volumetric shadowing is supported through using FogVolume.
Easier FixedTimestep in Tests
#21705 introduces a new TimeUpdateStrategy that causes time to increment by the fixed timestep when calling app.update. This is useful when testing code that relies on a FixedTimestep.
// Now `app.update()` will run the fixed loop exactly once!
app.insert_resource(TimeUpdateStrategy::FixedTimesteps(1))
syn::Member in macros
#21678 cleans up macros by using syn::Member. This might be a good PR to check out if you're interested in authoring real world macros.
ImageLoaderSettings::array_layout
With TilemapChunk using 2d texture arrays, it is becoming more common for the ecosystem to use these textures. #21628 adds a setting to ImageLoaderSettings to enable this conversion at asset load time.
let array_texture = asset_server.load_with_settings(
"textures/array_texture.png",
|settings: &mut ImageLoaderSettings| {
settings.array_layout = Some(ImageArrayLayout::RowCount(4));
},
);
Standard Widgets: Popover and Menu

#21636 adds a Popover and Menu widget to the experimental bevy_ui_widgets.

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

Crates
New releases to crates.io and substantial updates to existing projects
Bevy Enhanced Input 0.19.1
crate_release
An input manager for Bevy, inspired by Unreal Engine's Enhanced Input.
0.19.1 introduces:
Comboinput condition to bind a sequence of actions. You can use it for things like double-clicks or Vim-like shortcuts.Pulse::with_initial_delayandPulse::initial_delayto add a special delay before the first repeat. This can be used to implement key repeat.
and a reworked quickstart guide
bevy_firework v0.8.0
crate_release
bevy_firework is a CPU-driven particle engine.
0.8 brings Particle textures, nested emission, PBR emissive colors, and more.
bevy_assets_reflect
crate_release
bevy_assets_reflect is an asset loader for any type that implements Reflect and Asset.
bevy_seedling v0.6.0
crate_release
bevy_seedling is a sprouting integration of the Firewheel audio engine for Bevy. It's powerful, flexible, and fast.
v0.6 is compatible with Bevy 0.17 and Firewheel 0.9.
motiongfx v0.1.0-rc.1
crate_release
MotionGfx is a backend agnostic procedural animation framework built on top of bevy_ecs for managing animation actions. It is highly inspired by projects like Manim and Motion Canvas!
Alongside MotionGfx, bevy_motiongfx v0.1.0-rc.1 was also released.
bevy_typst_textures v0.3.0
crate_release
bevy_typst_textures, a crate for generating rasterized textures from .typ files, has been updated to support Typst 0.14.
bevy_ingame_clock v.0.2.0
crate_release
A plugin that provides an in-game clock system with date/time tracking, configurable speed, sending events on time based intervals, and flexible formatting.
0.2.0 brings support for custom calendars, such as fantasy or sci-fi calendars.

bevy_feronia
crate_release
An emerging crate with scattering tools and materials for foliage. This update showcases simulated subsurface scattering on the material extension and rounded and analytical normals for instanced grass.

Devlogs
vlog style updates from long-term projects
Teddy Bear Trash Compactor
devlog
some musings from a recent experiment writing a dialog system for bevy
make bevy_input_focus dep on bevy_picking optional authored by atlv24
update linux dependencies authored by dearfl
Don't use `[!Default; 0]: Default` impl authored by WaffleLapkin
Virtual geometry: Upgrade deps, allow 256 vertices authored by JMS55
Fix(examples): improve async examples to showcase good patterns authored by syszery
fix path when sending screenshots to pixeleagle authored by mockersf
Add viewport_to_ndc authored by IceSentry
Improve tests using broad queries (`Query<Entity>`, `Query<()>`, etc) authored by Trashtalk217
Fix example file paths in doc comments authored by chocolacula
Text strikethrough and underline colors authored by ickshonpe
Fix GLTF files being broken when loaded from custom asset sources. authored by andriyDev
Standard widgets: Popover and Menu. authored by viridia
Support non-archetypal `QueryData` authored by chescock
Remove `line_height` from `TextFont` authored by ickshonpe
Added SSAO support on WebGPU, with R32Float fallback. authored by diyu-motif
Clarify `from_viewport_and_override` logic authored by Breakdown-Dog
Improve Frustum struct readability authored by Breakdown-Dog
Atmosphere bindings cleanup authored by ecoskey
Strikethrough release note clean up authored by ickshonpe
Add a setting to `ImageLoader` that calls `Image::reinterpret_stacked_2d_as_array` authored by grind086
`RunGeometry` authored by ickshonpe
Rename the `strikethrough` example to `strikethrough_and_underline` authored by ickshonpe
Cleaner macros utilizing syn::Member v2 authored by Bleachfuel
Add tests for asset processing under hot reloading and across asset sources. authored by andriyDev
Text2d underline shadows fix authored by ickshonpe
Change default tile chunk layout authored by jamescarterbell
Allow dense iteration for FilteredEntity(Ref|Mut) in more cases. authored by chescock
bevy_reflect: define expected type paths as strings in tests authored by cart
remove `level` from `LOD level` in comment / change to `Dither Level` authored by NicoZweifel
Atmosphere occlusion and PBR shading authored by mate-h
Update heapless requirement from 0.8 to 0.9 authored by mnmaita
Make it easier to write tests involving fixed timesteps authored by janhohenheim
correct comment typo authored by baozaolaoba-top
Fix asset processing tests being flaky from hot reloading. authored by andriyDev
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
WIP: FSR3 authored by cwfitzgerald
LRU cache implementation authored by viridia
Instant fallback fix for aarch64 authored by chocolacula
Add `From` for `Hashed` authored by Shatur
Invert the y-axis for the local coordinate space in `extract_text2d_sprite` authored by ickshonpe
documented run_system_cached issue#21617 authored by DylanD42
Documentation mentionting chained .run_if(a).run_if(b) does not short-circuit, in contrast to run_if(a.and(b)) authored by ZackaryRippee
Document `SystemState` + exclusive system patterns authored by menochs1
Issues Opened this week
Support systems with `In` parameters in schedules authored by eira-fransham
Animation blending example authored by Khanoto
Warning B0004 (“InheritedVisibility”) when loading a glTF exported from Blender with shape keys authored by ThibaultEbroussard
`bevy_text` tracking issue authored by ickshonpe
Follow-up Automatic Directional Navigation for input focus authored by jbuehler23
Detect immediate asset path loading cycles to prevent stack overflows authored by shanecelis
Flip coordinates along the Y-axis for Text2d rendering authored by ickshonpe
Any UI node blocks entities for picking with `MeshPickingSettings.require_markers` set to `true` authored by Temak1
Improve Query-related traits for developers authored by cBournhonesque
Atmosphere example broken on Webgpu authored by mate-h
Ghost Nodes produce warnings because of UiTransform authored by viridia








