☰
OpenLess架构揭秘:Rust核心openless-core加Tauri 2与React前端,一套代码横跨macOS、Windows、Android与Linux
2026/9/25 17:05:08 网站建设 项目流程

OpenLess架构揭秘:Rust核心openless-core加Tauri 2与React前端,一套代码横跨macOS、Windows、Android与Linux

【免费下载链接】openlessHold a key, speak, release — AI-polished text appears at your cursor in any app. Open-source voice input for macOS & Windows. (按住快捷键说话,松开即得润色后的文字)项目地址: https://gitcode.com/gh_mirrors/op/openless

OpenLess 是一款开源 AI 语音输入工具:按住快捷键说话,松开后润色好的文字就会出现在光标处,可在任意应用中输入。它的架构秘诀是「一套业务核心 + 多个平台宿主」——Rust 编写的共享内核 openless-core 承载全部业务逻辑,Tauri 2 驱动 macOS/Windows/Android 的 React 界面,Linux 则用 egui 独立渲染,让同一个代码库自然覆盖四端。

为什么这样设计:一个核心,多张面孔

跨平台语音输入最难的不是"写界面",而是业务逻辑的一致性:听写会话怎么触发、ASR 结果怎么润色、文字怎么插进目标应用、凭据存在哪里……这些规则如果每个平台各写一份,很快就会互相漂移。

OpenLess 的解法是把代码切成清晰的层次 🧩:

层所在位置职责
共享核心 Coreopenless-core听写引擎、润色、词库、云同步等全部业务规则
桌面/移动宿主src-tauriTauri 2 命令、热键、录音、文字插入、凭据适配
React 前端src页面、设置、多语言界面(8 种语言)
Linux 宿主linux-eguiegui/eframe 原生 UI,不依赖 Tauri

完整分层说明见官方文档 docs/architecture.md。

Rust 核心 openless-core:不碰 UI 的"业务大脑"

openless-core 是这个项目最巧的一笔。它的 lib.rs 开头就写明了设计原则:刻意不依赖 Tauri、WebView、egui 或 eframe。也就是说,核心只知道"业务",不知道"界面长什么样"。

它按业务域组织了 70+ 个模块,随手挑几个 📦:

  • 听写链路:dictation_engine(听写主链)、audio(录音)、silence_auto_stop(静音自动停止)
  • 文本加工:polish(AI 润色)、output_cleaning(输出清洗)、vocabulary(词库)
  • 服务与凭据:provider_registry、credentials(凭据合同)、cloud_sync(私有云同步)
  • 知识与历史:history、style_packs(风格包)、marketplace(市场)

宿主想接入平台能力?通过 Core 定义的 trait 接口(ports.rs)注入录音、插入、凭据等原生实现;想拿到状态变化?订阅语义化事件(events.rs)。这样"业务规则缺失修 Core,平台能力缺失修 Host",责任边界一目了然。

另外,Core 还维护了一个独立于应用版本的后端合同版本(BACKEND_CONTRACT_VERSION),配合机器可读的合同文件 contract/backend-2.0.json,让前端与后端跨语言协作时不会"各说各话"。

Tauri 2 + React:桌面与移动端的主力前端

macOS、Windows、Android 三端共享同一套 Tauri 2.11 宿主:

  • React 前端:src/ 下是 TypeScript + React 页面,通过 src/lib/ipc 的类型化 IPC 门面调用后端命令,而不是随手写字符串调用;
  • Tauri 命令层:src-tauri/src/commands/ 注册命令,coordinator.rs 负责构造 Core 并协调窗口、热键、音频等系统能力;
  • 窗口体系:主窗口 + 悬浮"胶囊"窗口(Siri / Classic / Typeless 三种风格),见 tauri.conf.json。

Android 端则在 android/ 目录补充了 Kotlin 服务、无障碍与悬浮窗实现,前端片段通过 Vite 别名@android并入同一个 React 工程——手机上录音中想追问,也是同一套核心在处理。

Linux 不走 Tauri:egui 原生 UI 的独立路线

Linux 是个有趣的"例外"。为了绕开 WebKitGTK 的重量依赖,linux-egui 用egui/eframe写了原生界面:main.rs 负责 UI,backend.rs 用LinuxBackendBuilder把音频、凭据、本地 ASR 等能力注入 Core,全程走类型化 Rust 接口,连 IPC 都省了。

这正是分层架构的红利:Core 不认识 Tauri 也不认识 egui,所以换宿主只是"换插头",业务逻辑一行不用改 🔌。

一套代码的回报:可移植、可测试、可维护

这种结构带来的好处很实在:

  1. 跨端一致:同一份听写、润色、云同步逻辑,四端行为一致,不会出现"Windows 上好的,macOS 上怪怪的";
  2. 独立验证:Core 可以单独跑cargo test -p openless-core,前端合同用npm test校验,互不干扰;
  3. 扩展容易:想加新平台?只需写一个新 Host 实现 Core 的 ports 接口即可。

结语

OpenLess 用Rust 核心 openless-core + Tauri 2 + React 前端 + egui Linux 宿主的组合,证明了开源语音输入工具完全可以做到"一套代码、四端体验"。如果你想深入源码,建议按这条主线读:docs/architecture.md 看分层 → docs/structure.md 按任务定位文件 → openless-all/app/crates/openless-core/src/lib.rs 看模块全貌。动手前记得克隆仓库后执行git submodule update --init --recursive,再按 openless-all/README.md 的指引构建即可 🚀

【免费下载链接】openlessHold a key, speak, release — AI-polished text appears at your cursor in any app. Open-source voice input for macOS & Windows. (按住快捷键说话,松开即得润色后的文字)项目地址: https://gitcode.com/gh_mirrors/op/openless

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询