过去这两年我每天至少要切 17 个 tab。3 个 AI 对话、5 个文档、4 个开发工具、几个公众号后台、几个短视频。这些东西本质上都是「网页」,但我用它们的频率跟原生 App 没差别。
问题就来了。浏览器本来不是为这种用法设计的。tab 多到溢出,关闭再打开全部丢失,网页没有快捷键、没有系统通知、没有沉浸窗口。我一边想用这些网页,一边又想要原生应用的体验。
这两件事过去看起来矛盾。直到我遇到了 Pake。
一、tw93/Pake

5MB 是这个项目的标志性数字。
一个 ChatGPT 客户端,5MB;一个微博客户端,5MB;一个 YouTube 客户端,5MB。比一个稍微复杂点的网页加载还小。
Pake 干的事听起来朴素到不像是个 GitHub 54,900 颗星的项目。一行命令,把任意网页变成桌面 App,跨 macOS / Windows / Linux 三端。
但这个「朴素」后面是一个被忽略了三年的赛道 Web 容器化。
二、项目介绍
先说一个让普通用户忽略的点。
现在,我们日常用的工具,70% 都是网页。Notion、ChatGPT、Figma、Linear、维基百科、公众号后台、甚至很多银行 App,本质都是浏览器里跑的网页。但这些工具里没有一个愿意给你一个独立的桌面应用安装包。
原因在于成本。浏览器已经够用了,单独做一个原生 App 还要解决三端适配,对小公司来说不划算。
但用户的需求一直没人接。我想要一个能 F4 切换窗口的 ChatGPT,一个能 ⌘+R 隐藏窗口的小红书,一个能全局快捷键唤醒的微博浏览器。这些 PWA 能做一部分,但 PWA 在 macOS 上是个被系统半放弃的方案,没有独立窗口、没有 Dock 图标、消息通知靠 Service Worker 救不回来。
Pake 看准了这个缝隙。它用 Rust + Tauri 把任意 URL 塞进一个用系统原生 WebView 渲染的窗口里,输出一个真正的 .dmg / .msi / .deb 安装包。用户双击安装,应用图标出现在启动台 / 开始菜单,跟原生 App 一模一样。
3 年来,Pake 一直没换过这个哲学。54,900 颗星是用户需求长期没被满足的证据。
三、架构设计
Pake 的架构选型是最有意思的部分,因为它押了一条没人敢押的路。
2022 年 Pake 第一版用的是 Nativefier,一个基于 Electron 的同类型工具。Electron 把 Chromium 整个塞进应用里,好处是跨平台一致性,坏处是体积庞大。ChatGPT 的 Electron 桌面端是 100MB+,内存起步 200MB,光开三个就要挤爆 16GB 的 MacBook。
Pake 团队 2023 年做了一个当时看起来激进的选择,换 Tauri。Tauri 是 Rust 写的跨平台框架,不打包 Chromium,而是直接调用系统的 WebView。macOS 上是 WKWebView、Windows 上是 WebView2、Linux 上是 WebKitGTK。结果打出来的包只有 5MB,比 Electron 小 20 倍,内存占用降到原来的五分之一,启动时间缩短到三分之一左右。
Pake 做的事情分四步。
第一步抓取网页资源。CLI 调用时,Pake 用 puppeteer 拉取目标 URL,提取 favicon、viewport meta、应用名称,顺便把 SPA 的初始 JS bundle 拉下来。
第二步构建 WebView 容器。Tauri 生成一个 Rust 主进程,里面包一个全屏 WebView。主进程负责窗口管理,隐藏标题栏、沉浸式窗口、文件拖拽接收、全局快捷键。
第三步是 JS Bridge 通信。这是 Pake 比直接用 Tauri 多出来的一层。它在前端 JS 和 Rust 后端之间架了一条消息通道,让网页能调用原生能力,系统通知、剪贴板、文件操作都能用。
第四步编译输出。Rust 编译器把整个东西打成对应平台的安装包,macOS .dmg、Windows .msi、Linux .deb / AppImage。
这套流程里每一步 Pake 都做了大量工程优化。最近一个月的 commit 里能看到 niri Wayland 这种 Linux 桌面环境的 AppImage 输入处理、zst 压缩格式加固、CLI 参数校验、空数值兜底、macOS 鉴权弹窗崩溃修复。
四、快速上手
Pake 给三种用户准备了三种入口,门槛从低到高。
第一种,下载现成的。Pake 的 Releases 页面提供了一堆预编译的桌面 App,WeRead、Twitter、Grok、DeepSeek、ChatGPT、Gemini、YouTube Music、YouTube、Excalidraw、小红书都在列表里。下载对应平台的安装包双击安装就行,不需要懂任何代码。
第二种,GitHub Actions 在线构建。如果现成的列表里没有你想打包的网页,Pake 提供 GitHub Actions 模板,fork 一个 repo,5 分钟后 Actions 就会吐出安装包下载链接。整个过程零环境配置。
第三种,CLI 本地打包,这是给开发者的方式。
pnpm install -g pake-cli
pake https://github.com --name GitHub
pake https://weekly.tw93.fun --name Weekly --icon https://cdn.tw93.fun/pake/weekly.icns --width 1200 --height 800 --hide-title-bar三条命令就能把 weekly.tw93.fun 这个博客打包成本地 App,带自定义图标、自定义窗口尺寸、隐藏标题栏。第一次打包需要拉 Tauri 工具链,5 到 10 分钟,之后增量构建 30 秒内出结果。
五、实战场景
Pake 的实战场景可以分成三层,每一层都对应不同的真实痛点。
第一层,AI 工具的独立窗口。ChatGPT、Claude、Gemini、DeepSeek、Grok、Perplexity,这些都是网页,但每个都是一个独立的工具。把它们各自打包成桌面 App 之后,⌘+Tab 切换就像在原生应用之间切换一样顺滑。配合全局快捷键,⌘+Shift+G 唤醒 Grok、⌘+Shift+D 唤醒 DeepSeek 这种工作流就成了现实。
第二层,国产工具的去广告版本。微信读书、小红书、YouTube、YouTube Music、微博、抖音网页版,这些平台的网页版经常比 App 版更干净。App 版有开屏广告、推荐信息流、推送,Pake 打包的版本能通过 CSS 注入隐藏广告位、关掉推荐 tab、甚至屏蔽追踪脚本。Pake 提供了 injectScript 和 injectStyle 参数,让用户自己写 5 到 10 行 CSS 就能定制 UI。
第三层,内部工具的本地化。企业内部的 Dashboard、Kibana、Grafana、Jenkins、Confluence,这些 web 工具平时只能在浏览器 tab 里堆着。Pake 打包之后,每个工具变成一个独立的桌面 App,能用全局快捷键唤起、能挂在 Dock / 任务栏常驻、能脱开浏览器环境运行。这一层是开发者最常用的,Pake 的 userAgent 参数还能伪装成桌面浏览器,绕过某些只允许桌面 UA 访问的内部系统。
如果你的工作流是「每天切 20 个网页 tab」,Pake 就是把这件事从「切 tab」变成「切 App」的物理外挂。
· · ·
Pake 的历史就是「Web 容器化」这个赛道从冷到热的缩影。
2022 年它发布的时候没人关心。Electron 还是桌面化的默认答案,Nativefier 还在维护,Pake 当时只是 Nativefier 的一个 Rust 重写版本。2023 年它换成 Tauri,开始慢慢积累用户。2024 年 AI 工具爆发,ChatGPT、Claude、Gemini 都有网页版但没桌面版,Pake 成了「给 AI 套个壳」最现成的方案,stars 开始陡增。
2025 到 2026 年,Pake 进入了成熟期。3.7 年里发了 250 多个版本,3.11.10 还在往前推。CLI 加了 min-width / min-height / app-version 参数,CLI 校验做了空数值兜底,zst 压缩和 release 打包都做了加固。它把优先级转向稳定性打磨,这也是真正进入生产环境的标志。
回头看,Pake 押对的不只是 Tauri 这一个技术选型。它押对的是一个判断 Web 已经赢了移动端,但本地化体验始终有一个不可替代的位置。Web 内容始终需要一个本地外壳,这个外壳由谁来提供,Pake 给出了一个足够朴素、足够稳定、足够开源的答案。
如果你想让某个网页变成真正的桌面 App,去 GitHub 找 Pake。
📌 数据来源 GitHub Trending 2026-06-21
夜雨聆风