Expand description
§Hirola
Hirola is a declarative frontend framework that is focused on simplicity and reactivity.
§Goals
- KISS: A simple and declarative way to build frontend UIs in rust.
- Make it easy to read, extend and share code.
- Frp signals allowing fine-grained reactivity.
- Familiarity: Uses rsx which is very similar to jsx.
§Example
We are going to create a simple counter program.
cargo new counterWith a new project, we need to create an index file which is the entry point and required by trunk
cd counterCreate an index.html in the root of counter. Add the contents below
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Hirola Counter</title>
</head>
<body></body>
</html>Lets add some code to src/main.rs
use hirola::prelude::*;
use hirola::dom::*;
fn counter() -> Dom {
let count = Mutable::new(0i32);
let decrement = count.callback(|s| *s.lock_mut() -= 1);
let increment = count.callback(|s| *s.lock_mut() += 1);
html! {
<>
<button on:click=decrement>"-"</button>
<span>{count}</span>
<button on:click=increment>"+"</button>
</>
}
}
fn main() {
hirola::dom::mount(counter()).unwrap();
}Now lets run our project
trunk serve§Ecosystem
Check out Hirola Docs written with Hirola itself!
Here are some extensions for hirola:
§Milestones
| Status | Goal | Labels |
|---|---|---|
| ✔ | Basic templating with rust and rsx | ready |
| ✔ | Extend functionality with mixins | ready |
| ✔ | Components | ready |
| ✔ | SSR | ready |
| ✔ | Signals | ready |
| 🚧 | Form management | started |
| ⏳ | Markdown templating | pending |
| 🚧 | Styling | started |
| ⏳ | SSG | pending |
§Features
dom(enabled by default) — Enables browser based rendering including websys and wasmbindgenssr— Enables server side rendering
Modules§
- dom
dom - Expose the dom feature
- prelude
- The defaults imports
- signal
- Exposing single item signal
- signal_
vec - Exposing vec signal