17 unstable releases (3 breaking)

0.4.0 Jul 27, 2023
0.3.0 Oct 21, 2022
0.2.2 Dec 14, 2021
0.1.10 Aug 13, 2020
0.1.8 Jul 31, 2020

#5 in #hobo

Download history 30/week @ 2024-04-03 1/week @ 2024-06-05 2/week @ 2024-06-12

83 downloads per month
Used in 2 crates

MIT license

7KB
69 lines

hobo

Crate Info API Docs

hobo is an opinionated, batteries-included Rust frontend framework. Works on stable Rust.
STILL WIP although used in production by GR Digital.
Check out the Book!

Notable features:

  • no virtual DOM - html elements are just components added to entities and can be accessed directly via web_sys::HtmlElement
  • no Model-View-Update (aka Elm architecture) - state management is manual, usually via Entity-Component relations
  • no HTML macros - just Rust functions
  • built-in macro-based styling, kind of like CSS-in-JS except it's just Rust
  • reactivity support via futures-signals
  • Entity-Component based approach allowing flexible state propagation and cohesion between elements without coupling or a need for global store or state

Sneak peek:

pub use hobo::{
    prelude::*,
    create as e,
    signals::signal::{Mutable, SignalExt}
};

fn counter() -> impl hobo::AsElement {
    let counter = Mutable::new(0);

    e::div()
        .class((
            css::display!(flex),
            css::flex_direction!(column),
            css::width!(400 px),
        ))
        .child(e::div()
            .text_signal(counter.signal().map(|value| {
                format!("Counter value is: {value}")
            }))
        )
        .child(e::button()
            .text("increment")
            .on_click(move |_| *counter.lock_mut() += 1)
        )
}

Dependencies

~3MB
~57K SLoC