
bevy_tnua refactor, POLDERS over time, and real-time settings
2026-01-05
With the bevy 0.18.0-rc.2 out, main is fully into the 0.19 development cycle!
bevy_tnua sees a major, breaking refactor with some exciting benefits while POLDERS shows off progress over the years from a small demo to a full game.
Exofactory also shows off their real-time UI solution with an accompanying blogpost!
Solari

New Solari examples and improvements landed this week with #22295 introducing a new "many lights" demo and #22313 improved the emissive rendering on smooth glossy surfaces.
Transform and Visibility improvements
Transform propagation got another speed boost in #22281 and visibility systems got their own boost in #22226.
Gaussian Blur
Bevy has a gaussian blur implementation that was split out into a re-usable module in #22249.
Drag and Drop Picking

#22214 adds a new drag and drop example in the picking category.
More UiDebugOverlay features

The ui debug overlay is a useful tool for debugging ui layout issues. In #21931 this overlay gained more functionality, such as being able to show clipped sections of UI nodes and scrollbar outlines.
Font Families
A swath of font features were implemented in #22156 including enabling the selection of fonts by name or Handle.
Runtime Mip generation
#22286 brings the ability to invoke Bevy's implementation of SPD (AMD FidelityFX single-pass downsampler) to generate individual mips at runtime. This can be important for runtime rendering effects like portals which couldn't be built ahead of time. Pre-prepared mipmaps are still useful and preferred for usecases that can take advantage of them.
A new example shows off the runtime mip generation.
cargo run --example dynamic_mip_generation

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

Snow City
showcase
An arcade driving game made for the 2025 Winter Game Jam (Theme: "Iced") over the past couple of weeks. The gameplay idea is to gain points by plowing roads and helping NPCs reach their destination.
Source is available on Codeberg and is playable on Itch

Abysm
showcase
Abysm, a cosmic horror puzzle game, got a revamped Steam page, finalized the last few chapters, and more in preparation for a March 2026 release.

Real-time Settings UI
showcase
Exofactory shipped an overhaul of their settings UI which takes an ECS-centric approach. Sourcing data from a config.toml, the data is represented in-game as a series of Resources and the game will react in real-time to settings changes.


POLDERS Aesthetics progress
showcase
A showcase (and updated Steam page) of POLDERS' progress over the past two years: from townscaper-style test project to a full standalone game.

Sprite Fusion
showcase
A Bevy plugin demo for Sprite Fusion, a custom web-based tilemap editor with multiple engine integrations. Supports auto-tiling, collision layers, and custom tile data attributes.

Procedural Roads
showcase
Procedural roads for a work in progress hex based city builder. A road mesh is dynamically being generated based on the neighboring tiles and the possible connections. The system supports variable lane counts/widths. Shading is done via an extended material that receives the lane data for the intersection so that it can calculate where to draw crosswalks/lines.

Crates
New releases to crates.io and substantial updates to existing projects

bevy_cuda
crate_release
bevy_cuda is an experimental crate for doing interop with CUDA.
The example here runs the following kernel.
const ANIMATE_KERNEL: &str = r#"
extern "C" __global__ void animate_colors(
unsigned char* data,
int width,
int height,
float time
) {
int x = blockIdx.x * blockDim.x + threadIdx.x;
int y = blockIdx.y * blockDim.y + threadIdx.y;
if (x < width && y < height) {
int idx = (y * width + x) * 4;
float fx = (float)x / (float)width;
float fy = (float)y / (float)height;
float r = 0.5f + 0.5f * sinf(fx * 6.28f + time);
float g = 0.5f + 0.5f * sinf(fy * 6.28f + time * 1.3f);
float b = 0.5f + 0.5f * sinf((fx + fy) * 3.14f + time * 0.7f);
data[idx + 0] = (unsigned char)(r * 255.0f);
data[idx + 1] = (unsigned char)(g * 255.0f);
data[idx + 2] = (unsigned char)(b * 255.0f);
data[idx + 3] = 255;
}
}
"#;

