换掉 Raycast 的人越来越多:72.6MB 常驻内存、零遥测,Tinycast 凭隐私叙事出圈
【免费下载链接】tinycastTinycast — a tiny, fully native macOS launcher, hotkeys, and clipboard history.项目地址: https://gitcode.com/GitHub_Trending/ti/tinycast
macOS 启动器这个赛道,过去几年几乎被 Raycast 定义:扩展生态、AI 集成、窗口管理,一个命令面板装下了半个工作流。但硬币的另一面也在积累——基于 Electron 的常驻进程吃内存,遥测与数据策略不够透明,闭源意味着用户只能信任而无法审计。当"效率"的工具价值被重新排序,"隐私"开始成为新的决策变量时,一批用户开始寻找替代品,而 Tinycast 正是这波讨论的中心:72.6MB 常驻内存、零遥测、零第三方依赖,还能直接运行你已经在用的 Raycast 扩展。本文不替它站台,而是把社区里反复出现的这几个数字,逐一放回源码里验证一遍——它们到底是真的,还是又一个营销话术。
一、"换家潮"的动机拆解:用户在为两类成本投票
社区里关于"为什么我换掉了 Raycast"的讨论,动机可以归成两类。
第一类是资源成本。启动器是常驻应用,它占据的内存是沉默成本——不会崩、不会卡,但每一 MB 都在那里。基于 Chromium 系内核的工具跑一堆渲染进程,常驻内存轻松上百 MB;对一个每天按一次快捷键、其余时间都在等待的应用来说,这份开销很难说合理。Tinycast 的仓库首页把"under 100 MB of RAM"直接写进项目简介,与其说是营销,不如说是在回应这类抱怨。
第二类是信任成本。启动器处理的是最敏感的数据:剪贴板里的每一条复制、键盘上敲下的每个片段、你启动的每一个应用。当这类数据流向一个不透明的云端服务,用户对"便利"的定价就会改变。Tinycast 的应对是把自己的隐私主张写成了工程承诺——"zero third-party dependencies, no Electron and no telemetry"(README.md),并且 AGPL-3.0 开源,让"没有遥测"从一句口号变成了可被任何人验证的代码事实。
这两类成本叠加,构成了换家潮的真实推力。而 Tinycast 能"接住"这批用户,靠的是一套可审计的工程体系,而非话术。
二、72.6MB 常驻内存:一条写进贡献规范的硬预算
先看最硬的数据。仓库的测试文档里记录了 2026 年大重构后的实测基线:常驻内存 40–80 MB,硬性上限 100 MB,Release 二进制约 3.66 MB(docs/testing.md)。
这个数字不是偶然。在 CONTRIBUTING.md 的"Non-negotiables"里,第一条就是"RAM. Under 100 MB, always. No feature is worth going over."——内存预算被写进了贡献门槛,任何 PR 都要报 idle 与 peak 的实测数字,超了就被拒。这不是性能优化层面的"尽量",而是架构层面的"必须"。
Tinycast 把预算贯彻到了具体实现里,处处可见为省内存做的设计取舍:
- 文件搜索用 Spotlight 的
MDQuery,且把候选项硬性限制在 1000 个以内、结果 200 行封顶。文档明说,这是故意的:NSMetadataQuery没有源端结果上限,一个宽泛的搜索词就可能击穿 100 MB 预算(docs/features/file-search.md)。 - 扩展运行时内嵌 JavaScriptCore,零额外二进制体积——引入 QuickJS 要多花约 1 MB 加一套构建系统,被直接否决(docs/features/extensions.md)。
- 架构上分为 Pure / Effect / Observable / View 四层,所有环境事实(时钟、日历、汇率)以参数注入,保证纯模型层可被测试框架直接编译;系统副作用被隔离在 Service 层(docs/architecture.md)。
零第三方依赖在这里不是价值观,而是内存策略的必然结果:没有 Electron、没有 Chromium、没有 Node.js,全部 UI 基于 SwiftUI + AppKit 原生绘制。72.6MB 不是宣传照,而是这套工程约束的下限表现。
三、"零遥测"不是营销词,而是一组可审计的工程约束
我在整个Tinycast/源码目录中检索遥测与分析 SDK(PostHog、Sentry、TelemetryDeck、Firebase 等),结果是零命中。这不是漏检——仓库的架构文档把"联网功能必须走私有 ephemeral 会话、禁用 URL 缓存"写成硬性规范,CurrencyRateStore被点名作为唯一参考实现(AGENTS.md、docs/architecture.md)。也就是说,即使是更新检查这类不可避免的联网行为,也不共用系统缓存、不留下第二个磁盘副本。
"零遥测"在数据流层面有几处非常具体的落地:
- 剪贴板。历史存本地 SQLite,轮询时用
com.tinycast.internal私有 pasteboard 类型标记自己的写入,避免自复制循环;对org.nspasteboard.ConcealedType、org.nspasteboard.TransientType等敏感类型做了专门的过滤处理(Tinycast/Features/Clipboard/Service/ClipboardManager.swift)。剪贴板内容只在本机比对,永不外发。 - 文件搜索零权限。不建私有索引、不记录查询历史,所有结果来自 Spotlight 元数据,连"最近使用"列表读的都是系统的
kMDItemLastUsedDate。用户不需要授予全盘访问权限(docs/features/file-search.md)。 - AI 默认全关。AI 功能出厂即关闭,关闭意味着不建历史库、不创建任何连接;API Key 只进登录钥匙串,从不进日志、错误信息或设置备份,远端端点强制 HTTPS,仅本机回环地址例外(docs/features/ai.md)。
- 更新不自带遥测全家桶。没有 Sparkle、没有 appcast,更新检查直接读 GitHub Releases 的同一个 feed,且更新前对下载包做签名、bundle id、版本三重校验(docs/features/updates.md)。
- 备份与导入的安全边界。
.tinycast备份文件不携带任何绝对路径(/Users、/Library都不允许出现),能力授予型开关(如 snippets 的按键监听、扩展开关)被显式排除在备份之外,防止一次导入悄悄解锁未授权能力;Raycast 数据导入则是对.rayconfig做 AES-256-GCM 解密与 scrypt 密钥派生(docs/features/backup.md、docs/features/raycast-import.md)。
这份清单的共同点是:隐私不是"我们不收集",而是"数据在物理上就不离开这台机器,且路径可审计"。这正是隐私叙事能出圈的技术基础。
四、凭什么接得住换过来的用户:Raycast 兼容层
换家潮里最大的迁移阻力是资产沉淀——用户在 Raycast 里配置的扩展、快捷键、剪贴板历史、Snippets、Quicklinks,说扔就扔是不现实的。Tinycast 对这条痛点的回应分两层。
第一层:数据导入。三步流程即可迁移:导出.rayconfig并取得密码 → 选择文件并输入密码,完成 AES-256-GCM 解密与 scrypt 密钥派生 → 勾选 Snippets、Quicklinks 等类别完成导入。导入采用合并而非覆盖,去重导入、版本校验、导入报告都齐备(docs/features/raycast-import.md)。
第二层:扩展兼容。这是 Tinycast 最激进的一步——直接运行 Raycast 扩展。它内置了一个约 200KB、预生成的RaycastRuntime.generated.js运行时(Tinycast/Resources/RaycastRuntime.generated.js),在 JavaScriptCore 上补齐了 React 19、@raycast/api全部组件、Node.js 内建模块的 polyfill(fs、crypto、http、stream、zlib、WebSocket 等),Swift 侧通过异步桥接处理剪贴板、存储、fetch、exec 等宿主能力。实测数据是:开发机上真实安装的 37 个扩展中,32 个可完整渲染;147 个 view 命令中 114 个正常运行(docs/features/extensions.md)。
更关键的是兼容边界的诚实性:不支持的缺口(AI、BrowserExtension、WindowManagement 三类 Raycast 服务 API,以及流式 HTTP、net/tls等)全部显式报错而非静默降级,用户能明确知道边界在哪。同时扩展功能默认关闭、开启需二次确认——运行第三方代码本身被视为需要同意的能力授予,这与其隐私基调一脉相承。
五、隐私换便利的取舍:谁适合,谁不适合
任何取舍都有代价。Tinycast 的隐私与内存优势,对应的是一份清晰的"不适配清单"。
适合的人群:
- 在意常驻内存与机器安静的 macOS 用户(要求 macOS 26+,见 project.yml 的部署目标);
- 对剪贴板、按键、文件数据流向敏感,希望"数据不离开本机"且可审计的人;
- 深度依赖 Raycast 扩展生态、但不想被绑死在某一商业产品上的人——导入与扩展兼容把迁移成本降到了可接受区间;
- 认同"功能克制"哲学的开发者:贡献文档明确写着 feature set 是刻意收敛的,"另一个启动器有这功能"本身不构成加功能理由(CONTRIBUTING.md)。
不适合的人群:
- 重度使用 Raycast AI、BrowserExtension、WindowManagement 等服务的用户——这些 API 目前是明确的缺口;
- 依赖需要流式 HTTP 或原始 socket 的扩展的用户,桥接层目前一次性交付整个响应体;
- 无法升级到 macOS 26 的老机型用户——Tinycast 明确不做向下兼容;
- 需要商业支持、企业合规或丰富扩展市场的团队用户——这是单维护者驱动的 AGPL-3.0 开源项目,功能取舍权在维护者而非用户。
回看这场"换家潮",它的本质是启动器赛道的一次价值重估:当功能生态的增量趋于饱和,资源效率与数据主权就变成了新的差异化维度。72.6MB 常驻内存、零遥测、零第三方依赖,这三个数字在 Tinycast 仓库里不是口号,而是被写进贡献规范、测试基线和架构文档的工程事实。对于在意这两项成本的用户,它给出了一个可审计、可迁移、且不绑架你既有扩展资产的新选项;而对于那些依赖 Raycast 深层服务的人来说,此刻的迁移窗口还没有完全打开。这场竞赛的下一步,取决于兼容层的边界能往前推进多远。
【免费下载链接】tinycastTinycast — a tiny, fully native macOS launcher, hotkeys, and clipboard history.项目地址: https://gitcode.com/GitHub_Trending/ti/tinycast
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考