8 releases
new 0.2.0 | Apr 16, 2025 |
---|---|
0.1.2 | Apr 16, 2025 |
0.1.1 | Apr 15, 2025 |
0.1.0 | Mar 24, 2025 |
0.1.0-pre.20250414… | Apr 13, 2025 |
#193 in Parser implementations
600 downloads per month
7MB
36K
SLoC
subconverter-rs
A more powerful utility to convert between proxy subscription formats, transformed from the C++ version subconverter! This Rust implementation offers improved performance and reliability while maintaining compatibility with the original.
⚠️ BETA VERSION AVAILABLE ⚠️ - This project is now in beta. Core features are implemented but may still have some rough edges.
🎉 wasm版本白嫖一键部署:
Demo部署,测试时请注意隐私风险: https://subconverter-rs.netlify.app/
📋 Table of Contents
- Features
- Implementation Status
- Protocol Support Matrix
- Installation
- Basic Usage
- Advanced Usage
- Configuration
- Development
- License
✨ Features
- High-performance subscription conversion with Rust's speed and safety
- Support for various proxy formats and protocols
- Flexible node filtering, renaming, and emoji addition
- Customizable templates and rule sets
- HTTP server with RESTful API endpoints
- Compatible with original subconverter configuration
📊 Protocol Support Matrix
The following table shows the support status of different proxy protocols in various rule types:
Protocol \ Rule Type | Clash | SingBox | Surge(2,3,4) | V2Ray | Quantumult | Quantumult X | Loon | Surfboard | Mellow | SIP002/8 | Mixed | TG-like |
---|---|---|---|---|---|---|---|---|---|---|---|---|
VLESS | ✅ | ✅ | ⚠️ | ✅ | ❌ | ⚠️ | ⚠️ | ❌ | ❌ | ❌ | ⬇️ | ⬇️ |
Hysteria/2 | ✅ | ✅ | ⚠️ | ❌ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ❌ | ⬇️ | ⬇️ |
VMess | ✅ | ✅ | ⚠️ | ✅ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ❌ | ✅ | ⬇️ |
Trojan | ✅ | ✅ | ⚠️ | ❌ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ❌ | ✅ | ⬇️ |
SS | ✅ | ✅ | ⚠️ | ❌ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ✅ | ✅ | ⬇️ |
SSR | ✅ | ✅ | ⚠️ | ❌ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ❌ | ✅ | ⬇️ |
HTTP/SOCKS | ✅ | ✅ | ⚠️ | ❌ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ⚠️ | ❌ | ⬇️ | ⬇️ |
WireGuard | ✅ | ✅ | ⚠️ | ⬇️ | ❌ | ⚠️ | ⚠️ | ⚠️ | ❌ | ❌ | ⬇️ | ⬇️ |
Snell | ✅ | ❌ | ⚠️ | ❌ | ❌ | ⚠️ | ⚠️ | ⚠️ | ❌ | ❌ | ⬇️ | ⬇️ |
SSD | ⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ | ⬇️ | ❌ | ⬇️ |
Legend:
- ✅ Fully supported (both input and output)
- ⚠️ Partially supported (untested)
- ⬇️ Supported as input source only
- ⬆️ Supported as output target only
- ❌ Not supported
Notes:
- Shadowrocket users can use the
ss
,ssr
,v2ray
, andmixed
parameters - For HTTP/Socks links without naming (TG-like), you can append
&remarks=
for naming and&group=
for group naming. These parameters need to be URLEncoded - When the target type is
mixed
, all supported nodes will be output as a normal subscription (Base64 encoded) - When the target type is
auto
, the output target type will be automatically determined based on the request'sUser-Agent
📥 Installation
From GitHub Releases
# Download the latest release
DOWNLOAD_URL=$(curl -s https://api.github.com/repos/lonelam/subconverter-rs/releases/latest | \
jq -r '.assets[] | select(.name == "$subconverter_zip_name").browser_download_url')
curl -L -O "$DOWNLOAD_URL"
tar -zxf $subconverter_zip_name
# Navigate to the extracted directory
cd subconverter
From Crates.io
cargo install subconverter
From Source
git clone https://github.com/lonelam/subconverter-rs.git
cd subconverter-rs
cargo build --release
The binary will be available at target/release/subconverter-rs
.
Docker (Coming Soon)
docker pull lonelam/subconverter-rs
docker run -d -p 25500:25500 lonelam/subconverter-rs
🔰 Basic Usage
API Endpoint
http://127.0.0.1:25500/sub?target=%TARGET%&url=%URL%&config=%CONFIG%
Parameters
Parameter | Required | Example | Description | Status |
---|---|---|---|---|
target | Yes | surge&ver=4 | Target configuration type | ✅ |
url | Yes | https%3A%2F%2Fwww.xxx.com | Subscription link (URLEncoded) | ✅ |
config | No | https%3A%2F%2Fwww.xxx.com | External configuration (URLEncoded) | ✅ |
Simple Conversion Examples
Converting a Single Subscription
Original subscription: https://example.com/subscribe/ABCDE?surge=ss
URLEncoded: https%3A%2F%2Fexample.com%2Fsubscribe%2FABCDE%3Fsurge%3Dss
API call: http://127.0.0.1:25500/sub?target=clash&url=https%3A%2F%2Fexample.com%2Fsubscribe%2FABCDE%3Fsurge%3Dss
Combining Multiple Subscriptions
Original subscriptions:
1. https://example1.com/subscribe/ABCDE?clash=vmess
2. https://example2.com/subscribe/ABCDE?clash=vmess
Combined with pipe: https://example1.com/subscribe/ABCDE?clash=vmess|https://example2.com/subscribe/ABCDE?clash=vmess
URLEncoded: https%3A%2F%2Fexample1.com%2Fsubscribe%2FABCDE%3Fclash%3Dvmess%7Chttps%3A%2F%2Fexample2.com%2Fsubscribe%2FABCDE%3Fclash%3Dvmess
API call: http://127.0.0.1:25500/sub?target=clash&url=https%3A%2F%2Fexample1.com%2Fsubscribe%2FABCDE%3Fclash%3Dvmess%7Chttps%3A%2F%2Fexample2.com%2Fsubscribe%2FABCDE%3Fclash%3Dvmess
Converting a Single Node
Original node: ss://YWVzLTEyOC1nY206dGVzdA==@192.168.100.1:8888#Example1
URLEncoded: ss%3A%2F%2FYWVzLTEyOC1nY206dGVzdA%3D%3D%40192%2E168%2E100%2E1%3A8888%23Example1
API call: http://127.0.0.1:25500/sub?target=clash&url=ss%3A%2F%2FYWVzLTEyOC1nY206dGVzdA%3D%3D%40192%2E168%2E100%2E1%3A8888%23Example1
Quick Surge to Clash Conversion
For quick conversion from Surge to Clash without additional configuration:
http://127.0.0.1:25500/surge2clash?link=SurgeSubscriptionLink
Note: The Surge subscription link does NOT need to be URLEncoded.
🔧 Advanced Usage
Advanced API Parameters
Click to show all available parameters
Parameter | Required | Example | Description | Status |
---|---|---|---|---|
emoji | No | true/false | Enable emoji in node names | ✅ |
add_emoji | No | true/false | Add emoji before node names | ✅ |
remove_emoji | No | true/false | Remove existing emoji from node names | ✅ |
append_type | No | true/false | Add proxy type ([SS], [SSR], etc.) to node names | ✅ |
tfo | No | true/false | Enable TCP Fast Open | ✅ |
udp | No | true/false | Enable UDP support | ✅ |
scv | No | true/false | Skip certificate verification for TLS nodes | ✅ |
tls13 | No | true/false | Enable TLS 1.3 for nodes | ✅ |
sort | No | true/false | Sort nodes by name | ✅ |
include | No | (regex) | Only include nodes matching the pattern | ✅ |
exclude | No | (regex) | Exclude nodes matching the pattern | ✅ |
filename | No | MyConfig | Set the file name for the generated config | ✅ |
list | No | true/false | Output as node list or provider format | ✅ |
insert | No | true/false | Insert nodes from insert_url in config | ✅ |
prepend | No | true/false | Insert nodes at the beginning | ✅ |
⚙️ Configuration
subconverter-rs supports multiple configuration file formats. It will load configuration in the following priority order: pref.toml
, pref.yml
, pref.ini
.
Key Configuration Sections
[common] - Global node filtering and base configuration settings
- api_mode: API mode settings
- api_access_token: Token for accessing private interfaces
- default_url: Default subscription links to load
- enable_insert: Whether to add insertion nodes
- insert_url: URL for insertion nodes
- exclude_remarks: Exclude nodes matching the pattern
- include_remarks: Only include nodes matching the pattern
- default_external_config: Default external configuration file
- clash_rule_base: Clash configuration template
- surge_rule_base: Surge configuration template
[userinfo] - Rules for extracting user information from node names
- stream_rule: Rules for extracting traffic information
- time_rule: Rules for extracting time information
[node_pref] - Node preferences (UDP, TFO, renaming, sorting)
- udp_flag: Open UDP mode for nodes
- tcp_fast_open_flag: Open TFO mode for nodes
- skip_cert_verify_flag: Turn off certificate checks for TLS nodes
- tls13_flag: Add TLS 1.3 parameters for nodes
- sort_flag: Sort nodes by name
- append_sub_userinfo: Whether to append traffic information
- clash_use_new_field_name: Whether to use Clash's new field names
- clash_proxies_style: Clash configuration file format style
- rename_node: Node renaming rules
Additional Sections - [managed_config], [emojis], [ruleset], [proxy_group], [template]
There are several other configuration sections for managed config settings, emoji handling, custom rule sets, proxy groups, and template system settings. See the documentation for detailed information.
External Configuration
You can host configuration files on GitHub Gist or other accessible network locations. URL-encode the configuration URL and add it to the &config=
parameter.
Local Generation
For generating configurations locally, create a generate.ini
file:
[test]
path=output.conf
target=surge
ver=4
url=ss://Y2hhY2hhMjAtaWV0Zi1wb2x5MTMwNTpwYXNzd29yZA@www.example.com:1080#Example
Then run: subconverter -g
👩💻 Development
Contributions are welcome! Please feel free to submit a Pull Request.
How to Contribute
- Pick an issue: Check our issue tracker for tasks labeled
good first issue
orhelp wanted
- Implement new proxy types: Help expand support for additional proxy protocols
- Improve parsing: Enhance the robustness of the various format parsers
- Add tests: Increase test coverage to ensure stability
- Documentation: Improve docs or add examples to help others use the project
- Performance optimizations: Help make the converter even faster
📄 License
This project is licensed under the GPL-3.0+ License - see the LICENSE file for details.
Dependencies
~10–28MB
~451K SLoC