Home

Awesome

<div align="center">

Floem

A native Rust UI library with fine-grained reactivity

crates.io docs.rs Discord

</div>

The project is still maturing. We will make occasional breaking changes and add missing features on our way to v1.

Quickstart

Quickstart

use floem::{
    reactive::create_signal,
    views::{button, label, Decorators},
    IntoView,
};

fn app_view() -> impl IntoView {
    // Create a reactive signal with a counter value, defaulting to 0
    let (counter, mut set_counter) = create_signal(0);

    // Create a vertical layout
    (
        // The counter value updates automatically, thanks to reactivity
        label(move || format!("Value: {counter}")),
        // Create a horizontal layout
        (
            button("Increment").action(move || set_counter += 1),
            button("Decrement").action(move || set_counter -= 1),
        ),
    ).style(|s| s.flex_col())
}

fn main() {
    floem::launch(app_view);
}

Features

Inspired by Xilem, Leptos and rui, Floem aims to be a high performance declarative UI library requiring minimal user effort.

To sample Floem's capabilities, check out the repo and run the widget gallery example with cargo.

Widget gallery

To help you master Floem, we provide documentation and code examples.

Contributions

<a href="https://ws.lap.dev/#https://github.com/lapce/floem" target="_blank"> <img src="https://lap.dev/images/open-in-lapdev.svg?version=8" alt="Open in Lapdev"> </a>

Lapdev, developed by the Lapce team, is a cloud dev env service similar to GitHub Codespaces. By clicking the button above, you'll be taken to a fully set up Floem dev env where you can browse the code and start developing. All dependencies are pre-installed, so you can get straight to code.

Contributions welcome! If you'd like to improve how Floem works and fix things, feel free to open an issue or submit a PR. If you'd like a conversation with Floem devs, you can join in the #floem channel on this Discord.