Skip to content

Releases: Juwan-Hwang/Zephyr

Zephyr v2.3.2

25 May 19:42
cb25908

Choose a tag to compare

Zephyr v2.3.2 — XSS 防护增强 & UI 修复

新增 html/safeHtml 安全模板标签和 eslint-plugin-no-unsanitized 静态检测;sanitizeHtml 改用 <template> 解析并新增 STRIP_CONTENT_TAGS 防内容泄漏;修复 UI 缩放时模糊溢出、关闭按钮点击区域过小、移动分组弹窗点击失效、订阅编辑模态框动画缺失。


🔒 安全

XSS 防护增强

  • html/safeHtml 模板标签:新增两个安全模板标签函数,html 自动转义所有插值(纯文本场景),safeHtml 保留 HTML 结构但经过白名单过滤(富文本场景)
  • <template> 解析sanitizeHtml 从 DOMParser 改用 <template>.content(DocumentFragment),保留孤立的 <tr>/<td>/<th>/<li> 等元素
  • STRIP_CONTENT_TAGS<script>/<style>/<iframe>/<noscript>/<object>/<embed>/<applet> 的内容完全丢弃,防止源代码作为文本泄漏
  • 子节点递归检查:移除非白名单标签时,对其子节点递归执行 sanitizeNode(),防止移动后跳过检查
  • eslint-plugin-no-unsanitized:新增 ESLint 规则,未使用 html/safeHtmlinnerHTML 赋值会报错
  • markdown.js:链接 href 改用 escapeAttr() 转义,输出经过 sanitizeHtml() 过滤
  • context-menu.js:自定义 HTML 项经过 sanitizeHtml() 过滤

🐛 Bug 修复

Markdown 代码块/行内代码渲染损坏

已生成的 <code><pre> 标签被后续步骤的 escapeHtml 双重转义,导致代码块内容显示为 HTML 源码而非渲染后的代码。改用占位符机制:先将代码块/行内代码替换为 \x00CODEBLOCK_N\x00 占位符,在所有解析步骤完成后再恢复。

UI 缩放模糊溢出

#app-main-container 添加 clip-path: inset(0 round 24px),修复 UI 缩放时内容溢出圆角区域导致模糊的问题。

关闭按钮点击区域

窗口关闭按钮(红绿灯按钮)新增 before:-inset-1.5 伪元素扩大点击区域,提升操作精度。

移动分组弹窗点击失效

规则库"移动到分组"弹窗中,分组按钮的点击事件改为通过 onReady 回调绑定到内容区域,修复事件委托失效导致无法选择分组的问题。

订阅编辑模态框动画

订阅编辑面板新增进入/退出动画(scale(0.95)→1 + opacity),与其他模态框保持一致的交互体验。


🏗 架构改进

依赖更新

包名 旧版本 新版本
@tauri-apps/cli 2.11.1 2.11.2
@codemirror/view 6.42.1 6.43.0
eslint 10.3.0 10.4.0
vitest 4.1.6 4.1.7

Zephyr v2.3.1

24 May 09:18
15cadaa

Choose a tag to compare

Zephyr v2.3.1 — 后端事件系统 & UI 焕新

新增统一的后端事件系统;全局 eprintln!/println! 替换为 emit_error!/emit_warn!/emit_info! 宏;统一 UI 圆角语义 token;日志页重构支持后端事件渲染。


🆕 新功能

后端事件系统

新增 backend_event.rs(336 行)+ backend-events.js(198 行),统一所有后端日志输出。

🎨 UI / UX 改进

统一圆角语义 token

新增 4 个基础值(--radius-sm/md/lg/full)+ 10 个语义化别名(--radius-button/input/card/panel/modal/nav/badge/dropdown/option/switch),替换所有硬编码圆角值。Tailwind 配置中的自定义 borderRadius 已移除,圆角系统完全由 CSS 变量驱动。

