Repolode
pocket-nexus

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. 1

    使用 PocketJS CLI 创建新应用

    pocket create my-app
  2. 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 数据每日更新。

相关项目