
Bevy 0.18 Release Candidate, Metrics Dashboard, and more
2025-12-15
Bevy 0.18-rc.1 is out! The release train is on track for this release, occurring about 3 months after the last release and as usual anything that is ready on main has been included. There is no migration guide collected onto a single page yet, so if you'd prefer to wait for that you can expect it fairly soon.
The Bevy Metrics Dashboard is now publicly available at metrics.bevy.org! Announcement available in the Bevy Discord.
What does it show?
- Stats about Bevy compilation, like build time and binary size
- Stats about Bevy Stress Tests, with frame duration, and CPU/GPU usage
- Historical trends for all those stats
- More to come! Benchmarks should be next
This effort is funded by the Bevy Foundation. More funding means more things like this!
Infrastructure for Portals and Mirrors

#13797 implements two requirements for mirrors and portals: PerspectiveProjection::near_plane for customizing the near plane clipping and Camera::invert_culling which inverts the front face setting for that camera.
These together power the new mirror example, which shows a complete working mirror putting all the pieces together.
Clustered Decal: normal, metallic-roughness, and emissive maps

#22039 increases the number of textures associated with each clustered decal from 1 to 4, which are intended to be used as normal, metallic-roughness, and emissive maps, but can also be taken advantage of by custom materials to be used in different ways.
A new example, clustered_decal_maps, was added showcasing the new support.
Further support for more decals in a scene was added by #22028 which increases the limit to 1024 decals if PARTIALLY_BOUND_BINDING_ARRAY in wgpu is available.
Gizmo Joints
#22085 made it so that primitive gizmos draw their first joint, which closes the shapes nicely.
Before:

After

Set filters and address_mode on Image load
As of #22042 it is now easier to set filters and address_modes when loading an image. This is convenient for repeating textures that can be sampled outside of their uv 0-1 bounds and for taking advantage of anisotropy, which requires linear filters.
asset_server.load_with_settings(
"floor_graph_base_color.png",
|settings: &mut ImageLoaderSettings| {
let descriptor = settings
.sampler
.get_or_init_descriptor()
.set_address_mode(ImageAddressMode::Repeat)
.set_filter(ImageFilterMode::Linear);
}
),

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

City Generator
showcase
This city generator was part of a student paper submitted a few months ago and is now open source.

INSANIO Steam Page
showcase
INSANIO is an autobattler where you send misfits into vehicular combat. Your job is to prepare them, deploy them, watch them struggle and finally watch them die or win in massive explosions.

A Dioxus/Bevy Editor
showcase
Viewport and headless game rendering working in Dioxus desktop app.

