模型擅长的格式
一个模块就是一个 TSX 文件:信号、少量宿主元素和 Tailwind 类。没有构建配置,没有 node_modules。
- TSX
- signal()
- class
native-shell 嵌入 iOS 和 Android 应用,在运行时加载用 TSX 编写的模块——由模型或你的团队编写——经过签名校验,运行在宿主配置的沙箱里,并用真正的 UIKit 与 Android 视图渲染。无需发版。
try await app.loadPackage(at: url, trust: trust)这是两者的对比,可以切换时间范围:
生成的界面要好写、可验证、跑得安全,还要是真正的原生界面。nsh 的每一层都围绕这四点设计。
一个模块就是一个 TSX 文件:信号、少量宿主元素和 Tailwind 类。没有构建配置,没有 node_modules。
每个元素、属性和模块都有从 Rust 源码生成的 TypeScript 声明,文档也以 llms.txt 提供给模型。
nsh trace 无界面地运行模块并报告错误;编译器还能在进程内或浏览器里运行。生成、检查、重试。
每个视图一个 QuickJS 虚拟机,内存、调用时长和节点数都有上限,只能使用宿主授予的能力。
模块以 Ed25519 签名的 .nshpkg 到达;发布密钥由离线根密钥认证,设备端检查吊销列表。
模块由 UIKit 与 Android 视图组成:系统的文本选区、拷贝与翻译菜单、输入法和无障碍都原样可用。
首要用途是 AI 生成的界面;同一套机制也让原生应用可以扩展,或者直接组成一个独立应用。
模型为每次请求写一个模块,服务器检查并签名,应用在沙箱里原生地显示它。
import { mount, signal } from "nsh";
function Answer() {
const range = signal("1W");
return <view class="gap-3 p-4">…</view>;
}
mount(Answer);在任意页面嵌入 NshAppView 或 NshView,承载团队、合作方或用户之后编写的功能。
let app = NshAppView()
try app.grantCapabilities(grants)
let info = try await app
.loadPackage(at: file, trust: trust)
// verified, sandboxed, running同样的模块可以用 nsh package 打成可安装的 iOS 或 Android 应用,适合试用和小工具。
$ nsh init my-app
$ nsh run my-app
$ nsh package my-app --target ios
$ nsh package my-app --target android服务器负责生成、检查和签名;设备负责校验、隔离和渲染。信任边界清清楚楚。
模块只能看到宿主授予的能力,只占用宿主允许的资源,只在签名校验通过后运行。剩下的——文本、输入、无障碍、动画——交给系统的原生视图。
在线试用