Beet

Beet

Bevy Everywhere

Build applications that grow with Bevy ECS at every layer of the stack.

🚧 Mind your step! 🚧Beet is under construction, basic development workflows are incomplete and untested. If this project is of interest please come and say hi in thebevy/beet discord channel.

Very Bevy

  • 100% Open
    Beet inherits Bevy's MIT/Apache licenses
  • 100% Bevy
    Bevy primitives all the way down, including the beet cli!

Very Bevy Web UI


#[template]
fn Counter(input: u32) -> impl Bundle {
	let (value, set_value) = signal(input);
	rsx! {
		<div>
			<button onclick={move |_| set_value(value() + 1)}>
				"Count: " {value}
			</button>
		</div>
	}
}

Very Bevy Server Actions

Pop open the dev tools to see your requests in flight!


// actions/add.rs
pub async fn get(input: JsonQuery<(i32, i32)>) -> Json<i32> {
	Json(input.0 + input.1)
}

// components/server_counter.rs
#[template]
pub fn ServerCounter(initial: i32) -> impl Bundle {
	let (get, set) = signal(initial);

	let onclick = move |_: Trigger<OnClick>| {
			spawn_local(async move {
				set(actions::add(get(), 1).await.unwrap());
			});
	};

	rsx! {
		<div>
			<Button
				variant=ButtonVariant::Outlined
				onclick=onclick>
				Server Cookie Count: {get}
			</Button>
		</div>
	}
}

Very Bevy Behavior


#[template]
fn SayHello(name: String) -> impl Bundle {
	(
		Name::new("My Behavior"),
		Sequence,
		RunOnSpawn,
		children![
			(
				Name::new("Hello"),
				ReturnWith(RunResult::Success)
			),
			(
				Name::new(name),
				ReturnWith(RunResult::Success)
			)
		]
	)
}