[dependencies]
fission = { version = "0.10.0", features = ["desktop"] }
cargo install cargo-fission
fission init my-app
cd my-app
fission run
Area | What is exposed |
|---|---|
Application model | GlobalState, Widget, BuildCtxHandle, ViewHandle, typed actions, reducers, selectors, effects, jobs, services, and capabilities. |
UI authoring | Core widgets, high-level widgets, icons, layout, portals, overlays, media/embed widgets, charts, 3D scenes, and design-system support. |
Targets | macOS, Windows, Linux, Web, Android, iOS, Terminal, Static site, and SSR shells behind feature flags. |
Platform integration | Notifications, deep links, NFC, biometrics, passkeys, barcode scanning, camera, clipboard, geolocation, haptics, microphone, Bluetooth, Wi-Fi, and volume control where the host supports them. |
Tooling | The companion fission command handles setup, devices, run, test, package, static-site generation, release content, and distribution workflows. |
Feature | Purpose |
|---|---|
desktop | Desktop shell for macOS, Windows, and Linux. |
web | Browser/WASM shell. |
android / ios / mobile | Mobile shell exports for Android and iOS targets. |
site | Static site shell. |
server | SSR shell. |
terminal-shell | Terminal shell. |
charts | Fission Charts widgets and data-visualization primitives. |
three-d | 3D scene and embed primitives. |
test-driver | Live app testing client support. |
use fission::prelude::*;
#[fission_component]
struct CounterApp {
#[local_state(default = 0)]
count: i32,
}
#[fission_reducer(Increment)]
fn increment(count: &mut i32) {
*count += 1;
}
impl From<CounterApp> for Widget {
fn from(counter: CounterApp) -> Widget {
let (ctx, _) = fission::build::current::<()>();
let count = counter.count();
let increment = ctx.bind_local(Increment, count.clone(), reduce!(increment));
Container::new(Column {
gap: Some(20.0),
children: widgets![
Text::new("Counter").size(32.0),
Text::new(format!("{}", count.get())).size(56.0),
Button {
on_press: Some(increment),
child: Some(Text::new("Increment").into()),
..Default::default()
},
],
..Default::default()
})
.padding_all(32.0)
.into()
}
}
fn main() -> anyhow::Result<()> {
DesktopApp::<(), _>::new(CounterApp {}).run()
}
fission init my-app
fission add-target web android ios
fission devices
fission run --target web
fission test --target web
fission site build --project-dir documentation --release
fission package --project-dir . --target windows --format msix --release
fission distribute --project-dir . --provider github-releases --artifact target/fission/release/windows/msix/artifact-manifest.json
[dependencies]
fission = { version = "0.10.0", features = ["desktop"] }
cargo install cargo-fission
fission init my-app
cd my-app
fission run
Area | What is exposed |
|---|---|
Application model | GlobalState, Widget, BuildCtxHandle, ViewHandle, typed actions, reducers, selectors, effects, jobs, services, and capabilities. |
UI authoring | Core widgets, high-level widgets, icons, layout, portals, overlays, media/embed widgets, charts, 3D scenes, and design-system support. |
Targets | macOS, Windows, Linux, Web, Android, iOS, Terminal, Static site, and SSR shells behind feature flags. |
Platform integration | Notifications, deep links, NFC, biometrics, passkeys, barcode scanning, camera, clipboard, geolocation, haptics, microphone, Bluetooth, Wi-Fi, and volume control where the host supports them. |
Tooling | The companion fission command handles setup, devices, run, test, package, static-site generation, release content, and distribution workflows. |
Feature | Purpose |
|---|---|
desktop | Desktop shell for macOS, Windows, and Linux. |
web | Browser/WASM shell. |
android / ios / mobile | Mobile shell exports for Android and iOS targets. |
site | Static site shell. |
server | SSR shell. |
terminal-shell | Terminal shell. |
charts | Fission Charts widgets and data-visualization primitives. |
three-d | 3D scene and embed primitives. |
test-driver | Live app testing client support. |
use fission::prelude::*;
#[fission_component]
struct CounterApp {
#[local_state(default = 0)]
count: i32,
}
#[fission_reducer(Increment)]
fn increment(count: &mut i32) {
*count += 1;
}
impl From<CounterApp> for Widget {
fn from(counter: CounterApp) -> Widget {
let (ctx, _) = fission::build::current::<()>();
let count = counter.count();
let increment = ctx.bind_local(Increment, count.clone(), reduce!(increment));
Container::new(Column {
gap: Some(20.0),
children: widgets![
Text::new("Counter").size(32.0),
Text::new(format!("{}", count.get())).size(56.0),
Button {
on_press: Some(increment),
child: Some(Text::new("Increment").into()),
..Default::default()
},
],
..Default::default()
})
.padding_all(32.0)
.into()
}
}
fn main() -> anyhow::Result<()> {
DesktopApp::<(), _>::new(CounterApp {}).run()
}
fission init my-app
fission add-target web android ios
fission devices
fission run --target web
fission test --target web
fission site build --project-dir documentation --release
fission package --project-dir . --target windows --format msix --release
fission distribute --project-dir . --provider github-releases --artifact target/fission/release/windows/msix/artifact-manifest.json