
Exofactory Demo, Cargo Feature Collections, and 2d experiments
2025-10-13
The Bevy 0.18 development cycle has kicked into full swing while many ecosystem crates are releasing their 0.17 versions. As usual, we'll leave out crates from the crates section that are mainly updates to 0.17 without major changes.
We also see some Ludum Dare entries this week, in addition to Exofactory releasing a demo for Steam Next Fest.
Cargo Feature Collections
#21472 makes improvements to the status quo when it comes to disabling features when using the bevy
crate.
bevy = { version = "0.17", default-features = false, features = ["2d"] }
These come in a few new high-level flavors for "Profiles":
Profile | Description |
---|---|
default | The full default Bevy experience. This is a combination of the following profiles: 2d, 3d, ui |
2d | The default 2D Bevy experience. This includes the core Bevy framework, 2D functionality, Bevy UI, scenes, audio, and picking. |
3d | The default 3D Bevy experience. This includes the core Bevy framework, 3D functionality, Bevy UI, scenes, audio, and picking. |
ui | The default Bevy UI experience. This includes the core Bevy framework, Bevy UI, scenes, audio, and picking. |
As well as slightly lower-level "Collections", which notably includes a new dev
collection containing dev tools.
Collection | Description |
---|---|
dev | Enable this feature during development to improve the development experience. This adds features like asset hot-reloading and debugging tools. This should not be enabled for published apps! |
audio | Features used to build audio Bevy apps. |
scene | Features used to compose Bevy scenes. |
picking | Enables picking functionality |
default_app | The core pieces that most apps need. This serves as a baseline feature set for other higher level feature collections (such as "2d" and "3d"). It is also useful as a baseline feature set for scenarios like headless apps that require no rendering (ex: command line tools, servers, etc). |
default_platform | These are platform support features, such as OS support/features, windowing and input backends, etc. |
common_api | Default scene definition features. Note that this does not include an actual renderer, such as bevy_render (Bevy's default render backend). |
2d_api | Features used to build 2D Bevy apps (does not include a render backend). You generally don't need to worry about this unless you are using a custom renderer. |
2d_bevy_render | Bevy's built-in 2D renderer, built on top of bevy_render |
3d_api | Features used to build 3D Bevy apps (does not include a render backend). You generally don't need to worry about this unless you are using a custom renderer. |
3d_bevy_render | Bevy's built-in 3D renderer, built on top of bevy_render |
ui_api | Features used to build UI Bevy apps (does not include a render backend). You generally don't need to worry about this unless you are using a custom renderer. |
ui_bevy_render | Bevy's built-in UI renderer, built on top of bevy_render |
default_no_std | Recommended defaults for no_std applications |
All features still exist, so you could still specify every single feature yourself, but the mid and high level featuresets are a significant improvement.
Solari
#21391 brings the beginning of realtime Solari specular materials. Specular materials are those that deal with reflected light, such as polished surfaces.
Aabb gizmos
A brand new Aabb gizmo was added in #21356. This follows after a change last week that renamed the old cuboid
gizmo to cube
(because it was a cube).
Ring Primitive
#21466 introduces a generalized "ring" shape to any underlying primitive.
You can imagine these shapes as "outlines" or "hollow" shapes.
The new rings are extrudable and accepts any Primitive2d
.
let capsule_ring = Ring::new(
Capsule2d::new(50.0, 100.0),
Capsule2d::new(45.0, 100.0),
);
let hexagon_ring = Ring::new(
RegularPolygon::new(50.0, 6),
RegularPolygon::new(45.0, 6),
); // note vertex count must match
bevy_camera_controller
In #20215, a new crate to contain camera controllers was created.
These camera controllers are often used in Bevy examples, but now can also be used to kickstart new projects by enabling the relevant feature, such as free_cam
.
Relatedly, a new "free cam" controller example was added in #21477.
cargo run --example free_cam_controller --features="free_cam"
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.

WIP Ragdoll for bevy_animation_graph
showcase
Progress on a ragdoll implementation intended for bevy_animation_graph

To Build a Home: Overworld
showcase
A functional overworld for To Build a Home. The overworld is implemented with a second camera and RenderLayers.

2d Pixel Art Procedural Generation
showcase
Procedurally generating a fully deterministic, infinite, tile-based, 2D pixel art world; now with roads and settled areas (with houses!)


Mission Ares: Ludum Dare
showcase
Mission Ares is a Bevy game made for Ludum Dare 58
Welcome to Mission Ares!
You are assigned to fleet Gamma and in charge of our planetary mining robots. Your role is to ensure the safe extraction of minerals.
The distance between planets is limiting our direct control of robots, you must plan the entire sequence of commands and dispatch them all at once. Beware! Moving the rovers will drain their battery, and solar panels only charge in sunlight.
Prepare and execute plans that extract all minerals!

Exofactory Demo
showcase
Exofactory, a factory building game, has been soft launched on Steam in anticipation of Steam Next Fest. It is available for Windows and Linux.

Asteroids 3d
showcase
3 weeks after starting with Bevy, this 3d Asteroids is playable and open source.

Implovisation: Ludum Dare
showcase
Connect ships you've defeated to your own ship to grow bigger as you work your way through waves of enemies.

Crates
New releases to crates.io and substantial updates to existing projects
bevy_lit 0.8
crate_release
bevy_lit is a 2d lighting crate for Bevy.
0.8 brings two new lighting sources: Spotlight2d
and TextureLight2d
as well as enabling the possibility to create custom light sources with CustomLight2dPlugin
.
beet_flow 0.0.7
crate_release
A general purpose ECS control-flow library.
For Bevy 0.17, beet_flow received a major refactor, cleaning up and simplifying the model.
beet_flow now leans into the 'request-response' pattern, with the GetOutcome event indicating entity observers should respond with a corresponding Outcome event. The response may be immediate, it may be over several frames, or can even be async!

Educational
Tutorials, deep dives, and other information on developing Bevy applications, games, and plugins
Dependency Injection like Bevy Engine from Scratch
educational
A new addition to Dependency Injection like Bevy Engine from Scratch covering the compile time impact of the dependency injection along with a new demo!
Bevy Rust Game Development Chapter 2
educational
Chapter 2 of this series introduces procedural generation using Wave Function Collapse, terrain tiles, and more.
Fix clippy lint for importing `Arc` from `std` instead of `alloc` authored by LeandroVandari
Derive `Copy` and `Clone` for `FontAtlasKey` authored by ickshonpe
Clamp scroll offset to prevent scrollbar thumb from going out of bounds authored by sroauth
Draw aabb gizmos only for visible entities authored by dloukadakis
Fix entity reservation on 32-bit platforms authored by Shatur
`Interaction::Hovered` fix authored by ickshonpe
Call `world.flush()` after `mark_spawn_despawn()` authored by chescock
Fix slider value indicator bar when value is out of range authored by doup
Emit slider drag value change only when value changes authored by doup
Remove uses of `#[cfg(feature = "track_location")]` outside of the implementation of `MaybeLocation` authored by chescock
Remove `FontAtlasSets` authored by ickshonpe
Make bevy_mikktspace optional authored by atlv24
Rename cuboid to cube authored by atlv24
make bevy_mesh optional for bevy_animate authored by atlv24
rename ThinColumn to Column authored by ecoskey
Add From Cuboid for Aabb3d authored by atlv24
Rename animation to gltf_animation authored by atlv24
Raise compile error when using non-static lifetimes in `#[derive(Resource)]` authored by VasanthakumarV
Use `ptr::is_aligned` now that it's stable. authored by chescock
Optimize `prepare_bloom_bind_groups` authored by beicause
Solari initial realtime specular work authored by JMS55
Image::reinterpret_size and Image::reinterpret_stacked_2d_as_array now return a Result authored by KirmesBude
Remove unused wgsl functions authored by janhohenheim
bevy_mesh optional morph authored by atlv24
(Adopted) Bump crate-ci/typos from 1.36.3 to 1.37.2 #21414 authored by greeble-dev
Fix clippy when `target_os = "windows"` authored by greeble-dev
Use BlobArray and ThinColumn in ResourceData and ComponentSparseSet authored by james7132
update taplo to 0.10.0 authored by mockersf
`TextPipeline::queue_text` refactor authored by ickshonpe
Aabb gizmo api authored by atlv24
Fix nightly clippy authored by beicause
Add bevy_camera_controllers crate and move freecam implementation into it authored by alice-i-cecile
Rename bevy_ui_picking_backend to ui_picking authored by atlv24
Add generator command to features md file authored by atlv24
rename bevy_sprite_picking_backend to sprite_picking authored by atlv24
Add `From<Uuid>` implementation for `Handle<A>` authored by JMLX42
Send the entire loaded asset instead of decomposing it on the loader task. authored by andriyDev
Load ktx2 LUT images with sRGB off. authored by andriyDev
Add a few basic tests for asset processing. authored by andriyDev
Change friction behavior in freecam to use smooth nudge #21455 authored by rossleonardy
Trait tag for Message authored by SpecificProtagonist
Add a conversion factor for MouseScrollUnit and use in camera controller authored by alice-i-cecile
Reduce default sensitivity for free_cam controller authored by alice-i-cecile
Rename bevy_mesh_picking_backend to mesh_picking authored by atlv24
Fix feature flags for solari and meshlets examples authored by alice-i-cecile
Freecam example authored by Niyudi
Allow only parentheses in #[reflect(...)] authored by dloukadakis
Ring shape primitive authored by tigregalis
un-hide the feathers example authored by mockersf
Make WGPU_ADAPTER_NAME check substring authored by tychedelia
Cargo Feature Collections authored by cart
`FreeCam`: stop cursor from remaining grabbed when camera controller is disabled authored by janis-bhm
Convert `ProcessorTransactionLog` into a trait. 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
Refactor `EntityEvent` to support `ContainsEntity` authored by Zeenobit
Naive support for system fonts authored by dsgallups
Entity scope v1: component scope authored by janis-bhm
increase morph targets to 256 authored by robtfm
Modifying the readme in example to address the wayland default authored by vivekadishankara
Fix a crash that occurs when an off-screen entity's material type changes and the material then becomes visible. authored by pcwalton
Refactor `SubCameraView` authored by BigWingBeat
Put input sources for `bevy_input` under features authored by Shatur
`MovingPtr<'_,B: Bundle>` impls Bundle authored by janis-bhm
WESL: Suport importing shader from asset source authored by beicause
Add tests for asset processing to show the problem with #21269. authored by andriyDev
Rename clear_child* to detach_child* authored by johannesvollmer
MovingPtr<'_,B: Bundle> impls Bundle but with `typeid` authored by janis-bhm
Fix scroll speed compounding math authored by alice-i-cecile
`FreeCam`: change walk_speed scaling to avoid sticking to zero/negative speeds authored by janis-bhm
Generic composite primitive gizmos / rework authored by tigregalis
Fix Intel iGPU Rendering authored by tychedelia
General entity set cleanup authored by Victoronz
Implicit text roots authored by ickshonpe
Make BEVY_REFLECT_AUTO_REGISTER_STATIC require a target dir authored by eugineerd
allow TextureFormat for depth/stencil to be passed down to render pipelines authored by raketenben
Clarify `from_viewport_and_override` logic authored by Breakdown-Dog
Make `RecordDiagnostics::time_span` take CommandEncoder authored by akimakinai
Fix gizmo clipping again authored by atlv24
Add a debug-only alternative to `Name` authored by greeble-dev
Improve Frustum struct readability authored by Breakdown-Dog
Issues Opened this week
Device lost handling authored by valaphee
Improve Storage Buffer example authored by julcst
Test 32-bit platforms in CI authored by alice-i-cecile
Update FilteredEntityRef/Mut getters to return Result instead of Option authored by cBournhonesque
Interpolating camera transform with `EasingCurve` sampling results in jitter in 0.17 authored by TheGrungringMachine
Relationships are spawned separate from their bundle in Bevy 0.17 authored by cart
bevy_egui v0.37.0: Panic on window focus/restore due to camera extraction query authored by meapps
SMAA does not work on 0.17 authored by AmionSky
example "First person view model" do not render default layer authored by hyultis
The `Measure` trait can't be implemented without importing taffy authored by ickshonpe
`bevy_winit` feature pulls in too many crates authored by GiantBlargg
UI Node children overflow with BorderRadius authored by mirsella
`reflect_auto_register_static` doesn't register types in crates that aren't part of the workspace authored by eugineerd
Support run conditions for observers authored by PhaestusFox
Can't use custom trigger type with default runner authored by PhaestusFox
AnimationEvents should also be EntityEvents authored by jwright159
Only one Light working on WASM in lasat bevy version? authored by Dracks
Add a simple 2D camera controller authored by alice-i-cecile
Add a freecam camera controller example authored by alice-i-cecile
Unreasonable RAM/Memory usage authored by dubrowgn
Bevy 0.17 Hotpatching Dioxus Windows Path Suggestion authored by andymitchellx
Handle tablet input (stylus) authored by Zentropivity
Add freecam camera controller to more 3D examples authored by alice-i-cecile
Freecam camera controller should use a better input management solution for keybinds authored by alice-i-cecile
Reconsider component organization for freecam controller authored by alice-i-cecile
3DShape example regression authored by urothis
`FreeCam`: using the scroll wheel can stick speed to 0 authored by janis-bhm
Relationship API is unfriendly to Entity-like newtypes authored by Zeenobit
Gizmo Grid incorrect looking lines authored by dpogorzelski
ECS debug names should be on by default authored by seivan
hotpatching_systems.rs hotpatching fails with cannot find ‘ld’ authored by rydb
Environment map missing on Intel IGP authored by DGriffin91
Crash when tilemap is created without a tileset image authored by IWonderWhatThisAPIDoes
wasm web panics on iOS Safari with `arg0.exitPointerLock` is not a function authored by rectalogic
Bevy caldera hotel_01 scene loads slowly in debug with opt3 authored by DGriffin91
Regression: 1x1 Bc7RgbaUnorm texture causes panic authored by DGriffin91
Gizmo lines culled incorrectly in 3D with depth_bias -1 authored by amytimed
Why does `MaterialExtensionBindGroupData` require the bind group data to be `Copy`? authored by Neopallium
Built in 2D camera aspect ratio management authored by Hokome