Beet is a framework for building technologies that can people can share, access and make their own like other forms of folk culture like music and story. Beet uses the Entity Component System architecture of Bevy, a modular game engine, to provide a common agnostic paradigm for state and behavior across domains like web, games and robotics.
🚧 Mind your step! 🚧
Beet is under construction, if this project is of interest please come and say hi in the Beetmash Discord Server.
readiness meter
- 🦢 ready to go: documented and tested
- 🐣 near stable: incomplete docs
- 🐉 highly experimental: here be dragons
Beet crates fall into a few main categories.
General patterns and tools for application development.
| Crate | Status | Description |
|---|---|---|
beet_utils |
🦢 | Base level utilities for beet crates |
beet_core |
🦢 | Core utilities and types for other beet crates |
beet_net |
🐣 | Cross-platform networking utilities |
sweet |
🐣 | A delightful cross-platform test runner |
sweet-cli |
🐣 | A delightful cross-platform test runner |
Control flow crates for use in behavior paradigms like behavior trees, utility AI or agentic systems.
world
.spawn((
Name::new("My Behavior"),
Sequence,
children![
(
Name::new("Hello"),
EndWith(Outcome::Pass),
),
(
Name::new("World"),
EndWith(Outcome::Pass),
),
],
))
.trigger_target(GetOutcome)
.flush();| Crate | Status | Description |
|---|---|---|
beet_flow |
🦢 | An ECS control flow library |
beet_spatial |
🐣 | Spatial actions built upon beet_flow |
beet_ml |
🐉 | Machine Learning actions built upon beet_flow |
beet_sim |
🐉 | Game AI simulation primitives built upon beet_flow |
Crates for building and deploying web apps. These crates are very experimental and changing frequently.
#[template]
fn Counter(initial: i32) -> impl Bundle {
let (get, set) = signal(initial);
rsx! {
<button onclick=move |_| set(get() + 1)>
Cookie Count: {get}
</button>
}
}| Crate | Status | Description |
|---|---|---|
beet_dom |
🐉 | Utilities for dom rendering and interaction |
beet_parse |
🐉 | Parsers for various text and token formats |
beet_rsx |
🐉 | An Astro inspired templating system built with bevy |
beet_rsx_combinator |
🐉 | JSX-like parser combinator for Rust |
beet_router |
🐉 | ECS router and server utilities |
beet_build |
🐉 | Codegen and compilation tooling for beet |
beet_design |
🐉 | Design system and components for beet rsx |
beet-cli |
🐉 | Tools for building and deploying beet apps |
beet_site |
🐉 | The beet website, built with beet |
| Crate | Status | Description |
|---|---|---|
beet_agent |
🐉 | ECS agentic workflow patterns |
beet_examples |
🐉 | Bits and pieces for substantial beet examples |
emby |
🐉 | the beetmash ambassador |
beet_mcp |
🐉 | Experimental mcp server |
This chart is for matching a bevy version against a particular beet version.
bevy |
beet |
|---|---|
| 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 |
- Rust nightly
- Just
Note that testing all crates 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. I usually just do the latter.
git clone https://github.com/mrchantey/beet
cd beet
just init-repo
just test-all