zzzgydi

客户端与生态

Clash Verge 创始开发者 · 2021 — 2023

又名 GyDi · Verge 原作者

以 Tauri 撕裂 Electron 垄断:Clash Verge 的轻量哲学与桌面分流革命

率先在桌面端引入 Rust + Tauri 轻量架构,以配置覆写脚本与原生服务模式开创现代 GUI 标杆

第一幕 · 时代的沉重桎梏:Chromium 阴影下的桌面代理泥潭

2021 年底,桌面跨平台代理客户端几乎被基于 Electron 的方案全面统治。凭借成熟的前端 Web 生态与开箱即用的跨平台能力,图形界面虽然变得华丽多样,但随之而来的代价却愈发沉重:每个客户端都必须在底层打包一个完整的 Chromium 浏览器内核与 Node.js 运行时。

在这样的架构下,安装包体积动辄突破 100MB,后台静默待机状态下的常驻内存轻松吞噬 300MB 甚至更高。而在低配办公笔记本或多任务重载工作站上,一个仅在后台静默监听本地端口并转发流量的系统级工具,却与大型生产力应用争抢珍贵的 RAM 和 CPU 调度周期,引发风扇狂转与续航崩塌。

“为什么一个代理界面的资源消耗堪比一整个操作系统?”社区对 Electron 臃肿体量的焦虑与反思在极客圈蔓延。面对社区关于安装包体积的疑问,zzzgydi 后来在 GitHub 议题讨论中一针见血地对比了架构差异:“我看了 cfw 最新 release,macOS 的 dmg 包是 90+MB,而 verge 的 dmg 包才 25 不到。Linux 的 deb 包,verge 的也才 30 不到。AppImage 是因为包含了所有依赖,所以也 90+ 了,但是对比 cfw 的,verge 是带了两个 clash core,还多带了两个 meta 核心需要的初始 dat文件。”

跳出内置 Chromium 的传统惯性,寻找一种更底层、更轻量且兼具现代声明式前端体验的全新架构,成为了摆在桌面开发者面前的紧迫命题。而在项目的致谢文档中,他也坦荡写下了对先行的致敬:“Clash Verge was based on or inspired by these projects... Fndroid/clash_for_windows_pkg: A Windows/macOS GUI based on Clash.”[2][3][14]

第二幕 · “这个坑有点大”:Rust + Tauri 的破局与创世宣言

2021 年 12 月 4 日 14:31(UTC+8),开发者 zzzgydi(Git 署名 GyDi)在 GitHub 建立了 clash-verge 仓库,并推送了初代工程代码。他做出了一个在当时极具冒险精神却深具前瞻性的架构决断:全面拥抱新兴的 Rust + Tauri 框架。

Tauri 彻底颠覆了 Electron 的打包思路:它抛弃了臃肿的独立 Chromium 引擎,转而直接挂载宿主操作系统自带的原生渲染管线(Windows 上的 Webview2、macOS 上的 WebKit);而在操作系统底层交互、内核子进程守护与跨进程通信(IPC)层面,则交由具备极致性能与无 GC 内存安全的纯 Rust 执掌。

在 12 月 26 日提交的早期 README 中,zzzgydi 写下了坦率、幽默而又极具极客底色的创世说明:“A Clash GUI based on tauri... Now it's no different from the others, even fewer. (WIP)... This keng is a little big... This is a learning project for Rust practice.”(用于练习 Rust 的学习项目……这个坑有点大……)。

在最初撰写项目使用指南时,他没有任何居高临下的权威姿态,而是极具极客真诚地坦言自身局限:“由于没有提供啥文档,暂时用 issue 介绍其中一些功能……本项目只是对 clash 的部分配置提供方便易用的 GUI 操作,仅此而已。当前版本对于 providers 的支持还只是能看不能用的状态,如果目前你有这个需求,可以考虑社区里其他更全面更完备的项目。”当 Linux 用户急切询问版本进度时,他也风趣而诚恳地回复:“可能要蹲得比较久……有关 linux 系统代理的设置我还不懂,有没有兴趣来个 PR 啥的呢。”

