| Crates.io | bevy_spacetimedb_macros |
| lib.rs | bevy_spacetimedb_macros |
| version | 1.0.0 |
| created_at | 2025-04-15 11:39:14.10785+00 |
| updated_at | 2025-08-09 16:51:03.807257+00 |
| description | Macros for bevy_spacetimedb |
| homepage | |
| repository | https://github.com/JulienLavocat/bevy_spacetimedb |
| max_upload_size | |
| id | 1634322 |
| size | 9,780 |
This plugin will provide you with:
StdbConnection to call your reducers, subscribe to tables, etc.StdbConnectedEvent, StdbDisconnectedEvent, StdbConnectionErrorEvent as Bevy's EventsReaderEventsReader:
ReadInsertEvent<T>ReadUpdateEvent<T>ReadInsertUpdateEvent<T>ReadDeleteEvent<T>Check the example app in /example_app for a complete example of how to use the plugin.
This plugin is compatible with Bevy 0.15.x and 0.16.x, the latest version of the plugin is compatible with Bevy 0.16.x.
| bevy_spacetimedb version | Bevy version |
|---|---|
| <= 0.3.x | 0.15.x |
| >= 0.4.x | 0.16.x |
cargo add bevy_spacetimedbApp::new()
.add_plugins((MinimalPlugins, LogPlugin::default()))
.add_plugins(
StdbPlugin::default()
.with_uri("http://localhost:3000")
.with_module_name("chat")
.with_run_fn(DbConnection::run_threaded)
.add_table(RemoteTables::lobby, TableEvents::all())
.add_table(RemoteTables::user, TableEvents::all())
.add_reducer::<CreateLobby>()
.add_reducer::<SetName>(),
)
StdbDisconnectedEvent and StdbConnectionErrorEventfn on_connected(
mut events: ReadStdbConnectedEvent,
stdb: Res<StdbConnection<DbConnection>>,
) {
for _ in events.read() {
info!("Connected to SpacetimeDB");
// Call any reducers
stdb.reducers()
.my_super_reducer("A suuuuppeeeeer argument for a suuuuppeeeeer reducer")
.unwrap();
// Subscribe to any tables
stdb.subscribe()
.on_applied(|_| info!("Subscription to players applied"))
.on_error(|_, err| error!("Subscription to players failed for: {}", err))
.subscribe("SELECT * FROM players");
// Access your database cache (since it's not yet populated here this line might return 0)
info!("Players count: {}", stdb.db().players().count());
}
}
fn on_player_inserted(mut events: ReadInsertEvent<Player>, mut commands: Commands) {
for event in events.read() {
commands.spawn(Player { id: event.row.id });
info!("Player inserted: {:?} -> {:?}", event.row);
}
}
fn on_player_updated(mut events: ReadUpdateEvent<Player>) {
for event in events.read() {
info!("Player updated: {:?} -> {:?}", event.old, event.new);
}
}
fn on_player_insert_update(mut events: ReadInsertUpdateEvent<Player>, q_players: Query<Entity, Player>) {
for event in events.read() {
info!("Player deleted: {:?} -> {:?}", event.row);
// Delete the player's entity
}
}
fn on_player_deleted(mut events: ReadDeleteEvent<Player>, q_players: Query<Entity, Player>) {
for event in events.read() {
info!("Player deleted: {:?} -> {:?}", event.row);
// Delete the player's entity
}
}
StdbConnectionYou can use Res<StdbConnection<DbConnection>> to get the resource but this is
quite verbose, you can create the following type alias for convenience:
pub type SpacetimeDB<'a> = Res<'a, StdbConnection<DbConnection>>;
fn my_system(stdb: SpacetimeDB) {
// Use the `DbConnection` type alias
stdb.reducers().my_reducer("some argument").unwrap();
}