How to Import a Clash Subscription: URL, Local YAML Files & Common Formats
Learn three ways to import subscriptions into a desktop client, compare Clash YAML with Base64 node lists, and find out what to do when formats are incompatible.
Before importing: distinguish subscription URLs, config files, and node links
A successful Clash subscription import depends on whether the URL returns content that meets the current core's config requirements—not on whether the link ends in .yaml. An HTTPS URL with an access token can return a complete config; a download link named config.yaml might instead return a login page or error message.
The desktop client saves subscriptions, downloads updates, and switches configs. The Clash or mihomo core parses configs, establishes connections, and applies rules. A “Download successful” message only means the client received a response; it doesn't guarantee that the core accepted every field.
- Subscription URL: A remote address used to retrieve content. It may return a complete Clash YAML config or a collection of nodes in another format.
- Full config: Usually includes
proxiesorproxy-providers, along with settings such asproxy-groupsandrules. - Node link: A single connection URI, such as one starting with
ss://,vmess://, ortrojan://. It typically doesn't include routing rules.
Method 1: Import a subscription by URL
For ongoing use, a remote subscription is usually the better choice. The client can fetch updated nodes and rules from the saved URL; a local file is only a snapshot. If the provider offers “Clash,” “Clash Meta,” or “mihomo” options, check which core your client actually uses before copying the matching URL.
Download and activate the subscription
These steps use labels commonly found in Clash Verge Rev. Depending on the version, “Subscriptions” may be called “Profiles.” Look for the feature by what it does—don't search for an import field on the node selection page.
- Open the client and select “Subscriptions” in the left sidebar. Paste the full HTTPS address into the subscription URL field at the top.
- Check for spaces, line breaks, or punctuation added by a messaging app at either end of the URL, then click “Import.” You don't need to change the link so it ends in
.yaml. - Wait for the subscription card to appear. If an error comes up, read the download or parsing message first; don't keep adding the same URL over and over.
- Select the subscription card and set it as the active config. Some clients call this “Use” or “Activate.”
- Open the “Proxies” page and make sure the proxy groups are visible, then select a node. Importing a subscription doesn't automatically turn on the system proxy.
Some provider sites offer one-click import by using a custom URL protocol to launch the client. This works only if the protocol handler is registered with the operating system. If clicking does nothing, copy the subscription URL manually instead. That makes it easier to tell whether the client failed to launch or the subscription couldn't be downloaded.
Review update settings individually
Open the subscription card menu and select “Edit” or subscription settings. Check the update interval and whether downloads should use a proxy. Automatic updates are a client feature; they're not controlled by top-level rules. If the interval is in minutes, 360 means 6 hours. If it's in seconds, enter 21600. These are examples, not defaults for every client.
On the first import, there may be no working proxy available yet, so forcing subscription downloads through a proxy can create a dependency loop. Try the proxy download option only if a direct connection fails and you already have a working route. Also, don't confuse the top-level subscription update interval with interval under proxy-providers: the latter is the core's provider refresh interval, measured in seconds.
Method 2: Import a local YAML config file
Local import is useful when a provider supplies a config file directly, when you need an offline backup, or when troubleshooting failed remote downloads. After you import a file through the file picker, the client typically manages its own copy. Changes to the original download might not appear in the active config.
- Save the config somewhere easy to find, such as the Windows “Downloads” folder. Make sure the extension is
.yamlor.yml, not.yaml.txtwith the extension hidden. - Open the client's “Subscriptions” or “Profiles” page and choose “Import local file.” In versions that support drag and drop, you can also drop the file onto that page.
- Select the file, save it, and activate the config. If parsing fails, open the file in a text editor and check the reported line and the line above it.
- Check the proxy groups and logs to confirm the config loaded. If you edited a file outside the client, import it again or use the client's explicit reload option.
Valid YAML syntax doesn't guarantee a working proxy config
Here's a minimal example to illustrate the structure. It contains only a direct connection, so it has no proxy nodes and isn't a substitute for a provider subscription. mixed-port: 7890 explicitly sets a shared HTTP and SOCKS port here; it's not the default in every client.
mixed-port: 7890
allow-lan: false
mode: rule
log-level: info
proxies: []
proxy-groups:
- name: Manual
type: select
proxies:
- DIRECT
rules:
- MATCH,Manual
Use spaces for YAML indentation, never tabs. List items start with -, and keys need a colon followed by a space before the value. Even if a general-purpose YAML parser accepts the syntax, the core may reject the config if it references a nonexistent policy, uses an unsupported protocol field, or omits required authentication details.
Method 3: Import config or node data from the clipboard
Clipboard import works when you already have the full config as text or when the client explicitly supports importing individual node links. Support varies by client: “Paste subscription URL” and “Parse nodes from clipboard” are different features, even though both use copy and paste.
- Full YAML text: If the client supports “Create local config” or has a config editor, create a local config, paste the text, save it, and activate it.
- Single node link: Use this only if the menu explicitly offers “Import from clipboard” and supports that protocol. After importing, check which config and proxy group it was added to.
- Multi-line node list: This requires a client that can parse multiple nodes at once. If it can't, convert the list to a compatible config first; don't paste it into the subscription URL field.
If your version has no text import option, save the full YAML as a UTF-8 local file and import it using the local file workflow. Don't flatten the YAML into one line or remove its indentation. Recognizing a single node link also doesn't mean the client will automatically create the DNS settings, rules, and proxy groups you need.
Subscription format differences: Clash YAML, Base64, and provider files
“Subscription” describes how content is fetched and updated, not a single file format. To check compatibility, consider the content structure, protocol types, and supported core features together. File extensions and labels on a provider's site are only clues.
| Content type | Common characteristics | What to check before importing |
|---|---|---|
| Full Clash YAML | Contains nodes or providers, along with config such as proxy groups and rules | Usually importable as a config; check that the core supports its fields and protocols |
| Base64 node list | The response is an encoded text string that often decodes to multiple node URIs | Usually can't be loaded directly as a full Clash config; the client must recognize or convert it |
| Single node URI | Starts with a protocol name such as ss, vmess, or trojan | Requires a client with protocol import support; doesn't include a full set of rules |
| Proxy provider YAML | Often has proxies: at the top level, with a list of nodes as its main content |
Usually referenced through proxy-providers; don't use it as a full config |
| Config for another client | May use JSON or a different set of fields | Changing the file extension won't make it compatible; check whether the converter supports the source format |
Base64 is an encoding, not a compatibility layer
Decoding Base64 only restores the encoded text. It doesn't turn node URIs into Clash YAML fields or add rules, DNS settings, and proxy groups. Some node URIs also encode part of their contents in Base64, so a long string alone doesn't mean the entire response is a Base64 subscription.
Clash and mihomo don't support exactly the same features
mihomo carries forward and extends Clash Meta's capabilities. Configs generated for mihomo may include protocols or options that older versions of Clash don't support. If a provider offers multiple target formats, choose the one that matches the core currently used by your client. Renaming a protocol in the config won't make a node usable if the core doesn't support it.
When formats aren't compatible: use native output first, convert only if needed
The simplest order is to check whether the provider offers the target format, confirm which core the client uses, and only then consider conversion. A converter can change how a config is expressed, but it can't add protocol support to a remote server or restore authentication details missing from the source data.
- Choose a native subscription first: On the provider's site, select the Clash or mihomo output that matches your core, then copy the full URL again.
- Check the source content: Identify whether it contains node URIs, a Base64 list, a full YAML config, or a provider file. Don't send an HTML page to a converter as if it were a subscription.
- Use a trusted conversion environment: Prefer the provider's own converter or run a conversion tool locally in an environment you control. Remote converters may be able to access subscription tokens and node credentials.
- Specify the target and template: Confirm whether the output should be a full config or a node provider, then check the generated proxy group names, rule targets, and DNS settings.
- Verify each step after import: First confirm that the config loads, then check that nodes and proxy groups are present, and finally test a connection. A success message on the converter's page isn't enough.
Converted configs may lose fields specific to the source format or replace the original rules with those from a template. Pay particular attention to whether UDP, TLS, transport, and certificate settings were preserved. If you see a certificate error, check the device clock, server name, and provider instructions; disabling certificate verification isn't a general-purpose conversion fix.
Import errors and connection checks: troubleshoot downloads, parsing, and routing in order
Troubleshoot download failures separately from invalid content
- HTTP 401 or 403: Check whether the subscription token has expired, whether the URL was copied in full, and whether the provider restricts access. Don't just keep changing the local proxy port.
- Request timed out: Check network connectivity, DNS resolution for the subscription domain, and the proxy setting for updates. Being able to open the provider's home page in a browser doesn't mean the subscription API is reachable.
- Response starts with HTML: You may have received a login page, verification page, or error page. An HTTP 200 response can still contain any of these, so inspect the response body instead of relying on the status code alone.
- Proxy or policy not found: Check the names referenced in
proxy-groupsand make sure the outbound target at the end of each rule exists. Capitalization and spacing must match too. - Unsupported proxy type or field: Check which core is running and which target format the subscription uses. Changing the UI theme or renaming the file won't fix a core compatibility issue.
After activating the config, check that apps are using the client
- Confirm that the correct config is active and that the client is in rule mode—not direct mode.
- Open the required proxy group and select an available node. A successful latency test only means the test request got a response; it doesn't guarantee that every site and protocol will work.
- For desktop apps that follow the system proxy settings, turn on “System Proxy” in the client. If you configure the proxy manually, check the actual listening address and port. With
mixed-port: 7890, use127.0.0.1:7890on the local machine. - Make a new browser request while checking “Connections” or “Logs.” Confirm the destination domain, matched rule, and final outbound route. If needed, close existing connections and try again.
Apps that ignore system proxy settings may need TUN mode to route their traffic. This is a routing setting to configure after import. Whether TUN works also depends on service permissions, routing, and DNS settings; it won't fix an invalid subscription format or add nodes to an empty config.