Open-Source Ecosystem · Annotated Guide Site
Clash Client Downloads & Config Guides
Install links for all five platforms live on one page. Subscription import, rule-based routing, and proxy groups are broken down lesson by lesson. Every key config line has a margin note next to it — just follow along, no need to read the full docs first.
Core family mihomo / Clash Meta/GPL-3.0 open source/Windows · macOS · Android · iOS · Linux
mixed-port: 7890 mode: rule log-level: info proxy-groups: - name: manual-switch type: select proxies: [auto-speedtest, HK-01, JP-02] - name: auto-speedtest type: url-test interval: 300 rules: - DOMAIN-SUFFIX,youtube.com,manual-switch - GEOIP,CN,DIRECT - MATCH,manual-switch
The Five Key Lines in a Config File
A working config runs hundreds of lines, but only a handful actually shape your experience. The config is on the left, margin notes on the right — read the red text first, then the explanation.
mode: rule
Clash has three run modes: rule, global, and direct. global routes all traffic through the same outbound, direct sends everything straight through with no proxy. What you actually want day to day is rule — traffic is checked against the rules list from top to bottom, and the first match decides whether it goes through the proxy or direct; nothing after that gets checked. This one line is why sites inside mainland China can go direct while everything else routes through the proxy. The tutorial shows exactly where to find this mode switch in your client.
proxy-groups: - name: auto-speedtest type: url-test interval: 300
A url-test proxy group sends a probe request to every node in the group every interval seconds and automatically switches traffic to whichever has the lowest latency. A select group, by contrast, is entirely manual. The common setup: a select group on the outside for manual override, with a url-test group nested inside handling day-to-day auto-selection. If a node acts up, just click a different outbound in the select group from your client's panel — no need to touch the config file at all.
rules: - DOMAIN-SUFFIX,youtube.com,manual-switch - GEOIP,CN,DIRECT - MATCH,manual-switch
DOMAIN-SUFFIX matches by domain suffix, GEOIP matches by the destination IP's country, and MATCH is the catch-all that always matches. The order rules are written in is the order they're checked: put precise domain rules first, use GEOIP,CN,DIRECT to keep in-country traffic direct, and let MATCH catch everything that falls through. If routing isn't behaving as expected, check the client's connections panel to see which rule actually matched that request before you touch anything — guessing and editing rules blindly just makes things messier.
mixed-port: 7890
mixed-port accepts both HTTP and SOCKS5 proxy traffic on the same port, so your browser, system proxy, and command-line tools can all just point at 7890 instead of tracking separate port and socks-port values. Before changing the port, make sure nothing else is using it: check with netstat -ano on Windows, or lsof -i on macOS and Linux. A port conflict is one of the most common reasons the core fails to start — if you see "bind" in an error message, check this first.
proxy-providers: main-sub: type: http interval: 86400
A subscription isn't a one-time list of nodes copied into your config — it's a remote resource fetched on a schedule: interval: 86400 means it auto-updates every 24 hours, so when your provider swaps nodes or changes domains, your client syncs automatically. If your node list suddenly empties out, suspect an expired or reset subscription link first — grab a fresh link from your provider's dashboard and re-import. That usually fixes it in a minute, no need to reinstall the client or rewrite your config.
Get Your First Connection Working in 3 Steps
This is a condensed preview of the tutorial page. The only goal here is getting your first successful routing test — the details and edge cases are all in the full tutorial.
-
Download and Install the Client
Head to the download page and pick a build for your platform: Windows users want the x64 installer, macOS comes in separate Intel and Apple Silicon builds, and most Android phones need the arm64 build. On first launch, complete whatever permission prompts appear — Windows' service mode, macOS's system extension approval — since this determines whether TUN mode will work properly later. Don't skip it.
-
Import Your Subscription Link
Copy the Clash-format subscription URL from your provider's dashboard, open the client's "Profiles" page, paste it in, and download. If a profile shows up in the list with a non-zero node count, the import worked; an empty node list usually means you copied a generic Base64 link instead of the Clash-specific one — go back and grab the right one.
-
Pick a Mode and Test Your Routing
Set the run mode to rule, pick a node with normal latency in your proxy group, then visit one site inside mainland China and one outside: if both load, and the connections panel shows the rules matching as expected, setup is done. From here on, "switching nodes" is the only thing you'll ever need to do.
Download by Platform
Pick your OS first, then choose a client on the download page. Every platform's recommended client and installer type is already sorted and badged for you there.
Open-Source Core, Fully Traceable
Know what you're actually installing before you download it. This section covers where the core comes from, how clients relate to it, and how this site is maintained.
Clash first appeared as an open-source project in 2017, built around a rule-based proxy core written in Go. After the original author's repository was archived in 2023, the community fork Clash Meta took over maintenance and was later renamed mihomo, which continues to ship active releases today. Every client you download now runs on this same lineage under the hood.
A whole ring of GUI clients has grown up around this core: Clash Verge Rev on Windows and macOS, the cross-platform FlClash, Clash Meta for Android, and others. They handle subscription management, node panels, and toggle switches, while protocol parsing and rule matching are all handled by the core itself. That means the same config.yaml generally works across different clients — learn the config once, use it anywhere.
The core and its clients ship on separate release schedules: core updates bring new protocol and field support, while client updates catch up on UI and packaging. If a client doesn't recognize some field, it usually means its bundled core version is behind — update the client or switch core channels in settings, no need to rewrite your config from scratch.
This site doesn't distribute nodes or subscription services of any kind. It does exactly two things: gather install links for every platform's clients on one page, and explain the config fields that actually affect your experience. Tutorials and protocol references get revised as core fields change; whenever in doubt, trust what's actually in your client's UI over anything written here.
FAQ: Four Common Issues
The four spots where beginners get stuck most often, with a one-line answer up front. Expand for a short explanation; the full troubleshooting steps live on the help page.
Subscription imported fine, but the node list is empty?
It's usually a link format issue: generic Base64 subscriptions need to be converted before Clash can read them — go back to your provider's dashboard and grab the "Clash-specific" link instead. If it's still empty, check whether the link has expired or been reset. Full troubleshooting steps are in the Help page under installation and setup.
All nodes timing out — are they actually dead?
Nodes timing out across the board is rarely a node problem. Check in this order: whether the subscription has expired, whether your system clock is off, whether the port is already in use, and whether the protocol type matches your core version. The full step-by-step check is laid out in this troubleshooting article.
System proxy is on, but commands in the terminal still aren't routed through it?
That's expected: browsers read the system proxy setting, but terminals only respect the http_proxy / https_proxy environment variables — the two are completely separate. Either set those environment variables in your shell, or just turn on TUN mode to route everything at once. See the Concept Reference for how TUN mode differs from the system proxy.
Should I use a select or url-test proxy group?
They're not mutually exclusive — most setups use both: url-test handles automatic latency-based selection, select gives you a manual override. Subscriptions usually ship with these already nested together, so you can just switch outbounds in the select group from the panel. Field definitions are in the config file fields section of the Concept Reference.
Latest Guide Updates
Troubleshooting logs and deep dives, newest first. Each one digs into a single specific problem instead of offering a broad overview.