neko-maid
crate_release
neko-maid is an asset-based UI tool with a custom markup language. Being asset-based enables hot-reloading.
bevy_swarm_sync
crate_release
bevy_swarm_sync is an experimental data synchronization across the Internet. bevy_swam_sync enables you to create games and apps that share synchronized state using p2p network, no server infrastructure necessary. It is experimental, and has only been run on Linux, so that's the only platform that is recommended, no other is supported.
bevy_fontmesh
crate_release
bevy_fontmesh: Pure Rust 3D extruded text. The crate handles extrusion, multiline layout, anchoring, and you can spawn per-character entities if you want to animate them individually
bevy_fps_controller
crate_release
bevy_fps_controller is a quake-style player movement crate that recently updated to used FixedUpdate and interpolation.
bevy_query_observer 0.2
crate_release
bevy_query_observer provides observers that trigger when an entity starts or stops matching an archetypcal query.

bevy_water
crate_release
bevy_water got its 0.18 release candidate release, and fixed some long-standing bugs in the water quality (which have also been backported to previous bevy versions of the crate)
bevy_tnua: Schemes
crate_release
bevy_tnua sees a major release and refactor. This is a very big, very breaking change. The core of which is switching from storing dynamic trait objects in the components to defining a static control scheme. The main benefits of this change are:
- Easier to inspect the currently running action (which is important for environment actions) because it is now done with
matchon an enum instead of downcasting trait objects. - The configuration is now an asset, which means you can load it from a file.
- The entire controller struct is now serializable (opt-in behind a feature flag, and you also need to opt-in in the derive macro) - this means that networking libraries can now synchronize it between machines.
- The sensors are now defined by the basis - which opens the door for supporting vehicles in the future.
- The user control systems no longer need to run in the same schedule as Tnua's internal systems and the physics backend.
Refer to the migration guide for technical information about what you need to change.
fixing docs with scraping examples enabled authored by mockersf
Fix separate layers with lines and joints authored by yh1970
Fix 3d gizmo pipeline when atmosphere present authored by mate-h
bevy_input_focus: don't add nothing when no input is enabled authored by mockersf
fix decal index selection in light textures authored by ChristopherBiscardi
Make `update_tilemap_chunk_indices` public authored by apekros
Remove `*_api` feature from `2d` and `3d` authored by Shatur
Solari: Enable directional light soft shadows authored by JMS55
Solari: Disable world cache jitter authored by JMS55
Add comments explaining why the reloading code is so complex. authored by andriyDev
Solari: Fix bug with wrong viewport size under DLSS authored by JMS55
Virtual geometry 0.18 migration guide authored by JMS55
Fix: Filter for currently focused item’s target camera during directional navigation authored by kfc35
Specular GI MIS authored by SparkyPotato
0.18: Solari release notes authored by JMS55
gltf extension handler release notes authored by ChristopherBiscardi
Small code size improvement authored by goodartistscopy
Solari: Specular path spread heuristic authored by JMS55
Add support for SSR on web authored by mate-h
`DirectionalNavigationMap` no longer caches `AutoDirectionalNavigation` node connections authored by kfc35
Always present at least once for new windows. authored by tychedelia
bevy_render: dropped texture view is not Drop in wasm authored by mockersf
Bevymark 3D authored by aevyrie
Solari: More examples, fix emissive authored by JMS55
use zizmor to lint GitHub actions authored by mockersf
Fix many_foxes animation controls authored by mockersf
Solari: Fix indirect shadows authored by JMS55
Rename `asset_paths` to `module_path_to_asset_id`. authored by andriyDev
Optimize transform propagation for dynamic scenes authored by aevyrie
Add toggle function for virtual time authored by GitGhillie
Fix Updated images occasionally never displayed on materials by ensuring correct ordering of system sets authored by ItsDoot
Move the Gaussian blur shader function into a reusable library. authored by pcwalton
Make `LoadContext::finish` add all dependencies, and avoid a second texture load in GltfLoader. authored by andriyDev
Add drag and drop picking example authored by apekros
New `UiDebugOverlay` features authored by ickshonpe
Fix `MaterialExtension::enable_shadows` and disable shadows for forward decals authored by beicause
Adds ability to pause in gizmo examples authored by kfc35
Provide a mechanism for applications to invoke the single-pass downsampler. authored by pcwalton
Add command line option to choose a starting scene in the `testbed_*' examples authored by panpanpro888
`AutoNavigationConfig::max_search_distance` fix authored by ickshonpe
Directional navigation uses edge to edge distance not center to center authored by apekros
add gamepad to bevy_gilrs feature flag authored by it-me-joda
`bevy_dev_tools::fps_overlay` elide default font authored by ickshonpe
make `Archetype::component_index` pub authored by eugineerd
Fix: Closes shapes for 3d gizmos authored by kfc35
Use toggle function to pause/unpause authored by GitGhillie
remove 0.18 release content authored by mockersf
fix testbeds with argh in wasm authored by mockersf
Optimize Visibility Systems authored by aevyrie
Make bevy_winit::converters module public authored by laundmo
Remove the need to import `SpawnRelated` to use `related!` macro authored by ItsDoot
Update cosmic-text to 0.16 authored by ickshonpe
use seeded rng for dynamic_mip_generation authored by mockersf
Fix typo in doc comment [minor] authored by HQ2000-Rust
Fix flickering on macOS 26 when tracy is enabled authored by aevyrie
Misc solari cleanup authored by JMS55
Minimal Font Families, Font Queries, Collections, System Fonts, Stretch, and Slant support authored by ickshonpe
derive Reflect on FpsOverlayConfig and FrameTimeGraphConfig authored by mirsella
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
fix: add unwind safety to `resource_scope` authored by joseph-gio
compute-shader mesh generation example authored by ChristopherBiscardi
Parallel Mesh Collection authored by aevyrie
Per entity render pass exclusion (part 1 of 2) authored by rlneumiller
Parallel GPU buffer writes authored by aevyrie
perf: remove an unnecessary buffer copy from WASM asset loading pipeline authored by joseph-gio
Deduplicate solari realtime bindings authored by SparkyPotato
Add render diagnostic functions for reading from a buffer authored by JMS55
Fix: Allow non_camel_case_types on derived SystemParamBuilder generics authored by Fachep
Update Automatic Directional Navigation Release Notes (due to dependency rearrangement) authored by kfc35
`bevy_ui_debug` scrollbars inset fix authored by ickshonpe
Reorganize some of `bevy_reflect`'s exports into their respective modules authored by LikeLakers2
Remove `bevy_camera` and `bevy_ui` deps from `bevy_input_focus`, no feature flag needed authored by kfc35
systemstate support commands track location authored by MushineLament
Solari: Light leak reduction and stochastic WC update authored by JMS55
Clarify glTF coordinate conversion documentation authored by greeble-dev
Fix panic in mesh picking when a mesh is `RENDER_WORLD` only authored by greeble-dev
make webgl2 padding consistent authored by atlv24
clean up shader cache errors authored by atlv24
Improve code examples in 0.18 migration guides authored by BD103
Issues Opened this week
`bevy_input_focus`: No example demonstrates how to use the `DirectionalNavigationMap` and automatic navigation together authored by ickshonpe
`bevy_input_focus`: Debug navigation visualization authored by ickshonpe
Document what differentiates IoTaskPool and AsyncComputeTaskPool beyond basic usage authored by laundmo
"Handlers section of EntityClonerBuilder" is missing authored by rdrpenguin04
Regression: bevy_winit now pulls in all of bevy_ui authored by brianreavis
Re-organize `bevy_reflect`'s exports to de-clutter the crate root authored by LikeLakers2
Add labels for `scene_spawner_system` and `scene_spawner` authored by Shatur
Input features may not be set up correctly authored by alice-i-cecile
"Type annotations needed" when using system piping to a system that returns a Result authored by nstoddard
Hotpatching not works for workspaces authored by mentalrob
high virtual time relative speed kills performances authored by mockersf
Invalid link - cannot find `DlssInitPlugin` (mentioned at `DefaultPlugins`) in docs authored by HQ2000-Rust
Unified Bevy User Interface authored by viridia
Add glTF coordinate conversion for nodes authored by greeble-dev
0.18.0-rc.2 WASM "The build mesh uniforms pipeline wasn't ready" log spam authored by logankaser
Investigating `BufferVec::push()` performance improvement authored by goodartistscopy
`Combine` trait example is out of date authored by BD103
0.17.3 Sprite picking behaves weird with more than one camera authored by guysv









