Tutorial 2026-04-20 · ~16 min read

Only a Subscription Link? Convert It to Clash YAML With Subconverter and Import Into Meta Clients

If your provider hands you a single subscription URL (often Base64 with Shadowsocks, VMess, Trojan, or mixed protocols) but your Clash Meta / Mihomo-based app expects a structured YAML profile with proxy-groups and rule-based routing, you are not missing a secret menu—you need a subscription conversion step. Subconverter is the most common open-source tool chain for that job: it fetches the upstream list, normalizes nodes, and emits Clash-compatible YAML, optionally layering remote rule providers so “domestic direct / overseas proxy” behavior exists on day one. This guide walks through online versus self-hosted Subconverter, how to treat the result as a remote configuration URL, and how to import cleanly into desktop and headless Meta stacks—plus the errors you will actually see in logs.

Why a raw subscription is not enough for Clash

Airport panels usually publish a provider URL that returns a long text blob: multiple ss://, vmess://, or similar lines, sometimes wrapped in Base64. Clash-family cores consume a different contract. They want a YAML document with proxies as structured objects, proxy-groups that reference those names, and rules (or rule-providers) that decide which group handles each flow. Without conversion, you can sometimes paste nodes manually, but you lose batch updates, naming consistency, and the bundled rulesets that make “split traffic” usable for non-experts.

Another confusion is terminology. People say “Clash subscription” when they mean “a URL that returns Clash YAML.” If your URL still resolves to SSR or Vmess lines, the client is not being picky—it literally cannot parse that format as a profile. Subconverter closes that gap by acting as a format adapter between provider output and Clash input.

Finally, remember that conversion does not decide which node is “best.” It only makes nodes visible to Clash. Latency, UDP support, and streaming compatibility remain properties of the upstream service and the outbound protocol—after import, you still pick policy groups, run health checks, and read logs like any other Meta user.

What Subconverter does in one paragraph

Subconverter (often deployed behind a small HTTP API) accepts parameters such as your upstream subscription URL, desired output target (for example Clash or Clash.Meta variants), optional include/exclude filters, naming templates, and external config snippets. It fetches the provider content server-side, parses nodes, maps them into Clash proxy entries, merges default or custom proxy-groups, and returns YAML (or a link that always returns fresh YAML). That output is what you paste into a file, import through a GUI, or subscribe to as a remote profile URL if your deployment exposes a stable address.

Mental model

Treat Subconverter as a build pipeline, not a proxy. It does not replace your nodes; it repackages them into Clash YAML and may attach rule providers from public URLs—exactly like a static-site generator that fetches data and emits HTML.

Online conversion versus hosting your own

Public online Subconverter instances are fast for testing. You paste a provider URL, pick Clash or Meta target, and download YAML. The trade-off is trust and longevity: any third party that sees your subscription link can fetch the same nodes you fetch, and public services disappear or rate-limit without notice. Use them for experiments, not as the permanent home of a paid subscription unless you accept that visibility.

Self-hosted Subconverter (Docker on a VPS, homelab, or even localhost) keeps the fetch chain under your control. You point your Clash client at http://127.0.0.1:... or a domain you own, optionally front it with HTTPS, and you can pin versions. That pairs well with automated updates: the client polls your Subconverter URL on an interval, Subconverter polls the airport upstream, and you get rolling node lists without manual export. If you already run Clash Meta in Docker, adding Subconverter as a sibling container is a common pattern.

Approach Pros Risks
Public converter site Zero setup, quick YAML file Subscription URL exposure; no SLA
Self-hosted API Privacy, stable URL, tunable defaults You maintain TLS, updates, and uptime
Local one-shot CLI Air-gapped export possible Less convenient for phone-only workflows

Building a conversion request without memorizing every flag

Most Subconverter deployments document a base URL plus query parameters. Conceptually you always pass the upstream subscription (URL-encoded) and a target profile that matches your core. Clash Meta adds features beyond “classic” Clash; if your UI offers clash versus clash.meta (names vary), prefer the Meta variant when your client is Mihomo or Clash Verge Rev with a Meta core—otherwise you can lose template fields the older schema does not know.

Include parameters only when you need them: emoji toggles, rename rules, grouping by region, or append/prepend proxy groups. Beginners should start with defaults, verify the YAML opens in a text editor, then iterate. Over-filtering upstream nodes (strict include lists) is a frequent reason people see “empty proxies” after conversion.

Sanity-check list before you blame the client

  1. Open the upstream URL in a browser or curl: confirm it returns data, not a 302 login page.
  2. Confirm the Subconverter target matches your core (Meta vs legacy Clash).
  3. Save YAML and search for proxies:—if the list is empty, the filter or upstream is wrong.

