Mural:一个「你早晚会删掉」的语言 App——开源在自家 iPhone 上,带自己的 API Key 学说话
GitHub Trending 日报 · 2026-09-15
打开应用商店搜「学外语」,你能翻到几百个长得几乎一样的 App:打卡、连击、排行榜、每三天弹一次的年费订阅。最后它们大多躺在手机里,直到某次清理存储时被一起删掉。
本周冲上 GitHub Trending 的 Mural 就把这件事写进了自己的简介里——”The language app you eventually delete“(你早晚会删掉的那个语言 App)。它没有云账号、没有打卡、没有订阅,而是一个完全开源的原生 iPhone / Android 应用:跟一个会发光的球用目标语言聊天,让学习资料留在你自己的手机上。
按创建后的 star 增速排序,Mural 在近 7 天新建的仓库中是站得最高的几个之一:800+ star、170+ fork,MIT 协议,Apple 与 Android 双端原生代码全部公开。
项目地址:<https://github.com/Chuloo/mural>
它到底怎么「学」:从一个会呼吸的球开始
Mural 的交互只有一块屏幕。打开后你会看到一个缓慢流动的渐变色球体,下方是目标语言的一句问候——比如西班牙语的 ¡Hola!。点一下麦克风,就可以直接说目标语言,或者用英语回话,Mural 会用你正在学的语言回应你。
它把「聊天」当成了教材本身:
- 实时语音对话:麦克风常开,Mural 会主动开口、顺着话题追问,而不是等你提问
- 字幕可选:听不懂时打开 Meaning 字幕,会显示当前这句的英文意思;不想看就关掉,逼自己靠听力
- 打字兜底:不方便说话时,可以切到键盘输入
- 点词查询:对话里的任何词都能点开看释义
- 24 个对话场景:从”咖啡店点单”到”聊今天新闻”,每个语言模块自带对应的文化细节;也可以直接说出一个当下的话题,Mural 会联网搜索并给出信息源
最上面那个渐变球不是装饰——它在说话时会扩张出波纹,停顿思考时会收缩。整个产品的信息层级被压到极简:一颗球、一行目标语言、一行可选字幕、三个按钮。
「你早晚会删掉」的潜台词:数据留在本机
Mural 这个名字解释得很清楚——It starts with a hello(一切从一声问候开始)。
但它真正和主流语言 App 分道扬镳的地方在隐私架构:
- 所有对话、词汇、偏好设置只存在你的设备上,没有 Mural 云端同步、没有分析 SDK、没有广告
- 没有 Mural 账号也能用,只要一个 OpenAI API Key(存在系统 Keychain / Android Keystore 里,且被排除在导出文件之外)
- 想备份?手动导出一个 JSON 学习记录,可以跨 iPhone / Android 互认
- 想清空?设置里可以删单条对话,也可以一键删除全部学习数据
代价也很直白:API 费用你自己出。语音、文本、联网搜索都会计入你的 OpenAI 项目账单,应用里显示的用量只是估算,不是计费上限。项目作者在 README 里把这一点写得比谁都清楚——”A ChatGPT subscription does not provide API credit”(ChatGPT 订阅不送 API 额度)。
学习记录是怎么算出来的:证据驱动的自适应
Mural 的「自适应」不是靠猜。它把每一次对话里的回答表现当作证据(evidence),据此更新两样东西:
- 词汇掌握度:哪些词你在对话里真正用出来了、用对了
- 临时能力观察:当前水平的大致判断,每个学习语言单独记
界面上对应的是 Recall bars(回忆条)——1 到 3 根。要拿到 3 根,需要在不同场景、不同时间反复验证成功,而不是一次性答对。作者明确说明这是产品启发式,不是校准过的遗忘曲线,更不是语言等级证书。
这种「说清楚自己不是什么」的诚实,在语言学习类产品里并不多见。
八种语言,各自一套教学策略
Mural 目前的语言模块覆盖:
- 挪威语 Bokmål(以东挪威语音为目标)
- 西班牙语(西班牙)
- 国际英语
- 法语(法国)
- 德语(德国)
- 意大利语(意大利)
- 巴西葡萄牙语
- 标准普通话(简体中文)
每一种语言都有自己的对话主题、教学取向和独立进度。其中文模块做得相当细:可选拼音会出现在对话、转写和词条里,中文查词按词边界切分,原始汉字始终保留可复制;拼音用系统词典读音,作者也坦诚说明「人名、歧义词、连读变调仍需人工听校」。
架构上,语言被抽象成独立模块(apps/ios/Core/Languages/*.swift),每种语言一个文件;想知道怎么加一门新语言,仓库里有一份专门的 <https://github.com/Chuloo/mural/blob/main/docs/add-language.md> 指南。
双端原生:SwiftUI + Jetpack Compose
Mural 不是跨平台壳,而是两套真正的原生客户端:
| 平台 | 技术栈 | 最低版本 | 密钥存储 |
| iPhone | SwiftUI + Liquid Glass | iOS 26.1 | Keychain |
| Android | Jetpack Compose | Android 8.0 | Android Keystore |
两端共享同一套 API 契约和测试夹具(shared/ 目录),Android 端还能直接读写 iPhone 导出的 JSON 备份。实时语音传输锁定了原生 WebRTC 包 stasel/WebRTC 152.0.0。
Android 端界面目前为英文,系统设为西班牙语时显示西班牙语;iPhone 端则做了完整的双语本地化。
装它需要的准备
这是 Mural 最「硬核」的部分——它不是一个下载即用的商店应用:
- 需要一台装了 Xcode 26+ 的 Mac,和一台 iOS 26.1+ 的 iPhone(Android 端则用 Java 17 + Android SDK 36 构建 APK)
- 需要 Apple 账号;免费 Personal Team 可以直接装到自己的手机上,但描述文件 7 天过期,要重新跑一次构建刷新
- 需要自己在 OpenAI 项目里开通计费,并拿到 GPT-Live-1 与 GPT-5.6 Luna 两个模型的访问权限
- 需要自己输 API Key——作者在给 AI 编程助手的安装提示词里刻意写明:「不要让我把 Key 贴进聊天、不要从 Keychain 读取、不要写进源码或日志」
好消息是它提供了一份给本地 AI 编程助手用的安装提示词:把 Codex 或其它编程智能体接到 Mac 上,粘一段 prompt,智能体就能帮你 clone、解析依赖、跑离线测试、构建模拟器目标,再逐步引导你完成 Xcode 签名和手机授权。你只需要负责 Apple 账号登录、设备信任、开发者模式和 App 内输入 API Key。
一键构建命令长这样:
# iPhone 核心测试
swift test --package-path apps/ios
# Android:单元测试 + lint + 打包
cd apps/android
./gradlew :app:testDebugUnitTest :app:lintDebug :app:assembleDebug
项目状态:能跑,但没上架
作者在 README 里把边界划得很清楚,值得照抄:
- 托管免费对话与按分钟付费尚未启用。iPhone 端有可选的 Google 登录,Android 端账号集成还在进行中
- TestFlight 与 App Store 均未上架,
release/目录里记录着还有哪些发布前置条件没完成 - 没有任何共享供应商密钥会出现在仓库或分发包里——这条是硬规定
- 2026-09-13 记录的 iPhone 语言版本通过了 70 个核心测试 + 20 个原生 UI 测试,79 个后端测试(隔离 PostgreSQL 全通过无跳过);德语、意大利语、巴西葡萄牙语、普通话各自做过一次真机检查
- 作者同时声明:这些检查不构成对人类语音识别、发音或纠错质量的背书
换句话说:这是一个功能完整、工程严谨、但明确定位为个人自用的开源项目。它的 docs/ 目录里有 15 份文档,apps/android/ 下有几十个 Compose 界面测试,services/api/ 里有账号、计费与托管服务的基础设施——但那些商业化开关,作者选择默认全部关着。
为什么它值得关注
过去一年,我们见惯了「把大模型包一层再收订阅费」的产品。Mural 走的是相反的路:把模型能力直接交还给用户,把学习数据锁在本地,把代码全部摊开。
它把一个很现实的问题摆到台面上——当语音模型的实时对话能力已经足够好的时候,语言学习 App 的价值究竟剩下什么?Mural 的答案是:剩下的是教学策略本身(教什么、什么时候纠错、如何用证据衡量掌握度),而这种东西本来就该是可以被检视、被替换、被你自己拥有的。
如果你手边正好有一台装了 Xcode 的 Mac 和一部 iPhone,又恰好想捡起一门放了很久的语言,Mural 可能是今年最值得自己动手装一次的开源项目之一。
- 项目主页:<https://github.com/Chuloo/mural>
- 官方网站:<https://mural.chat>
- 许可证:MIT
















暂无评论内容