whiskerrs/whisker

Build native iOS, Android, web and desktop apps in Rust

Rust

138

1,443 commits

updated Sep 26, 2026

See the code

See what people are saying

README

Whisker — Build cross-platform apps in Rust

Build native iOS, Android, desktop, and web apps in Rust with a fine-grained reactive runtime, Taffy layout, and native Host renderers. No virtual DOM.

crates.io Documentation License


use whisker::prelude::*;

#[whisker::main]
fn app() -> Element {
    render! {
        Counter
    }
}

#[component]
fn counter() -> Element {
    let count = signal(0);
    render! {
        View(style: css!(
            flex_grow: 1.0,
            display: Display::Flex,
            flex_direction: FlexDirection::Column,
            justify_content: JustifyContent::Center,
            align_items: AlignItems::Center,
            gap: px(12),
            background_color: Color::hex(0x0B0B0F),
        )) {
            Text(
                value: computed(move || format!("Count: {}", count.get())),
                style: css!(color: Color::hex(0xFFFFFF), font_size: px(28)),
            )
            View(
                style: css!(
                    padding: (px(10), px(20)),
                    border_radius: px(10),
                    background_color: Color::hex(0x7C5CFF),
                ),
                on_tap: move |_| count.set(count.get() + 1),
            ) {
                Text(value: "+1", style: css!(color: Color::hex(0xFFFFFF)))
            }
        }
    }
}

Whisker hot reload — edit the code, save, and the running app updates in under a second with state intact

Edit, save — the running app hot-reloads in under a second, with state intact.

Get started

cargo install whisker-cli
rustup target add aarch64-apple-ios-sim   # iOS Simulator on Apple silicon
whisker new my-app && cd my-app
whisker run ios          # also: android, web, desktop

Each platform needs its Rust target: aarch64-linux-android for Android (plus the Android SDK, NDK, and a JDK), wasm32-unknown-unknown for Web, and x86_64-apple-ios instead for the iOS Simulator on an Intel Mac. Run whisker doctor to see what is missing, or follow Installation.

whisker run watches your source and hot-patches the running app in under a second, without a restart. Components you didn't edit keep their state.

App metadata and platform settings live in whisker.rs. whisker run and whisker build generate the native projects from it under gen/, so there is nothing else to run. Add plugins with cargo add and configure them there.

Documentation

Everything — installation, core concepts, guides, and the full API reference — lives at whisker.rs/docs.

Status

Pre-alpha. The retained Rust runtime, typed styling, Host renderers, modules, routing, and hot reload work across iOS, Android, Web, and Desktop. APIs may still change before 1.0.

License

Licensed under either of Apache-2.0 or MIT at your option.

Significant stargazers

chansuke

95 followers · starred Jun 2026

Christopher Serr

184 followers · starred Jun 2026

Syntax

117 followers · starred Aug 2026

whiskerrs/whisker

Build native iOS, Android, web and desktop apps in Rust

Rust

138

1,443 commits

updated Sep 26, 2026

See the code

See what people are saying

README

Whisker — Build cross-platform apps in Rust

Build native iOS, Android, desktop, and web apps in Rust with a fine-grained reactive runtime, Taffy layout, and native Host renderers. No virtual DOM.

crates.io Documentation License


use whisker::prelude::*;

#[whisker::main]
fn app() -> Element {
    render! {
        Counter
    }
}

#[component]
fn counter() -> Element {
    let count = signal(0);
    render! {
        View(style: css!(
            flex_grow: 1.0,
            display: Display::Flex,
            flex_direction: FlexDirection::Column,
            justify_content: JustifyContent::Center,
            align_items: AlignItems::Center,
            gap: px(12),
            background_color: Color::hex(0x0B0B0F),
        )) {
            Text(
                value: computed(move || format!("Count: {}", count.get())),
                style: css!(color: Color::hex(0xFFFFFF), font_size: px(28)),
            )
            View(
                style: css!(
                    padding: (px(10), px(20)),
                    border_radius: px(10),
                    background_color: Color::hex(0x7C5CFF),
                ),
                on_tap: move |_| count.set(count.get() + 1),
            ) {
                Text(value: "+1", style: css!(color: Color::hex(0xFFFFFF)))
            }
        }
    }
}

Whisker hot reload — edit the code, save, and the running app updates in under a second with state intact

Edit, save — the running app hot-reloads in under a second, with state intact.

Get started

cargo install whisker-cli
rustup target add aarch64-apple-ios-sim   # iOS Simulator on Apple silicon
whisker new my-app && cd my-app
whisker run ios          # also: android, web, desktop

Each platform needs its Rust target: aarch64-linux-android for Android (plus the Android SDK, NDK, and a JDK), wasm32-unknown-unknown for Web, and x86_64-apple-ios instead for the iOS Simulator on an Intel Mac. Run whisker doctor to see what is missing, or follow Installation.

whisker run watches your source and hot-patches the running app in under a second, without a restart. Components you didn't edit keep their state.

App metadata and platform settings live in whisker.rs. whisker run and whisker build generate the native projects from it under gen/, so there is nothing else to run. Add plugins with cargo add and configure them there.

Documentation

Everything — installation, core concepts, guides, and the full API reference — lives at whisker.rs/docs.

Status

Pre-alpha. The retained Rust runtime, typed styling, Host renderers, modules, routing, and hot reload work across iOS, Android, Web, and Desktop. APIs may still change before 1.0.

License

Licensed under either of Apache-2.0 or MIT at your option.

Significant stargazers

chansuke

95 followers · starred Jun 2026

Christopher Serr

184 followers · starred Jun 2026

Syntax

117 followers · starred Aug 2026

Languages

Rust

83.1%

Swift

8.0%

Kotlin

7.7%

C

1.2%