This Week in Bevy

What happened this week in the Bevy Engine ecosystem

Links

Fallible Commands, Directional UI Navigation, and Picking Debug

2025-01-13

Fallible commands make their entry this week which make it much easier to define different levels of behavior when a Command returns a Result::Err.

POLDERS, which we've seen in multiple showcases, also gets a Steam page this week. POLDERS is a quintessentially Dutch City Builder where the sea level rises, your dikes break, and you’ll have to fight for every piece of land against the relentless sea.

Gamepad menu navigation also gets a boost this week, with a new directional navigation example.

Fallible Commands

#17043 and #17215 combine to implement Result handling for commands using queue_handled. Commands are effectively "wrapped" with error handlers when they execute, so this does not mean you can handle a Command error in the same system that you queue it. The error handling happens later, similar to Commands themselves.

Here's an example of using the currently named Commands::queue_handled which accepts a Command and uses a bevy-provided error handler to print a warning if that command returns a an Err.

commands.queue_handled(
    |_world: &mut World| -> Result {
        info!("here");
        Err("whoops".into())
    },
    error_handler::warn(),
);
2025-01-14T17:39:25.100850Z  INFO fallible_commands: here
2025-01-14T17:39:25.100880Z  WARN bevy_ecs::system::commands::error_handler: whoops

Bevy supplies error handlers for panicing as well as printing error, warn, or being silent. There is also a new Result type alias that can be used in type signatures.

Anamorphic Bloom

anamorphic bloom

#17096 introduces a scale factor to 2d and 3d bloom which enables a closer match to anamorphic blurs.

METIS-based virtual geometry generation

virtual geometry

#16947 replaces meshopt in favor of METIS to group triangles. This change enables minimizing locked vertices, improving simplification.

Directional UI Navigation

gamepad navigation

#17102 hooks into the new InputFocus to power an initial implementation of directional gamepad controls (for UI and non-UI). Additionally, #17224 adds a new example shows off gamepad/directional navigation.

cargo run --example directional_navigation

DebugPickingPlugin

DebugPickingPlugin

The DebugPickingPlugin from bevy_mod_picking was upstreamed and updated in #17177.

cargo run --example debug_picking --features bevy_dev_tools

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.

falling objects

proto-lemmings

showcase

The start of a lemmings-style game with image-based collision and destructible terrain.

forbidden forestforbidden forest upgrades

Survivors

showcase

A vampire-survivors-like prototype built with a WebGPU target in mind.

to build a home ui improvements

To Build a Home UI Improvements

showcase

Some improvements to the UI of To Build a Home. A great discussion around picking and when to use global/local observers and marker components lives in the Discord thread.

welcome to Crystal Realmswelcome to Crystal Realms: feed frogs?

Crystal Realms Trailer

showcase

Crystal Realms is a 2D Sandbox MMO game and this week it got a trailer.

The game itself is available on Itch.io including devlog updates.

mevy spawn macro

showcase

A new spawn macro added to mevy

spawn!{
    // component;
    // .method(..);
    [optional_child_name][
        // component;
        // .method(..);
    ]
}
made with bevy splash screen

Made with Bevy

showcase

A splash screen showing "Made with Bevy" over a Polders background.

POLDERS

POLDERS Steam Page

showcase

