#channel #bevy #observer

bevy_channel_trigger

Send events via a channels form anywhere (eg. c-ffi) to Bevy Observers

8 releases (4 breaking)

0.5.0 Oct 6, 2025
0.4.0 Apr 26, 2025
0.3.0 Nov 30, 2024
0.2.0 Nov 4, 2024
0.1.3 Nov 3, 2024

#797 in Game dev

Download history 195/week @ 2025-07-23 295/week @ 2025-07-30 171/week @ 2025-08-06 297/week @ 2025-08-13 161/week @ 2025-08-20 50/week @ 2025-08-27 73/week @ 2025-09-03 55/week @ 2025-09-10 97/week @ 2025-09-17 132/week @ 2025-09-24 228/week @ 2025-10-01 174/week @ 2025-10-08 98/week @ 2025-10-15 225/week @ 2025-10-22 149/week @ 2025-10-29 34/week @ 2025-11-05

527 downloads per month
Used in 3 crates

MIT/Apache

220KB
71 lines

bevy_channel_trigger

Following released Bevy versions crates.io docs.rs

Send events via a channel from anywhere (eg. web-dom, c-ffi) to Bevy Observers. Inspired by bevy_crossbeam_event but delivering the events via Bevy Observers instead of EventReader.

schema

example

#[derive(Event)]
struct MyEvent(i32);

fn main() {
    use bevy_channel_trigger::ChannelTriggerApp;

    let mut app = App::new();
    app.add_plugins(MinimalPlugins);

    // create channel
    let sender = app.add_channel_trigger::<MyEvent>();

    // use sender from anywhere:
    thread::spawn(move || {
        let mut counter = 1;
        loop {
            // send events back to bevy
            sender.send(MyEvent(counter));
            thread::sleep(Duration::from_secs(1));
            counter += 1;
        }
    });

    // register an observer to receive the events sent via `sender`
    app.observe(on_event);

    app.run();
}

// regular bevy observer to handle these events coming into the bevy world
fn on_event(trigger: Trigger<MyEvent>) {
    let event = trigger.event();
    println!("trigger with: {}", event.0);
}

Other examples

Our Other Crates

Compatible Bevy Versions

bevy our version
0.17 0.5,main
0.16 0.4
0.15 0.3
0.14 0.1,0.2

License

this crate is dual-licensed under either MIT or Apache 2.0, at your option.

Dependencies

~20MB
~362K SLoC