Game Week 8

This week we’ll talk about the current health and maturity of Bevy!

Last week we introduced Bevy as “A refreshingly simple data-driven game engine built in Rust” created by Carter Anderson. The more I’ve looked into it and spent time with it, the more it feels like the right engine for me.

Bevy was released to the world approximately August 10, 2020. At version 0.1.0, it was already a formidable engine with a lot of potential and love, gaining over 2000 stars on Github within the first week. Anderson learned a lot from watching the Amethyst Rust-based game engine through its trails. Amethyst seems to have struggled from being too open, too early, without developing a strong enough design goal and singular focus. Anderson began in stealth by himself, working for about 5 months before unleashing it into the world. In order to drive Bevy’s success, he chose to be the BDFL “as long as he can”; note that such a position requires a lot of time and dedication, or otherwise that person can eventually become a serious bottleneck and prevent the rate of growth expected by the community and users of a project. Although there were a lot of smart people working on Amethyst, it sounds like they often struggled to come to a consensus which led to a lack of cohesion in the engine overall.

Anderson had previously been working at Microsoft. Although it’s not entirely clear what he worked on at Microsoft, he claimed both on Github and in an interview Podcast episode that he was moved by his experience at Microsoft to develop a wide-open piece of software (as opposed to a corporate-controlled closed-source project such as Unity or Unreal Engine). Although he said in the interview that he wasn’t getting paid quite enough yet to be comfortable (the interview was from June 2022, so hopefully that’s changed), he was hopeful to get more funding to be able to continue working on the engine full-time more comfortably including paying additional project contributors.

Although the website https://amethyst.rs is gone and Archive.org’s Wayback Machine isn’t responding to queries right now, Amethyst essentially gave their blessing to Bevy, as Anderson explicitly called out Amethyst as a backbone and its source of success, as Anderson had the foresight of Amethyst’s struggles. Amethyst tells its contributors, Bevy’s success is your success! They kept the Github Amethyst repository open for a while to address bugs of existing users, but it was archived in April 2022.

Bevy was given a good base, a dedicated and motivated creator and BDFL, and a large community of users and contributors who many I would guess were emotionally invested in being a part of Amethyst. The community and Github are extremely active, with chats in the Discord continuously throughout the day, including some of the core contributors/leaders responding to messages. They’ve even responded to my questions directly!

The documentation is not complete or exhaustive but it’s been very well done for everything I’ve needed; they have examples and unit tests that need to be passed when merging PRs, so there’s almost always a working example of some piece of code you might need to accomplish a common task! They also have automation through a Github bot which, for example, tells code contributors when they have added a “feature” to Bevy but haven’t updated corresponding documentation to match! Their use of development tools, frameworks, and workflows shows a high level of maturity for the project, even though they haven’t reached version 1.0.0 yet.

As of today, their main branch is tracking version 0.15.0-dev while their most recent release version (recommended for most users) is 0.14.2. Bevy (and many projects these days) follow Semantic Versioning, which means for example that code written for 0.14.0 should continue to work even on version 0.14.8 and so on, mostly adding new features or changing the underlying implementations while still remaining backwards-compatible within 0.14, while 0.15.0 can make breaking changes that aren’t compatible with 0.14.*. This means that once they make an official release of 0.15.0 they will recommend for most users to migrate, which can be a challenging task and has led plenty developers to abandon Bevy, but they also write comprehensive migration guides that aim to ease the pain of transfering from one minor version to the next.

We have chosen to track the main branch, i.e. currently 0.15.0-dev. This means that as soon as some functionality we’re using in Bevy introduces breaking changes, our code will break, which will require that we continuously update our code to continue working with the latest-and-greatest of Bevy. As Bevy has just in the past few days made some breaking changes to remove Bundles in favor of following more closely with the more generic System/Querying capabilities of “entities that contain this combination of components” (whereas a Bundle would wrap multiple components into one), Tera had to (and was able to) update her code to render text on the screen properly.

It may be a while before they hit 1.0, but everything so far has been extremely promising. It’s very fortunate that Anderson had a vision and the resources necessary to create this powerful tool, open and free for everyone. I haven’t even talked about the core technologies behind it that I’m most excited about such as the System graphs (constructing a graph of system dependencies to be executed in order at runtime), Query and QueryData! (And of course all of the gamedev must-haves such as graphical rendering and sound!)

Thank you for joining us this week!

Unfortunately, The Wayback Machine isn’t responding when I try to visit at the moment, but maybe it will be responding again by the time you read this. Here are the relevant links:

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.