工程红利是立竿见影且颠覆性的:安装包体积骤降至 20MB 左右,待机常驻内存被压缩至数十兆以内。辅以克制雅致的深浅色 UI 与秒级冷启动速度,Clash Verge 以黑马之姿撕开了桌面分流界面的崭新破晓。[2][3][4][5]

第三幕 · 硬核深水区:TUN 网卡接管、Windows 服务与 Meta 拥抱

界面轻盈只是视觉表层,要把操作系统所有进出流量顺畅接管进代理通道,必须深入底层网络协议栈的深水区。2022 年 2 月 25 日,zzzgydi 提交了关键改动,正式为客户端引入 TUN 虚拟网卡模式,并默认封装 Wintun 高性能驱动,让非代理感知型应用实现无缝全局接管。

但在桌面运维的现实场景中,TUN 模式与特权端口操作极易触发 Windows 频繁的 UAC 管理员提权弹窗,甚至导致开机自启动失败。2022 年 4 月 24 日,zzzgydi 耗费大量精力为 Windows 端独创了“服务模式”(Service Mode):将需要高权限执行的底层网卡配置与内核守护注册为独立系统服务,前端 UI 则在普通用户权限下运行。通过本地安全通信协同,彻底消除了每次启动的弹窗骚扰。

在攻坚早期底层服务安装的报错时,他毫不避讳在 issue 中记录排障事实:“程序内部调用 sc 命令得到 exitcode 为 6。暂不清楚原因。解决方法:手动新建一个 install.bat……”随后,他系统总结了客户端启动的底层依赖根因:“程序依赖系统的 Webview2,当 Webview2 不存在时将启动失败……程序采用端口占用的方式实现程序单例和拉起已开启的程序。”

在内核生态的选择上,zzzgydi 同样展现出过人的技术敏锐度。2022 年 5 月中旬,当社区新兴的分支 Clash.Meta(后来的 Mihomo)刚刚崭露头角时,他迅速在 Verge 中完成 Meta 内核集成;5 月 30 日,他更进一步在配置中直接将 Meta 设为默认推荐核心,率先打通了多内核无感热切换通道,加速了社区向现代核心迁移的进程。[6][7][8][9][11]

第四幕 · 规则的自主权:Script 脚本与 YAML Merge 的工程范式

随着去中心化代理生态的发展,普通用户面临着另一道难题:机场或服务商下发的远程订阅配置参差不齐,用户手动的分流规则往往在每次订阅更新后被全量覆盖冲掉。

zzzgydi 决意把配置的主动权彻底交还给使用者。2022 年 5 月 16 日,他为 Verge 设计并实装了 Script 脚本模式;随后在 9 月 21 日,引入了优雅简洁的 YAML Merge 扩展机制。他在使用指南中深入剖析了脚本沙盒的安全与边界:“实现原理是利用 Webview2 里的 JS 引擎执行用户脚本,所以不能执行任何系统 api 的操作……仅采用 new Function 和严格模式执行用户脚本。脚本安全性的考虑:应该不存在脚本突破沙盒产生威胁……总而言之,不要随便运行别人的脚本。”

随着客户端规模扩大,纯前端 Webview 执行的短板逐渐显露:当窗口关闭且后台需要定时更新订阅时,Webview 上下文销毁会导致增强逻辑失效。2022 年 8 月 9 日,zzzgydi 在 Issue #151 中清醒地提出了重构蓝图:“现在是利用 Webview 的 js 引擎实现功能,当完全关闭 webview 时且存在定时更新配置文件的情况,就会导致 Enhanced 的逻辑完全失效。ToDo:merge profile 在 rust 侧实现;script profile 通过引入 quickjs 实现。”

