Ecosystem Crates Reference

Detailed reference for recommended third-party Bevy crates. All versions listed target Bevy 0.15.x. Always verify compatibility before adding a dependency.


Physics

avian3d / avian2d

ECS-native physics engine designed specifically for Bevy. Successor to bevy_xpbd. Preferred for new projects.

# Cargo.toml
avian3d = "0.2"
# or for 2D:
avian2d = "0.2"
#![allow(unused)]
fn main() {
app.add_plugins(avian3d::PhysicsPlugins::default());
}
  • Repo: https://github.com/Jondolf/avian
  • Docs: https://docs.rs/avian3d

bevy_rapier3d / bevy_rapier2d

Rapier physics engine integration. Mature and battle-tested.

bevy_rapier3d = "0.28"
# or for 2D:
bevy_rapier2d = "0.28"
#![allow(unused)]
fn main() {
app.add_plugins(RapierPhysicsPlugin::<NoUserData>::default());
}
  • Repo: https://github.com/dimforge/bevy_rapier
  • Docs: https://docs.rs/bevy_rapier3d

Input

leafwing-input-manager

Declarative input mapping: bind actions to keys, buttons, gamepads, mouse, or virtual axes. Supports combos, chords, and input contexts.

leafwing-input-manager = "0.16"
#![allow(unused)]
fn main() {
app.add_plugins(InputManagerPlugin::<MyAction>::default());
}
  • Repo: https://github.com/Leafwing-Studios/leafwing-input-manager
  • Docs: https://docs.rs/leafwing-input-manager

Assets & Loading

bevy_asset_loader

Declarative asset loading — define asset collections with derive macros, load them during a loading state, get notified when complete.

bevy_asset_loader = "0.22"
#![allow(unused)]
fn main() {
app.add_plugins(AssetLoaderPlugin::new(GameState::Loading, GameState::Playing));
}
  • Repo: https://github.com/NiklasEi/bevy_asset_loader
  • Docs: https://docs.rs/bevy_asset_loader

iyes_progress

Track loading progress across multiple systems. Pairs well with bevy_asset_loader.

iyes_progress = "0.13"
#![allow(unused)]
fn main() {
app.add_plugins(ProgressPlugin::<GameState>::new().with_state(GameState::Loading));
}
  • Repo: https://github.com/IyesGames/iyes_progress
  • Docs: https://docs.rs/iyes_progress

Animation

bevy_tweening

Component and resource tweens — animate transforms, colors, and custom lenses over time with easing functions and sequences.

bevy_tweening = "0.12"
#![allow(unused)]
fn main() {
app.add_plugins(TweeningPlugin);
}
  • Repo: https://github.com/djeedai/bevy_tweening
  • Docs: https://docs.rs/bevy_tweening

UI & Editor

bevy_egui

Immediate-mode egui rendered inside Bevy. Ideal for debug panels, level editors, and dev tools. Not recommended for in-game UI.

bevy_egui = "0.34"
#![allow(unused)]
fn main() {
app.add_plugins(EguiPlugin);
}
  • Repo: https://github.com/mvlabat/bevy_egui
  • Docs: https://docs.rs/bevy_egui

bevy_cosmic_edit

Rich text editing widget using cosmic-text. Supports multi-line editing, selection, clipboard, and custom fonts.

bevy_cosmic_edit = "0.27"
#![allow(unused)]
fn main() {
app.add_plugins(CosmicEditPlugin::default());
}
  • Repo: https://github.com/StaffEngineer/bevy_cosmic_edit
  • Docs: https://docs.rs/bevy_cosmic_edit

Networking

lightyear

Client-prediction and server-authoritative networking. Supports rollback, input delay, entity interpolation, and interest management.

lightyear = "0.19"
#![allow(unused)]
fn main() {
app.add_plugins(lightyear::prelude::server::ServerPlugins::default());
// or
app.add_plugins(lightyear::prelude::client::ClientPlugins::default());
}
  • Repo: https://github.com/cBournhonesque/lightyear
  • Docs: https://docs.rs/lightyear

bevy_replicon

High-level replication: automatic entity spawning on clients, component synchronization, and server RPCs. Transport-agnostic.

bevy_replicon = "0.30"
#![allow(unused)]
fn main() {
app.add_plugins(RepliconPlugins);
}
  • Repo: https://github.com/projectharmonia/bevy_replicon
  • Docs: https://docs.rs/bevy_replicon

bevy_renet

