TinyJS:基于系统 WebView 的超轻量级 JavaScript 桌面应用运行时
在人工智能代码生成与数据中心大规模部署成为行业焦点之际,软件工程师 Tarwin Stroh-Spijer 推出了一款名为 TinyJS 的 JavaScript 运行时环境。该项目旨在为 macOS、Linux 和 Windows 平台构建极小的桌面应用程序,许多此类应用在磁盘上的占用空间仅为 6MB 或更少。

TinyJS 并非“无代码”框架,它保留了 JavaScript 的全部编程能力,并提供了底层操作系统的视觉渲染和通信功能。其核心设计思路在于利用各操作系统内置的浏览器引擎进行界面渲染,而非从头实现 UI 层。具体而言,TinyJS 在 macOS 上使用 WebKit,在 Windows 上调用 WebView2,在 Linux 上则依赖 WebKitGTK。这一策略显著区别于 Electron 框架,后者通常将 Chromium 开源浏览器内核打包进每一个桌面应用中。
这种架构差异直接影响了应用的体积表现。Electron 应用虽然承诺跨平台外观的一致性,但即便是最基础的应用程序,其安装包大小也往往达到 150MB。相比之下,TinyJS 的核心基于 txiki.js——一个由 Saúl Ibarra Corretgé 编写的超紧凑 JavaScript 运行时,其体量远小于 Deno 和 Bun。TinyJS 的启动包约为 5.6MB,发射器(Launcher)额外占用约 1MB,其余部分主要为开发者编写的代码。不过,由于不同操作系统的渲染引擎存在细微差异,TinyJS 应用在各平台上运行时可能会出现轻微的视觉不一致。
在开发流程方面,Stroh-Spijer 通过操作系统进程间通信(IPC)机制处理数据传输,从而简化了开发过程。这种方法消除了为每个应用捆绑 HTTP 服务器的需求,同时也规避了相关的安全隐患。所有 TinyJS 应用的编码均使用 JavaScript、CSS 和 HTML 完成,无需编译步骤。得益于网页设计技术的快速发展,开发者可以利用现有的前端技能进行创作。
TinyJS 与同样致力于创建微型应用的 Tauri 项目有所不同。Tauri 要求开发者使用 Rust 语言编写应用程序,这增加了学习成本;而 TinyJS 允许直接使用 JavaScript。此外,TinyJS 将对话框、菜单、托盘、剪贴板、自动更新等大量基础组件交由操作系统原生处理,而 Tauri 则需要逐个导入插件。开发者无需强制依赖 Node.js,除非为了运行 Vite 等特定框架。TinyJS 支持 React、Vue 和 Svelte 等主流 JavaScript 框架,也允许完全无依赖的开发模式。通过将窗口指向 URL,TinyJS 还可用于封装网页内容,使其以桌面应用的形式运行。
目前,Stroh-Spijer 已基于 TinyJS 开发了一个可在桌面运行的“应用商店”,用户可下载压缩后的 Windows 版本。截至发稿时,该商店索引了 25 个示例应用,涵盖实用工具与趣味程序。例如,世界时钟应用以 3.8MB 的 zip 文件形式分发,剪贴板历史程序大小为 3.7MB,标记编辑器为 4.9MB,桌面幽灵为 3.8MB,SQLite 浏览器为 4.1MB。其中最具代表性的是一款 Winamp 音乐播放器的克隆版,仅需 7.4MB 硬盘空间。用户在解决 Windows Defender 对启动器的信任问题后,即可直接从商店下载并运行这些应用。值得注意的是,测试中发现复制粘贴功能的快捷键逻辑似乎主要针对 Mac 平台进行了优化。





