用 Go 编写应用逻辑、由各平台原生控件渲染的跨平台 UI 引擎。
pocket-nexus/pocketjs
用 TypeScript 组件在掌机、桌面和嵌入式屏幕上绘制原生像素的 UI 运行时,没有 DOM 与 WebView。
- Star
- 1,837
- Fork
- 104
- 未关闭 Issue
- 93
- 最近提交
- 昨天
这是什么?
PocketJS 是一个应用运行时,界面直接以原生像素呈现,而不是经由浏览器引擎渲染。应用代码用 TypeScript 编写,可选用 Solid、Vue Vapor 或 Octane 组件,三种适配器渲染到同一棵原生树。QuickJS guest 负责执行应用,Rust 核心在单进程单线程内完成 flexbox 布局与逐像素绘制,整条链路没有 DOM、CSS 引擎和 WebView。
样式只接受固定的 Tailwind 子集,在构建期编译成固化样式表,设备端按查表解析 class,没有级联、优先级计算和回流。应用通过 pocket.app.json 声明视口和所需 API,同一份 bundle 可以针对不同屏幕密度做检查。关键帧时间线和弹簧曲线同样在构建期固化,由 Rust 核心自己的时钟推进,因此动画不产生逐帧 JavaScript。
运行时以 frame(buttons) 逐帧推进应用,时间就是帧计数:异步效果落在帧边界上,测试可以逐字节重放同一段会话。它已在 PSP、PS Vita、iOS、macOS、Symbian、PocketBook 电子墨水屏、ESP32-P4 开发板以及浏览器(WebAssembly 核心)上启动。仓库还包含硬件原生 3D 栈 Pocket3D,以及把 TypeScript 视图和模型编译为 Rust 的 AOT 编译器 MicroTS。
核心功能
- 01Solid、Vue Vapor 与 Octane 三种适配器都渲染到同一棵原生树,运行在同一个 QuickJS guest 上。
- 02固定的 Tailwind 子集在构建期固化为样式表,设备端查表解析,无 CSS 解析器与回流。
- 03关键帧时间线和弹簧动画由 Rust 核心时钟推进,不需要逐帧 JavaScript。
- 04应用以 frame(buttons) 逐帧推进,异步效果排队到帧边界,测试可确定性重放。
- 05原生模块像内核驱动一样按需加载,只有应用用到的网络、音频或 3D 核心会进入构建。
- 06pocket.app.json 应用契约声明视口与所需 API,同一 bundle 可适配不同密度的屏幕。
适用场景
- 为 PSP、PS Vita、Nintendo 3DS 等掌机开发 UI 应用和游戏界面。
- 为 ESP32-P4 等单片机或电子墨水屏阅读器构建低开销界面。
- 开发以单进程原生渲染代替 WebView 的桌面应用。
- 在 CI 中以逐帧重放方式运行不依赖挂钟的确定性 UI 测试。
快速上手
- 1
使用 PocketJS CLI 创建新应用
pocket create my-app - 2
针对 PSP 等目标设备检查应用
pocket check --target psp
使用前须知
- MicroTS 提前编译器仍在开发中。
- README 显示,在桌面端,编辑器每次按键都会重新排版整个文档,因此 CPU 占用会随文档长度增加。
收录于专题
标签
常见问题
- pocketjs 是什么?
- 用 TypeScript 组件在掌机、桌面和嵌入式屏幕上绘制原生像素的 UI 运行时,没有 DOM 与 WebView。 PocketJS 是一个应用运行时,界面直接以原生像素呈现,而不是经由浏览器引擎渲染。应用代码用 TypeScript 编写,可选用 Solid、Vue Vapor 或 Octane 组件,三种适配器渲染到同一棵原生树。QuickJS guest 负责执行应用,Rust 核心在单进程单线程内完成 flexbox 布局与逐像素绘制,整条链路没有 DOM、CSS 引擎和 WebView。
- pocketjs 可以免费使用吗?用的什么许可证?
- pocketjs 以 MIT 许可证开源。用于商业产品前,请先确认许可证条款。
- pocketjs 还在维护吗?
- 活跃维护中。pocketjs 最近一次提交是在 2026年11月6日。
- pocketjs 适合用来做什么?
- 为 PSP、PS Vita、Nintendo 3DS 等掌机开发 UI 应用和游戏界面。 为 ESP32-P4 等单片机或电子墨水屏阅读器构建低开销界面。 开发以单进程原生渲染代替 WebView 的桌面应用。 在 CI 中以逐帧重放方式运行不依赖挂钟的确定性 UI 测试。
- pocketjs 怎么安装和运行?
- 使用 PocketJS CLI 创建新应用: pocket create my-app 针对 PSP 等目标设备检查应用: pocket check --target psp
- 在哪里获取 pocketjs?
- 源代码和安装说明在 GitHub 上:https://github.com/pocket-nexus/pocketjs
概要由 AI 根据项目 README 生成;GitHub 数据每日更新。
相关项目
基于 Rust 的原生跨平台 UI 引擎,可用 Rust 或 TSX 编写应用,并使用各平台原生控件渲染。
一个采用 MIT 许可的免费 C 语言 UI 库,用于在从小型 MCU 到 Linux MPU 的嵌入式设备上构建图形界面。
用 Go 开发桌面应用的框架,可选系统 WebView 网页界面或 GPU 绘制的原生 UI。
一个 Python 原生 GUI 工具包,使用各操作系统自带的原生控件构建应用界面。
用 JavaScript 或 TypeScript 直接调用原生 API,构建 iOS、Android 和 visionOS 原生应用的框架。