Crates.io | nuit |
lib.rs | nuit |
version | 0.0.4 |
source | src |
created_at | 2023-08-09 00:33:05.157759 |
updated_at | 2024-01-23 03:24:48.011928 |
description | Declarative, cross-platform UI library for Rust that uses native controls |
homepage | https://github.com/fwcd/nuit |
repository | |
max_upload_size | |
id | 939672 |
size | 201,894 |
A declarative, cross-platform UI library for Rust that uses native controls.
Nuit's API takes inspiration from SwiftUI, Xilem, React and a number of other frameworks, while itself using SwiftUI under the hood on macOS.
[!NOTE] Nuit currently requires a nightly Rust toolchain as it uses a number of cutting edge/unstable compiler features, including
With
rustup
this can be configured conveniently on a per-directory basisrustup override set nightly
or, as in this repository, automatically with arust-toolchain.toml
.
use nuit::{Text, VStack, View, Bind, Button, State};
#[derive(Bind)]
struct CounterView {
count: State<i32>,
}
impl CounterView {
fn new() -> Self {
Self { count: State::new(0) }
}
}
impl View for CounterView {
type Body = impl View;
fn body(&self) -> Self::Body {
let count = self.count.clone();
VStack::new((
Text::new(format!("Count: {}", count.get())),
Button::new(Text::new("Increment"), move || {
count.set(count.get() + 1);
})
))
}
}
fn main() {
nuit::run_app(CounterView::new());
}
Running this example, e.g. with cargo run --example counter
, launches: