arora 0.1.0

Opinionated Arora runtime: an engine pre-wired with the native behavior-tree control nodes and the Semio backend.
[package]
name = "arora"
version = "0.1.0"
edition = "2021"
description = "Opinionated Arora runtime: an engine pre-wired with the native behavior-tree control nodes and the Semio backend."
license = "MIT"

[lib]
name = "arora"
path = "src/lib.rs"

[[bin]]
name = "arora"
path = "src/main.rs"
# The binary is the headless Studio device runner, so it needs the opt-in
# studio-bridge feature. On wasm, build the library with --no-default-features.
required-features = ["studio-bridge"]

# A worked example of a device-specific arora (custom HAL injected into
# arora::launch). Native-only, like the binary.
[[example]]
name = "device"
required-features = ["native"]

[features]
default = ["native"]
# Native build: the wasmtime + dynamic-library engine hosts and the launcher.
# Build for wasm32 with --no-default-features (the browser host is selected by
# target cfg).
native = [
    "dep:tokio",
    "arora-engine/wasmtime-host",
    "arora-engine/native-host",
]
# The Semio Studio connection: the studio-bridge Zenoh connector plus the
# headless device runner (Firebase auth, token storage, app-data dir, logging)
# that registers the device with Studio. Opt-in: a plain arora runtime (e.g.
# Vizij hosting a local bridge) does not talk to the Semio store at all.
studio-bridge = [
    "native",
    "dep:arora-studio-bridge-client",
    "dep:crypto_secretbox",
    "dep:dirs",
    "dep:rustls",
    "dep:env_logger",
    "dep:log",
]

[dependencies]
arora-engine = { path = "../arora-engine", version = "0.1", default-features = false }
arora-behavior-tree = { path = "../arora-behavior-tree", version = "0.1" }
arora-behavior = { path = "../arora-behavior", version = "0.1" }
arora-types = { path = "../arora-types", version = "1.4" }
anyhow = "1"
tokio = { version = "1", features = ["rt-multi-thread", "macros"], optional = true }
uuid = { version = "1", features = ["serde", "v4"] }
# The three interfaces the runtime loop wires around the shared state.
arora-hal = { path = "../arora-hal", version = "0.1" }
arora-bridge = { path = "../arora-bridge", version = "1" }
arora-simple-data-store = { path = "../arora-simple-data-store", version = "0.1" }
futures = "0.3"
# The default Bridge implementation: the studio-bridge Zenoh connector, published
# as `arora-studio-bridge-client` (it also provides the Firebase config types the
# headless runner needs, under `firestore_support::options`). Native-only
# (zenoh/firestore) and optional, so the wasm build of the library stays lean.
# arora bundles it so a device-specific binary only has to provide its own HAL.
arora-studio-bridge-client = { version = "1", optional = true }
# Headless device-runner deps (native-only, optional). Versions track
# studio-bridge/headless, the runner this is ported from.
crypto_secretbox = { version = "0.1.1", optional = true }
dirs = { version = "6", optional = true }
env_logger = { version = "0.11", optional = true }
log = { version = "0.4", optional = true }
rustls = { version = "0.23.27", default-features = false, features = ["ring"], optional = true }

[dev-dependencies]
async-trait = "0.1"
# `time` (tests only): the runtime-loop tests sleep between `step`s to give the
# spawned io pump wall-clock time to deliver events. The runtime itself needs no
# timers (the pump is futures-only).
tokio = { version = "1", features = ["time"] }