高性能:120 FPS,低 CPU
在 iOS 与 macOS 的 ProMotion 屏幕上,滚动和动画稳定在 120 FPS,CPU 占用很低。响应式图、渲染器、布局和每个模块都是 Rust,JS 只运行应用自己的代码;每一帧只有一次跨线程的批量提交,原生动画不经过 JS 逐帧计算。
- 120 FPS
- Rust
- Taffy
- QuickJS
NSH 在 iOS、Android、macOS、Windows、Linux、GPUI 和 Web 上运行用 TSX 编写的模块——由模型或你的团队编写——可以嵌入你已经发布的应用,也可以独立发布成应用:经过签名校验,运行在宿主配置的沙箱里,用每个平台自己的界面技术绘制。
nsh run App.tsx --target <platform>生成的界面要是真正的原生界面、跑得流畅,能作为插件装进已经发布的应用或独立成应用,还要好写、可验证、跑得安全。NSH 的每一层都围绕这几点设计。
在 iOS 与 macOS 的 ProMotion 屏幕上,滚动和动画稳定在 120 FPS,CPU 占用很低。响应式图、渲染器、布局和每个模块都是 Rust,JS 只运行应用自己的代码;每一帧只有一次跨线程的批量提交,原生动画不经过 JS 逐帧计算。
模块在手机上由 UIKit 与 Android 视图组成,在桌面上由 AppKit、GTK 4 以及用 Direct2D 绘制的 Win32 窗口呈现,在 GPUI 应用里由 GPUI 绘制,在浏览器里是网页的 HTML。地图、网页视图这类原生组件可以直接嵌入,与界面自然叠放;系统的文本、输入法和无障碍都原样可用。
在已有应用的任意页面放一个 NshAppView(iOS)、NshView(Android)、AppView(桌面,以及作为 GPUI 视图放进 GPUI 应用),或在网页里用 createPlayer 加载,运行时动态加载模块,新功能随时上线;同样的模块也能用 nsh package 打成独立应用或静态网站。
一个模块就是一个 TSX 文件:组件、信号和 Tailwind 类,正是模型最擅长写的格式。每个元素、属性和模块都有从 Rust 源码生成的 TypeScript 声明,文档以 llms.txt 提供给模型。
nsh trace 无界面地运行模块并报告错误;编译器还能在进程内或浏览器里运行。生成、检查、重试。
每个视图一个 QuickJS 虚拟机,内存、调用时长和节点数都有上限,只能使用宿主授予的能力。
模块以 Ed25519 签名的 .nshpkg 到达;发布密钥由离线根密钥认证,设备端检查吊销列表。
首要用途是 AI 生成的界面;同一套机制也让原生应用可以扩展,或者直接组成一个独立应用。
模型为每次请求写一个模块,服务器检查并签名,应用在沙箱里原生地显示它。
import { mount, signal, View } from "nsh";
function Answer() {
const range = signal("1W");
return <View class="gap-3 p-4">…</View>;
}
mount(Answer);在任意页面嵌入 NshAppView(iOS)、NshView(Android)、AppView(macOS、Windows、Linux 与 GPUI 应用)或在网页里用 createPlayer,承载团队、合作方或用户之后编写的功能。
let app = NshAppView()
try app.grantCapabilities(grants)
let info = try await app
.loadPackage(at: file, trust: trust)
// verified, sandboxed, running
// NshView on Android, AppView elsewhere同样的模块可以用 nsh package 打成可安装的 iOS、Android、macOS、Windows、Linux 应用,用 GPUI 运行的桌面应用,或一个静态网站,适合试用和小工具。
$ nsh init my-app
$ nsh run my-app --target macos
$ nsh package my-app --target windows
# ios · android · macos · windows
# linux · gpui · web服务器负责生成、检查和签名;设备负责校验、隔离和渲染。信任边界清清楚楚。
同一个 bundle 和同一个 Rust 运行时:在每个平台上,模块都可以嵌入已有的应用、借助热更新开发,也可以打包成可安装的应用。GPUI 后端用一套渲染覆盖三个桌面平台,并能嵌入 GPUI 与 GPUI Kit 应用;Web 平台把应用渲染成网页里的 HTML。
--target ios已支持--target android已支持--target macos已支持--target windows已支持--target linux已支持--target gpui已支持--target web已支持模块只能看到宿主授予的能力,只占用宿主允许的资源,只在签名校验通过后运行。剩下的——文本、输入、无障碍、动画——交给系统的原生视图。
在线试用