Skip to content

subconverter 一键部署rs/wasm版,带前端,实现 订阅转换 全量功能以及大量新feature。A more powerful utility to convert between proxy subscription formats, transformed from the original subconverter! Maintaining compatibility with the original.

License

Notifications You must be signed in to change notification settings

lonelam/subconverter-rs

Repository files navigation

subconverter-rs

subconverter-rs logo

Transform. Optimize. Simplify. A blazingly fast proxy subscription converter rewritten in Rust.

Rust Status GPL-3.0+ License Crates.io Telegram Netlify Status GitHub stars


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版本白嫖一键部署: Deploy to Netlify

Demo部署,测试时请注意隐私风险: https://subconverter-rs.netlify.app/


📋 Table of Contents


✨ 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:

  1. Shadowrocket users can use the ss, ssr, v2ray, and mixed parameters.
  2. 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.
  3. When the target type is mixed, all supported nodes will be output as a normal subscription (Base64 encoded).

📥 Installation

From GitHub Releases

Download and run the helper script directly (requires curl and jq):

curl -sSL https://raw.githubusercontent.com/lonelam/subconverter-rs/main/scripts/setup_and_run_subconverter.sh | bash

This downloads the latest release, extracts it to a subconverter directory, and starts the server.

(Or manually download from Releases).

Docker

docker pull lonelam/subconverter-rs
docker run -d -p 25500:25500 lonelam/subconverter-rs

From Crates.io

cargo install subconverter

From Source

git clone https://github.com/lonelam/subconverter-rs.git
cd subconverter-rs
cargo build --release --features=web-api

The binary will be available at target/release/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

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

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

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 Enable emoji in node names
add_emoji No true Add emoji before node names
remove_emoji No true Remove existing emoji from node names
append_type No true Add proxy type ([SS], [SSR], etc.) to node names
tfo No true Enable TCP Fast Open
udp No true Enable UDP support
scv No true Skip certificate verification for TLS nodes
tls13 No true Enable TLS 1.3 for nodes
sort No true 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 Output as node list or provider format
insert No true Insert nodes from insert_url in config
prepend No true 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 in your API call.

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

  1. Pick an issue: Check our issue tracker for tasks labeled good first issue or help wanted.
  2. Implement new proxy types: Help expand support for additional proxy protocols.
  3. Improve parsing: Enhance the robustness of the various format parsers.
  4. Add tests: Increase test coverage to ensure stability.
  5. Documentation: Improve docs or add examples to help others use the project.
  6. Performance optimizations: Help make the converter even faster.

✨ Contributors


📄 License

This project is licensed under the GPL-3.0+ License - see the LICENSE file for details.

About

subconverter 一键部署rs/wasm版,带前端,实现 订阅转换 全量功能以及大量新feature。A more powerful utility to convert between proxy subscription formats, transformed from the original subconverter! Maintaining compatibility with the original.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors 4

  •  
  •  
  •  
  •