在 Mac 上装软件,我最信任的方式一直是 Homebrew。一条 brew install --cask 就能装好,不用去各家官网找安装包,升级、卸载也都是一条命令的事。
但用得越久,越觉得它少了点什么:
brew outdated能列出一串可以更新的 App,却不告诉我每个版本改了什么。值不值得现在升,只能一个个去翻官网。- Chrome、VS Code 这类会自己更新的 App,
brew outdated默认不管;加上--greedy,又常把早就自己升级过的 App 报成「可更新」。 - 命令行终究不是每个人都愿意碰的。想把 Homebrew 推荐给不用终端的朋友,往往在「先打开终端」这一步就劝退了。
它免费、开源,不需要注册账号。下面挑我自己用得最多的部分,说说它能做什么。
先在网页上逛逛
打开 opennavo.com 就能用,不用下载,也不用登录。

发现页按分类组织:AI 工具、开发工具、终端与 Shell、效率、写作与笔记……热门榜按 Homebrew 近 30 天的真实安装量排序,另外还有编辑精选和合集,比如给新电脑准备的「新 Mac,从这里开始」。写这篇文章时,榜单前两名是 Codex 和 Claude Code,AI 编程工具的热度可见一斑。
界面支持简体中文、English、日本語等六种语言,App 的介绍和更新说明也会自动翻译。
搜索:不用先猜名字
OpenNavo 的搜索不只认 Homebrew 里的名字,还支持中文名、拼音和常用别名:输入 weixin 能找到微信,输入 vscode 能找到 Visual Studio Code。在任何页面按 ⌘K 都能唤起搜索,选中结果后按 ⌘C,就能直接复制它的 brew 安装命令。

装之前,先看清楚
详情页把装一个 App 之前我想知道的信息放在了一起:中文介绍和截图,近 30 天和近一年的安装量,最新版本、更新节奏和下载大小,支持 Apple 芯片还是 Intel,是不是自带更新。往下翻还有依赖与冲突、安装位置,以及卸载时会删掉哪些文件。
右侧直接给出安装命令。就算不用客户端,复制到终端里也一样能装。

每个版本,都有记录
这是我想做 OpenNavo 的原因之一。
每个 App 都有一条版本时间线:每个版本改了什么,什么时候被 Homebrew 收录。更新说明由 OpenNavo 根据官方发布的信息整理,按改动的方面分好条目,再自动翻译成中文;觉得译文不对味,随时可以切回原文。

这些数据都有出处:App 目录和安装量每天从 Homebrew 的官方公开 API 同步;版本信息来自 GitHub Releases、App 内置的更新源、官网的更新日志,以及 Homebrew 仓库的提交记录。
有了这条时间线,再看到「4 个可用更新」,我会先看看它们都改了什么,再决定哪些马上升、哪些等等再说。
客户端:点一下,装好
网页能做的,macOS 客户端都能做;不同的是,它会调用你 Mac 上的 Homebrew,真正把 App 装上、更新、卸掉。
在 App 页点「获取」,任务就进入队列。执行时能看到进度、下载速度,以及 brew 输出的每一行日志。OpenNavo 一次只让 brew 跑一个任务,后面的排队等着,随时可以取消;失败了就打开日志看原因,处理好再点重试。

几个让人放心的细节:
- 需要管理员权限时,由系统弹出密码框,OpenNavo 不保存密码。
- 要更新的 App 还开着,会先提醒你保存工作,可以选择退出后更新、更新完自动重新打开;你不点头,它不会强行关闭任何 App。
- 以前自己拖进「应用程序」文件夹的 App,如果 Homebrew 收录了,也可以交给它接管,之后就能在 OpenNavo 里一键更新。只有现有 App 和安装包内容一致时才会接管,不一致就停下,不会强行覆盖。
网页上找到,客户端里装
网页上「获取」菜单里有一项「在 OpenNavo 中打开」。点了之后,客户端会弹出确认框,写明将要执行的命令;你点「安装」才会执行,点「取消」就什么都不会发生。

