Community Reflection on Bevy's Fourth Year

Posted on September 11, 2024 by Carter Anderson ( A silhouette of a figure with cat ears waving a tentacle, or Octocat: GitHub's mascot and logo @cart A vector art of a grey bird flying; former logo of X (formerly Twitter) @cart_cart A triangle pointing right in a rounded rectangle; Youtube's logo cartdev )

@cart here (Bevy's creator and Project Lead) with another update! A month ago was Bevy's Fourth Birthday! As is tradition, I took that as a chance to reflect on the past year and outline my hopes and dreams for the future. You can read that in my Bevy's Fourth Birthday post.

I also encouraged the Bevy community to write their own reflections on Bevy's fourth year in a similar style, and to post them here.

What is Bevy? #

For those who don't know, Bevy is a refreshingly simple data-driven game engine built in Rust. Bevy is also free and open source forever! You can grab the full source code on GitHub. We have a Quick Start Guide. You can also check out Bevy Assets for a library of community-developed plugins, crates, games, and learning resources.

Reflections #

We had plenty of responses this year! Here is a central collection of Bevy's Fourth Birthday posts:

What are we working on right now? #

Here are some things we have coming up!

  • Next Generation Scene / UI: We're working on a brand new modern scene system that will make defining Bevy scenes in code, asset files, and the upcoming Bevy Editor much nicer. This will also be the foundation for the Bevy Editor itself, which will be built on top of the new Scene / UI system. In general, this will be a massive step forward for Bevy's capabilities and user experience. Read the whole proposal for details!
  • Required Components: This is the first step in our plan for Bevy's Next Generation Scene / UI system, and it has already been merged into our main branch! It significantly improves the legibility and composability of defining and spawning components. We're in the process of porting Bevy's built-in components / bundles to the new system, and if all goes well, this will be included in the next Bevy release.
  • Retained Render World: To facilitate parallel pipelined rendering, Bevy has both an "app world" and a "render world". This requires synchronizing the two worlds. Currently, Bevy clears the render world every frame and then repopulates it, which incurs overhead. By switching to a "retained render world", we can avoid redundant work across frames by caching entity data on the renderer side across frames.
  • Function Reflection: We're making it possible to dynamically call functions via Bevy Reflect, which unlocks scenarios like calling Rust functions referenced in assets such as scenes! We'll use this feature as part of the Next Generation Scene / UI effort.
  • Order Independent Transparency: A new alternative to sorted alpha blending that does not require sorting draw objects before drawing them. This can both save CPU cycles and improve transparency behavior in some cases.
  • Improved Text API: In preparation for Next Generation Scene / UI, we're reworking our Text component APIs to be significantly more straightforward to use.
  • Cosmic Text Rendering: We've switched to cosmic-text for our text rendering, which improves our ability to handle scripts and ligatures (among other improvements).
  • Upstreaming bevy_mod_picking: We're upstreaming aspects of bevy_mod_picking and porting it to Bevy's new Observer system. This provides APIs for picking (identifying / clicking on / selecting) entities in 2D and 3D space.
  • Bevy CLI: We're building a Bevy command line interface, which will be the one-stop-shop for doing things like generating new Bevy projects from templates, running the asset preprocessor, running Bevy-specific lints, and more!

Bevy 0.15 will be coming out in a month or so, and some of the items above will land in it!

Here is to another year of Bevy!

- @cart