Bevy 0.20: A Data-Driven Rust Game Engine That Ships Breaking Changes Every Quarter
A refreshingly simple data-driven game engine built in Rust. Once set up, you can quickly try out the examples by cloning this repo and running the following commands: To draw a window with standard functionality enabled, use: Fast Compiles Bevy can be built just fine using default configuration on stable Rust.
At a glance
- What is it?
- Bevy is a modular, data-oriented game engine for Rust that prioritizes parallelism and fast compiles, but its quarterly release cycle and sparse docs mean you must plan for migration work.
- Who is it for?
- Adopt Bevy if you are a Rust developer who values a permissive license, a modular plugin system, and a data-driven ECS that runs in parallel, and you accept a quarterly release cycle with breaking API changes. Do not adopt it if you need a stable API, mature documentation, or a complete feature set today.
- Can I use it commercially?
- Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 1 day ago.
- What is it written in?
- Mainly Rust, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on November 13, 2026, and from our analysis. They are not legal advice.
Star history
- bevyengine/bevy49,725 ★ · +2,246
| Repository | 2026-08-04 | 2026-11-13 |
|---|---|---|
| bevyengine/bevy | 47.5k | 49.7k |
2,246 Stars in the last 101 days, measured from the daily GitHub snapshot. Compare with other projects
Editorial analysis
What Bevy Actually Solves
Bevy targets Rust developers who want a game engine without leaving the language. The README states its design goals: capable, simple, data focused, modular, fast, and productive. Bevy uses an Entity Component System (ECS) to separate data from behavior, and the README says app logic should run quickly and, when possible, in parallel. The intended user is someone who wants a complete 2D and 3D feature set but is willing to trade stability for velocity. The README is blunt: important features are missing, documentation is sparse, and breaking changes arrive every three months. That warning is not buried; it sits near the top. This is a tool for early adopters, not for teams shipping a commercial product on a deadline.
The ECS Architecture and Data Flow
Bevy's architecture is data-oriented, centered on the Entity Component System. In this model, an entity is an ID, components are plain data structures, and systems are functions that operate on component data. The README mentions the ECS paradigm as a core design goal. The data flow is straightforward: you define components, write systems that query those components, and register them in an App. Bevy runs systems in parallel when dependencies allow, which is the 'fast' goal in practice. The example in the README shows the minimal app: App::new().add_plugins(DefaultPlugins).run(). That DefaultPlugins bundle pulls in rendering, input, windowing, and other standard functionality. The modular aspect means you can replace DefaultPlugins with a custom set, using only what you need. This is not a new idea, but Bevy's implementation is deeply Rust-native, avoiding a scripting layer or a separate editor.
Getting Started: Commands and the Fast Compiles Path
The README gives two concrete paths. First, clone the repo, checkout the 'latest' tag, and run an example: git checkout latest, then cargo run --example breakout. That runs the breakout example directly from source. Second, for your own project, the minimal code is a few lines using bevy::prelude::*. The setup guide at bevy.org covers environment configuration. For faster iterative compiles, the README points to a 'fast compiles' setup described in the Setup guide. The key fact is that Bevy builds on stable Rust with default configuration, so you are not forced into a nightly toolchain just to compile. The examples directory is the practical way to learn, as the README calls it 'dedicated, runnable examples' for specific concepts.
The Quarterly Release Train and Migration Burden
Bevy's release schedule is a train: a new version with breaking API changes approximately every three months. The README explicitly warns about this and provides migration guides, but it does not guarantee easy migrations. This is the single biggest operational constraint. If you adopt Bevy, you are committing to regular API churn. The migration guides exist, but the README's own language is cautious: 'we can't guarantee migrations will always be easy.' For a game project, this means budgeting time for porting code every quarter. The upside is that the engine evolves quickly, incorporating Rust language improvements. The downside is that your codebase is never stable. This is a deliberate trade-off, and the README does not sugarcoat it. If you cannot handle that churn, Bevy is the wrong tool.
Feature Flags: Modularity in Practice
Bevy ships with a cargo features list, documented in docs/cargo_features.md. This is how the modular goal becomes concrete. You can enable only the subsystems you need, which directly affects compile time and binary size. For example, you might disable 3D rendering if you only build a 2D game, or disable audio if you do not use it. The README says the features allow you to customize the Bevy feature set for your use-case. This is a real advantage over monolithic engines, but it also adds complexity. You need to know which feature corresponds to which functionality, and the list is long. For a small project, the default features may be enough, but for a serious project, you will spend time tuning the feature set.
Licensing: Dual MIT/Apache, But Not Uniform
Bevy is dual-licensed under MIT and Apache-2.0, at your option. That is the standard in the Rust ecosystem, and the README explains the rationale. However, there is a catch: some crates inside the repository carry additional copyright notices and license terms, generally BSD-like. The README says to check each crate's License header. The assets in the repository, used for examples, fall under different open licenses and are not distributed with the published crates. For a developer, this means you can use Bevy in a commercial project with a permissive license, but you must verify the license of any crate you depend on, especially if you vendor code. The dual-licensing gives you flexibility, but the per-crate exceptions mean you cannot assume uniform licensing across the entire engine. This is a real due-diligence step.
Alternatives: How Bevy Differs from Godot and Amethyst
The obvious alternative is Godot, which is a full editor-based engine with a scene system and GDScript. Bevy has no built-in editor; you write Rust code and run it. That is a fundamental difference in approach. Godot's editor is a visual tool, while Bevy's workflow is code-first. Another alternative is Amethyst, another Rust ECS engine, but Amethyst is not actively maintained, whereas Bevy has regular releases. If you want a visual editor, Bevy is the wrong choice. If you want to stay in Rust and avoid a scripting language, Bevy is a natural fit. The trade-off is that you give up the editor and gain tighter Rust integration.
Maintenance and Upgrade Cost
The maintenance cost is directly tied to the release train. Every three months, a new version breaks the API. The README provides migration guides, but they are not guaranteed to be easy. You will spend time reading changelogs and updating your code. The MSRV tracks the latest stable Rust, so you must also keep your toolchain current. This is a maintenance burden that you do not see with a stable API engine. On the positive side, Bevy is actively developed, with recent releases v0.20.0 and v0.20.1 in the repository data, so you get bug fixes and new features. The upgrade cost is real, but the project's own warning is the best guide: use it only if you are willing to work in this environment. For a hobby project, the churn is manageable. For a long-term product, it is a risk.
Editorial conclusion
Adopt Bevy if you are a Rust developer who values a permissive license, a modular plugin system, and a data-driven ECS that runs in parallel, and you accept a quarterly release cycle with breaking API changes. Do not adopt it if you need a stable API, mature documentation, or a complete feature set today. Before committing, verify your target platform's support in the cargo features list, check the migration guide for the version you plan to use, and confirm your Rust toolchain matches the MSRV, which tracks latest stable.
Frequently asked questions
Is the Bevy engine free?
Yes. The README states that Bevy is free and open-source forever, and the package is published under MIT OR Apache-2.0, so you pick either licence. Making it is not free: the project asks readers to sponsor the work and says outright that it is not free to make.
What game engine is written in Rust?
Bevy, whose primary language is Rust. Its manifest sets edition = 2024 and rust-version = 1.97.1, and the project describes itself as a data-driven game engine and app framework aiming at a complete 2D and 3D feature set.
Does Bevy ship an editor?
No editor appears in the repository's top-level entries, which cover crates/, src/, tools/, docs/, examples/ and benches/ but no editor application. The documented way in is the Setup guide, the Quick Start Guide and the runnable examples.
How often does a Bevy upgrade break existing code?
A release containing breaking API changes lands approximately once every 3 months. Migration guides are published for them, and the same warning says the maintainers cannot guarantee migrations will always be easy.
What Rust toolchain does the Bevy main branch need?
The package manifest sets rust-version = 1.97.1 and version = 0.20.0-dev. The README adds that the minimum supported Rust version is generally close to the latest stable release, because the engine relies heavily on compiler and language improvements.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/bevyengine-bevy)Star history chart for your README
[](https://hysenlabs.com/projects/bevyengine-bevy)Was this useful?