subconverter-ng

module
v0.8.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 16, 2026 License: GPL-3.0

README

subconverter-ng

现代化的订阅转换工具 —— 用 Go 重写的 subconverter,专注支持新协议。

简体中文 | English

CI Docker

📖 文档站https://sub.jungley.net

subconverter 已经很经典,但近年迭代变慢,Hysteria2、TUIC、VLESS Reality 等新协议支持不全。subconverter-ng 用 Go 重写,保持相同的 URL 接口(可直接替换),同时把目标内核对准 Clash.Meta / mihomo,第一时间支持新协议。

特性

  • 接口兼容/sub?target=clash&url=...&config=...,老客户端无需改动
  • 协议:Shadowsocks、ShadowsocksR、VMess、VLESS(含 Reality / XTLS-Vision)、Trojan、Hysteria(v1/v2)、TUIC v5、AnyTLS、SOCKS5、WireGuard
  • 节点处理:去重(dedup)、过滤不支持的节点(fdn)、追加协议类型(append_type)、rename 正则重命名、emoji 增删(对齐 subconverter)
  • 缓存 / 限流:规则与订阅 TTL 缓存(默认开,可清除)、按 IP 限流防滥用
  • Subscription-Userinfo 透传:客户端直接显示机场流量 / 到期
  • rule-providers 输出expand=false)、仅节点列表输出(list
  • 外部配置:解析 subconverter 的 INI 外部配置(ruleset= / custom_proxy_group= / exclude_remarks / enable_rule_generator / clash_rule_base),兼容 ACL4SSR 规则
  • 访问层:上游代理(http/socks5)、可配置 User-Agent、自动绕过 Cloudflare 5 秒盾(FlareSolverr)
  • 两种形态:HTTP 服务 + CLI 单次转换,单二进制
  • 多输出 targetclash(Clash.Meta / mihomo)、singboxsurgeshadowrocketquanxloonv2ray/mixed
  • insert_url 节点插入:服务端固定节点合并进每次转换(&insert= 可覆盖)

内核解析以 Clash.Meta 字段为中介,再渲染到各 target;目标格式不支持的协议 / 规则会被跳过并记入日志。

快速开始

二进制
go build -o subconverter-ng ./cmd/subconverter-ng

# 起服务(兼容 subconverter 接口)
./subconverter-ng serve --listen :25500

# 浏览器/客户端访问:
# http://127.0.0.1:25500/sub?target=clash&url=<订阅URL编码>&config=<规则URL编码>

内置 Web 界面:浏览器打开 http://127.0.0.1:25500/ 即可可视化生成订阅链接(详见 docs/web.md)。

CLI 单次转换
./subconverter-ng convert \
  --url 'https://your-airport.com/api/v1/client/subscribe?token=xxx' \
  --config 'https://github.com/you/clash-rule/raw/main/config.init' \
  -o clash.yaml
Docker
# 直接拉取 CI 构建的多架构镜像
docker run -d -p 25500:25500 ghcr.io/jungley8/subconverter-ng:latest

# 或含 FlareSolverr sidecar,开箱即用
docker compose up -d
# http://127.0.0.1:25500/sub?target=clash&url=...

URL 参数

完整列表见 docs/url-params.md,常用:

参数 说明
target 输出目标:clash / singbox / surge / shadowrocket / quanx / loon / v2ray
url 订阅链接,多个用 | 分隔(必填);也可直接粘贴节点链接(vless:// 等)
config 外部 INI 配置 URL
insert 是否合并服务端 insert_url 节点(覆盖配置默认)
sort 按节点名排序
dedup 去除重复节点
fdn 过滤 Clash.Meta 不支持的节点(如废弃加密的 SS)
list 仅输出节点列表(无分组 / 规则,仅 clash
append_type 节点名前加 [类型]
expand false 时输出 rule-providers 引用远程规则(仅 clash
emoji add_emoji remove_emoji emoji 增删(对齐 subconverter)
udp tfo scv 节点开关(部分 target 有效)
filename interval 下载文件名 / 客户端更新间隔
nocache flushcache 绕过 / 清空缓存
proxy 本次请求的上游代理(覆盖全局,扩展参数)

参数对各 target 的适用性见 docs/url-params.mdnew_name 为兼容性接收但当前无效果。

解决访问问题

很多机场需要走代理才能访问,或套了 Cloudflare 盾。详见:

配置

服务端配置见 config.example.yaml,或用环境变量 SUBNG_LISTEN / SUBNG_PROXY / SUBNG_FLARESOLVERR_URL / SUBNG_USER_AGENT

开发

make test    # 跑测试
make vet
make build   # 输出到 bin/
make run     # 本地起服务

路线图

  • 更多协议(hysteria1、anytls、ssr、socks5、wireguard
  • 重命名规则 / emoji 增删(对齐 subconverter)
  • 订阅 / 规则缓存
  • rule-providers 输出模式
  • IP 限流防滥用
  • Subscription-Userinfo 透传
  • 内置 Web 界面
  • 节点去重(dedup)、过滤不支持节点(fdn
  • 全量 URL 参数(list / filename / interval / append_type …)
  • 更多输出 target(sing-box、surge、shadowrocket、quanx、loon、v2ray)
  • insert_url 节点插入

License

GPL-3.0-or-later © Jungley8

Directories

Path Synopsis
cmd
subconverter-ng command
Command subconverter-ng is a Go reimplementation of subconverter focused on modern proxy protocols.
Command subconverter-ng is a Go reimplementation of subconverter focused on modern proxy protocols.
internal
config
Package config holds the application-level configuration: where the server listens and the default fetch (access) settings.
Package config holds the application-level configuration: where the server listens and the default fetch (access) settings.
convert
Package convert orchestrates a full conversion: fetch subscription(s) and the external config, parse nodes, then render the target output.
Package convert orchestrates a full conversion: fetch subscription(s) and the external config, parse nodes, then render the target output.
emoji
Package emoji implements subconverter-compatible emoji handling for node names.
Package emoji implements subconverter-compatible emoji handling for node names.
extconfig
Package extconfig parses subconverter's INI-style external config (the file referenced by the &config= URL parameter).
Package extconfig parses subconverter's INI-style external config (the file referenced by the &config= URL parameter).
fetch
Package fetch retrieves remote resources (subscriptions, rulesets, base configs) with three concerns airports impose on us:
Package fetch retrieves remote resources (subscriptions, rulesets, base configs) with three concerns airports impose on us:
generator
Package generator renders parsed nodes plus an external config into a target client configuration.
Package generator renders parsed nodes plus an external config into a target client configuration.
parser
Package parser turns raw subscription payloads into proxy.Proxy values.
Package parser turns raw subscription payloads into proxy.Proxy values.
proxy
Package proxy defines the intermediate proxy-node model used across the converter.
Package proxy defines the intermediate proxy-node model used across the converter.
ratelimit
Package ratelimit provides a thread-safe, per-client token-bucket limiter with no external dependencies.
Package ratelimit provides a thread-safe, per-client token-bucket limiter with no external dependencies.
server
Package server exposes the subconverter-compatible HTTP API.
Package server exposes the subconverter-compatible HTTP API.
web
Package web serves the embedded single-page web UI that helps users build a /sub?...
Package web serves the embedded single-page web UI that helps users build a /sub?...

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL