
Upgrade to Rust 2024 and Parallel Transform Propagation
2025-03-03
This week Bevy has upgraded to Rust 2024 and made Transform
propagation parallel, improving performance significantly.
AsBindGroup
's macros gained a new data
attribute which continues bindless support.
Ship Happens and Chessmated get playable web demos while web slinging gets an interactive devlog.
no_std
Bevy's no_std support continues on with a few PRs this week.
- Allow bevy_reflect and wgpu-types features in no_std for bevy_color
- Improve bevy_reflect no_std support
- Automatically enable portable-atomic when required
GitHub Workflows: Rendering output
Bevy has a number of workflows and tools that run on PRs and merges. As of #18064, when rendering output changes a new workflow adds a comment to the PR indicating this.
The comment, as seen here includes a link to review the output
BRP Resource Methods
In #17423 five new methods were added to the Bevy Remote Protocol for operating on Resources.
bevy/get_resource
: Extracts the value of a given resource from the world.bevy/insert_resource
: Serializes an input value to a given resource type and inserts it into the world.bevy/remove_resource
: Removes the given resource from the world.bevy/mutate_resource
: Replaces the value of a field in a given resource with the result of serializing a given input value.bevy/list_resources
: Lists all resources in the type registry with an availableReflectResource
.
glTF loading refactor
The glTF loader used to live in a 2k+ line file. Now its been refactored into a number of different area-specific files in #15994, which should make it easier to dig into, understand, and maintain.
ColorMaterial::uv_transform
As of #17879 the ColorMaterial
that can be applied to a Mesh2d
allows the configuration of a transform that will warp the uv space the shader uses. This enables the scaling of the uv space and is especially useful when combined with an image sampler that repeats.
Alice's Merge Train is a maintainer-level view into active PRs and how the Bevy sausage is made.

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


Hexagonal Grid
showcase
A replication of Catlike Coding's hexagonal grid system. Bridges between the hexagons are also generated.



Ephemeris Explorer
showcase
Ephemeris Explorer is a simulator of solar systems and spacecraft flight planning tool simulating n-body physics. A number of flight planning and event simulations are displayed in the accompanying video.


bevy_baby
showcase
A desktop mascot application similar to Desktop Mate.
The source is available on GitHub


Launching Rockets
showcase
This demo shows building rockets using a custom reactivity-like framework that generates a VDOM-style tree with diffs. Any modifications to the Rocket component will automatically trigger updates to the hierarchy, guaranteeing that the hierarchy always stays in sync with the source-of-truth component.

hot-reloadable bevy_vector_shapes
showcase
hot-reloadable usage of bevy_vector_shapes as assets with a bit of scripting support thrown in


fmc.gg
showcase
fmc is a platform for creating minecraft-style games. The goal is to create something like minetest, where the entire game is defined server-side, allowing for a large range of games.

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

bevy_lunex 0.3
crate_release
bevy_lunex is a retained layout engine for Bevy entities, built around vanilla Bevy ECS. It gives you the ability to make your own custom UI using regular ECS like every other part of your app.
0.3 is a complete rewrite of the project, migrating to use Bevy's hierarchy, observers, overhauled state machines, a lunex picking backend, and more.
bevy_lunex powers Bevypunk which can be viewed on the web but is not meant to be a web demo. For the expected experience (performance-wise) compile and run the native application.

shadybug
crate_release
shadybug is a software renderer for debugging shaders. It isn't strictly speaking a Bevy crate, but it was created to debug Bevy applications.
iyes_perf_ui 0.4
crate_release
iyes_perf_ui is a convenient debug overlay you can add to your Bevy app to show diagnostics, performance metrics, and other info via bevy_ui.
0.4 brings Bevy 0.15 support and new entries to show Render CPU and GPU time, as well as some fixes, perf improvements, and a simplified API for custom entries (no more width hints).