将配置处理流水线下沉至 Rust 原生层与嵌入式 QuickJS 引擎,构成了 Verge 坚不可摧的护城河:用户既可以编写一段轻量优雅的 JavaScript 脚本在内存中劫持修饰配置树,也可以编写声明式的 YAML Merge 规则片段动态覆写节点、策略组与 DNS 策略。原始订阅保持只读纯净,个性化分流毫秒级注入生效,这套设计直接定义了后世桌面代理扩展的最高标准。[10][13][4][12]

第五幕 · 原版退场与社区接续

2023 年 10 月 31 日凌晨,zzzgydi 推送了标签为 v1.3.8 的稳定版本,完成了其作为项目第一阶段缔造者的历史答卷。而在 11 月 3 日上午 10:23,他还在 Issue #893 里耐心地指导用户排查配置语法:“注意一下,merge 不是什么字段都支持的,并不完全支持 cfw 的 commands,详细的看 wiki。”

然而,外部环境的风暴来得猝不及防。11 月 3 日下午,原版 Clash 核心遭遇突发删库风暴,整个中文代理生态陷入剧烈震荡。15:11:23,zzzgydi 在仓库推送了一次清空提交,提交说明只有简短克制的两个单词:“chore: rm”。198 个源代码文件与 25,610 行代码在顷刻间被清理,README 仅留孤零零的一个词:“Removed”,原项目正式宣告归档谢幕。

提交清空代码仅仅两分钟后的 15:13:06,一位用户在 Issue #905 焦急地发问:“clash core 404了会对这个有影响吗”。面对风暴席卷而来的时代拐点,zzzgydi 在该议题里留下回复,那是一个力透纸背、极度平静却又沉重无比的单字:

“有”。

