Skip to content

lapce/floem

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

37c3ac5 · Nov 28, 2023
Nov 7, 2023
Nov 23, 2023
Nov 14, 2023
Nov 2, 2023
Nov 28, 2023
Nov 2, 2023
Nov 2, 2023
Feb 7, 2023
Apr 13, 2023
Nov 11, 2023
Apr 20, 2023
Nov 14, 2023

Repository files navigation

Floem

A native Rust UI library with fine-grained reactivity

It's still early days so expect lots of things missing!

fn app_view() -> impl View {
    // create a counter reactive signal with initial value 0
    let (counter, set_counter) = create_signal(0);

    // create user interface with Floem view functions
    stack((
        label(move || format!("Value: {}", counter.get())),
        stack((
            text("Increment")
                .on_click(move |_| {
                    set_counter.update(|value| *value += 1);
                    EventPropagation::Stop
                }),
            text("Decrement")
                .on_click(move |_| {
                    set_counter.update(|value| *value -= 1);
                    EventPropagation::Stop
                }),
        )),
    ))
}

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

Features

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

  • Cross-platform support: Supports Windows, macOS and Linux with rendering using Wgpu. In case a GPU is unavailable, a CPU renderer powered by tiny-skia will be used.
  • Fine-grained reactivity: The entire library is built around reactive primitives inspired by leptos_reactive. The reactive "signals" give the user a nice way to do reactive state management while maintaining very high performance.
  • Performance: The view tree is only run once, so the user can't accidentally put something expensive in the view generation function which slows down the whole application. The library also provides tools to help users write performant UI code. Check out the high performance virtual list example
  • Flexbox layout: Using taffy, the library provides the Flexbox (or Grid) layout system, which can be applied to any View node.

Contributions

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.