Devlogs
vlog style updates from long-term projects
Webslinger: A Playable Devlog
devlog
A playable devlog for the web slinging browser extension we've seen in recent issues
Small `Commands` error handling cleanup authored by JaySpruce
Renamed `EventWriter::send` methods to `write`. authored by AlephCubed
Added top level `reflect_documentation` feature flag. authored by AlephCubed
Parallel Transform Propagation authored by aevyrie
don't update mesa for wasm example run authored by mockersf
Add a new `#[data]` attribute to `AsBindGroup` that allows packing data for multiple materials into a single array. authored by pcwalton
Cache opaque deferred entities so we don't have to continuously re-queue them. authored by pcwalton
Add usage notes for `register_component` authored by VitalyAnkh
Make adding a subasset label return a result for if there is a duplicate label. authored by andriyDev
Upgrade to Rust Edition 2024 authored by bushrat011899
implement UniqueEntityArray authored by Victoronz
Incorporate OIT into MeshPipelineKey used by the LineGizmoPipeline authored by mweatherley
Allow prepass to run without ATTRIBUTE_NORMAL authored by terahlunah
Fix observer/hook OnReplace and OnRemove triggering when removing a bundle even when the component is not present on the entity authored by andriyDev
Add `uv_transform` to `ColorMaterial` authored by hukasu
Adding More Comments to the Embedded Assets Example authored by Carter0
Make sprite picking opt-in authored by notmd
Add core Error to InvalidDirectionError authored by shafferchance
Remove `camera` from UiBatch authored by ickshonpe
Automatically enable `portable-atomic` when required authored by bushrat011899
Use explicitly added `ApplyDeferred` stages when computing automatically inserted sync points. authored by andriyDev
Load and convert RGB8 dds textures authored by Kanabenki
impl `Eq`/`PartialEq` for `MeshMaterial{2|3}d` authored by jnhyatt
Fix window freezing when dragged or resized on Windows authored by aloucks
Handle `TriggerTargets` that are combinations for components/entities authored by bushrat011899
Load each glTF skin at most once. authored by pcwalton
Automatically close weekly ci issue if weekly ci succeeds authored by Brezak
Prevent last_trigger_id from overflowing authored by OwlyCode
Remove unnecessary bounds on `EntityClonerBuilder::without_required_components` authored by JaySpruce
Split example runs to their own GitHub workflow authored by mockersf
Add methods to add single entity relationships authored by Brezak
do_not_recommend interned Labels authored by SpecificProtagonist
Deduplicate register_inherited_required_components authored by Soulghost
Improve cubic segment bezier functionality authored by hocop
Removes compile_fail glob pattern authored by mnmaita
Bubble sync points if `ignore_deferred`, do not ignore if target system is exclusive authored by urben1680
Fix unsoundness in `QueryIter::sort_by` authored by chescock
update CI patch for EventWriter::send deprecation authored by mockersf
BRP resource methods authored by mweatherley
`TaskPool`: Prefer task completion over executing new tasks authored by aevyrie
Refactor `bevy_gltf` authored by hukasu
Remove ChildOf::get and Deref impl authored by cart
comment on PR when example job finds changes authored by mockersf
Change `Commands::get_entity` to return `Result` and remove panic from `Commands::entity` authored by JaySpruce
Change ChildOf to Childof { parent: Entity} and support deriving Relationship and RelationshipTarget with named structs authored by Bleachfuel
Add missing `unsafe` to `entity_command::insert_by_id` and make it more configurable authored by JaySpruce
Improve `bevy_reflect` `no_std` support authored by bushrat011899
Update `ChildOf` deprecation advice to match new layout authored by greeble-dev
moved Debug from derive to impl_ptr in bevy_ptr authored by mysteriouslyseeing
chore: update compile fail test stderr files authored by RobWalt
Allow `bevy_reflect` and `wgpu-types` features in `no_std` for `bevy_color` authored by bushrat011899
Update `EntityCommands::trigger` to check for the entity's existence authored by JaySpruce
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
Update `Commands::entity` to return `Result` (and do something to `get_entity`?) authored by JaySpruce
Emphasize no structural changes in SystemParam::get_param authored by GlennFolker
Reimplement bindless storage buffers. authored by pcwalton
Inheritable Render Layers authored by grace125
Fix mesh tangent attribute matching in mesh transform operations authored by aloucks
Fixes missed RequestRedraw events in about_to_wait() authored by boondocklabs
allow `Call` and `Closure` expressions in hook macro attributes authored by RobWalt
Combine `Query::get` and `Query::get_many` authored by chescock
Replace internal uses of `insert_or_spawn_batch` authored by JaySpruce
Light Textures authored by robtfm
Use register_dynamic for merging authored by ElliottjPierce
Add bindless support back to `ExtendedMaterial`. authored by pcwalton
Add per-pixel iterators to `Image` authored by grind086
Create `bevy_label` crate authored by hukasu
Add methods to bulk replace relationships on a entity authored by Brezak
Update `rand`, `glam` and `encase` to latest versions authored by Bluefinger
Add scenes similar to `deferred_rendering` to 3d testbed authored by hukasu
Fix panic when a mesh has skinning attributes but no `SkinnedMesh` component authored by greeble-dev
Compile fail stderr authored by Brezak
Use `RayMap` and `RenderLayers` in `bevy_sprite/picking_backend` authored by bytemunch
RPC Discover endpoint with basic informations authored by Leinnan
Add `IntoSystem::with_input` and `::with_input_from` system wrappers authored by ItsDoot
Recursive run_system authored by SpecificProtagonist
Improve derive(Event) and simplify macro code authored by Bleachfuel
Make Query::single (and friends) return a Result authored by alice-i-cecile
Dirty 🌲s authored by aevyrie
testbed for UI authored by mockersf
AssetServer out of bounds protection authored by Threadzless
One-to-One Relationships authored by dmyyy
Decoupled naga for wgpu testing authored by JMS55
Bump `typos` to 1.30.0 authored by rparrett
Issues Opened this week
`Trigger<Pointer<_>>` events are triggered for different position when using 2 cameras with `RenderLayers` authored by michalvankodev
Reserve entities from async authored by andriyDev
Default to AssetMetaCheck::Never on wasm targets authored by UkoeHB
Shadows do not respect render layers authored by Zorpf
ButtonInput not working for some combinations authored by bbasics
Need some way to nest labeled assets authored by pcwalton
`Option<T>` - `GetTypeRegistration` - Does not store `ReflectDefault` type data authored by makspll
UI Text nodes behave weirdly when they have children authored by elenakrittik
Runtime mipmap generation authored by jf908
Light data inside compute shader authored by Bcompartment
Add character "hitbox" to `PositionedGlyph` authored by rparrett
One shot system cannot recursively call itself authored by Maxime-Verrier
BRP methods naming pass authored by Leinnan
Improve Performance of Entities::alloc_at authored by ElliottjPierce
bevy_reflect: Add reflection support for async fn authored by shekohex
Periodic drops in fps authored by Ruttie2006
Bulk operations on entity relationships authored by viridia
Moving components instead of duplicating should lift the `Clone`/`Reflect` requirement authored by urben1680
Type erased / dynamic runtime materials authored by tychedelia
Bevy exposes access to the entire file system to scripts and/or mods. authored by Threadzless
Bad error message for loading empty string as an asset. authored by mintlu8
Ergonomic way to get exited state in OnExit system authored by tmstorey
Right clicking on window bar freezes the app. authored by andriyDev
RayMeshHit.triangle_index contains the first vertex index instead of the triangle index authored by brookman
Feature gating for webgl2/webgpu is incorrect in `transmission` example authored by rparrett
Error logged when running 3d examples authored by rparrett
Bevy's Error type should capture a useful backtrace authored by cart
Allow access to `&self` in #[require(Component(...))] authored by Ruttie2006
Black materials on `clearcoat` example authored by hukasu
y axis flipped when reading delta from Drag pointer authored by gwafotapa
Allow for App::run() to return on Web authored by JaminKoke
`Forward+Prepass` mode of `deferred_rendering` example is broken authored by hukasu
Compile / typecheck perf regression in 0.16 from proc macro changes authored by h3r2tic
Materials on `transmission` example get shuffled authored by hukasu
Expose some fields of `Stepping` authored by benfrankel
Broken rendering on GPUs that don't support PARTIALLY_BOUND_BINDING_ARRAY authored by JMS55