Native Shell – a Rust runtime for dynamically delivered native UI Native Shell (NSH) has launched as a Rust runtime for cross-platform apps that renders dynamically delivered TSX screens with each platform's own native UI, including UIKit on iOS 15+, Android views on Android 9 (API 28)+, AppKit on macOS 14+, Win32/Direct2D on Windows 10 1809+, GTK 4 on Linux (GTK 4.14+), GPUI on macOS, Windows and Linux, and HTML on the web. Hosts can load TSX modules at run time as signed packages inside a sandbox the host configures, and developers build AI-generated screens with TSX and Tailwind using generated TypeScript declarations and model-readable documentation at nsh.dev/llms.txt. The `nsh` CLI, installable via install script, Homebrew (longbridge/tap/nsh) or PowerShell, handles building and packaging, with hot updates for TSX and a Rust template rooted in src/lib.rs. 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 https://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 https://nsh.dev/llms.txt . - Iterate with TSX hot updates, headless tracing and a single Rust-built nsh CLI 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 https://nsh.dev/docs/installation : 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 and Rust https://rustup.rs | nsh | You can also combine them: TSX screens import your Rust components and modules. See Building with Rust https://nsh.dev/docs/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 https://nsh.dev/docs/installation platform-tools . | Example | What it shows | |---|---| | examples/gallery https://github.com/longbridge/nsh/blob/main/examples/gallery | A tour of what NSH supports: lists, navigation, forms, controls, gestures, animation, images, styles, text, web view and video, fetch | | examples/counter https://github.com/longbridge/nsh/blob/main/examples/counter | The smallest app | | examples/hopper https://github.com/longbridge/nsh/blob/main/examples/hopper | A dark, tabbed dashboard built only from primitives: interactive canvas charts, sliders, menus, animation | | examples/desktop https://github.com/longbridge/nsh/blob/main/examples/desktop | A desktop app with a title bar and menus of its own nsh/desktop | | examples/gallery-rs https://github.com/longbridge/nsh/blob/main/examples/gallery-rs | The gallery written in Rust, with a TSX entry for mixed development | | examples/embed-ios https://github.com/longbridge/nsh/blob/main/examples/embed-ios , examples/embed-android https://github.com/longbridge/nsh/blob/main/examples/embed-android | NSH inside existing native apps, with a native component the app registers | | examples/bench https://github.com/longbridge/nsh/blob/main/examples/bench | Rust components against the same components in TSX | cargo run Licensed under the Apache License, Version 2.0 https://github.com/longbridge/nsh/blob/main/LICENSE-APACHE . 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.