This Week in Bevy

What happened this week in the Bevy Engine ecosystem

Links

Volumetric Clouds, Pointclouds, and Zoned Audio

2025-10-06

With 0.17's release out we're into 0.18 development! Kicking off the development cycle with two new working groups focused on ergonomics:

  • font ergonomics
  • Async ECS ergonomics

As usual, many crates are bumping releases for 0.17, so we'll only explicitly be mentioning the ones that are new or have significant changes beyond the 0.17 compatibility release in the crates section this week.

Easy Screenshot Plugin

Taking screenshots is important for any game marketing, including Steam pages, social media posts, Bevy release notes, and even This Week in Bevy! #21235 introduces a new screenshot plugin to the bevy_dev_tools. Add the EasyScreenshotPlugin and configure the controls to press a key and get a new screenshot from your running application!

Remove Systems from Schedule

#20298 adds the ability to remove systems from a Schedule with remove_systems_in_set. For most uses, RunConditions are still the right approach, since removing a system will cause a schedule to get rebuilt. However removing a system will remove the cost of the RunCondition as well.

schedule.remove_systems_in_set(my_system, ScheduleCleanupPolicy::RemoveSystemsOnly);

ClearColor Solari

Solari ClearColor

#21350 adds the ability to use ClearColor with Solari.

AnimationTarget split

AnimationTarget is a Component that currently contains the AnimationPlayer Entity, and the AnimationTargetId. #20771 changes this to split the information into two components: AnimatedBy and AnimationTargetId.

  • The AnimatedBy(Entity) component is placed on the Entity being animated, and links to a different Entity with the AnimationPlayer.
  • The AnimationTargetId(Uuid) component holds a uuid, typically built from the name hierarchy of bones.

Together, this means different AnimationPlayers can have AnimationClips that target the same AnimationTargetId, and the AnimatedBy component can switch between them at runtime.

That is: Bones have ids through AnimationTargetId, and the choice of which AnimationPlayer controls the bone lives in AnimatedBy.

Enable prepass and shadows

#20999 introduces two new configurable functions to the Material traits:

  • enable_prepass
  • enable_shadows

These control whether or not the prepass or shadows are enabled for a given Material.


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.

stellar power

Stellar Power

showcase

Transmitting stellar power from stellar panel to planet.

rust puzzles

Rusty Puzzles

showcase

A first 2d puzzle Bevy game. Levels are JSON files, storing entities and their coordinates.

Source is available.

volumetric clouds

Volumetric Clouds

showcase

Volumetric clouds rendering using compute shaders based on Horizon Zero Dawn.

netcode

Netcode

showcase

Redesigned netcode for efficiency and reliability. Works on real devices across a real wireless network.

custom level editor

Custom Level Editor

showcase

basically everything is done through individual png files, 1 png where every pixel color represents a tile/entity/etc, another set of pngs for tiles, each having ‘rules’ in the center

The goal is to decouple level layout from detailing and biomes, so every time you play every level could get randomized between any of the available biomes

fields of aaru

Fields of Aaru

showcase

A Bevy game 3 years in development. This YouTube short gives an overview of the game and its mechanics.

egui to bevy ui

Egui to Bevy UI

showcase

After some feedback, this egui to Bevy UI port mirrors the style again.

pointclouds

Fun with pointclouds

showcase

Point Clouds rendered with bevy_pointcloud

hot reloading

Hot Patching Experiments

showcase

A video showing off some of the new Bevy hot-patching features in 0.17.

bevy_map_scatter

map_scatter integration

showcase

A prototype bevy integration with map_scatter.

voronoi mosaic

Fun with voronoi_mosaic

showcase

Some experiments for fun with voronoi_mosaic and avian2d

mercator

Mercator Release Video

showcase

Mercator is set to release on November 1st. This is the release video.

Items are more than their sell value in this shopkeeping game. Run shops, hire workers, haggle for profit, and dominate ancient global trade from Muziris to Rome.

crafting system

Crafting System

showcase

A crafting system MVP for an mmorpg. It integrates with a lua scripting system.

from egui to bevy ui

Egui to Bevy UI

showcase

A port from egui to Bevy UI. This is a +3000 -1500 change, mainly because Bevy UI is more low-level but in turn you get more control. The UI is now in a separate crate and egui is no longer needed, so it's quite a simplification overall.

potree

Potree pointclouds

showcase

Using potree-rs, to build a feature for bevy_pointcloud that can load potree point clouds.

zone audio

Zone Audio

showcase

Mood zone audio working with bevy_seedling. Sensors and marker components added to a scene using skein

shield

Space Ship Shield

showcase

Space ship shields inspired by a scene in farscape

Crates

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

soft_ratatui

soft_ratatui 0.1

crate_release

soft_ratatui is a pure software renderer for ratatui, with no terminal or GPU required.

  • egui integration provided by egui_ratatui.
  • bevy_ratatui integration allows you to turn an existing terminal app built with bevy_ratatui into a native or web app.
share

uiactivity_ios_rs

crate_release

uiactivity_ios_rs is a small crate to share text in iOS, with a Bevy demo.

bevy_ui_root

bevy_window_as_ui_root

crate_release

bevy_window_as_ui_root spawns windows as independent UI roots. Ideal for debug widgets!

app.add_plugins(WindowAsUiRootPlugin);

commands.spawn((
  WindowAsUiRoot,
  BackgroundColor(Color::WHITE),
  children![(
    Text::new("Hello World!"),
    TextColor(Color::BLACK),
  )],
));

Insert the WindowAsUiRoot component on an entity and this plugin will:

  • Insert Node, Window, and Camera components if they don't already exist.
  • Connect the camera to the root node and window.
  • Automatically resize the window to match the root node's layout size (if it is auto or fixed).
No devlogs this week

Educational

Tutorials, deep dives, and other information on developing Bevy applications, games, and plugins

Hooks and Observers in Bevy 0.17

educational

A dive into the hooks and observers APIs as well as an overview of the Observers changes in Bevy 0.17

Animated light textures

educational

Light Textures are new in Bevy 0.17. Using Materials to animate these textures requires some setup, which this video covers.

Multithreading Games in Rust

educational

A Rust talk that covers Forte and related topics.

Pull Requests Merged This Week
Contributing

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.

How do I contribute?

Pull Requests Opened this week

Issues Opened this week