bevy_stdb 0.11.0

A Bevy-native integration for SpacetimeDB with table messages, subscriptions, and reconnect support.
Documentation
//! Bevy integration for [SpacetimeDB](https://spacetimedb.com).
//!
//! `bevy_stdb` adapts SpacetimeDB's connection and callback model into
//! Bevy-style resources, systems, and read-only message readers. Everything is
//! configured through [`StdbPlugin`](crate::prelude::StdbPlugin).
//!
//! # Architecture
//!
//! The crate is organized around four lifecycle concerns:
//!
//! - **Connection** — Manage the connection lifecycle on demand via
//!   [`StdbCommands`](crate::prelude::StdbCommands), and expose the active
//!   connection as [`StdbConnection`](crate::prelude::StdbConnection).
//! - **Tables** — Register internal channels for Bevy
//!   [`Message`](bevy_ecs::prelude::Message) values once at startup and
//!   re-bind SDK table callbacks whenever a connection becomes active. Row
//!   changes are consumed through read-only reader aliases such as
//!   [`ReadInsertMessage`](crate::prelude::ReadInsertMessage),
//!   [`ReadDeleteMessage`](crate::prelude::ReadDeleteMessage),
//!   [`ReadUpdateMessage`](crate::prelude::ReadUpdateMessage), and
//!   [`ReadInsertUpdateMessage`](crate::prelude::ReadInsertUpdateMessage).
//! - **Subscriptions** — Store subscription intent separately from the live
//!   connection via [`StdbSubscriptions`](crate::prelude::StdbSubscriptions)
//!   so queries are automatically re-applied after reconnects.
//! - **Reconnect** — Optionally retry failed connections with configurable
//!   backoff via [`StdbReconnectOptions`](crate::prelude::StdbReconnectOptions).
//!
//! # Quick start
//!
//! ```ignore
//! use bevy::prelude::*;
//! use bevy_stdb::prelude::*;
//! // Generated by `spacetime generate`:
//! use module_bindings::{DbConnection, RemoteModule, PlayerRow};
//!
//! #[derive(Clone, Eq, PartialEq, Hash)]
//! enum SubKey { Players }
//!
//! fn main() {
//!     App::new()
//!         .add_plugins(DefaultPlugins)
//!         .add_plugins(
//!             StdbPlugin::<DbConnection, RemoteModule>::default()
//!                 .with_database_name("my_module")
//!                 .with_uri("http://localhost:3000")
//!                 .with_background_driver(DbConnection::run_threaded)
//!                 .with_reconnect(StdbReconnectOptions::default())
//!                 .with_subscriptions::<SubKey>()
//!                 .add_table::<PlayerRow>(|reg, db| reg.bind(db.player()))
//!         )
//!         .add_systems(Update, (on_player_insert, subscribe_players_on_connect))
//!         .run();
//! }
//!
//! fn subscribe_players_on_connect(
//!     mut connected: ReadStdbConnectedMessage,
//!     mut subs: ResMut<StdbSubscriptions<SubKey, RemoteModule>>,
//! ) {
//!     if connected.read().next().is_some() {
//!         subs.subscribe_sql(SubKey::Players, "SELECT * FROM player");
//!     }
//! }
//!
//! fn on_player_insert(mut msgs: ReadInsertMessage<PlayerRow>) {
//!     for msg in msgs.read() {
//!         info!("player inserted: {:?}", msg.row);
//!     }
//! }
//! ```
//!
//! See the [`StdbPlugin`](crate::prelude::StdbPlugin) docs for the full
//! builder API and the [README](https://github.com/onx2/bevy_stdb)
//! for detailed guides on connection driving, table registration,
//! subscriptions, and delayed connections.

#[cfg(all(
    target_arch = "wasm32",
    target_os = "unknown",
    not(feature = "browser"),
    not(docsrs),
))]
compile_error!("Enable the `browser` feature when compiling for `wasm32-unknown-unknown`.");

mod alias;
mod channel_bridge;
mod commands;
mod connection;

mod message;
mod plugin;
mod set;
mod subscription;
mod table;

/// Common imports for `bevy_stdb`.
pub mod prelude {
    pub use crate::{
        alias::{
            ReadDeleteMessage, ReadInsertMessage, ReadInsertUpdateMessage,
            ReadStdbConnectErrorMessage, ReadStdbConnectedMessage, ReadStdbDisconnectedMessage,
            ReadStdbSubscriptionAppliedMessage, ReadStdbSubscriptionErrorMessage,
            ReadUpdateMessage,
        },
        commands::{StdbCommands, StdbConnectOptions},
        connection::{StdbConnection, StdbReconnectOptions},
        plugin::StdbPlugin,
        set::StdbSet,
        subscription::StdbSubscriptions,
    };
}