Skip to content

Zephyr v2.4.0

Choose a tag to compare

@Juwan-Hwang Juwan-Hwang released this 17 Jul 15:52
· 98 commits to main since this release
e6186f2

Zephyr v2.4.0 — ARM64 原生支持、配置备份与恢复、WebView 崩溃恢复、UnoCSS 迁移

新增 Linux ARM64 原生构建 + Windows ARM64 交叉编译;事务性配置导出/导入;Windows WebView2 崩溃防御恢复;系统休眠唤醒后核心健康检查;x86_64-v3 指令集运行时检测;双源竞速更新检查;Tailwind CSS v4 → UnoCSS presetWind4 迁移;导航栏微动效系统;Design Token 4 级 Radius + semantic color;组件系统(Form Control / Status Dot / Latency Badge / Danger Zone / Status Ring);无障碍增强(ARIA + disabled 状态 + reduced-motion);窗口状态持久化;3D 悬停效果性能优化;83 个细粒度错误码;cargo-deny 安全审计。

新功能 — 平台

ARM64 原生支持

全平台 ARM64 架构支持,覆盖构建、打包、发布全链路。

CPU v3 指令集检测

运行时检测 x86_64-v3 指令集支持(AVX2、BMI1/2、FMA),选择最优 mihomo 二进制。

新功能 — 后端

配置备份与恢复

事务性配置导出/导入系统,支持完整配置迁移。

WebView 崩溃恢复

Windows 平台 WebView2 进程崩溃时自动恢复,无需用户手动重启。

系统休眠恢复

系统从睡眠/休眠唤醒后自动检查 mihomo 核心健康状态。

静默启动

启动时主窗口保持隐藏,仅显示托盘图标。

  • 设置入口:Settings → General → Silent Start
  • 点击托盘图标显示窗口

Settings Schema 迁移系统

settings.json 新增 schema_version 字段,支持自动迁移。

catch_unwind 守卫

关键函数(start_corewrite_config_fileupdate_core)包装 AssertUnwindSafe + catch_unwind

双源竞速更新检查

同时请求 GitHub REST API 和 Atom Feed,首个成功响应获胜。

窗口状态持久化

窗口位置、大小、最大化状态跨会话持久化。

多组件更新进度

更新系统新增 UpdateComponent 枚举(Core / GeoData / Client),下载进度事件携带组件标识,前端据此路由到正确的进度指示器。

83 个细粒度错误码

后端错误码从 48 个扩充到 83 个(+35),覆盖所有后端错误路径。

cargo-deny + audit.toml 安全审计

新增供应链安全审计配置。

  • deny.toml:cargo-deny 配置(license/advisory/ban/source)
  • audit.toml:cargo-audit 配置

新功能 — 前端

Tailwind CSS v4 → UnoCSS presetWind4 迁移

前端 CSS 引擎从 Tailwind CSS v4 全面迁移到 UnoCSS presetWind4。

导航栏微动效系统

侧边栏导航图标新增完整的微动效系统,每个页面有独特的动画语言。

3D 悬停效果性能优化

代理卡片 3D 透视悬停效果重构,消除布局抖动。

Design Token 4 级 Radius 系统

Radius 从 sm/md/lg 三级收敛为 4 级语义化系统。

Semantic Color Token

消除 15+ 文件中的硬编码颜色,统一使用 semantic token 类名。

无障碍增强

  • Disabled 状态统一:扩展到 :is(button, input, select, textarea, .btn, .form-control, .select-common, .dropdown-item, [role="button"]):is(:disabled, [disabled], [aria-disabled="true"])
  • Hover 禁用保护:所有 btn-*:hover 添加 :not(:disabled, [disabled], [aria-disabled="true"], .active)
  • Collapsible ARIArole="button" + tabindex="0" + aria-expanded + aria-controls + keyboard(Enter/Space)
  • Roving tabindex disabled guardisDisabled() helper,键盘激活(Enter/Space)检查 disabled 状态
  • Dropdown disabled 守卫:hover / click / option click 全部检查 disabled
  • Proxies reduced-motion:检测 prefers-reduced-motion,滚动文本添加 tabindex + role + aria-label
  • Rule library ARIA:分组头部 role="button" + tabindex="0"
  • Focus ring adapter--zephyr-focus-ring / ring-soft / border 通过 color-mix 实现主题感知
  • Transition tokens--zephyr-time-standard / --zephyr-easing-ease-out 替代硬编码值
  • btn-success 颜色修正:从 --color-accent 改为 --zephyr-color-success
  • Button type 统一:所有按钮添加 type="button"

Bug 修复

  • Linux 托盘剪贴板:WebKit2GTK 要求窗口焦点才能使用 navigator.clipboard,从托盘菜单点击时无法保证焦点。剪贴板写入从 JS 迁移到 Rust arboard crate(Linux 启用 wayland-data-control feature 支持 Wayland)
  • 加密配置规则提取prism_rebuildPrismHost::get_profileupdate_configstd::fs::read_to_string 替换为 read_profile_file,自动解密 encrypt_configs 加密的 profile,修复 "No 'rules' section found" 错误
  • 规则库分组头部视觉:从 bg-muted 改为 border + bg-input 样式,折叠时 opacity 0.55,悬停时 border-strong
  • Confirm modal 空消息处理showConfirmModal 在 message 为空/null 时跳过渲染消息区域,不再显示空白琥珀色框
  • CI frontend-audit:非 PR 事件跳过 dependency-review-action 防止失败