Before importing: identify the subscription URL, config file, or proxy list
When importing a Clash subscription, what matters is not the link's name but the content it returns. A URL starting with https:// is only a web address; that doesn't mean it returns a Clash config. Likewise, a .yaml extension doesn't guarantee valid contents. First, select an output format compatible with your client's core on the provider's subscription page, then copy the full URL.
| What you have | How to identify it | Where to import it |
|---|---|---|
| Remote Clash config | The URL returns YAML containing proxies, proxy groups, and rules | URL or remote config import in the configuration page |
| Local config file | A .yaml or .yml file saved on your device | File import or local config option |
| Proxy protocol links | Multiple ss://, vmess://, or similar links, or their Base64-encoded form | An import option that parses proxy links, or convert them to a config first |
| Proxy provider file | Usually just a top-level proxies: list | Referenced by proxy-providers in the main config and used by proxy groups |
The client handles config management and the user interface; the core parses configs, applies rules, and establishes connections. Clients running the mihomo core can recognize its newer protocols and fields, but older builds of the original Clash may not support the same config. A valid format and core compatibility are separate requirements.
Import a URL on desktop: add and enable a remote config
In a desktop client such as Clash Verge Rev, the usual steps are Configuration → New → choose the remote type → enter the subscription URL → save, then select the config. Labels may vary between versions: some put the URL field at the top of the configuration page and label the button Import. Either way, you're adding a remote config entry.
- Copy the subscription URL. On the provider's site, select the Clash format or one compatible with mihomo. Use the site's copy button to avoid missing trailing parameters. Don't copy the URL for the login or billing page.
- Set up the remote config. Open the configuration page and paste the full URL into the URL field. Give it a short, recognizable name. Leave the request headers, user agent, and update interval at their defaults unless your provider says otherwise.
- Download it for the first time. Click Save or Import and wait for the config entry to appear. If you see a parse error, check the returned format instead of repeatedly toggling the system proxy.
- Select and load the config. Make sure the entry is marked as active. Adding it to the list doesn't necessarily switch the core to that config.
- Check the proxy groups. Open the proxies page and make sure the groups and available nodes are listed. Then enable the system proxy if needed. Test in rule mode first; there's no need to enable TUN at the same time.
Watch for these details when pasting a URL
- Remove spaces, quotation marks, and line breaks from the start and end of the URL, but don't delete query parameters after
?. - The
&you see when copying from HTML source is an escaped form. Go back to the original page and use its copy button to get the actual URL. - Don't change HTTPS to HTTP. If there's a certificate error, first check the device's clock, network, and the server certificate.
- Some services return different content depending on the User-Agent. Change the subscription request User-Agent in your client only if your provider specifically requires it.
Import on mobile: URL, clipboard, and QR code
Android clients often have a plus button on the Configuration page, where you can choose URL, file, or QR code. In a mobile client that supports mihomo, add the config and set it as active before connecting. The system VPN permission shown on first launch allows the app to create a local traffic tunnel. This is separate from downloading the subscription; granting permission doesn't confirm that the subscription works.
- Copy the URL for your client from the subscription page, then return to the client's config list.
- Open the add-config option, choose URL import, and paste the address. For QR import, make sure the code contains a subscription URL, not a link for a single proxy node.
- Save and wait for the download to finish. Check the config name, proxy groups, and any error messages.
- Set the config as active, start the connection, and grant system permission. Then test with a website you know should be accessible.
iOS import methods and supported formats depend on the app. Don't assume the Android menu steps apply. If an app only accepts its own subscription format, select that format on the provider's site. Import the full config described here only through an option that explicitly supports Clash YAML.
Import local YAML: check the file structure and indentation
Local files are useful for offline configs, migrating an existing setup, or troubleshooting subscription downloads. In the client, choose Configuration → Import file, select the actual .yaml or .yml file saved on your device, then import and activate it. Saving a webpage as a file may give you HTML; changing its extension won't turn it into YAML.
The example below is for checking whether a config loads. It uses explicit local listening ports and a fallback rule, and contains no proxy nodes. It helps distinguish whether the client can load YAML from whether a remote subscription provides working proxies.
mixed-port: 7890
allow-lan: false
mode: rule
log-level: info
proxies: []
proxy-groups: []
rules:
- MATCH,DIRECT
mixed-port: 7890means this example accepts both HTTP and SOCKS proxy connections on the same local port. If the port is already in use, change it or stop the program using it.allow-lan: falsekeeps the config inaccessible from your local network. You don't need to change it totruefor an initial test.MATCH,DIRECTsends all connections matching the fallback rule directly, so this example doesn't provide remote proxy access.- Use spaces, not tabs, for YAML indentation. Quote node names that contain special characters, such as a colon followed by a space.
After importing a local file, the client may save its own copy; editing the original file later may not update the imported entry. A regular local config also won't automatically re-download a full remote config, although separately declared remote providers within it may update on their own schedules. To keep a full subscription in sync, use a remote URL entry.
Base64 proxy lists vs. full configs
Base64 is an encoding, not a proxy protocol or encryption. Decoding a Base64 string may produce a list of proxy links, but usually not the proxy groups and routing rules a Clash config needs. Importing it as a full YAML config often fails to parse, or leaves you with proxy details but no usable selection or routing setup.
A full config and a provider file aren't interchangeable
A full config can declare nodes directly with proxies or load external proxy resources with proxy-providers. Proxy groups reference them through proxies or use, and rules determine how connections are routed. A standalone file with a top-level proxies: list may parse as a provider, but it's not a main config with proxy groups and rules already set up.
Recommended order for converting formats
- Start with a native format. Use the Clash or mihomo config generated by your provider whenever possible to avoid extra conversion steps.
- Check what your client supports. Some clients can import proxy links and generate a config; others only accept full YAML files. Follow your client's documentation.
- Convert only as a last resort. If conversion is necessary, use a trusted tool or one you host yourself. Check the proxy protocols, transport settings, proxy group templates, and rule sources.
Conversion tools may have access to your original subscription and all proxy credentials. Don't send a private subscription to a public converter you don't trust. Conversion also can't add support for a protocol to an older core. If a node requires a mihomo feature, check which core the client actually runs rather than just renaming the output file.
Troubleshoot subscription imports: check download, parsing, and connection errors
Check the error stage in the client log before changing settings. A download error occurs while fetching the content; a parse error occurs while reading it. Only when the config has loaded but websites won't open should you troubleshoot proxy connections, rules, and DNS. Treating all three as the same problem can break settings that were working.
| Symptom or log message | Likely cause | What to try next |
|---|---|---|
| HTTP 401 or 403 | Expired token, access restriction, or authentication required | Copy a fresh subscription URL and check your account status and provider's instructions |
| HTTP 404 | Incorrect URL path or an outdated endpoint | Get the URL again from the subscription page; don't try to assemble it manually |
| HTTP 429 | Too many requests | Stop refreshing repeatedly. Wait as instructed by the service, then try again |
| Timeout or DNS lookup failed | The subscription domain can't be reached | Check local DNS, your network, and how the client connects when checking for updates |
| YAML parse error or HTML returned | The download returned a login page, error page, or another format | Check the subscription output format, indentation, and lines around the reported error |
| Unknown proxy type or unsupported field | Core version or protocol capability mismatch | Check the core type, choose a compatible output format, or update to a suitable client |
Why does the client fail when the URL opens in a browser?
A browser may include login cookies, while the client usually fetches the subscription in a separate request. The browser may also use the system proxy, whereas the client may download updates directly or use a separate download setting. Seeing your account page in a browser doesn't mean the client received YAML. If updates must go through a proxy, first make sure a currently loaded config works, then check the client's proxy setting for subscription updates. This avoids relying on a connection that isn't available until after the initial import.
Config loaded, but websites still won't open
- Make sure the selected config is the one you just imported and that its proxy groups have a working node selected.
- Check the proxy mode. Rule mode routes traffic according to rules; direct mode doesn't use a proxy node. Global mode can't fix a node that isn't reachable.
- Make sure the system proxy port matches the port the client is listening on. For example, if the client listens on
7890while the system proxy still points to the old7897, apps may fail to connect. - For apps that ignore the system proxy, check how traffic is handled separately and consider TUN if needed. Don't use the TUN switch to try to fix a subscription format.
Auto-updates and local overrides: keep config changes maintainable
Remote subscription updates usually replace the remote content for that entry, so edits to a downloaded YAML file may be lost on the next refresh. To set fixed DNS, add custom rules, or adjust proxy groups, use the client's supported override, config merge, or script mechanism, and check the order in which it runs. Override syntax varies between clients; don't treat a script for one client as a core config field.
- Run one manual update first. Confirm the subscription downloads and parses correctly before setting a refresh schedule. Start with a 24-hour interval and adjust it based on your provider's guidance. Avoid repeated requests over a short period.
- Know what is being updated. Full configs, proxy providers, and rule providers may each have their own update schedules. Updating one doesn't refresh the others.
- Verify the applied overrides. Check the effective config and logs, not just the editor. Custom rule order matters, and rules placed after the fallback
MATCHrule usually won't be matched. - Keep a way to roll back. Save a copy of a config you've verified works and note where the subscription came from. If an update fails, restore a working config before investigating.
At a minimum, verify that the remote config downloaded, the core loaded it, proxy groups let you select a node, and the target app follows the expected rules. For system proxy or TUN setup, see the subscription import and connection guide. For config fields and DNS, see the complete guide. For help with failed updates, see subscription update troubleshooting.