
Bevy 0.16 is out now!
2025-04-28
Bevy 0.16 is out now!
Checkout out the official release notes, my unofficial Bevy 0.16 video, as well as the 0.15 to 0.16 migration guide.
Expect a slight lull before things pick back up on the Pull Request merge queue for 0.17 and enjoy the new Bevy 0.16 features for a bit :D.
Many ecosystem crates have participated in the release candidate process and thus already have 0.16 compatible versions on crates.io. Some maintainers wait for the stable release so give them some time if they don't have one out yet (much of the ecosystem is volunteer-based, after all) or give them a hand and submit a PR!
There will be a Bevy game jam for 0.16 although official dates have not been announced. If you're trying to plan for the jam, loosely consider the first week of June but wait for the official announcement to make any concrete plans.
remove_if
#18899 introduces a new EntityCommands::remove_if
function which can be used in a typical chain of entity commands.
fn remove_combat_stats_system(
mut commands: Commands,
player: Res<PlayerEntity>
) {
commands
.entity(player.entity)
.remove_if::<(Defense, CombatBundle)>(|| !player.is_spectator());
}
``

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

Triangulated Coastlines
showcase
Coastlines built using adaptive iteration delaunay triangulation. Resolution increases at boundary points and spade is used in the implementation.

3d Piano Game
showcase
A 3d piano game made with bevy_kira_audio and deployed on the web. Mouse input, keyboard input, midi keyboard input & midi file playback implemented.