随后,他关闭了该 Issue。在当日傍晚有关退出进程残留的提问中(Issue #906),他最后留下一句“尝试过,没关掉”。这些回复仅记录原项目当时的讨论,不代表他此后停止所有开源活动。

原版留下的代码随后由社区接续。当前 clash-verge-rev 仓库创建于 2023 年 11 月 21 日(UTC),README 明确将项目称为 Clash Verge 的延续;这是仓库记录的时间,不代表组织成立时间。

代码得以延续,维护身份却需要分别确认。2024 年 3 月 23 日 11:29:32(UTC+8),一位贡献者在 Clash Verge Rev 的 PR #724 中请他查看改动,他回复:

“当前项目不是我在维护哈,可以等维护者回复哈”

这条原话划清了作品传承与实际维护的边界:zzzgydi 是原版 Clash Verge 的创始开发者,Rev 的后续开发由社区维护者承担。Rev 的作品社群也不能归作他的个人或作品社群。[15][17][19][18][20][1]

代表作品与核心贡献

Clash Verge (v0.0.1 — v1.3.8)

访问作品

业内首款基于 Rust + Tauri 的高性能跨平台 Clash 桌面客户端,奠定现代轻量 GUI 架构基石

Verge 订阅修饰引擎 (Script & Merge Engine)

访问作品

基于 JavaScript 与 YAML Merge 的运行时动态配置修饰系统,将分流定制的主动权彻底交还用户

Windows 原生服务模式与跨平台 TUN 接管

访问作品

解耦特权执行与界面交互的高性能守护进程方案,实现免 UAC 弹窗的开机透明代理

致敬开发者的坚守

代码或许归档,但火种永不熄灭。为推动网络对抗演进与底层工程突破的开拓者献上一份敬意。

单设备 1 小时内限致敬 1 次 · 匿名无感不收集隐私

作者公开发言与动态

查看全部动态(1 条)

编年大事记

clash-verge 仓库建立并提交创世代码

zzzgydi(GyDi)在 GitHub 创建 clash-verge 并推送初始代码,确立基于 Rust + Tauri 的轻量跨平台 GUI 技术路线。[2]

发布首个公开预览版并公开项目信条

发布 v0.0.1 标签,在初始 README 中确立“A Clash GUI based on tauri”定位,坦率留下“这个坑有点大”的极客宣言。[3][5]

实装 TUN 虚拟网卡透明代理接管

引入系统级 TUN 虚拟网卡模式支持,随后默认打包 Wintun 驱动,实现全局流量无缝拦截分流。[6]

发布首版使用指南并阐述沙盒安全边界

在 GitHub Issue #12 建立使用指南,坦诚交代功能局限,并确立 Webview2 严格模式沙盒与链式配置流水线。[4]

开创 Windows 原生服务模式(Service Mode)

将底层提权配置解耦为独立系统服务,彻底消除日常使用与开机自启动时的 UAC 弹窗困扰。[7][8]

引入 Script 扩展脚本机制

支持通过外部 JavaScript 脚本在运行时动态修饰订阅与路由配置,开启高阶个性化分流时代。[10]

率先集成 Clash.Meta 多内核支持

敏锐跟进社区新兴的 Clash.Meta(Mihomo 前身)内核,并在 5 月 30 日率先将其设为默认推荐核心。[11]

提出将增强配置下沉至 Rust 与 QuickJS

在 Issue #151 规划解耦前端 Webview,将 Merge 逻辑迁移至 Rust 纯原生层,Script 引入 QuickJS 引擎。[12]

推出 YAML Merge 订阅覆写扩展范式

基于 YAML Merge Key 实现声明式订阅修饰,确立了无需污染原始文件即可动态注入规则的行业范式。[13]

公开剖析 Verge 相对 Electron 的极致体积优势

在 Issue #407 详尽对比 macOS DMG 与 Linux DEB 安装包体积(25MB vs 90MB+),剖析原生渲染技术红利。[14]

发布原版最终稳定版本 v1.3.8

发布 v1.3.8 标签,完善多项性能体验与日志调度,完成奠基阶段全部历史使命。[15][16]

风暴中以“chore: rm”清空代码并留下单字“有”谢幕

面对上游核心突发删库,zzzgydi 推送清空提交并归档仓库;在 Issue #905 留下单字回复“有”后结束维护。[17][19][18]

当前 Clash Verge Rev 仓库创建(UTC)

GitHub 记录当前仓库创建于 2023-11-21T18:24:03Z,README 明确承接原版 Clash Verge;仓库时间不代表组织成立时间,代码继承也不代表原作者参与后续维护。[20]

一手来源与考据

小传正文中的关键事实与时间点均基于以下公开一手记录或权威报道:

  1. [1]

    2024-03-23T03:29:32Z(UTC+8 为 11:29:32),本人原话:“当前项目不是我在维护哈,可以等维护者回复哈”。

    https://github.com/clash-verge-rev/clash-verge-rev/pull/724#issuecomment-2016328227
  2. [2]

    证实 2021-12-04 14:31:26 建立 Rust + Tauri 桌面端工程架构

    https://github.com/zzzgydi/clash-verge/commit/1afaa4c51ea0cc79c2e2ecb225dc4ea78864080c
  3. [3]

    证实初始 README 中关于“A Clash GUI based on tauri”与“This keng is a little big”的原话

    https://github.com/zzzgydi/clash-verge/commit/1fba9039afd60222f1cb9f597ebfa0ce5307f789
  4. [4]

    记录作者在项目早期对能力边界、Webview2 沙盒安全信条与链式配置流水线的原话说明

    https://github.com/zzzgydi/clash-verge/issues/12
  5. [5]

    记录作者关于“可能要蹲得比较久……”以及诚恳向社区征求系统代理 PR 的原话

    https://github.com/zzzgydi/clash-verge/issues/6
  6. [6]

    证实 2022-02-25 首次将系统级虚拟网卡 TUN 接管引入 Tauri 架构

    https://github.com/zzzgydi/clash-verge/commit/d7c5ce0750e69b9368e80da73fc4d796b683a0f5
  7. [7]

    证实 2022-04-24 完成基于独立服务解耦特权执行与开机无 UAC 弹窗方案

    https://github.com/zzzgydi/clash-verge/commit/34e941c8cbc7605e5aece219bcd318e60705408b
  8. [8]

    记录作者排查服务创建 exitcode 6 错误及编写 install.bat 方案的原话

    https://github.com/zzzgydi/clash-verge/issues/74
  9. [9]

    记录作者对 Webview2 依赖、端口单例机制与配置目录权限的官方说明

    https://github.com/zzzgydi/clash-verge/issues/153
  10. [10]

    证实 2022-05-16 首次引入基于外部 JavaScript 的动态配置拦截修饰机制

    https://github.com/zzzgydi/clash-verge/commit/61e7df77a72db73a9aace95b911152c95225d3c8
  11. [11]

    证实 2022-05-17 率先集成新兴的 Meta 内核并于当月设为默认推荐核心

    https://github.com/zzzgydi/clash-verge/commit/be9ea4ea8ef236528f0eee2ad3788cc898daee64
  12. [12]

    记录作者将 Merge 移入 Rust 侧、Script 引入 QuickJS 解决 Webview 依赖的原话

    https://github.com/zzzgydi/clash-verge/issues/151
  13. [13]

    证实 2022-09-21 确立基于 YAML Merge Key 的非侵入式订阅修饰范式

    https://github.com/zzzgydi/clash-verge/commit/6331447dcd34632023d90e35fb13e725f27922f0
  14. [14]

    记录作者亲自对比 CFW 与 Verge 在 macOS DMG(25MB vs 90MB+)与 Linux DEB 上的体积优势原话

    https://github.com/zzzgydi/clash-verge/issues/407
  15. [15]

    证实 2023-10-31 01:29:20 发布原版最后一个稳定版本的代码变更

    https://github.com/zzzgydi/clash-verge/commit/b5391560fcbca6eb04c76502b9828dd29ca6546c
  16. [16]

    记录原作者所发布的最终正式版本发行说明

    https://github.com/zzzgydi/clash-verge/releases/tag/v1.3.8
  17. [17]

    证实 2023-11-03 15:11:23 在原版 Clash 删库当日清空 198 个文件并在 README 留下“Removed”后归档

    https://github.com/zzzgydi/clash-verge/commit/0cf40f6bdf9d61c96fdf3c3a2cf8b718aa32945d
  18. [18]

    记录 2023-11-03 10:23:26 作者在删库风暴前夕最后一次指导用户配置 Merge 的原话

    https://github.com/zzzgydi/clash-verge/issues/893
  19. [19]

    记录 2023-11-03 15:13:06 面对用户关于核心 404 影响的提问,作者留下单字回复“有”并关闭议题的历史原话

    https://github.com/zzzgydi/clash-verge/issues/905
  20. [20]

    README 声明是原版 Clash Verge 的延续;仓库创建时间为 2023-11-21T18:24:03Z,不代表组织成立时间或原作者参与维护。

    https://github.com/clash-verge-rev/clash-verge-rev
资料边界与事实声明

本文严格基于 GitHub 公开代码仓库(zzzgydi/clash-verge、clash-verge-rev/clash-verge-rev)提交历史、Release 归档记录与公开技术讨论撰写。恪守开源伦理与隐私底线,绝不调查、推测或记录维护者的现实个人隐私与线下生活,纯粹从桌面客户端架构革新、Tauri 技术选型与扩展脚本生态维度客观评价其开源技术贡献。

修订历史:
  • :依据 zzzgydi/clash-verge 官方代码仓库与 GitHub 历史讨论(包含创世提交、Issue #12 使用指南、Issue #151 架构重构提案、Issue #407 体积对比与 Issue #905 终局回应)全面扩充作者一手文献与原话引述。
  • :首版编写,依据 zzzgydi/clash-verge 历史仓库与 clash-verge-rev 社区演进编写,核验 Rust+Tauri 架构创新。

发现人物信息不准确?

写明需要纠正的内容,可附相关链接。资料会在人工核验后更新。