Native UI in Rust and TSX, embedded in your app or shipped on its own. Native Shell is a Rust engine for cross-platform apps and AI-generated UI. Write your app in Rust, use TSX for dynamically delivered screens, or combine both with shared Rust components. Each platform renders with its own UI: native views on iOS, Android, macOS, Windows and Linux, GPUI in GPUI apps and HTML on the web.
Embed NSH in an existing app or package it as a standalone app. Hosts can load TSX modules at run time as plugins, delivered as signed packages and run in a sandbox the host configures.
Documentation, guides and live demos: nsh.dev.
- Write apps in Rust, TSX, or both, and render with each platform's own UI, sharing the same reactive engine, flexbox and grid layout, system text, input and accessibility.
- Embed in existing native apps alongside components such as maps and web views, or package as standalone apps and static websites.
- Deliver TSX screens at run time with signed packages and host-controlled sandbox capabilities.
- Build AI-generated screens with TSX and Tailwind, generated TypeScript declarations and model-readable documentation .
- Iterate with TSX hot updates, headless tracing and a single Rust-built
nshCLI for building and packaging.
| Platform | Drawn with | Embed with | Requires |
|---|---|---|---|
| iOS | UIKit, CoreText | NshAppView (Swift,NativeShell.xcframework ) |
iOS 15+ |
| Android | Android views, StaticLayout |
NshView (Java / Kotlin,nsh.aar ) |
Android 9 (API 28)+ |
| macOS | AppKit, Core Animation, CoreText | AppView (Rust,nsh-platform-macos ) |
macOS 14+ |
| Windows | Win32, Direct2D, DirectWrite | AppView (Rust,nsh-platform-windows ) |
Windows 10 1809+ |
| Linux | GTK 4, Pango | AppView (Rust,nsh-platform-linux ) |
GTK 4.14+ |
| GPUI (macOS, Windows, Linux) | GPUI (GPUI Fast) | AppView (Rust, a GPUI view,nsh-platform-gpui ) |
macOS, Windows; Linux with Vulkan |
| Web | HTML, CSS | createPlayer (JavaScript) or an iframe |
Modern browsers |
The GPUI backend (nsh run --target gpui, nsh package --target gpui) draws apps with GPUI on all three desktops and
embeds in GPUI and GPUI Kit apps. The web platform (nsh run --target web, nsh package --target web) publishes apps
as static sites and runs the website's live demos.
Install the nsh command (other ways):
macOS / Linux #
curl -fsSL https://nsh.dev/install.sh | sh
Homebrew #
brew install longbridge/tap/nsh
Windows (PowerShell) #
irm https://nsh.dev/install.ps1 | iex
Choose how to write your app:
| Rust | TSX | |
|---|---|---|
| Create | nsh init my-app --rust |
nsh init my-app |
| Write | Rust components, typed styles and signals | TSX components, Tailwind classes and signals |
| Iterate | Rebuild and restart on Rust changes | Hot updates that preserve state |
| Toolchain | nsh andRust |
nsh |
You can also combine them: TSX screens import your Rust components and modules. See Building with Rust for Rust apps and mixed projects.
Run either app on your chosen platform:
iOS #
nsh run my-app --target ios # iOS simulator; requires Xcode
nsh run my-app --target catalyst # Mac Catalyst window on macOS
Android #
nsh run my-app --target android # emulator or device; requires the Android SDK
macOS #
nsh run my-app --target macos # AppKit window
Windows #
nsh run my-app --target windows # Win32 window
Linux #
nsh run my-app --target linux # GTK 4 window
GPUI (macOS, Windows, Linux) #
nsh run my-app --target gpui
Web #
nsh run my-app --target web # open in the browser
The Rust template includes a Cargo project with its root component in src/lib.rs. The TSX template includes
App.tsx, nsh.json and tsconfig.json, with generated TypeScript declarations in .nsh/types for your editor.
Logs and errors show in the terminal. What each platform needs:
Installation.
| Example | What it shows |
|---|---|
examples/gallery |
A tour of what NSH supports: lists, navigation, forms, controls, gestures, animation, images, styles, text, web view and video, fetch |
examples/counter |
The smallest app |
examples/hopper |
A dark, tabbed dashboard built only from primitives: interactive canvas charts, sliders, menus, animation |
examples/desktop |
A desktop app with a title bar and menus of its own ( nsh/desktop ) |
examples/gallery-rs |
The gallery written in Rust, with a TSX entry for mixed development |
examples/embed-ios , examples/embed-android |
NSH inside existing native apps, with a native component the app registers |
examples/bench |
Rust components against the same components in TSX |
cargo run
Licensed under the Apache License, Version 2.0.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this project by you, as defined in the Apache-2.0 license, shall be licensed under Apache-2.0, without any additional terms or conditions.