无边框窗口 + 共享 Glow 层

  • 窗口移除 borderringbox-shadow,禁用 Tauri 窗口阴影(shadow: false
  • 8 个页面的背景发光效果从各页面内部提升到 app-main-container 的共享层,通过导航切换显示
  • 侧边栏改为 backdrop-blur-sm + 极淡背景,移除硬编码边框
  • 标题栏移除 border-bbg-white/5,更简洁

滚动条透明化

滚动条透明度大幅降低(0.12→0.050.25→0.12),更隐蔽不干扰视觉。

模态框统一

  • 所有模态框遮罩统一为 bg-black/40 backdrop-blur-md
  • 所有模态框(端口设置、DNS 重写、Scope 编辑器、插件删除确认)新增缩放动画:打开 scale(0.96)→1 (0.25s ease-out),关闭 scale(1)→0.96 (0.15s ease-in)
  • Plugin 面板从 absolute z-50 改为 fixed z-[var(--z-modal)]

日志页重构

  • "扩展日志" Tab 重命名为"应用日志"
  • 新增级别过滤栏(All / Info / Warn / Error / Fatal)
  • 新增搜索框

🏗 架构改进

全局日志迁移

25+ 个 Rust 文件中的 eprintln!/println! 调用替换为 emit_error!/emit_warn!/emit_info! 宏,所有日志自动经过路径脱敏后推送到前端。

redact_error_message 集中化

core_process.rs 移至 backend_event.rs,使用 OnceLock 缓存路径,全局统一调用。


Zephyr v2.3.0

24 May 08:55
15cadaa

Choose a tag to compare

Zephyr v2.3.0 — Override 覆写系统 & 统一设置存储 & 安全加固

新增完整的 Override 覆写系统(Prism DSL + JavaScript 脚本双引擎,支持拖拽排序、作用域管理、导出/导入、远程覆写);新增代理组选择器下拉菜单;统一全局偏好设置到 settings.json(mode / TUN / port / IPv6 / allow-lan 等跨订阅持久化,启动时注入运行时配置);安全修复深链路绕过、YAML DoS、沙箱审计日志和路径脱敏;新增 Release 模式单实例检测;修复 MATCH/FINAL 规则模板替换;修复 i18n 硬编码英文通知;升级依赖。


🆕 新功能

Override 覆写系统

新增完整的配置覆写系统,支持 Prism DSL(YAML)和 JavaScript 脚本两种格式,共享统一的管道、作用域和排序机制。

代理组选择器下拉菜单

在代理列表页标题栏新增代理组选择器下拉菜单,支持一键切换主代理组。

统一设置存储(settings.json

将分散在 localStorage 和 YAML profile 中的全局偏好设置统一迁移到后端 settings.json,通过 patch_settings 原子命令进行部分更新,消除 Read-Modify-Write 竞态条件。

单实例检测(Release 模式)

新增 tauri-plugin-single-instance 依赖,在 Release 模式下检测已有实例并发送 focus 事件,防止重复启动。


🔒 安全修复

深链路绕过修复

修复深链路(deep link)绕过验证的安全问题。

YAML DoS 防护

修复 YAML 解析器对恶意构造的 YAML 内容的拒绝服务攻击(通过 validate_custom_args 增强输入验证)。

沙箱审计日志

为 QuickJS 沙箱增加审计日志记录,增强覆写脚本执行的可观测性。

路径脱敏

在日志输出中对文件路径进行脱敏处理,防止敏感路径信息泄露。


🐛 Bug 修复

Smart 评分异步持久化(SmartState)

替换 smart_score 命令中的同步磁盘 I/O 为 WAL + 阈值刷盘的异步持久化架构,缓解测速期间因每节点全量序列化 + 写文件导致的 UI 卡顿。

MATCH/FINAL 规则模板替换

修复规则提取时 MATCH/FINAL 规则(仅 2 字段格式 MATCH,Proxy)未被正确替换为 {{proxy}} 的问题。rule_library.rstypes.rs 中新增 is_match_final 判断,使用 policy_index = 1 正确定位策略字段。

i18n 硬编码英文通知

  • plugins-smart.js 中 "Best node" / "No nodes available" 通知改为使用 t('notifBestNode') / t('notifNoNodesForSelection') i18n 键
  • proxies.js 中 "Switched to best node" 通知改为使用 t('notifSwitchedBest') i18n 键
  • 新增英文/中文/日文三语翻译

连接卡片进程名字体

connections.js 中进程名 <span> 增加 text-xs 类,缩小字体避免与连接信息视觉冲突。

Best 按钮标签

index.html 中 "Best" 按钮移除 data-i18n="selectBest" 属性,固定显示英文 "Best"(与通知 i18n 分离)。

通知长文本截断

notifications.js 中通知标题增加 line-clamp-2,消息体增加 line-clamp-3,最大宽度从 400px 扩展到 480px。新增 title 属性显示完整路径 tooltip。


🎨 UI / UX 改进

新增 CSS 变量

亮色和暗色模式均新增 --text-muted / --bg-secondary / --bg-tertiary 变量,用于编辑器和通知组件。

Prism 变量解析日志

PrismHost.get_variables() 新增 debug 日志输出解析后的 proxy 变量和代理组列表,便于诊断跨订阅规则错误。


🏗 架构改进

Override 后端架构

新增完整的覆写后端模块。

Settings 原子更新

新增 patch_settings Tauri 命令,使用宏展开实现 14 个字段的原子部分更新,替代前端 GET + 修改 + SAVE 的竞态模式。

前端模块化

  • 新增 settings-helpers.js:统一的设置读写 API,串行队列保证写入顺序
  • prism.js 新增 overrideExport() / overrideImport() / waitForMihomoReady() 导出
  • lifecycle.jsswitchToConfig 增加 overrideApplyAll + 缓存失效 + 代理组重新渲染

Zephyr v2.2.3

17 May 08:03
d72ee02

Choose a tag to compare

Zephyr v2.2.3 — Core 生命周期优化 & 测速稳定性修复 & DNS Rewrite 修复

统一订阅切换逻辑为 switchToConfig() 共享函数,修复托盘切换缺少 prism rebuild 的 bug;Core 健康检查从固定轮询改为指数退避,启动等待从最坏 20s 降至 ~2s;新增连接排空(Drain)+ SIGTERM 优雅终止;修复测速 loading 状态丢失和快速切换订阅时页面卡住的问题;修复 DNS Rewrite 污染原始订阅文件导致节点超时的问题。

🐛 Bug 修复

快速切换订阅时测速卡住

修复连续切换订阅时延迟测试 worker 无法正确取消,导致 isTestingLatency 锁永远不释放、页面持续转圈但没有新数据的问题。新增 resetLatencyTestController() 确保每次测速使用独立的 AbortController。

测速 loading 状态丢失

buildProxyWrappers 创建 wrapper 时未检查 isTestingLatency 状态,导致 full render 路径丢失 loading 动画。现在测速期间新创建的 wrapper 会正确显示 pending 状态。

DNS Rewrite 污染原始订阅文件

applyDnsRewrite() 之前会调用 persistConfigChanges() 将 DNS rewrite payload 写回原始 profile 文件。切换订阅时 CORE_RESTARTED 事件触发 persistConfigChanges 覆盖订阅原始 DNS 配置,导致节点超时。现在 DNS rewrite 仅通过 mihomo API (patchConfig) 在运行时生效,不再写回磁盘。

托盘切换缺少 prism rebuild

托盘菜单切换订阅时未执行 prism.rebuild(),导致 Prism 规则的 __when__.profile 条件未重新评估。现已通过统一的 switchToConfig() 共享函数修复。

⚡ 性能优化

Core 健康检查指数退避

健康检查从固定 1s 轮询改为指数退避(50ms → 1s,上限 1s),Core 启动等待时间从最坏 20s 降低到 ~2s。

连接排空(Connection Draining)

kill_mihomo 前通过 DELETE /connections 排空活跃连接(2s 超时),帮助 mihomo 在繁忙时更快退出。

优雅终止(SIGTERM → SIGKILL)

进程终止从直接 SIGKILL 改为 SIGTERM → 等待 2s → SIGKILL,配合连接排空实现更干净的退出。

Smart Score IPC 限流

SmartScoreBatcher 限制 smart score IPC 并发为 2,避免测速期间密集 invoke 导致 UI 卡顿。smartNextInterval 从每节点调用改为全部测速完成后调用一次。

🏗️ 架构改进

统一配置切换(lifecycle.js

新增 ui/lifecycle.js 模块,将 switchToConfig()api.js 抽取为独立的高层编排函数:

  • 统一 UI 切换和托盘切换逻辑
  • 切换前自动中止测速 + 关闭连接 + 保存代理选择
  • 切换后自动重建 prism + 恢复代理选择
  • 原子更新 last_config(新增 update_last_config 后端命令,避免 Read-Modify-Write 竞态)
  • 修复 api.js 导入 UI 模块的分层违规和循环依赖

异步 I/O

  • 健康检查:std::net::TcpStreamtokio::net::TcpStream
  • 连接排空:reqwest::blockingreqwest async API

📦 下载说明

请根据您的操作系统选择对应版本:

平台 安装版 (Full) 安装版 (Lite) 便携版
Windows Zephyr_2.2.3_x64-setup-full.exe Zephyr_2.2.3_x64-setup-lite.exe Zephyr-windows-portable.zip
Windows (MSI) Zephyr_2.2.3_x64_zh-CN-full.msi Zephyr_2.2.3_x64_zh-CN-lite.msi
macOS (Apple Silicon) Zephyr_2.2.3_aarch64-full.dmg Zephyr_2.2.3_aarch64-lite.dmg
macOS (Intel) Zephyr_2.2.3_x64-full.dmg Zephyr_2.2.3_x64-lite.dmg
Linux (deb) Zephyr_2.2.3_amd64-full.deb Zephyr_2.2.3_amd64-lite.deb
Linux (AppImage) Zephyr_2.2.3_amd64-full.AppImage Zephyr_2.2.3_amd64-lite.AppImage Zephyr-linux-portable.tar.gz
Linux (RPM) Zephyr-2.2.3-1.x86_64-full.rpm Zephyr-2.2.3-1.x86_64-lite.rpm

⚠️免责声明:本项目由 AI 开发,安全性和性能尚未经充分验证,请自行评估使用风险。如发现安全问题或 Bug,欢迎提交 Issue。

Zephyr v2.2.2

15 May 20:37
28247aa

Choose a tag to compare

Zephyr v2.2.2 — 主组 Resolver & 代理记忆 v2 & observedGroup 观察器

新增确定性 7 级优先链主组 Resolver(替代关键词猜测);代理记忆升级为 v2(group+node 三元组 + 主组偏好持久化);新增 observedGroup 后台观察器(自动检测实际使用的代理组);修复智能测速初始化时序问题;升级 reqwest 0.13、toml 1.1、tauri 2.11.1。

✨ 新功能

主组 Resolver

代理组解析从旧的关键词猜测(includes('proxy'))升级为确定性 7 级优先链

代理记忆 v2

代理节点记忆从 v1(仅节点名)升级为 v2(group + node 三元组)

observedGroup 观察器

新增后台观察器(observed-group.js,179 行),自动检测用户实际使用的代理组

🐛 Bug 修复

智能测速初始化时序

修复 Smart Auto-Test 在应用启动时状态不正确的问题

🔧 依赖更新

依赖 旧版本 新版本 说明
reqwest 0.12 0.13 HTTP 客户端
toml 0.8 1.1 TOML 解析
tauri 2.10.3 2.11.1 桌面框架(Cargo.lock)

📦 下载说明

请根据您的操作系统选择对应版本:

平台 安装版 (Full) 安装版 (Lite) 便携版
Windows Zephyr_2.2.2_x64-setup-full.exe Zephyr_2.2.2_x64-setup-lite.exe Zephyr-windows-portable.zip
Windows (MSI) Zephyr_2.2.2_x64_zh-CN-full.msi Zephyr_2.2.2_x64_zh-CN-lite.msi
macOS (Apple Silicon) Zephyr_2.2.2_aarch64-full.dmg Zephyr_2.2.2_aarch64-lite.dmg
macOS (Intel) Zephyr_2.2.2_x64-full.dmg Zephyr_2.2.2_x64-lite.dmg
Linux (deb) Zephyr_2.2.2_amd64-full.deb Zephyr_2.2.2_amd64-lite.deb
Linux (AppImage) Zephyr_2.2.2_amd64-full.AppImage Zephyr_2.2.2_amd64-lite.AppImage Zephyr-linux-portable.tar.gz
Linux (RPM) Zephyr-2.2.2-1.x86_64-full.rpm Zephyr-2.2.2-1.x86_64-lite.rpm

⚠️免责声明:本项目由 AI 开发,安全性和性能尚未经充分验证,请自行评估使用风险。如发现安全问题或 Bug,欢迎提交 Issue。

Zephyr v2.2.1

14 May 18:55
6d282e0

Choose a tag to compare

Zephyr v2.2.1 — 隐藏超时节点 & 端口配置面板 & UI 缩放修复

新增隐藏超时节点开关、端口配置模态框;修复 UI 缩放下拉菜单定位错误。

✨ 新功能

隐藏超时节点

代理列表新增自动隐藏不可用节点的功能

端口配置面板

设置页面新增端口配置模态框,可视化编辑 Mihomo 监听端口

🐛 Bug 修复

UI 缩放下拉菜单定位

修复 UI 缩放后下拉菜单和右键菜单位置偏移的问题

i18n 更新

新增翻译键

📦 下载说明

请根据您的操作系统选择对应版本:

平台 安装版 (Full) 安装版 (Lite) 便携版
Windows Zephyr_2.2.1_x64-setup-full.exe Zephyr_2.2.1_x64-setup-lite.exe Zephyr-windows-portable.zip
Windows (MSI) Zephyr_2.2.1_x64_zh-CN-full.msi Zephyr_2.2.1_x64_zh-CN-lite.msi
macOS (Apple Silicon) Zephyr_2.2.1_aarch64-full.dmg Zephyr_2.2.1_aarch64-lite.dmg
macOS (Intel) Zephyr_2.2.1_x64-full.dmg Zephyr_2.2.1_x64-lite.dmg
Linux (deb) Zephyr_2.2.1_amd64-full.deb Zephyr_2.2.1_amd64-lite.deb
Linux (AppImage) Zephyr_2.2.1_amd64-full.AppImage Zephyr_2.2.1_amd64-lite.AppImage Zephyr-linux-portable.tar.gz
Linux (RPM) Zephyr-2.2.1-1.x86_64-full.rpm Zephyr-2.2.1-1.x86_64-lite.rpm

⚠️免责声明:本项目由 AI 开发,安全性和性能尚未经充分验证,请自行评估使用风险。如发现安全问题或 Bug,欢迎提交 Issue。

Zephyr v2.2.0

13 May 20:11

Choose a tag to compare

Zephyr v2.2.0 — 订阅自动更新 & 代理记忆 & 订阅编辑 & 安全加固

新增订阅自动更新调度器、代理节点记忆(切换配置自动恢复上次节点)、订阅右键编辑面板;安全方面:加密函数不再静默失败、get_config_url 从 IPC 降级为内部函数防止 URL 泄漏、新增 REALITY short-id 科学计数法保护、CFW 遗留键清理、escapeAttr 函数、Mihomo 日志截断。

✨ 新功能

订阅自动更新调度器

新增后台订阅自动更新调度器(subscription_scheduler.rs)。

代理节点记忆

新增代理节点选择记忆功能(proxy-memory.js),记住每个配置文件上次使用的代理节点。

订阅编辑面板

订阅列表新增右键编辑功能。

批量更新

新增 download_sub_batch 命令,一键更新所有订阅:

  • 绕过速率限制:批量更新不走单次速率限制器,避免"全部更新"被误拦截
  • 逐个执行:串行执行每个订阅的下载,收集成功/失败结果
  • URL 回退:每个订阅可传入 URL 或从 metadata 中解析(resolve_url_from_metadata

🔒 安全加固

get_config_url 降级为内部函数

get_config_url 从 Tauri Command(暴露给前端)降级为内部 pub fn,防止订阅 URL 泄漏到前端 JavaScript:

加密函数错误传播

obfuscate_string / deobfuscate_string 返回类型从 String 改为 Result<String, String>

  • 不再静默失败(之前返回空字符串)
  • 解密使用 String::from_utf8(严格校验)替代 String::from_utf8_lossy
  • 移除所有 eprintln!("[Security] CRITICAL: ...") 日志,避免敏感信息泄露到 stdout

密钥存储改进

  • 移除 current_exe 回退:删除可执行文件目录回退路径(不可靠)
  • hex 编码:持久化密钥改用 hex 编码存储,读取时验证精确 32 字节
  • CFW 遗留密钥清理:自动清理 Clash for Windows 旧格式加密文件

REALITY short-id 科学计数法保护

新增 quote_short_id_values 函数,在 YAML 解析前给 short-id 值加引号:该函数在 download_sub_inner 中调用,确保 REALITY 配置的正确性。附带 9 个单元测试。

CFW 遗留键清理

config_sanitizer.rs 新增 6 个 Clash-for-Windows 遗留键的清理:这些键在 Mihomo 中无效果,但可能被用于注入意外行为。

escapeAttr 函数

sanitize.js 新增 escapeAttr 函数,在 escapeHtml 基础上额外转义 "':用于 HTML 属性值场景(如 title="${escapeAttr(value)}"),防止属性注入。已在 rules.jssubscriptions.jsrule-library.js 等模块中使用。

Mihomo 日志截断

core_log.rs 新增日志行长度限制。

Base64 验证增强

try_decode_base64_content 现在验证解码后的 proxies 键的值是 sequence(数组),而不仅仅是字符串包含检查,防止格式错误的 Base64 内容被接受。

🐛 Bug 修复

  • UI 缩放:下拉菜单、设置面板、代理卡片、规则库、TUN 面板在 UI 缩放时正确适配
  • 订阅切换:切换订阅时实时读取 last_config(绕过缓存),避免闭包捕获过期值
  • 速率限制:批量订阅更新时绕过单次速率限制
  • ESLint:修复 no-unused-varsno-duplicate-imports 错误

🔧 改进

指标 v2.1.1 v2.2.0 变化
IPC 命令 121 125 +5 新增,-1 降级(get_config_url
Rust 测试 304 341 +37
代码重构 提取 validate_config_for_updateupdate_metadata_entryresolve_url_from_metadata 等辅助函数
i18n 新增调度器、编辑面板、代理记忆相关翻译键

📦 下载说明

请根据您的操作系统选择对应版本:

平台 安装版 (Full) 安装版 (Lite) 便携版
Windows Zephyr_2.2.0_x64-setup-full.exe Zephyr_2.2.0_x64-setup-lite.exe Zephyr-windows-portable.zip
Windows (MSI) Zephyr_2.2.0_x64_zh-CN-full.msi Zephyr_2.2.0_x64_zh-CN-lite.msi
macOS (Apple Silicon) Zephyr_2.2.0_aarch64-full.dmg Zephyr_2.2.0_aarch64-lite.dmg
macOS (Intel) Zephyr_2.2.0_x64-full.dmg Zephyr_2.2.0_x64-lite.dmg
Linux (deb) Zephyr_2.2.0_amd64-full.deb Zephyr_2.2.0_amd64-lite.deb
Linux (AppImage) Zephyr_2.2.0_amd64-full.AppImage Zephyr_2.2.0_amd64-lite.AppImage Zephyr-linux-portable.tar.gz
Linux (RPM) Zephyr-2.2.0-1.x86_64-full.rpm Zephyr-2.2.0-1.x86_64-lite.rpm

⚠️免责声明:本项目由 AI 开发,安全性和性能尚未经充分验证,请自行评估使用风险。如发现安全问题或 Bug,欢迎提交 Issue。

Zephyr v2.1.1

07 May 12:42

Choose a tag to compare

Zephyr v2.1.1 — 订阅拖拽排序 & UI 修复

新增订阅列表拖拽排序功能;修复智能排序按钮显示逻辑、订阅规则提取勾选状态、订阅更新失败等问题。

✨ 新功能

订阅拖拽排序

订阅列表现在支持拖拽重新排序:

🐛 Bug 修复

智能排序按钮显示逻辑

  • 禁用时:隐藏智能排序按钮,不显示分数
  • 启用时:显示 Best 按钮和节点分数
  • 持久化:DNS 覆盖状态正确保存和恢复

订阅规则提取勾选状态

修复从订阅配置中提取规则后,规则项错误地显示为勾选状态的问题:

  • 规则提取后正确显示未勾选状态
  • 新增单元测试覆盖该场景

订阅更新失败

修复订阅更新接口调用失败但添加功能正常的问题:

  • 统一更新和添加的代码路径
  • 修复参数传递错误
    (另外有一个测试失败,以及全部更新功能会受到速度限制导致失败。这些问题已知,会于下个版本修复)

📦 下载说明

请根据您的操作系统选择对应版本:

平台 安装版 (Full) 安装版 (Lite) 便携版
Windows Zephyr_2.1.1_x64-setup-full.exe Zephyr_2.1.1_x64-setup-lite.exe Zephyr-windows-portable.zip
Windows (MSI) Zephyr_2.1.1_x64_zh-CN-full.msi Zephyr_2.1.1_x64_zh-CN-lite.msi
macOS (Apple Silicon) Zephyr_2.1.1_aarch64-full.dmg Zephyr_2.1.1_aarch64-lite.dmg
macOS (Intel) Zephyr_2.1.1_x64-full.dmg Zephyr_2.1.1_x64-lite.dmg
Linux (deb) Zephyr_2.1.1_amd64-full.deb Zephyr_2.1.1_amd64-lite.deb
Linux (AppImage) Zephyr_2.1.1_amd64-full.AppImage Zephyr_2.1.1_amd64-lite.AppImage Zephyr-linux-portable.tar.gz
Linux (RPM) Zephyr-2.1.1-1.x86_64-full.rpm Zephyr-2.1.1-1.x86_64-lite.rpm

⚠️免责声明:本项目由 AI 开发,安全性和性能尚未经充分验证,请自行评估使用风险。如发现安全问题或 Bug,欢迎提交 Issue。

Zephyr v2.1.0

06 May 17:20

Choose a tag to compare

Zephyr v2.1.0 — 便携版支持 & UI 缩放 & SSRF 优化 & DNS 防泄漏

新增便携版(Portable)支持,无需安装、数据随程序携带;新增 UI 缩放功能;优化 SSRF 策略允许用户主动输入内网地址;TUN 模式自动注入 DNS 劫持防止泄漏。

✨ 新功能

便携版支持(Portable Mode)

Zephyr 现在支持便携版运行模式,无需安装,解压即用:

  • 自动检测:当程序目录存在 .portable 标记文件时,自动进入便携模式
  • 数据隔离:所有数据(配置、订阅、核心、缓存)存储在程序所在目录,不写入系统目录(Windows AppData / Linux ~/.config)
  • 多实例:可同时运行多个便携版实例(注意系统代理端口冲突和 TUN 互斥)
  • CI 构建:Release 流水线新增便携版产物
    • Windows: Zephyr-windows-portable.zip
    • Linux: Zephyr-linux-portable.tar.gz(AppImage + 数据目录)

便携版限制:

  • ❌ 不支持开机自启
  • ❌ 不支持客户端内更新(需手动下载新版)

详见 PORTABLE.md

UI 缩放(UI Scale)

新增用户可控的界面缩放功能:

  • 设置入口:Settings → Appearance → UI Scale
  • 持久化:缩放偏好保存到 settings.json
  • 实现方式:CSS transform: scale() 应用到整个应用根元素

SSRF 策略优化

重构 SSRF 防护策略,区分"用户主动行为"和"重定向攻击":

场景 之前 现在
用户直接输入内网地址 ❌ 拒绝 允许
公网 URL 重定向到内网 ❌ 拒绝 拒绝(保持)

为什么安全

  • 用户主动输入内网地址是预期行为
  • SSRF 攻击的核心是攻击者控制重定向目标,而非用户主动输入
  • DNS Pinning 保持不变,防止 DNS 重绑定攻击

影响范围:订阅下载、规则库导入。

TUN 模式 DNS 防泄漏

启用 TUN 模式时,自动注入 dns-hijack 配置:

tun:
  enable: true
  dns-hijack:
    - any:53        # UDP DNS
    - tcp://any:53  # TCP DNS
  • 自动注入:如果配置中已存在 dns-hijack,确保包含上述两项;如果不存在,自动创建
  • 防泄漏原理:劫持所有 53 端口的 DNS 流量到 Mihomo,防止应用绕过代理直接查询系统 DNS
  • 单元测试:新增 5 个测试用例覆盖各种配置场景

🔧 改进与修复

  • 依赖更新
    • OpenSSL 安全更新(openssl crate)
    • glib 0.22.6 → 0.22.7
    • 多个前端开发依赖(dependabot 自动更新)
  • 代码结构:修复 shared package 导入路径(使用 @zephyr/shared 而非生成的 _shared 路径)

📦 下载说明

请根据您的操作系统选择对应版本:

平台 安装版 (Full) 安装版 (Lite) 便携版
Windows Zephyr_2.1.0_x64-setup-full.exe Zephyr_2.1.0_x64-setup-lite.exe Zephyr-windows-portable.zip
Windows (MSI) Zephyr_2.1.0_x64_zh-CN-full.msi Zephyr_2.1.0_x64_zh-CN-lite.msi
macOS (Apple Silicon) Zephyr_2.1.0_aarch64-full.dmg Zephyr_2.1.0_aarch64-lite.dmg
macOS (Intel) Zephyr_2.1.0_x64-full.dmg Zephyr_2.1.0_x64-lite.dmg
Linux (deb) Zephyr_2.1.0_amd64-full.deb Zephyr_2.1.0_amd64-lite.deb
Linux (AppImage) Zephyr_2.1.0_amd64-full.AppImage Zephyr_2.1.0_amd64-lite.AppImage Zephyr-linux-portable.tar.gz
Linux (RPM) Zephyr-2.1.0-1.x86_64-full.rpm Zephyr-2.1.0-1.x86_64-lite.rpm

便携版使用:解压后确保目录中有 .portable 标记文件,然后运行可执行文件。详见 PORTABLE.md

⚠️免责声明:本项目由 AI 开发,安全性和性能尚未经充分验证,请自行评估使用风险。如发现安全问题或 Bug,欢迎提交 Issue。

Zephyr v2.0.1

30 Apr 09:26

Choose a tag to compare

Zephyr v2.0.1 — 安全修复 & 原子更新 & 订阅管理改进

修复供应链安全漏洞(符号链接攻击、压缩炸弹)、实现核心/Geo/配置文件的原子更新与自动回滚、新增订阅重命名功能。

🔒 修复

  • 更新对话框修复:仅客户端有更新时(核心无需更新),更新确认对话框现在正确显示确认/取消按钮
  • 符号链接攻击防护:ZIP 解压时跳过符号链接条目,TAR 解压时拒绝符号链接和硬链接条目,防止通过压缩包内的符号链接实现任意文件写入
  • 压缩炸弹检测:GZIP 解压时检测可疑压缩比(200:1 阈值),防止资源耗尽攻击
  • SSRF 代理路径加固:移除系统代理回退通道,仅保留直连和用户配置的 Mihomo 代理两条下载路径,减少不可信代理的 SSRF 攻击面
  • 文件权限失败不再静默write_file_secure 在 Unix(chmod 0600)和 Windows(DACL 设置)权限设置失败时返回错误,而非静默忽略
  • 未验证安装包拒绝打开:客户端更新时若无 SHA256 摘要可用,拒绝打开安装包并删除已下载文件

🛠️ 可靠性提升

  • 核心更新原子回滚update_core 改为原子替换序列(旧二进制 → 备份 → 新二进制 → 启动验证),新核心启动失败时自动回滚到上一版本
  • Geo 数据原子更新update_geo_data 改为原子交换模式(backup → rename),geoip 和 geosite 必须同时成功或同时回滚,避免部分更新导致数据不一致
  • 配置文件原子写入:订阅更新采用 temp → backup → target 顺序,metadata 写入失败时自动回滚配置文件到之前的状态

✨ 新功能

  • 订阅重命名:右键菜单新增"重命名"选项,支持输入框编辑配置文件名,自动同步 last_config 设置
  • 重复名称自动后缀:新增订阅时若文件名已存在,自动追加递增数字后缀(-1-2...),避免覆盖已有配置
  • 智能订阅命名:新增订阅时优先使用服务器 Content-Disposition 头部文件名,其次从规则中提取第一个策略组名称,最后回退到 URL 派生名称

📦 下载说明

请根据您的操作系统选择对应版本(full 版本含所有依赖,lite 版本体积更小):

平台 Full 版本 Lite 版本
Windows (x64) Zephyr_2.0.1_x64-setup-full.exe Zephyr_2.0.1_x64-setup-lite.exe
Windows (x64 MSI) Zephyr_2.0.1_x64_zh-CN-full.msi Zephyr_2.0.1_x64_zh-CN-lite.msi
macOS (Apple Silicon) Zephyr_2.0.1_aarch64-full.dmg Zephyr_2.0.1_aarch64-lite.dmg
macOS (Intel x64) Zephyr_2.0.1_x64-full.dmg Zephyr_2.0.1_x64-lite.dmg
Linux (deb, amd64) Zephyr_2.0.1_amd64-full.deb Zephyr_2.0.1_amd64-lite.deb
Linux (AppImage, amd64) Zephyr_2.0.1_amd64-full.AppImage Zephyr_2.0.1_amd64-lite.AppImage
Linux (RPM, x86_64) Zephyr-2.0.1-1.x86_64-full.rpm Zephyr-2.0.1-1.x86_64-lite.rpm

⚠️免责声明:本项目由 AI 开发,安全性和性能尚未经充分验证,请自行评估使用风险。如发现安全问题或 Bug,欢迎提交 Issue。