npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

subconverter-wasm

v0.2.34

Published

A more powerful utility to convert between proxy subscription format

Readme

subconverter-rs

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 | |----------------------|:-----:|:-------:|:------------:|:-----:|:----------:|:------------:|:----:|:---------:|:------:|:--------:|:----------:|:-------:| | AnyTLS | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ⬇️ | ⬇️ | | 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).

🛣️ Roadmap

Here are some features planned for future releases:

  • Gist Publishing: Automatically upload generated configurations to GitHub Gist.
  • AnyTLS Support: Add support for the AnyTLS protocol.
  • Visual Rule Group Configuration: Implement a graphical interface for configuring rule groups.

📥 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

# 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
# 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
# Original node: ss://[email protected]: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

| 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

  • 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
  • stream_rule: Rules for extracting traffic information
  • time_rule: Rules for extracting time information
  • 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

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://[email protected]: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.