3D light distribution viewer
showcase
A 3d light distribution viewer. Visualize real photometric data from EULUMDAT/IES files – the same data lighting manufacturers provide. Shows actual light color and basic CRI (EULUMDAT only – IESNA doesn't include this by default).
Available on the web

Screen Annotations
showcase
a screen annotation application (Wayland only - only tested on Linux, no BSD). Direct integration with wayland. Not (yet?) open source. There are 3 tools, a pen, a marker (opacity) and an eraser. The tool configuration (tool size, color wheel) can be toggled and is initially invisible. The application starts when the user presses mod+a, so it's always available.


png level generation
showcase
Semi-procedural png based level generation.
the idea is to draw simple sketches as 192x192 resolution. Tiles are based on specific colors of pixels in the sketch and each 192x192 chunk can have transitions to other chunks on left/right/up/down. Random chunks get combined when you first start the game, generating a different world each time. Each chunk also has 50% chance to be horizontally flipped for more variety and can get assigned a random biome (in this example it rolled a "tundra" biome)

Signs of Danger
showcase
Signs of Danger is a falling sand physics roguelite that has been in development for the past 2 years. This project uses Bevy crates like (color, math, reflect, etc) but this game's windowing/graphics abstraction is Macroquad, not Bevy.
Drop onto dangerously reactive alien planets where every pixel is physically simulated. Craft wild guns and abilities that melt, burn, freeze and blow up hostile creatures or destroy entire levels - solo or with up to three friends in chaotic 4-player online and couch co-op.

Fish Inverse Kinematics
showcase
A fish inverse kinematics implementation inspired by this video.

Crates
New releases to crates.io and substantial updates to existing projects
glizmo
crate_release
use bevy gizmos in any context. no more need for systems or system parameter juggling, just
fn whatever() {
glizmo::sphere(Vec3::splat(10.0), 1.0, PURPLE);
}
bevy_event_chain
crate_release
Easy trait-like behavior using observers and relations.
Relationship targets ("parents") initiate a chain of events that go one-by-one through their relationships ("children") before returning to the target. This is useful for acting as one mutable event, like equipment progressively modifying stats of attacks when they happen.
bevy_mod_imgui 0.8.0
crate_release
bevy_mod_imgui is a Dear Imgui integration for Bevy.
New in this 0.8:
- Added support for docking windows
- Updated for Bevy 0.17
- Fixed graphical glitches on startup

bevy_old_tv_shader
crate_release
An "old TV" post-processing effect, updated for Bevy 0.16 and Bevy 0.17.
Bevy Simple Screen Boxing v0.2.1
crate_release
bevy_simple_screen_boxing is a crate that implement Camera Boxing/Aspect Ratio Masking to make Letterboxing/Pillarboxing pretty easy.
This update adds in the ability to Nest CameraBox structs, leveraging Bevy Relationships. This allows you to create all sorts of different combinations, which can be useful in specific circumstances. The Struct NestedWithin allows you to nest a singular CameraBox within another (although, that can have a CameraBox nested within it). Each CameraBox will be applied from the outside in.

bevy_notify
crate_release
bevy_notfy is a reactivity(ish) crate.
It uses relationships to define monitors who then watch for changes/removals/additions of specified components on entities.
Fix unsound `&EntityMutExcept` to `FilteredEntityMut` conversion authored by ItsDoot
Remove `getrandom` dependency from `bevy_platform`. authored by kpreid
Fix the doc test for WebAssetPlugin authored by andriyDev
enable easier modification of image samplers in image loaders authored by ChristopherBiscardi
add missing `Iterator::size_hint` overrides, most of which cause `ExactSizeIterator::len` to panic authored by JonasJebing
Update size and metrics after `set_rich_text` in `TextPipeline::update_buffer` authored by ickshonpe
compute the text buffer size during layout updates authored by ickshonpe
Release the asset infos lock before acquiring the file transaction lock. authored by andriyDev
`TextLayoutInfo::clear` authored by ickshonpe
remove newline between `CursorIcon` struct and its attributes authored by databasedav
Update meshlet asset URL authored by JMS55
Replace `BTreeMap` with `IndexMap` for stored `ScheduleBuildPass`es authored by ItsDoot
Add `Observer::with_components` authored by Shatur
Fix comment in `pointer_events` authored by ickshonpe
Slightly improve the window settings example authored by rmsthebest
Solari: Improve specular GI authored by JMS55
Solari: Misc improvements authored by JMS55
Fix flaky asset test, adds todo for a real fix authored by kfc35
anchor layout example authored by ChristopherBiscardi
Prevent WebGL builds from crashing on startup when using FpsOverlayPlugin authored by it-me-joda
Fix macOS panic when exiting from exclusive fullscreen authored by natepiano
clear animation evaluator stack authored by robtfm
Implement world.trigger_event remote method authored by Lancelotbronner
Adds UIDebug Overlay centered scene to examples/testbed/ui authored by kfc35
get_components_mut authored by hymm
Add optimized is_in_half_space_identity, contains_aabb_identity, and intersects_obb_identity authored by Saratii
UI material z-offset override authored by ickshonpe
:bug: Fixes PropagateStop and PropagateOver authored by ekwoka
Increase the number of supported clustered decals if the `PARTIALLY_BOUND_BINDING_ARRAY` `wgpu` feature is present. authored by pcwalton
Skip picking for UI nodes if there is no pointer authored by ickshonpe
Add flag to force MSAA writeback authored by tychedelia
DespawnOnExit / DespawnOnEnter fix log spam authored by Lyndon-Mackay
Add vertical slider support to bevy_ui_widgets slider authored by DuckyBlender
Fix shader compilation fail when using visibility range authored by newDINO
Support non-sRGB image formats for `RenderTarget::Image` authored by bonsairobo
remove empty_bind_group_layout authored by ecoskey
Use RayMap and RenderLayers in bevy_sprite/picking_backend authored by bloopyboop
Simplify `ui_picking`'s camera search authored by ickshonpe
Implement `Clone` and `Copy` for bevy_ptr's `ConstNonNull` for parity with `NonNull` authored by panpanpro888
Solari: More accurate ReSTIR DI resampling authored by JMS55
Add support for normal maps, metallic-roughness maps, and emissive maps to clustered decals. authored by pcwalton
Fix undefined behavior in screenshots on WASM authored by kristoff3r
Use insert_debug_marker instead of debug_group authored by IceSentry
Make default state change trigger self state transitions authored by janhohenheim
Implement the infrastructure needed to support portals and mirrors. authored by pcwalton
Remove `bevy_ptr::dangling_with_align()` and inline it authored by BD103
Change a function system to be exclusive authored by hymm
Fix immediate nested loaded assets not loading their dependencies. authored by andriyDev
Fix skybox example crashing in WASM by skipping unsupported TAA authored by it-me-joda
Feathers: add override cursor authored by rudderbucky
Upgrade to wgpu 27 and associated crates authored by JMS55
Add a new `almost_finish` method for `Timer` with immediate first `tick` action authored by Rajveer100
:bug: Fixes Warning regression in Propagate authored by ekwoka
increase morph targets to 256 authored by robtfm
Make the ui_surface module public. authored by IQuick143
Remove queue text authored by ickshonpe
Fix scene viewer animation switching authored by greeble-dev
Avoid reading the entire asset into memory during asset processing. authored by andriyDev
Add `MeshPipelineKey::LIGHTMAPPED` as applicable during the wireframe pass authored by mgi388
Add MeshTag to array_texture example to demonstrate layer selection in shader authored by mgi388
fix gltf path texture usages authored by robtfm
UI per text section picking authored by ickshonpe
More flexible SystemInput authored by ecoskey
Make Gizmos::rect_2d and primitive_2d draw the joint of the first corner of closed shapes authored by uckelman
Fix lints after Rust 1.92 authored by kristoff3r
Fix incorrect blake3 version bound authored by kristoff3r
text2d change detection fix authored by ickshonpe
Revert "Support non-sRGB image formats for `RenderTarget::Image`" authored by beicause
Fix wrong termination for asset hash reads. 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
Visibility for retained gizmos authored by blamelessgames
`spec_v2`: migrate Skybox authored by ecoskey
`spec_v2`: migrate CAS authored by ecoskey
Refactor window creation logic authored by kristoff3r
Add 64 bit Dir3 struct authored by stevehello166
Global Gizmos authored by atlv24
Allow `Reader` to implement `AsyncSeek` and provide a way for loaders to "ask" for a compatible reader. authored by andriyDev
Issues Opened this week
Bevy fails to use any fallback audio driver when ALSA compatibility is not present. authored by radiantgurl
Multiple locations in the github workflows point to `validation-jobs.yml` as the location for the cache restore keys, but it was moved to `update-caches.yml` authored by hukasu
`specialized_material_pipeline_cache` grows forever, causing performance to greatly degrade over time authored by Satellile
`Material` should include brief descriptions about what each shader is used for authored by Freyja-moth
Figure how to expose unsafe experimental features from gpu authored by mockersf
Bevy winit::Window hide/show not working authored by WilstonOreo
Triggering an Event from an exclusive system fails silently authored by lucidBrot
Draw joints for closed shapes without redrawing the first line segment authored by uckelman
Required components should support caller tracking (track_caller). authored by MushineLament
`ConditionalSendStream` to match `ConditionalSendFuture` authored by nuzzles
Bevy uses wrong asset folder path when running from exe authored by Saratii






