MCPcopy Index your code
hub / github.com/bytemeadow/godot-bevy

github.com/bytemeadow/godot-bevy @v0.11.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.11.0 ↗ · + Follow
3,723 symbols 5,008 edges 150 files 1,234 documented · 33% updated 3d agov0.11.0 · 2026-03-08★ 4989 open issues
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

godot-bevy

Discord Current Crates.io Version Documentation Book Test Status Rust Version license

godot-bevy brings Bevy's powerful ECS to Godot, allowing you to write high-performance game logic in Rust while leveraging Godot's excellent editor and rendering capabilities.


Special thanks to Blaze for their support of this project. They provide high-performance Linux (AMD64 & ARM64) and Apple Silicon macOS runners for GitHub Actions, greatly reducing our automated build times.

📚 Documentation

Read the godot-bevy Book →

The book covers everything you need to know: - Installation and setup - Core concepts and architecture - Plugin system (opt-in features) - Transform system and physics - Input handling - Examples and best practices

🚀 Quick Start

Add to your Cargo.toml:

[dependencies]
godot-bevy = "0.11.0"  # Latest with opt-in plugin system
bevy = { version = "0.18", default-features = false }
godot = "0.4"

Basic example:

use bevy::prelude::*;
use godot::prelude::*;
use godot_bevy::prelude::*;

#[bevy_app]
fn build_app(app: &mut App) {
    // Add the features you need (v0.8+ opt-in plugin system)
    app.add_plugins(GodotTransformSyncPlugin::default())  // Transform sync
        .add_plugins(GodotAudioPlugin);                   // Audio system

    // Print to the Godot console
    godot_print!("Hello from Godot-Bevy!");

    // Add your game systems
    app.add_systems(Update, position_system);
}

// A system is a normal Rust function. This system moves all Node2Ds to the right, such as Sprite2Ds.
//
// The `transform` parameter is a Bevy `Query` that matches all `Transform` components.
// `Transform` is a Godot-Bevy-provided component that matches all Node2Ds in the scene.
// (https://docs.rs/godot-bevy/latest/godot_bevy/plugins/core/transforms/struct.Transform.html)
//
// For more information on Bevy Components, Systems, and Queries, see:
// (https://bevy.org/learn/quick-start/getting-started/ecs/).
fn position_system(mut transform: Query<&mut Transform>) {
    // For single matches, you can use `single_mut()` instead:
    // `if let Ok(mut transform) = transform.single_mut() {`
    for mut transform in transform.iter_mut() {
        // Move the node to the right.
        transform.translation.x += 1.0;
    }
}

🔧 Plugin System (v0.8+)

godot-bevy now uses an opt-in plugin system for maximum efficiency:

// Minimal setup - only core features
#[bevy_app]
fn build_app(app: &mut App) {
    // Scene tree and assets included by default
    app.add_systems(Update, my_systems);
}

// Add specific features as needed
#[bevy_app]
fn build_app(app: &mut App) {
    app.add_plugins(GodotTransformSyncPlugin::default())  // Transform sync
        .add_plugins(GodotAudioPlugin)                    // Audio system
        .add_plugins(BevyInputBridgePlugin);              // Input handling
}

// Or everything at once (like v0.7.x)
#[bevy_app]
fn build_app(app: &mut App) {
    app.add_plugins(GodotDefaultPlugins);
}

Benefits: Smaller binaries, better performance, clearer dependencies. See the Plugin System Guide for details.

🎮 Examples

Check out the examples directory: - 2D Platformer - Physics-based platformer - Dodge the Creeps - Classic arcade game - Simple Movement - Basic transform usage

✨ Inspiration and Acknowledgements

This library was inspired by and originally built upon the work of bevy_godot, which provided similar functionality for Godot 3. godot-bevy extends this concept to support Godot 4 and Bevy 0.16. It has now diverged quite a bit.

⊹ Version Compatibility Matrix

