Beet is an operating system that lets you access your data and tools wherever you like, however you like.
Beet is built on the Bevy Engine and its Entity Component System, and user data stores are designed around the ATProto PDS. A repo's entry point is main.bsx, the data driven entry point to the program, and a runtime does nothing until given one. See the website documentation for more info.
🚧 Mind your step! 🚧
Beet is under construction, if this project is of interest please come and say hi in the Beet Roomy space.
The beet project closely resembles the bevy project with modules divided into crates which can be selected via feature flags.
readiness meter
- 🦢 ready to go: documented and tested
- 🐣 near stable: incomplete docs
- 🐉 highly experimental: here be dragons
The beet crate re-exports the crates below behind feature flags. Each can also be used standalone.
Cross-platform primitives shared by every other crate.
| Crate | Status | Description |
|---|---|---|
beet_core |
🦢 | Cross-platform types, extension traits and testing |
beet_net |
🐣 | Transport agnostic networking |
beet_action |
🐣 | Entities as functions |
beet_ui |
🐉 | Interface agnostic XML-like UI trees |
beet_router |
🐉 | Transport agnostic routing |
beet_infra |
🐉 | Infrastructure as code, built on OpenTofu |
beet_async |
🐉 | Vendored bevy_async bridge for wasm and exclusive world access |
Behaviors built on beet_action, for paradigms like behavior trees, utility AI and agentic systems.
# #[cfg(feature = "action")]
# async fn run() -> beet::prelude::Result {
use beet::prelude::*;
let outcome = AsyncPlugin::world()
.spawn((Sequence::new(), children![
Log::new("hello"),
Log::new("world"),
]))
.call::<(), Outcome>(())
.await?;
# Ok(()) }| Crate | Status | Description |
|---|---|---|
beet_thread |
🐉 | Multi-actor chat for humans and agents |
beet_spatial |
🐉 | Spatial actions: movement, steering and robotics |
beet_ml |
🐉 | Machine learning actions: embeddings and RL |
| Crate | Status | Description |
|---|---|---|
beet-cli |
🐉 | The primary entrypoint for a vanilla beet app |
beet_extra |
🐉 | Extra components and systems for high-level examples |
bevy |
beet |
|---|---|
| 0.19 | 0.0.9 |
| 0.17 | 0.0.7 |
| 0.16 | 0.0.6 |
| 0.15 | 0.0.4 |
| 0.14 | 0.0.2 |
| 0.12 | 0.0.1 |
Install the beet cli with cargo binstall (or plain cargo install), with --all-features for the full spectrum of examples:
cargo binstall beet-cli --all-features
# or from a checkout, building every capability in
cargo install --path crates/beet-cli --all-featuresEvery example documents itself with a beet command, eg:
beet --main=examples/hello--features verifies the installed binary was compiled with those cargo features, and entries declare their own requirements with <RequireCfg>, so a leaner install fails fast with the full missing list instead of unresolved tags.
When editing beet itself, run the cli from source: cargo run -p beet-cli --features=feat1,feat2 -- <args>.
Note that testing all involves compiling many crates, doing so from scratch usually results in a stack overflow in the rust compiler. To prevent this either run with RUST_MIN_STACK='some_gigantic_number', or just keep re-running the command until its all compiled.
git clone https://github.com/mrchantey/beet
cd beet
just init-repo
just test-core