工具介绍与核心亮点
Native Shell(命令行工具名 nsh)是长桥(Longbridge)团队开源的 Rust 优先原生 UI 框架。它的核心主张是「一次编写,处处原生」:同一套组件、状态与业务逻辑代码,编译后分别落到各平台自己的原生 UI 基础设施上,而不是套一层自绘引擎或 WebView。
- 各平台用各自的原生组件:iOS 走 UIKit + CoreText,Android 用 Android View + StaticLayout,macOS 用 AppKit,Windows 用 Win32 + Direct2D / DirectWrite,Linux 用 GTK 4 + Pango,Web 端直接输出 HTML + CSS。文本输入、选区、输入法与无障碍能力全部来自系统,因此观感与操作手感和原生应用一致。
- 按设备习惯切换交互:框架内建了 Menu、ContextMenu、NavStack 等同时覆盖桌面与手机的交互组件。同一个 Menu,在桌面上从触发点弹出,在手机上从底部以 sheet 形式升起;ContextMenu 桌面是右键,手机是长按。应用侧只写一次。
- 弹性布局:基于 Taffy 实现 Flexbox 与 Grid,支持 Tailwind 式断点(
md:、lg:),也可以在 Rust 里读取window()尺寸做条件渲染。例如聊天应用在宽窗口下并排显示侧边栏、会话列表与消息,在手机上则一次只显示一屏。 - Retained View,稳定 120 FPS:每个元素都是平台长期持有的视图。状态变化只会重新执行读取了该 signal 的表达式,并且每帧只批量提交真正被改动的视图(MountBatch),其余视图保持原样,动画交给原生执行,无需每帧跑 JS。聊天、表单、列表这类常规界面在静止时接近空闲,滚动与动画在 ProMotion 屏幕上可保持 120 FPS。
- 样式与行为分离:
nsh/base提供无样式的基础组件——导航、对话框、菜单、浮层、标签页、复选框、Sheet——由它们负责状态、焦点、键盘与无障碍;视觉部分由你完全自定义,可用 Tailwind 类名或类型化样式。 - 原生组件可真接嵌入:地图、WebView、视频播放器以及宿主注册的任意原生视图,都只是同一视图层级中的子视图,可以和其余界面一起参与布局、裁剪、滚动并处理触摸(
nativeComponent)。
一条工具链,同时服务人和 AI
一个 nsh 可执行文件覆盖创建、构建、类型检查、热重载运行、测试、打包与签名全流程,自带 TSX 打包器与 TypeScript 检查器:
$ nsh init my-app --template rust
$ nsh run my-app --target macos
$ nsh test
$ nsh package my-app --target windows
# --template ts 可改用 TSX
# ios · android · macos · windows · linux · gpui · web
对 AI Agent 特别友好:所有 API 都由 Rust 源码生成类型声明,文档以 llms.txt 形式提供,Agent 可以用同一套命令完成「生成 → 运行 → 测试 → 修复 → 打包」的完整闭环。
测试在每个目标上都会跑
nsh test 先以 headless 方式跑应用测试,再把同样的测试放到 macOS、Windows、Linux、GPUI 窗口、iOS 模拟器、Android 真机或浏览器中执行,并使用平台自己的输入方式,因此跨端行为差异可以在 CI 中被发现,而不是等用户反馈。
发布之后还能继续扩展
在 iOS 用 NshAppView、Android 用 NshView、桌面与 GPUI 应用用 AppView、网页用 createPlayer,即可在任意界面里嵌入一个 NSH 视图,并在运行时加载经过签名的 TSX 模块:
let app = NshAppView()
try app.grantCapabilities(grants)
let info = try await app
.loadPackage(at: file, trust: trust)
// verified, sandboxed, running
这意味着可以在一个屏幕里同时挂载多个模块、复用宿主自己的原生组件,并按自己的节奏推送更新。更进一步,可以让模型按请求生成一个 TSX 模块,服务端校验并签名后,由应用在沙箱中以原生方式渲染——这也是 Native Shell 主打的「用界面回答问题」的 AI 交互形态。
适合谁用
- 想用 Rust 写跨端应用,但不愿接受自绘引擎带来的观感与可访问性损失的团队。
- 需要一套代码同时覆盖移动端、桌面端与 Web 的中小型产品。
- 希望把 AI Agent 接入日常开发流程,让 Agent 直接调用命令行完成构建、测试与打包的开发者。
如何开始使用
- 打开 https://nsh.dev/ 了解框架定位与各平台后端支持情况。
- 阅读 https://nsh.dev/docs/getting-started 完成环境准备。
- 用
nsh init my-app --template rust(或--template ts)初始化项目,nsh run起本地热重载预览,nsh test跑跨端测试,nsh package产出各平台安装包或静态站点。
需要注意,各平台有最低系统版本要求:iOS 15+、Android API 28+、macOS 14+、Windows 10 1809+、Linux GTK 4.14+。