godot-bevy Bevy Godot-Rust Godot
0.11.x 0.18 0.4 4.6.x
0.10.x 0.17 0.4 4.5.x
0.9.2 0.16 0.4 4.5.x
0.9.x 0.16 0.3 4.4.x
0.8.x 0.16 0.3 4.4.x
0.7.x 0.16 0.3 4.4.x

🦀 MSRV

The minimum supported Rust version is 1.88.0.

The MSRV is the minimum Rust version that can be used to compile each crate.

📕 License

godot-bevy is distributed under the terms of both the MIT license and the Apache License (Version 2.0). See LICENSE-APACHE and LICENSE-MIT for details. Opening a pull request is assumed to signal agreement with these licensing terms.

🤝 Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Developing environment

If you're on MacOS or Linux, you can quickly get started developing against this package using https://devenv.sh/, and (optionally) https://direnv.net/. Once they are setup/installed, you can leverage devenv shell in the root of this package to setup a development environment that includes all system dependencies, rust, godot, and other developer tools used in this package. Check out devenv.nix for details. You can, of course, skip this and use system-installed tooling of your own; but keep in mind that your system dependency versions (like Godot) may drift from what other contributors or our CI tooling use.

Extension points exported contracts — how you extend this code

AudioChannelMarker (Interface)
Trait that audio channel marker types must implement [5 implementers]
godot-bevy/src/plugins/audio/channel.rs
SignalDispatch (Interface)
Trait for type-erased signal dispatch that triggers observers [1 implementers]
godot-bevy/src/plugins/signals.rs
AppSceneTreeExt (Interface)
Extension trait for App to register scene tree components [1 implementers]
godot-bevy/src/plugins/core.rs
AudioApp (Interface)
Extension trait for App to add audio channels with automatic system registration [1 implementers]
godot-bevy/src/plugins/audio/plugin.rs
GodotTransformSyncPluginExt (Interface)
Helper trait to easily disable auto sync and configure custom systems [1 implementers]
godot-bevy/src/plugins/transforms/custom_sync.rs

Core symbols most depended-on inside this repo

insert
called by 1839
godot-bevy/src/plugins/scene_tree/plugin.rs
clone
called by 184
godot-bevy/src/interop/godot_resource_handle.rs
get
called by 78
godot-bevy/src/plugins/assets.rs
push
called by 71
godot-bevy/src/plugins/signals.rs
iter
called by 71
godot-bevy/src/plugins/collisions.rs
instance_id
called by 57
godot-bevy/src/interop/godot_access.rs
len
called by 47
godot-bevy/src/plugins/collisions.rs
get
called by 42
godot-bevy/src/plugins/scene_tree/plugin.rs

Shape

Class 2,963
Function 412
Method 299
Enum 32
Interface 17

Languages

Rust98%
Python2%

Modules by API surface

godot-bevy/src/interop/node_markers/node_markers4_6.rs282 symbols
godot-bevy/src/interop/node_markers/node_markers4_5.rs271 symbols
godot-bevy/src/interop/node_markers/node_markers4_4.rs263 symbols
godot-bevy/src/interop/node_markers/node_markers4_3.rs250 symbols
godot-bevy/src/interop/node_markers/node_markers4_2_2.rs237 symbols
godot-bevy/src/interop/node_markers/node_markers4_2_1.rs237 symbols
godot-bevy/src/interop/node_markers/node_markers4_2.rs237 symbols
godot-bevy/src/interop/signal_names/signal_names4_6.rs149 symbols
godot-bevy/src/interop/signal_names/signal_names4_5.rs145 symbols
godot-bevy/src/interop/signal_names/signal_names4_4.rs138 symbols
godot-bevy/src/interop/signal_names/signal_names4_3.rs135 symbols
godot-bevy/src/interop/signal_names/signal_names4_2_2.rs130 symbols

For agents

$ claude mcp add godot-bevy \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page