RunX OS 把浏览器变成一台真桌面:可装 Web 应用与 Node 应用,有窗口、有 Dock、有终端, 还有真正的多用户账号、能力审批与围栏隔离。零运行时依赖 —— 一台装了 Node.js 的机器就能起。
# 国内网络会自动尝试 GitHub 加速镜像 curl -fsSL https://raw.githubusercontent.com/chinartcn/runx-os/main/install.sh | bash # 启动后打开 http://localhost:3000/
RunX 有自己的内核、扩展模型与权限系统。下面这些不是「以后会做」——它们现在就在仓库里,跑得起来。
可拖拽窗口、多窗口共存、Dock 与图标网格、菜单栏、全局快捷键。终端是 script 伪 PTY 跑真 xterm.js,不是 <textarea> 装的。
能力即字符串:fs.read:/sdcard/**。授权永远是「应用 + 能力 + 路径范围」三元组,读能力家族互覆盖 —— 同一个决定不会问四遍。
tarball / 目录安全解包 → appex.json → 清单。Node 应用跑在 Node 权限模型(--permission)的围栏里,越权访问直接被内核拦。
多账号、每账号独立授权表。UAC 的答案不是「允许/拒绝」这么粗 —— 对话框类能力的答案是数据(用户亲自选的路径、文件名、按钮)。
内核内总线贯穿应用、扩展与桌面:app:started、sys.dialog.open、sys.clipboard.write。Web 应用与 Node 应用用同一套订阅语义。
不需要 npm install,不需要编译原生模块。扩展就是放进 .js/ 的目录:mod.json、client.js、styles.css,顺序由清单决定。
能力是一段字符串。它同时说明「能做什么」和「能碰哪些路径」。用户看到的审批框里,就是这行字符串。
/sdcard 之下。同时覆盖 fs.list / fs.stat / fs.watch —— 读能力是一个家族。data 目录里。想写别处,需要一次新的授权。startIn 有白名单,也没有 defaultPath。sys.info 读系统信息,不含任何敏感内容。内置应用与核心扩展。
| 组件 | 作用 |
|---|---|
| 终端 | RunX 真实交互式终端 —— script 伪 PTY + xterm.js |
| 示例 | 五页演示文件选择器、文件监听、大文件流式、子进程 stdin、剪贴板 |
| @runx-desktop | 桌面 UI:导航条 / 菜单栏 / 窗口管理 / Dock / 图标网格 |
| @runx-rights-manager | 账号、授权、UAC 审批、风险拦截 |
| @runx-node-safety | 应用围栏:Node 权限模型(--experimental-permission) |
| @runx-supervisor | 应用生命周期:启停、重启、autostart、崩溃自愈 |
| @runx-pax | 应用安装:安全解包 → appex.json → 清单 |
| @runx-x11 | X11 图形应用(按需加载,探测不到后端时给安装建议) |
| @runx-event-bus | 内核内事件总线 |
| @runx-ui | 界面组件库:与桌面同一套视觉语言 |
极致白嫖,按需驱动。商店只存元数据与校验值,包在开发者自己的源上 —— 零服务器成本,官方只做指路明灯。
发版到 GitHub / npm / 任意静态托管,然后填个 meta.json 地址,点「一键同步」—— 瞬间全网生效。商店不代理你的包。
下载前做 SHA 强校验;应用申请的 RunX 能力有变动,安装时逐条重新走 UAC。权限没变就静默放行。
源站拉不动时自动轮询 GitHub 镜像代理;全挂了会告诉你每一次尝试 —— 是「仓库没了」还是「GitHub 抽风」。
下载 404 会自动上报。连续两次失败才去问上游 API:仓库真没了就下架,API 挂了就不动 —— 锅甩给大厂。