A project that grew in the showcase channel in the Bevy discord (from cell shading to irregular grids to the distinctive POLDERS sphere. POLDERS has also been the subject of a talk on YouTube.

POLDERS now has a Steam Page where you can wishlist it.

top-down shooter

Top-Down Shooter

showcase

A first bevy project with a top-down survivor perspective.

frustum culling

terrain frustum culling

showcase

In-progress improvements to frustum culling for this game. The closer bounding boxes (red, green, cyan, purple) belong to the shadow cascades and the yellow boxes are visible to the camera itself

coin pusher

coin-pusher arcade

showcase

A coin-pusher arcade simulation built with Avian and Blender

terminal rendering

ascii renderer

showcase

a demo of an in-progress ascii renderer

character builder

Character Appearance Builder

showcase

Using Observers and the new GltfMaterialName component to make a character appearance builder system.

rock paper scissors

Rock, Paper, Scissors simulation

showcase

A rock, paper, scissors battle simulation

pixelizationpixelization blender monkey

bevy_pixelated_3d

showcase

A post-processing effect to pixelate 3d scenes. It includes an outline shader based on depth, normals and a robert's cross (north/south/east/east pixels) sampling. There are half-finished implementations of dithering and quantization as well.

jarl containers

Jarl containers

showcase

Crafting, grids, sounds, and items come together to power a very polished drag-and-drop interface for containers like chests in Jarl.

karaoke

Karaoke

showcase

A karaoke tool for lyric rendering and additional graphics with a demo of the output over on YouTube

portals

Portal Demo

showcase

A portal demo where shooting portals through portals is supported using picking, and teleporting through the portal is possible for dynamic objects with velocity.

The demo uses

bevy-butler

bevy-butler

showcase

bevy-butler is an in-progress set of procedural macros to cut down on plugin and system boilerplate code, and improve the self-documentation of systems. The crate is currently in a first-draft phase and is actively soliciting feedback.

#[system(schedule = Update, plugin = MyPlugin)]
fn hello_plugin(name: Res<Hello>)
{
    info!("Hello, {}!", name.0);
}
bevy_simple_template

simple_bevy_template

showcase

A new 2d started template for Bevy applications that brings an interactive cargo-generate based setup process. The process includes set for nightly rust, parallel compilation, and cranelift.

the end is beanthe end is bean

The End is Bean

showcase

The End is Bean is a survival RTS made for a local monthly game jam. It uses bevy_rapier2d and bevy_tweening.

Crates

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

edge detection sobel filter

bevy_edge_detection

crate_release

A post-processing based edge detection implemented using a sobel filter over depth, normal, and color. The post-processing setup is heavily influenced by the post-processing example in the bevy repo.

bevy_tailwind

crate_release

Using Tailwind CSS utility classes in Bevy.

bevy_easy_portals

bevy_easy_portals 0.4

crate_release

Easy-to-use (visual) portals that let you create mirrors and other cool effects!

0.4 brings support for picking, a depth_stencil, and more.

bevy_egui 0.32.0

crate_release

bevy_egui is an egui integration.

0.32 brings bevy_picking support as well as an input handling refactor which is an initial step towards diagetic (that is, world-space) UI.

bevy_cursor_kit

crate_release

.CUR and .ANI cursor file support for Bevy.

The author of this crate has added texture atlas support for custom cursors to Bevy, so go give the PR a review if you want this in 0.16!

bevy_cobweb_ui

bevy_cobweb_ui 0.8

crate_release

bevy_cobweb_ui is an asset-oriented UI framework for Bevy.

0.8 brings Grid layout support.

bevy_debug_log

bevy_debug_log 0.5.0

crate_release

bevy_debug_log allows you to access tracing logs in your bevy app using vanilla bevy_ui.

0.5 brings support for the recent ScrollPosition in Bevy 0.15, enabling the scrolling of logs.

bevy_rich_text

bevy_rich_text3d v0.1

crate_release

Mesh based raster rich text implementation for bevy.

  • Renders to Mesh and Image, one quad per glyph.
  • Simple rich text that can fetch data from the world.
  • Shader based text animation.
  • Text outlines!
bevy octahedral imposters

boimp 0.2

crate_release

octahedral imposters for bevy.

Octahedral imposters take higher resolution meshes and bake multiple views of them to textures which can be rendered on significantly lower-poly geometry while retaining the appearance.

degen_toon_clouds

degen_toon_clouds

crate_release

A shader for generating animated 2d clouds using noise.

bevy_eulerian_fluid

bevy_eulerian_fluid

crate_release

A 2D fluid simulation plugin that performs simulation on the GPU.

rpack

bevy_rpack

crate_release

rpack is a command line and GUI interface for generating spritesheets.

No devlogs this week

Educational

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

whats better than one set of UVs? Two.

What's better than one set of UVs? Two.

educational

An introduction to using Bevy's support for two UV maps on the same geometry and what that could be useful for.

bevy santa demo

bevy-santa-demo

educational

A Christmas-themed Bevy workshop that results in a game where you help Santa collecting presents while trying to avoid snowflakes.

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