0.15.1, conveyor belts, and simple preferences
2025-01-06
Welcome to 2025!
Bevy 0.15.1 is out this week, with the full list of changes viewable on GitHub. 0.15.2's milestone has also been created.
no_std support is forging ahead and there's continued progress on some really interesting debugging information that I hope to see exposed via the Bevy Remote Protocol. The wider community is also showing interesting progress with demos like Avian's conveyor belts and hexx's procedural meshes.
no_std
no_std support was added to bevy_window, bevy_state, bevy_hierarchy, and bevy_input.
In the process, an interesting facet of how no_std crates enable std
features was discovered. There are multiple preludes and more specifically whether or not no_std
is in play, one of two standard library preludes: std::prelude
or core::prelude
.
This prelude is implicitly imported which when combined with a specific style of feature enablement can result in undesired behavior. This makes #17086 a great issue to review if you write no_std and std code.
// Before
#![cfg_attr(not(feature = "std"), no_std)]
// After
#![no_std]
#[cfg(feature = "std")]
extern crate std;
Custom Projections
Custom projections (and projection handling in general) has been simplified in #17063.
commands.spawn((
Camera3d::default(),
// a custom projection:
Projection::custom(ObliquePerspectiveProjection {
horizontal_obliqueness: 0.2,
vertical_obliqueness: 0.6,
perspective: PerspectiveProjection::default(),
}),
Transform::from_xyz(-2.5, 4.5, 9.0).looking_at(Vec3::ZERO, Vec3::Y),
));
Comprehensive Source Tracking
comprehensive source tracking can now track component mutation, event sources, and spawns/despawns so it makes sense that the feature flag has been renamed to track_location
in accordance with the current and expanding functionality.
Alice's Merge Train is a maintainer-level view into active PRs, both those that are merging and those that need work.
Showcase
Bevy work from the #showcase channel in Discord and around the internet. Use hashtag #bevyengine.
bevy_minibuffer_inspector 0.1.0
showcase
An add-on for bevy_minibuffer that provides bevy-inspector-egui acts.
Chickens
showcase
A reworked chicken asset, now with animations. Its been a year since the white chicken, the brown chicken is the new asset.
hypocycloids and hypotrochoids
showcase
Animated hypocycloids and hypotrochoids using gizmos with no video editing effects. An animated spotlight effects a glowing ring.
Torp Season Changes
showcase
Winter transition experiments for Torp. The experiments intend to make the transition between seasons smoother.
bevy_prefs_lite
showcase
bevy_prefs_lite is a currently unpublished crate that provides cross-platform (including web) "basic preferences" support for Bevy applications. The word "preferences" in this context is used to mean user settings that are
- set while running the app
- persistent across restarts
- implicitly saved.
The README does a great job of explaining exactly what this crate is meant to solve (for example: NOT saved games, but YES for current window size), so give it a read.
Crates
New releases to crates.io and substantial updates to existing projects
mevy 0.1.0
crate_release
mevy is a growing set of macros which add some witchcraft into bevy!
Currently that witchcraft includes
- CSS-like for bevy_ui components (and your own)
- Simplified Notation for Color, Val and UiRect
seldom_pixel 0.6
crate_release
seldom_pixel is for limited color palette pixel art games.
0.6 brings rendering extraction changes, dynamic draw resolutions, and updated APIs like Required Components and the use of Assets v2.
bevy_rand 0.9
crate_release
bevy_rand integrates rand ecosystem with Bevy's ECS. It provides a set of wrapper component and resource types that allow for safe access to a PRNG for generating random numbers.
In 0.9, bevy_rand will no longer assume WASM builds to be for the web, so your application crates will need an additional Cargo.toml configuration to enable that if targeting WASM for the web. This is in preparation for future changes to how getrandom selects its entropy backend.
bevy_minibuffer 0.3
crate_release
bevy_minibuffer is a developer console inspired by the user interface of classic Unix text editors rather than the Unix shell.
0.3 brings TapeActs
which function similar to keyboard macros.
Educational
Tutorials, deep dives, and other information on developing Bevy applications, games, and plugins
Inventory and Ability systems for an RPG
educational
Three posts about inventory and ability systems in an RPG setting.
Bevy Mobile Framerate
educational
Mobile devices require resource-constrained approaches and that extends to framerate control in this post about controlling framerate in Bevy 0.15 (and technically, 0.14 as well).
Fix confusing comment in pbr example authored by mdickopp
Add `no_std` support to `bevy_state` authored by bushrat011899
Move some structs that `impl Command` to methods on `World` and `EntityWorldMut` authored by JaySpruce
Fix `Text2d` performance regression authored by rparrett
Basic filtering examples for users of the bevy_log. authored by Lyndon-Mackay
Add `portable-atomic` support to `bevy_utils` for `once!` authored by bushrat011899
Add `no_std` support to `bevy_input` authored by bushrat011899
Add `many_text2d` stress test authored by rparrett
Overhaul bezier curve benchmarks authored by BD103
Make `RawHandleWrapper` fields private to save users from themselves authored by Brezak
Fix msrvs authored by BenjaminBrienen
Test benchmarks in CI authored by BD103
Fix path checking for FileWatcher for virtual workspace projects authored by super-saturn
Migrate to `core::hint::black_box()` authored by BD103
Fix Docs // incorrect default value for ChromaticAberration intensity authored by Satellile
Fix random clippy warning authored by BenjaminBrienen
Move `futures.rs`, `ConditionalSend` and `BoxedFuture` types to `bevy_tasks` authored by mnmaita
Add `no_std` support to `bevy_hierarchy` authored by bushrat011899
Update linux dependency documentation for NixOS (and nix) authored by to-bak
Refactor non-core Curve methods into extension traits authored by mweatherley
Remove unsound `Clone` impl for `EntityMutExcept` authored by ItsDoot
Make 8 methods public and updated input parameter generics for SystemState::build_system_with_input authored by Neo-Zhixing
Add fallible add methods to `PluginGroupBuilder` authored by Brezak
Make `extract_mesh_materials` and `MaterialBindGroupAllocator` public authored by BenjaminBrienen
Add Mut::clone_from_if_neq authored by SOF3
Convert to fallible system in IntoSystemConfigs authored by hymm
Replace `map_or(false, _)` with `is_some_and(_)` authored by ickshonpe
Replace `map` + `unwrap_or(false)` with `is_some_and` authored by ickshonpe
Replace `map` + `unwrap_or(true)` with `is_none_or` authored by ickshonpe
Make the input focus docs less keyboard-centric authored by alice-i-cecile
Fix compilation error authored by BenjaminBrienen
Use -D warnings in all relevant CI authored by BenjaminBrienen
Fix logic error in loading_screen.rs authored by BenjaminBrienen
Remove the `atlas_scaling` field from `ExtractedUiItem::Gylphs`. authored by ickshonpe
Return `Result` from tab navigation API authored by alice-i-cecile
Refactor and simplify custom projections authored by aevyrie
Rename `track_change_detection` flag to `track_location` authored by skimmedsquare
Fix `clippy::precedence` authored by BenjaminBrienen
Add `no_std` support to `bevy_window` authored by bushrat011899
small documentation update and issue template fix authored by HyperCodec
reduce nesting in the `sparse_set` module authored by ickshonpe
Fix sprite performance regression since retained render world authored by superdump
Replace `map_or(true, _)` with `is_none_or(_)` authored by ickshonpe
Do not lowercase asset file extensions authored by NiklasEi
UI Debug Overlay `show_hidden` and `show_clipped` options authored by ickshonpe
Fix documentation for system set method authored by arunke
Update entity cloning benchmarks authored by BD103
bevy_a11y: Apply `#![deny(clippy::allow_attributes, clippy::allow_attributes_without_reason)]` authored by LikeLakers2
bevy_animation: Apply `#![deny(clippy::allow_attributes, clippy::allow_attributes_without_reason)]` authored by LikeLakers2
bevy_app: Apply `#![deny(clippy::allow_attributes, clippy::allow_attributes_without_reason)]` authored by LikeLakers2
bevy_math: Apply `#![deny(clippy::allow_attributes, clippy::allow_attributes_without_reason)]` authored by LikeLakers2
bevy_tasks: Apply `#![deny(clippy::allow_attributes, clippy::allow_attributes_without_reason)]` authored by LikeLakers2
Remove Implicit `std` Prelude from `no_std` Crates authored by bushrat011899
Show working urls to screenshot comparisons in output authored by rparrett
Update `typos` authored by rparrett
Add `-D warnings` in a few steps authored by BenjaminBrienen
Truncate the floats in `bevy_color::oklaba` authored by LikeLakers2
bevy_reflect: Apply `#![deny(clippy::allow_attributes, clippy::allow_attributes_without_reason)]` authored by LikeLakers2
Scale input to account for deadzones authored by BenjaminBrienen
Revert "Fix sprite performance regression since retained render world (#17078)" authored by rparrett
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
Add `no_std` support to `bevy_transform` authored by bushrat011899
Refactor hierarchy-related commands to remove structs authored by JaySpruce
fix visibility propagation during reparenting authored by ethereumdegen
Add `Result` handling to `Commands` and `EntityCommands` authored by JaySpruce
Improved Text2d glyph batching authored by ickshonpe
Discussion: System return life time escape hatch to enable async systems authored by Neo-Zhixing
System Yielding authored by Neo-Zhixing
Fix depth_bias and build errors on less capable platforms authored by nandee95
Add `NameOrEntity::get_from_query` method authored by Olle-Lukowski
Fix duplicate asset loader registration warning authored by arunke
Add basic directional (gamepad) navigation for UI (and non-UI) authored by alice-i-cecile
default UI camera extraction fix authored by ickshonpe
Anamorphic Bloom authored by aevyrie
bevy_audio: Apply `#![deny(clippy::allow_attributes, clippy::allow_attributes_without_reason)]` authored by LikeLakers2
Update render_resource gpu buffer doc comments authored by Weshnaw
Disallow requesting write resource access in Queries authored by vil-mo
Only use bindless when we support 2000+ samplers. authored by Elabajaba
bevy_asset: Apply `#![deny(clippy::allow_attributes, clippy::allow_attributes_without_reason)]` authored by LikeLakers2
Support texture atlases in CustomCursor::Image authored by mgi388
More DefaultUiCamera fixes authored by ickshonpe
Make the `get` function on `InstanceInputUniformBuffer` less error prone authored by Bleachfuel
Simplified UI tree navigation without `ghost_nodes` authored by ickshonpe
unmut extracted view queries authored by ickshonpe
Relax documented safety requirements for `*_assume_mut` authored by vil-mo
bevy_core_pipeline: Apply `#![deny(clippy::allow_attributes, clippy::allow_attributes_without_reason)]` authored by LikeLakers2
Update all previously-merged `#![deny(clippy::allow_attributes, clippy::allow_attributes_without_reason)]` attributes to include a reason field pointing to the tracking issue authored by LikeLakers2
Issues Opened this week
Deduplicate App <-> World APIs authored by BenjaminBrienen
Using .set_parent on an entity whose parent was Visibility:Hidden fails to refresh visibility authored by ethereumdegen
Enabling DDS feature leds to GLTF also becoming enabled authored by zbx1425
Query filters using T can Trigger conflict with Query<&mut T> authored by PhaestusFox
Can't compile wgsl shaders that use the "modf" function authored by sadmac7000
Allow for querying a specific variant of an Enum+Component authored by ethereumdegen
Add render world entity count to `EntityCountDiagnosticsPlugin` authored by rparrett
`alsa::poll()` returned POLLERR authored by oh-wind
Reflection Issue with petgraph::graph::DiGraph authored by anlumo
Strange wasm render error on my linux desktop browser authored by foxzool
`NameOrEntity` is difficult to `Query::get` authored by andriyDev
Sending `AppExit` during a startup schedule causes crash authored by Person-93
`RenderLayer` support for `Gizmos` authored by aevyrie
Add Text Effects such as border and shadow authored by deavid
bevy_input_focus types should all be `Reflect` authored by alice-i-cecile
Make Anchor work for Rectangle Mesh2d authored by colepoirier
When using DynamicScene to restore the state, StateScoped will not take effect authored by rendaoer
Character Attachments authored by viridia
`Target::target` and `Target::target()` return different entities authored by aevyrie
Deny the `clippy::allow_attributes` and `clippy::allow_attributes_without_reason` lints authored by LikeLakers2
Bevy's fps is half of `Max Frame Rate` with `Low Latency Mode` set to `Ultra` authored by Phoqinu
Per `Entity` sprite picking (and maybe friends) opt-out authored by Phoqinu
(Android) Touch events not working authored by xzihnago
Generic Reflection is Missing Information authored by anlumo
Missing materials, rendering vaguely broken authored by aevyrie
Be able to customize MAX_JOINTS and MAX_MORPH_WEIGHTS authored by victorb
`ScrollPositions` does not work on `Node` with `flex_direction` set to `RowReverse` authored by hukasu
.add_systems DONT WORK authored by KeiMuriKoe
Allow pipeline specialization with extra mutable data authored by djeedai
Custom entity visibility system. authored by Phoqinu
Need Doc to explain why `The loop for MinimalPlugins runs as fast as possible` authored by alexniver
Allow users to provide image dimensions type/layers count in `ImageLoaderSettings` authored by MatrixDev
Fallible systems spamming warning log statements authored by Testare
Bevy 0.15.1 change to fallible systems breaks projects authored by Schmarni-Dev
Allow to mutably query for immutable components authored by vil-mo