-
-
Notifications
You must be signed in to change notification settings - Fork 40
Home
Juwan-Hwang edited this page May 15, 2026
·
27 revisions
基于 Tauri v2 的现代化 Mihomo GUI 客户端 -- 轻量、安全、跨平台
Zephyr 是一款基于 Tauri v2 框架与原生 Web 技术构建的跨平台桌面代理管理客户端,专为 Mihomo(Clash Meta)内核设计。项目采用 Rust 后端 + 原生 JavaScript 前端的极简架构,在保持功能完备的同时实现了极低的资源占用与卓越的运行时性能。

更多截图
| 设置页面 | 深色模式 |
|---|---|
![]() |
![]() |
%%{init: {'themeVariables': {'fontSize': '9px', 'nodeBorder': '1px', 'clusterBorder': '1px', 'edgeLabelHeight': '8px'}}}%%
graph TB
subgraph Frontend["前端层 (UI Layer)"]
JS["原生 JavaScript<br/>ES Modules"]
TW["Tailwind CSS v4<br/>原子化样式"]
CV["Canvas 2D API<br/>流量图表渲染"]
end
subgraph IPC["Tauri IPC 桥接层"]
CMD["Command Registry<br/>128 个 Tauri Commands"]
EVT["Event System<br/>后端 → 前端推送"]
STATE["State Management<br/>MihomoState / TrayState / RateLimiter"]
end
subgraph Backend["Rust 后端层"]
TAURI["Tauri v2<br/>应用框架"]
REQ["reqwest<br/>HTTP 客户端"]
AES["aes-gcm<br/>AES-256-GCM 加密"]
end
subgraph Core["Mihomo 内核层"]
MIHOMO["Mihomo (Clash Meta)<br/>代理引擎"]
REST["RESTful API :9090"]
STREAM["HTTP Streaming /traffic"]
TUN["TUN 虚拟网卡"]
end
Frontend -->|invoke / emit| IPC
IPC -->|Rust Command Handlers| Backend
Backend -->|Process spawn / REST API| Core
%%{init: {'themeVariables': {'fontSize': '10px', 'nodeBorder': '1px', 'clusterBorder': '1px', 'edgeLabelHeight': '10px'}, 'flowchart': {'curve': 'basis', 'nodeSpacing': 15, 'rankSpacing': 25}}}%%
graph LR
A["CSP<br/>内容安全策略<br/>script-src 'self'"] --> B["Tauri 权限<br/>最小权限原则<br/>无 fs / shell / http"]
B --> C["SSRF 防护<br/>DNS 预解析 + IP 校验<br/>DNS Pinning + 重定向链校验"]
C --> D["加密存储<br/>AES-256-GCM<br/>PBKDF2 100K 迭代"]
D --> E["路径遍历防护<br/>5 轮 URL 解码<br/>9 步文件名净化"]
E --> F["供应链安全<br/>SHA256 校验<br/>可信域名白名单"]
F --> G["CI/CD 扫描<br/>11 个安全 Job<br/>Semgrep + 自定义密钥检测脚本 + ESLint + macOS 编译检查"]
下图展示了 Zephyr 各层级的外部依赖及其之间的关系:
%%{init: {'themeVariables': {'fontSize': '9px', 'nodeBorder': '1px', 'clusterBorder': '1px', 'edgeLabelHeight': '8px'}}}%%
graph TB
subgraph 前端依赖["前端依赖"]
TW["Tailwind CSS v4<br/>原子化样式"]
end
subgraph 后端依赖["后端依赖 (Rust Crates)"]
TAURI["Tauri v2<br/>应用框架"]
REQ["reqwest<br/>HTTP 客户端"]
AES["aes-gcm<br/>AES-256-GCM 加密"]
SERDE["serde / serde_yaml<br/>序列化"]
TOKIO["tokio<br/>异步运行时"]
B64["base64<br/>Base64 编解码"]
UUID["uuid<br/>唯一标识符"]
HEX["hex<br/>十六进制编解码"]
RAND["rand<br/>随机数生成"]
end
subgraph 系统依赖["系统依赖"]
WV["WebView2 / WebKit2GTK<br/>Web 渲染引擎"]
CORE["Mihomo Core<br/>代理引擎"]
end
TAURI --> WV
TAURI --> CORE
REQ --> AES
AES --> B64
AES --> RAND
SERDE --> HEX
TAURI --> TOKIO
TAURI --> SERDE
TAURI --> UUID
TAURI --> REQ
style 前端依赖 fill:#f39c12,stroke:#e67e22,color:#fff
style 后端依赖 fill:#3498db,stroke:#2980b9,color:#fff
style 系统依赖 fill:#2ecc71,stroke:#27ae60,color:#fff
- 安全优先 -- 多层纵深防御体系,从 CSP 策略到 CI/CD 自动化扫描,覆盖全攻击面。Fail-closed 设计:所有安全检查失败时拒绝操作,而非降级放行
- 极简依赖 -- 零前端框架(无 React/Vue/Svelte),零图表库(原生 Canvas 2D),极致轻量。前端采用模块化架构,pnpm monorepo(apps/desktop + packages/shared),67 个 ES Module 文件
- 跨平台一致 -- Windows / macOS / Linux 三平台统一代码库,差异化能力精准适配(Windows 注册表代理、macOS osascript 提权、Linux 多桌面环境检测)
- 配置即代码 -- 所有安全策略通过 CI/CD 流水线强制执行,11 层自动化安全扫描确保策略不会被意外绕过
| 层级 | 技术选型 | 说明 |
|---|---|---|
| 应用框架 | Tauri v2 | Rust 驱动的跨平台桌面框架 |
| 后端语言 | Rust 2021 (Edition 2021, MSRV 1.92+) | 内存安全,零 GC,高性能 |
| 前端语言 | 原生 JavaScript (ES Modules) | 无框架依赖,直接 DOM 操作 |
| 样式系统 | Tailwind CSS v4.2 | 原子化 CSS,@import "tailwindcss"
|
| 流量图表 | 原生 Canvas 2D API | 贝塞尔曲线面积图,requestAnimationFrame 节流 |
| 代理内核 | Mihomo (Clash Meta) | RESTful API + HTTP Streaming |
| 加密方案 | AES-256-GCM + PBKDF2-HMAC-SHA256 | 100,000 次迭代密钥派生 |

