SubFlow 是一个本地订阅配置编排工具。它面向 Clash Verge Rev / Mihomo / Clash.Meta 一类 YAML 配置:上传订阅后,保留原始基础配置和 proxies,只重新组织 proxy-groups 与内联 rules,最后导出单个可用 YAML。
项目现在同时支持本地 Web 运行和 Electron 桌面 App。桌面版双击即可使用,不需要用户安装 Node、Ruby 或手动启动服务。
- 上传完整 YAML 订阅文件。
- 保留
proxies前面的基础配置,例如mixed-port、dns、hosts、cfw-bypass。 - 原样保留
proxies,不改节点内容、不删节点、不重排节点。 - 从上传文件生成当前订阅的策略组模板。
- 支持保存、应用、删除自定义分组模板。
- 支持按地区、关键词和精确节点管理分组来源。
- 支持导入 Rules 文件,格式可以是
.txt、.yaml、.yml。 - 支持保存上传文件自带的原始 Rules 为本地模板。
- 支持工具备份 JSON,包含分组模板、Rules 模板、当前编辑规则和偏好配置。
- 支持静态校验并提示规则、分组和路由器兼容风险。
- 导出单个 YAML 文件,方便用于 Clash Verge Rev、Mihomo 或路由器。
最新桌面版在 GitHub Releases:
当前 v0.1.2 提供:
- Windows 安装版:
SubFlow.Setup.0.1.2.exe - Windows 便携版:
SubFlow.0.1.2.exe - macOS Apple Silicon:
SubFlow-0.1.2-arm64.dmg - macOS zip:
SubFlow-0.1.2-arm64-mac.zip
macOS 包目前未做 Apple Developer 签名。如果系统提示无法打开,可以在“系统设置 > 隐私与安全性”里允许打开,或右键 App 选择“打开”。
- 打开 SubFlow。
- 点击
上传 YAML,选择一个完整订阅配置。 - 在
来源配置检查节点数量、原始分组、原始规则和 DNS 状态。 - 在
策略组模板调整分组来源、地区分组、精确节点、排除节点。 - 在
规则与校验导入或编辑 Rules,并处理校验问题。 - 在
输出预览确认结果。 - 点击
下载 YAML导出最终配置。
SubFlow 把 Rules 分成三类来源:
- 上传 YAML 自带的原始
rules。 - 用户导入的 Rules 文件。
- 用户保存的 Rules 模板。
在 规则与校验 面板点击 导入 Rules 文件。
.txt会按规则文本解析。.yaml/.yml会读取顶级rules:。- 导入后会覆盖当前 Rules 编辑区。
- 覆盖前如果编辑区已有内容,会先弹出确认。
点击 保存上传文件 Rules 可以把当前订阅 YAML 自带的原始 rules 保存成本地 Rules 模板。
注意:保存的是上传文件里的原始 rules,不是你在编辑区临时修改后的内容。这样更适合作为不同订阅之间复用的规则基线。
导出工具备份 会保存:
- 当前分组模板。
- 已保存的分组模板。
- 当前 Rules 编辑区内容。
- 已保存的 Rules 模板。
- 路由器模式、全局排除等工具偏好。
工具备份是 SubFlow 自己的 JSON,不是最终代理配置。最终代理配置请使用 下载 YAML。
SubFlow 支持三类分组方案:
当前订阅:默认方案,从上传文件里的proxy-groups转换而来。基础模板:从零开始生成常见分组,例如节点选择、自动选择、地区分组。我的模板:用户手动保存的分组方案。
分组模板只影响导出的 proxy-groups,不会修改上传文件的 proxies、基础配置或原始规则。
节点管理只改变生成分组时的引用方式,不会修改真实节点。
支持:
- 搜索节点。
- 按地区筛选节点。
- 多选节点。
- 加入当前分组。
- 从当前分组排除。
- 恢复排除。
- 全局排除。
- 恢复全局排除。
疑似信息节点,例如 剩余流量、套餐到期、官网、订阅、流量,只会提示,不会自动删除。
导出前会进行静态校验,常见提示包括:
- 规则引用了不存在的策略组。
- 分组引用了不存在的节点或分组。
- 分组为空。
- 动态节点来源展开后为空。
MATCH不是最后一条规则。- 存在重复规则。
- 规则数量过多,路由器可能启动慢。
PROCESS-NAME等桌面规则在路由器上可能无效。- 分组里包含疑似信息节点。
内置策略不会被误判为缺失,例如 DIRECT、REJECT、REJECT-DROP、PASS、GLOBAL。
要求:
- Node.js
>=22
安装依赖:
npm ci开发模式:
npm run api
npm run dev打开:
http://127.0.0.1:5173
生产模式:
npm run build
npm startnpm start 会优先服务 dist/ 中的 React 构建产物。如果没有构建产物,会回退到旧的 public/ 静态页面。
本机桌面预览:
npm run desktop:devmacOS 本机打包:
npm run dist:macWindows 打包建议使用 GitHub Actions 的 Windows runner:
git tag v0.1.2
git push origin v0.1.2推送 v* 标签后,.github/workflows/desktop-build.yml 会构建 macOS 和 Windows 桌面包,并把产物附加到对应 GitHub Release。
打包产物位于 release/desktop/。该目录已被忽略,不应提交进仓库。
npm run typecheck
npm run build
npm test本地浏览器 smoke 验证:
SUBFLOW_URL=http://127.0.0.1:5173/ node .tmp/subflow-react-smoke.mjs
SUBFLOW_URL=http://127.0.0.1:5173/ node .tmp/subflow-rules-template-smoke.mjs如果本地没有 Playwright 浏览器二进制,可以先安装:
npx playwright install chromium- Vite
- React
- TypeScript
- Tailwind CSS
- Node HTTP server
- Electron
- electron-builder
yaml- Playwright
src/
App.tsx 主界面和应用级流程
components/ 通用 UI 组件
core/ YAML、Rules、模板、校验等核心逻辑
features/
source/ 来源配置和节点管理
groups/ 策略组模板编辑
rules/ Rules 编辑、导入、模板和校验
export/ 输出预览和 YAML 下载
state/ 工作区状态与本地存储
electron/
main.js Electron 主进程入口
server.js 本地 API 与静态资源服务
test/
core.test.js 核心逻辑测试
真实订阅 YAML 通常包含服务器地址、端口、密码、UUID、Reality/TLS 参数等敏感信息。
请不要:
- 把真实订阅文件提交到仓库。
- 把真实订阅文件当作公开示例。
- 在 issue、日志、截图里暴露完整节点配置。
SubFlow 的设计目标是本地处理:上传、模板、规则和导出都在本机完成。
- 不拉取远程订阅链接。
- 不做云端同步。
- 不做账号体系。
- 不默认使用
rule-providers。 - 不自动删除疑似信息节点。
- 不保证保留原 YAML 注释和原始排版。