Hair Computer Shader Proof of Concept
showcase
An attempt at a compute-shader based rasterizer described in Robin Taillandier & Jon Valdes - Every Strand Counts: Physics and Rendering Behind Frostbite’s Hair (YouTube](https://www.youtube.com/watch?v=ool2E8SQPGU). The shading model is the "full" Weta d'Eon model.The asset in the video has >160k strands with >6m segments.

Finding Number
showcase
Finding Number is a game aimed at children to enable learning how to count. aeronet was used for LAN-style networking.

Emulator and ASM visualizer
showcase
An emulator/assembly visualizer for a custom cpu architecture. There's a 32x32 screen that you can write to using a special instruction. The goal of the project

Bouncing Projectiles
showcase
A perk for a shooter game that makes projectiles bounce to nearby enemies. The example makes use of bevy_ballistic which is a fairly recent crate release for calculating projectile launch angles.

Realistic Ocean Shader
showcase
A work-in-progress attempt at building a realistic ocean shader. The end goal is to build something that approximates the Sea of Thieves water. The demo here is a 3x3 grid of ocean chunks representing about 400m of waves.

Abalone
showcase
Abalone is a two-player abstract strategy board game and this is an implementation in Bevy using Avian Physics, bevy_hanabi, and some custom WGSL.
Its currently available for download on Windows

Dark Wisp Defense
showcase
Dark Wisp Tower Defense has been open sourced while the author's focus is elsewhere so that people might be able to make use of it as a learning device. The development thread (linked from the Discord post) includes the development progress since November 2024 and a YouTube video shows off the gameplay.

Crates
New releases to crates.io and substantial updates to existing projects
bevy_picking_state_machine v0.1.0
crate_release
bevy_picking_state_machine is an opinionated global state machine for bevy_picking
that serves as a drop in replacement for PickingInteraction
, ButtonInput<MouseButton>
and Window::pointer
.

bevy-tnua 0.23
crate_release
bevy-tnua is a floating character controller.
0.23 brings a new obstacle radar which can be used to implement wall sliding, wall jumping, and climbing.
bevy_enhanced_input 0.10 & 0.11
crate_release
It's an input manager for Bevy, inspired by Unreal Engine Enhanced Input.
0.10/0.11 enables an easy upgrade path from Bevy 0.15 to Bevy 0.16 and brings:
- A more flexible Axial preset, replacing the GamepadStick
- Introduces a Clamp modifier
no_std
support- Per-context schedule configuration (useful for networking)

bevy_cursor_kit 0.4.7
crate_release
bevy_cursor_kit lets you load cursor assets in various formats and use them as custom CursorIcons
.
0.4.7 takes advantage of new Bevy 0.16 support for texture atlases in CustomCursor::Images
, which results in supporting animated cursors.
bevy_spawn_observer
crate_release
bevy_spawn_observer provides a SpawnObserver
to add to Bevy 0.16's Spawn
, SpawnWith
, and SpawnIter
.
fn button() -> impl Bundle {
(
Button,
Children::spawn(SpawnObserver::new(|_: Trigger<Pointer<Click>>| {
info!("You clicked me!");
})),
)
}
If you're not sure what these Spawn
APIs are, check out this explainer which is also mentioned in this issue.
bevy_query_ext
crate_release
bevy_query_ext is a collection of types used to simplify how components are used in queries, by implementing bevy’s QueryData on generics.
#[derive(Component, Deref, DerefMut)]
struct WrappedBool(bool);
fn example(mut query: Query<AsDerefMut<WrappedBool>>) {
let _: Mut<bool> = query.get_single_mut().unwrap();
let _: &bool = query.get_single().unwrap();
}
bevy_aseprite_ultra 0.5
crate_release
bevy_aseprite_ultra: Hot reload aseprite animations/slices directly from binary.
0.5 brings
- Support for custom shaders.
- Asset processing. Compile aseprite files to custom format for shipping.
bevy_mod_audio
crate_release
bevy_mod_audio is most useful for adding voice chat, you just have to wire up the audio packets to and from it!
Check out the example in the git repo if you want to make use of the crate.

Skein
crate_release
Skein is a Rust crate and a Blender Addon that combine to allow inserting Components in Blender and instantiating them in Bevy when spawning glTF scenes.
bevy_skein 0.2.0 (bevy 0.16) and Blender addon 0.1.6 introduce:
- Defaults and Presets
- Use Default implementations when inserting Components and allow users to supply arbitrary presets
- Distribution as an Extension
- The bevyskein docs site now also functions as a Blender extension repository and can serve updates directly to Blender.
- The first CLI command (dump_component_data)
- The first CLI command in a series of migration tools for working with Reflection data
bevy_mod_gba
crate_release
bevy_mod_gba provides integration between Bevy and the agb crate, allowing for relatively painless GameBoy Advance development.
The game boy advance demo in the 0.16 release notes was built using the release candidate version of this crate.

Devlogs
vlog style updates from long-term projects
Bevy 0.16
devlog
A "special edition" of This Week in Bevy? 😆 0.16 release in audiovisual form by me (chrisbiscardi, the same person that puts this week in bevy together each week).

Educational
Tutorials, deep dives, and other information on developing Bevy applications, games, and plugins
don't overflow when relations are empty authored by mockersf
Fix minor typo on `bevy_ecs` example authored by rahmatnazali
Remove unused query param authored by jnhyatt
Make the example android app explicitly handle some device config change events to avoid getting the activity destroyed authored by RabadanDotDev
Create `EntityCommands::remove_if` authored by Olle-Lukowski
Update cosmic-text to 0.14 authored by kristoff3r
Fix game_of_life shader relying on Naga bug authored by k2d222
`FontAtlasSet` fixes authored by ickshonpe
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
TypeRegistrationDeserializer: allow fallback to short type paths authored by zwazel
Ice Cold Specialization 🧊 authored by tychedelia
Text background colors authored by ickshonpe
feat: implement proof of concept animated gizmos authored by RobWalt
Adopt consistent `FooSystems` naming convention for system sets authored by Jondolf
Add a method to clear all related entity to `EntityCommands` and friends authored by Brezak
Component requirements shall need either Default or to be a unit struct. authored by coolcatcoder
Fixes #18740, added the missing documentation for B parameter on Trigger. authored by mhsalem36
Fixing a crash when minimizing a window with custom viewport. (#16704) authored by RuelYasa
`When` & `WhenMut`: skip system if `Res` is missing. authored by mrchantey
Fully qualify crate paths in `BevyManifest` authored by jnhyatt
Added the additional documentation to the render_layers struct authored by goo3r
Support all wgpu surface targets authored by brianreavis
Change the default visual box for `OverflowClipMargin` to `PaddingBox` authored by ickshonpe
Add generic item support for `RelationshipSourceCollection` authored by Zeenobit
bevy_ecs: forward `type_id` in `InfallibleSystemWrapper` authored by jakobhellermann
Replace FixedBitSet with SortedVecSet in Access authored by Trashtalk217
Making so animation transition is non reliant on animation players, and transitions animation graph instead authored by Sirmadeira
bevy_reflect: Re-reflect `hashbrown` types authored by MrGVSV
bevy_reflect: Split up the `std` module authored by MrGVSV
Issues Opened this week
First-class multi-world support authored by djeedai
Allow observers to run on a timer being finished authored by Freyja-moth
iOS example does not build authored by CenTdemeern1
TextBackgroundColors authored by ickshonpe
bug: Vulkan has frame pacing/consistency issues on Windows authored by swarnimarun
HDR camera renders nothing in a standard multi-camera setup authored by janhohenheim
Camera with with multiple layers of RenderLayers causes flickering when not on main window authored by PraxTube
Removing an Entity consisting of a Camera and ContrastAdaptiveSharpening in a conditional system causes crash authored by nickdangelo97
Add `try_add_plugins` for apps a la `try_insert` for entities authored by mgi388
Rendering to texture requires RenderAssetUsages::default() authored by tigregalis
`MeshAllocator::mesh_index_slice()` mixes error and non-error codepath in return authored by djeedai
Having a custom relation and a parent/child relation at the same time causes panics on despawn authored by OwlyCode
Meshes not rendering with default GpuPreprocessing on Intel integrated GPU authored by xenon615
TAA behaves weird in multiple-camera setups authored by janhohenheim
HDR cameras "stack" their tonemapping authored by janhohenheim
Make AnimationPlayer a relationship authored by janhohenheim
Scroll list with clickable items on mobile authored by Maksych
`DepthPrepass` causes issues with transparent pixels authored by NWPlayer123
The default for `OverflowClipMargin`'s visual box should be `PaddingBox` not `ContentBox` authored by ickshonpe
Overflow does not work, instead parent nodes are resized authored by gehud
Cannot run any example in 0.16.0 authored by fleetingbytes
UI picking doesn't support rotated and scaled elements authored by ickshonpe
Responsive translation support for UI nodes authored by ickshonpe
`MapEntities` is not called for Components authored by Zeenobit
Support `#[cfg()]` in `children!` authored by janhohenheim
Make GlobalVolume change running audio authored by janhohenheim
Make AnimationTransitions component, be able to transition nodes. authored by Sirmadeira
Regression: PointLight shadows glitch out in 0.16 authored by phi-fell
Reflect is broken on `hashbrown::HashMap<K, V, FixedHasher>` authored by cBournhonesque
Light Textures RGB Option authored by Bcompartment
One to one relations not enforced authored by jnhyatt