Reliable UDP transport for Bevy. Lower-level than lightyear or replicon — gives you raw channels and connection management.

bevy_renet = "0.0.14"
#![allow(unused)]
fn main() {
app.add_plugins(RenetServerPlugin);
// or
app.add_plugins(RenetClientPlugin);
}
  • Repo: https://github.com/lucaspoffo/renet
  • Docs: https://docs.rs/bevy_renet

Debug & Dev Tools

bevy-inspector-egui

Runtime ECS inspector. Browse all entities, view and edit component values live, inspect resources. Essential during development.

bevy-inspector-egui = "0.28"
#![allow(unused)]
fn main() {
app.add_plugins(bevy_inspector_egui::quick::WorldInspectorPlugin::default());
}
  • Repo: https://github.com/jakobhellermann/bevy-inspector-egui
  • Docs: https://docs.rs/bevy-inspector-egui

bevy_screen_diagnostics

On-screen text overlay showing FPS, entity count, and custom diagnostics. Lightweight, no egui dependency.

bevy_screen_diagnostics = "0.7"
#![allow(unused)]
fn main() {
app.add_plugins(ScreenDiagnosticsPlugin::default())
   .add_plugins(ScreenFrameDiagnosticsPlugin);
}
  • Repo: https://github.com/Lommix/bevy_screen_diagnostics
  • Docs: https://docs.rs/bevy_screen_diagnostics

Tilemap & Level Design

bevy_ecs_tilemap

High-performance tilemap rendering backed by the ECS. Supports multiple layers, animated tiles, and large maps.

bevy_ecs_tilemap = "0.15"
#![allow(unused)]
fn main() {
app.add_plugins(TilemapPlugin);
}
  • Repo: https://github.com/StarArawn/bevy_ecs_tilemap
  • Docs: https://docs.rs/bevy_ecs_tilemap

Particles & VFX

bevy_hanabi

GPU-accelerated particle system. Define effects with spawners, modifiers, and render properties. Handles millions of particles.

bevy_hanabi = "0.14"
#![allow(unused)]
fn main() {
app.add_plugins(HanabiPlugin);
}
  • Repo: https://github.com/djeedai/bevy_hanabi
  • Docs: https://docs.rs/bevy_hanabi

Camera

bevy_pancam

Plug-and-play 2D camera with pan (drag), zoom (scroll), and optional bounds clamping.

bevy_pancam = "0.14"
#![allow(unused)]
fn main() {
app.add_plugins(PanCamPlugin);
// Then add PanCam component to your camera entity
}
  • Repo: https://github.com/johanhelsing/bevy_pancam
  • Docs: https://docs.rs/bevy_pancam

bevy_flycam

Simple 3D fly camera for prototyping. WASD + mouse look, adjustable speed.

bevy_flycam = "0.14"
#![allow(unused)]
fn main() {
app.add_plugins(NoCameraPlayerPlugin);
// Spawns and controls a camera automatically
}
  • Repo: https://github.com/sburris0/bevy_flycam
  • Docs: https://docs.rs/bevy_flycam

Persistence & Serialization

bevy_pkv

Simple key-value store for game settings and save data. Uses sled on native and localStorage on WASM.

bevy_pkv = "0.12"
#![allow(unused)]
fn main() {
app.add_plugins(PkvPlugin::new("MyCompany", "MyGame"));
}
#![allow(unused)]
fn main() {
// Writing
fn save_settings(mut pkv: ResMut<PkvStore>) {
    pkv.set("volume", &0.8f32).expect("failed to save");
}

// Reading
fn load_settings(pkv: Res<PkvStore>) {
    let volume: f32 = pkv.get("volume").unwrap_or(1.0);
}
}
  • Repo: https://github.com/johanhelsing/bevy_pkv
  • Docs: https://docs.rs/bevy_pkv

Audio (Third-Party)

bevy_kira_audio

Advanced audio playback powered by the Kira audio library. Supports spatial audio, audio tweening, multiple channels, and precise timing.

bevy_kira_audio = "0.21"
#![allow(unused)]
fn main() {
app.add_plugins(AudioPlugin);
}
#![allow(unused)]
fn main() {
fn play_bgm(audio: Res<Audio>, assets: Res<AssetServer>) {
    audio.play(assets.load("bgm.ogg")).looped().with_volume(0.5);
}
}
  • Repo: https://github.com/NiklasEi/bevy_kira_audio
  • Docs: https://docs.rs/bevy_kira_audio