更新,不用再记
客户端每天定时检查一次更新,时间可以自己定;如果到点时 Mac 在睡眠,醒来后会补做一次。可用更新的数量显示在菜单栏上,也可以发系统通知。打开「更新」页,点「全部更新」就好。
对 Homebrew 老用户来说,有个细节可能正好戳中你:自带更新的 App。
Chrome、VS Code、Docker Desktop 这类 App 会自己更新自己,它们在 Homebrew 里被标记为 auto_updates。brew outdated 默认不报告它们;加上 --greedy 倒是能看到了,可 App 自己升级之后,Homebrew 记着的还是当初装的版本,于是会被误报成「可更新」。
OpenNavo 的做法是:检查时带上 --greedy,再去读 App 包里 Info.plist 记录的真实版本号。如果已经是最新,就标记为「最新(应用已自行更新)」,不会出现在更新列表里。
你也可以固定某个 App 的版本,或者忽略某一次更新,「全部更新」时会自动跳过它们。如果愿意,还可以让它在后台直接把更新装好;这个选项默认关闭,只发通知。
每一次安装、更新、卸载和清理都会写进本机记录,就在「更新」页下方,可以按成功、失败筛选。
给国内用户的细节
第一次打开客户端时,它会先检查这台 Mac:系统版本、Xcode 命令行工具、Homebrew 有没有装好。还没装 Homebrew 的话,可以直接在这里装上。

在国内用 Homebrew,下载源几乎是绕不开的问题。客户端会给官方源和清华 TUNA、中科大 USTC、阿里云三个镜像测速,推荐延迟最低的一个,之后也可以随时在设置里切换。
这个设置只影响 OpenNavo 发起的 brew 命令,不会改动你终端里的环境变量。如果想让终端也用同一个源,设置页可以一键复制对应的 export 命令。

换新 Mac:一条命令装回来
逛的时候,顺手把想装的 App 加进「我的清单」,OpenNavo 会生成一份 Brewfile。到了新 Mac 上,装好 Homebrew,执行一条命令,清单里的 App 就会全部装好,已经装过的会自动跳过:
brew bundle --file=~/Downloads/Brewfile合集也能一键全部加入清单。清单只保存在你自己的浏览器里,不需要账号。客户端里也能把 Homebrew 管理的 App 导出成 Brewfile,换机时一键恢复。

卸载:不管 App 从哪来
「已安装」页列出的不只是 Homebrew 装的 App:App Store 下载的、自己拖进「应用程序」文件夹的、通过 .pkg 安装的,都在这里,按来源分好,附带占用空间和最近使用时间。占用空间算的是 App 本体加上它的应用数据和缓存。超过 90 天没打开过的 App 会单独标出来,也可以只看这些。系统自带的 Safari、邮件等 App 受 macOS 保护,不会出现在列表里。

点「卸载」后,OpenNavo 会先找出这个 App 散落在各处的相关文件,按应用数据、缓存、偏好设置、日志、后台项目等分组列出来,每一项都标明是怎么匹配上的:Homebrew 的 zap 规则、Bundle ID、App Group,或者安装回执。只是名字相似的,或者其他 App 也在用的文件,默认不勾选。

卸载时的几个细节:
- 文件默认移到废纸篓,清倒之前随时可以撤销,放回原处。也可以选「直接删除」,空间马上释放,但没法撤销。
- App 还开着,会先退出再卸载。卸载微信、QQ 这类聊天软件时,会提醒应用数据里有聊天记录,需要的话先在 App 里备份。
- Homebrew 装的 App 会执行
brew uninstall --cask,再清理你勾选的文件;其他来源的 App 由 OpenNavo 自己删除,不运行它们的卸载程序或安装脚本。 - 需要管理员权限的文件合成一批,只请求一次密码;Homebrew 自己的卸载步骤可能另外请求。
- 可以多选,一次卸载好几个。
「已安装」页需要先开启「完全磁盘访问权限」:OpenNavo 得读取各个 App 在资源库里的数据,才能算准占用空间、找全卸载后留下的文件,也才能从废纸篓撤销卸载。读取只在这台 Mac 上进行,不会上传任何文件或路径。
清理电脑:按风险分三档
「清理电脑」先扫描一遍,看看这台 Mac 能腾出多少空间。扫描只读,不会删除任何东西。能找到的有:各类缓存(App、浏览器、开发工具)、日志、Homebrew 的下载缓存和旧版本(相当于 brew cleanup)、已删除 App 留下的残留,还有旧的临时文件、下载文件夹和桌面上的旧安装包、一个月没改动的项目里的构建产物(node_modules、target 之类)、废纸篓、设备备份和 Xcode 归档,以及 Docker 可回收的空间。
结果按风险分成三档:
- 可再生:缓存、日志这类文件,直接删除,空间马上释放,需要时会自动重建。
- 需要确认:已删除 App 的残留、旧安装包、项目构建产物等,只预选够旧的,清理前最好看一眼。残留和安装包会移到废纸篓,可以撤销。
- 个人文件:iPhone、iPad 的备份和 Xcode 归档,只列出来,默认不勾选;勾选了也是移到废纸篓。