What “full” Clash YAML contains after conversion

A useful Subconverter profile is more than a flat node list. Expect proxies with stable names, one or more proxy-groups (for example ♻️ Auto, 🔰 Proxy, or custom selections), and rules or rule-providers pointing at remote rule sets. Those remote URLs are why your converted file may reference GitHub or CDN hosts—your core must be able to fetch them on first run and on each refresh interval.

If rule downloads fail, the symptom is often “connected to panel but nothing routes correctly” or endless DIRECT for domains you expected to match. That is rarely a Subconverter bug; it is usually path, TLS, or outbound policy on the machine running Clash Meta. Our dedicated walkthrough covers the fix path: see Clash Meta rule-providers: download paths and update intervals.

Importing into Mihomo, Verge, and other Meta clients

Once you have either a file or a reachable HTTP/S URL that returns YAML, importing is straightforward but differs per GUI. Clash Verge Rev (and similar forks) usually offer Profile management: add a profile whose source is a URL, set an update interval, and pick the active profile for the embedded Meta core. On Windows, if you are still on Clash for Windows–style workflows, start from the Clash for Windows setup guide for subscription concepts, then map the same ideas to your Meta-based UI—terminology changes, the pipeline does not.

On macOS, permissions and helper installs matter before you chase conversion bugs. Follow Clash Verge Rev on macOS so TUN and system proxy toggles work, then add your Subconverter-backed profile. For Linux servers or routers, headless Meta with systemd typically uses a local path like /etc/mihomo/config.yaml; you can curl your Subconverter output into that file on a timer, or point external-controller at a dashboard while keeping the profile on disk.

Remote profile URL is not magic

If the client says “download failed,” test the exact URL from the same host with curl -v. Pay attention to TLS interception, IPv6-only networks, and HTTP 403 from providers that block datacenter IPs—Subconverter must run somewhere that can reach the upstream subscription.

Common errors and how to read them

HTTP 401 / 403 when Subconverter fetches upstream. The provider may bind the subscription to User-Agent, cookies, or IP. Some panels require a desktop User-Agent string; others block cloud IPs. Fix upstream visibility first—conversion cannot invent nodes the fetcher cannot see.

YAML parses but rules never activate. Check that rule-providers use paths your process can write to, and that update-interval is not set absurdly high while you are debugging. On Docker, volume mounts often break relative paths: align container paths with what Meta expects.

“Kernel mismatch” or unknown fields. You generated legacy Clash YAML but run a Meta-only feature set (or the reverse). Regenerate with the correct target, or strip unsupported keys after reading the release notes for your exact Mihomo build.

DNS works in browser but not in tun mode. Conversion did its job; you are now in core tuning territory. Pair this guide with DNS and fake-ip troubleshooting when connections look up wrong or return black holes.

Security and hygiene

Your subscription URL is effectively a credential. Anyone who stores it can enumerate your nodes and sometimes management URLs. Prefer self-hosted Subconverter for long-term use, rotate subscription tokens if you suspect leakage, and avoid posting conversion links in public chats. If you must use a web converter, download once, move to a profile you control, and revoke the exposed link at the provider if possible.

FAQ

Is Subconverter output identical to a native Clash subscription?

Functionally it should list the same nodes, but naming, groups, and bundled rules differ by template. Always diff major provider updates in a text editor before you rely on them in production routing.

Many converters accept pasted text or single-node inputs depending on deployment. If yours does not, create a minimal text subscription locally, host it, and point Subconverter at that URL—same pipeline, smaller file.

How often should the client refresh the converted profile?

Match provider expectations—every few hours is typical for paid services, shorter if the operator rotates endpoints daily. Avoid hammering Subconverter every minute; you gain nothing but rate limits.

Checklist before you open a support ticket

  1. Upstream subscription loads outside Subconverter (curl/browser).
  2. Target format matches Clash Meta / Mihomo where applicable.
  3. Generated YAML contains non-empty proxies.
  4. Rule providers download on the device running the core—not just your laptop browser.
  5. Client points at the profile URL or file path you think it does (copy/paste errors are common).

Start from a solid client

Subconverter solves the format bridge; a maintained Clash Meta client solves usability, logs, and TUN. If you are new to the ecosystem, the beginner’s guide still grounds vocabulary before you stack conversion on top.

Download Clash for free and experience the difference

Bridge any subscription into Clash YAML

Use Subconverter for conversion, then import the profile into Clash Meta or Mihomo with confidence.

Download Clash