#audio-player #firewheel #bevy

bevy_seedling

A sprouting integration of the Firewheel audio engine

19 unstable releases (4 breaking)

Uses new Rust 2024

0.7.2 Mar 22, 2026
0.7.0 Jan 26, 2026
0.6.1 Nov 19, 2025
0.4.3 Jun 13, 2025
0.3.0 Mar 24, 2025

#76 in Audio

Download history 194/week @ 2025-12-17 172/week @ 2025-12-24 80/week @ 2025-12-31 119/week @ 2026-01-07 287/week @ 2026-01-14 289/week @ 2026-01-21 333/week @ 2026-01-28 520/week @ 2026-02-04 865/week @ 2026-02-11 259/week @ 2026-02-18 345/week @ 2026-02-25 224/week @ 2026-03-04 273/week @ 2026-03-11 288/week @ 2026-03-18 206/week @ 2026-03-25 230/week @ 2026-04-01

1,021 downloads per month
Used in 5 crates (4 directly)

MIT/Apache

420KB
7.5K SLoC

crates.io docs.rs

A sprouting integration of the Firewheel audio engine for Bevy.

bevy_seedling is powerful, flexible, and fast. You can play sounds, apply effects, and route audio anywhere. Creating and integrating custom audio processors is simple.

Getting started

First, you'll need to add the dependency to your Cargo.toml. Note that you'll need to disable Bevy's bevy_audio feature, meaning you'll need to specify quite a few features manually!

Example `Cargo.toml`
[dependencies]
bevy_seedling = "0.7.2"
bevy = { version = "0.18.0", default-features = false, features = [
  # 2d
  "2d_bevy_render",
  "default_app",
  "picking",
  "scene",

  # 3d
  "3d_bevy_render",

  # ui
  "ui_api",
  "ui_bevy_render",

  # default_platform
  "android-game-activity",
  "bevy_gilrs",
  "bevy_winit",
  "default_font",
  "multi_threaded",
  "std",
  "sysinfo_plugin",
  "wayland",
  "webgl2",
  "x11",
] }

Then, you'll need to add the SeedlingPlugin to your app.

use bevy::prelude::*;
use bevy_seedling::prelude::*;

fn main() {
    App::default()
        .add_plugins((DefaultPlugins, SeedlingPlugin::default()))
        .run();
}

Once you've set it all up, playing sounds is easy!

fn play_sound(mut commands: Commands, server: Res<AssetServer>) {
    // Play a sound!
    commands.spawn(SamplePlayer::new(server.load("my_sample.wav")));

    // Play a sound... with effects :O
    commands.spawn((
        SamplePlayer::new(server.load("my_ambience.wav")).looping(),
        sample_effects![LowPassNode { frequency: 500.0 }],
    ));
}

The crate docs provide an overview of bevy_seedling's features, and the repository's examples should help you get up to speed on common usage patterns.

Feature flags

Flag Description Default
reflect Enable bevy_reflect derive macros. Yes
rand Enable the RandomPitch component. Yes
wav Enable WAV format and PCM encoding. Yes
ogg Enable Ogg format and Vorbis encoding. Yes
mp3 Enable mp3 format and encoding. No
mkv Enable mkv format. No
adpcm Enable adpcm encoding. No
flac Enable FLAC format and encoding. No
web_audio Enable the multi-threading web backend. No
hrtf Enable HRTF Spatialization. No
hrtf_subjects Enable all HRTF embedded data. No
loudness Enable LUFS analyzer node. No
stream Enable CPAL input and output stream nodes. No
resample_inputs Enable audio input resampling. No
dev Enable helpful features for development. No
entity_names Add Names to node and sample entities. No

Bevy version compatibility

bevy bevy_seedling
0.18 0.7
0.17 0.6
0.16 0.4, 0.5
0.15 0.3

License

Licensed under either of Apache License, Version 2.0 or MIT license at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Dependencies

~43–84MB
~1.5M SLoC