清理时不会动的东西:
- 正在运行的 App 的缓存:先跳过,只显示占了多少。
- 浏览器的历史记录、Cookie、密码和扩展:只清缓存,这些都不碰。
- 钥匙串和密码管理器、VPN 和代理工具、AI 工具、虚拟机和容器的磁盘文件、iCloud 云盘:始终受保护,不会出现在结果里。自己想留的文件夹,也可以加进保护名单。
- Docker 的数据卷:只显示,不清理。镜像、构建缓存和已停止的容器也只通过 Docker 自己的命令删除,默认不勾选。
已删除的 App 要是还留着开机时加载的后台项目,扫描结果最上面会单独提醒,侧边栏上也会亮一个小圆点。清理会作为一个任务放进队列,离开这个页面不会中断,完成后会通知你,之后在记录里能查到。
电脑监控:每个指标都能放进菜单栏
「电脑监控」页能看到 CPU、GPU、内存、磁盘、网络、电池、温度和风扇,曲线可以看最近一分钟,也可以看最近一小时。另外还有 CPU 和 GPU 的功耗、磁盘的 SMART 健康状态,以及占用 CPU、内存、磁盘、网络最多的进程。

菜单栏上,每个指标都是单独的一项,数量不限,默认开着 CPU 和内存两项。样式有两行文字、只显示数值、迷你折线和柱状图几种。点哪一项,就在它下面弹出这一项的详情。刷新频率可以调,屏幕关闭或睡眠时自动暂停。
开启提醒后,CPU 连续 3 分钟超过 85%、内存压力偏高、磁盘空间不足、温度过高或磁盘 SMART 状态异常等情况会发通知,同一个问题 1 小时内只提醒一次。磁盘快满时,点通知就能进「清理电脑」。
风扇转速随时能看。想手动调转速,要先装一个辅助程序,在客户端里或菜单栏上点一下就能装,再按系统提示在「登录项与扩展」里允许。它以系统身份在后台运行,只负责风扇,也只接受 OpenNavo 的五个固定命令。手动模式有几条硬性规定:
- 没有「关闭风扇」,转速始终在系统给的最小值和最大值之间。
- OpenNavo 退出、崩溃或 15 秒没有响应,Mac 睡眠,或者写入失败时,风扇都会交还系统控制。
- 温度持续 10 秒达到 95 °C,手动风扇会直接拉到全速。
所有读数只在这台 Mac 上计算和显示:不联网、不上传,不保存历史,曲线只留在内存里。公网 IP 和 Wi-Fi 名称不会显示:查公网 IP 要请求外部服务器,读 Wi-Fi 名称要定位权限。
它会在我的电脑上执行命令,安全吗?
这是我设计时想得最多的问题。OpenNavo 守着这几条边界:
- 服务端永远不执行 brew。 安装、更新、卸载只由你 Mac 上的客户端发起。
- 不经过 shell。 brew 以参数数组的方式调用,App 名称必须通过白名单校验,杜绝命令注入。
- 只管 App。 OpenNavo 只收录 Homebrew Cask,对 App 执行的命令都显式带
--cask;网页链接如果指向命令行工具,客户端会直接拒绝。 - 你说了算。 网页发起的任何安装,都要你在客户端里确认后才执行。
- 不经手安装包。 下载始终来自 App 的官方地址或 Homebrew 的源,OpenNavo 不托管任何安装包。
- 删之前先列出来。 卸载和清理只删你确认过的项目,删除前会再核对一次路径,不跟随符号链接。
隐私上,网页端和客户端都不需要账号,也不会收集你装了哪些 App。客户端的使用统计默认关闭,匿名崩溃报告要你同意后才会发送。
开源
OpenNavo 以 Apache-2.0 协议开源。opennavo.com 运行的就是仓库里的代码:网页端用 Nuxt 4,macOS 客户端用 Tauri 2、Rust 和 Vue 3,后端用 Go。客户端自带一份离线目录,用 SQLite 做本地搜索,断网也能搜。
4,900 多个 App 的介绍和更新说明,维护起来工作量不小。后台内置了一个 MCP 服务,AI Agent 可以在授权的范围内帮忙整理内容,所有写操作都支持先演练(dry run)再执行;中文介绍和更新说明由程序整理、经人工抽查,原文链接始终保留。
欢迎来 GitHub 提 Issue 和 PR。
怎么用上
- 网页端:打开 opennavo.com 直接用,无需安装。
- macOS 客户端:免费,支持 macOS 13 及以上,Apple 芯片和 Intel 都可以。到 opennavo.com/download 下载,或者在终端执行:
- 源代码:github.com/opennavo/opennavo
写在最后
发现某个 App 的信息不对、装不上,或者有想收录的 App,欢迎在评论区、GitHub 或网站的「反馈」页告诉我。
