Open-source kernel · clients actively maintained on every platform

Clash ClientDownload and Setup

Client installers and setup guides built on the mihomo kernel, covering Windows, macOS, Android, iOS and Linux, with full instructions for subscription import, proxy mode switching, rule-based routing and TUN mode.

  • Free forever
  • Open-source code
  • Chinese docs
  • mihomo kernel

Platforms covered

PLATFORM

Get Clash Client by Platform

Each of the five platforms has its own GUI client. Installers, system requirements and kernel archives are listed by platform on the download page. Use the cards below to jump straight to a section, or read the selection guide first if you are not sure which one to install.

  • Windows

    Clients such as Clash Plus, Clash Verge Rev and FlClash support system proxy and TUN mode takeover, and run on x64 and ARM64 devices with Windows 10 1809 or later.

    Go to download
  • macOS

    Ships as separate Apple Silicon and Intel builds, runs from the menu bar, and offers an enhanced mode that captures command-line tools and development environments which ignore the system proxy.

    Go to download
  • Android

    A single APK for phones and tablets, with per-app proxy and VPN mode; pick the ARM64 or ARMv7 build to match your device's CPU architecture.

    Go to download
  • iOS

    Clash Plus is available on the App Store — install it straight from the store page. It supports on-demand connection and Shortcuts integration, and the official site is clashplus.io.

    Go to download
  • Linux

    Available as .deb and .rpm packages for the major desktop distributions; for servers and routers, use the compressed archives in the kernel section and pick the build for your architecture.

    Go to download

See all clients →

CORE FEATURES

Kernel capabilities and configuration reference

The mihomo kernel is driven entirely by config.yaml. The six items below are the ones users change most often — and misconfigure most often. Each one lists its config key and accepted values.

Capture traffic that ignores the system proxy with a virtual network adapter

Kernel-level

TUN mode creates a virtual network adapter in the system and captures traffic that does not follow the system proxy settings — game clients, terminal tools, container environments and similar cases. Once enabled, the kernel handles layer-3 traffic directly, and auto-route together with auto-detect-interface points the routing table at the virtual adapter automatically, so there is no need to edit the gateway by hand. Compared with changing only the system proxy, TUN covers more ground, at the cost of requiring administrator or root privileges and, on Windows, the Wintun driver.

tun:
enable: true
stack: system
auto-route: true
auto-detect-interface: true

QUICKSTART

First-time setup in three steps

Getting from install to working internet takes just three actions. Each one has a matching entry point in the client interface, and the per-platform walkthroughs live on the guide page.

Import the subscription link

Open the client's configuration page, paste the subscription URL into the field and click download. Once the new entry appears in the list, select it — the client reloads the configuration and starts the kernel. If the list stays empty, open the subscription URL in a browser first to confirm it returns content, then come back and check what error type the client log reports.

Pick a proxy mode

For everyday use, pick rule mode: mainland China domains and IPs go direct while everything else follows the rules section through the proxy. When you need to check whether a rule is misclassifying a site, switch temporarily to global mode so all traffic passes through the proxy, then switch back once you have verified it. In global mode every request goes through the proxy, so leaving it on for long stretches noticeably increases data usage.

Turn on the system proxy or TUN

Enable the system proxy in settings and programs that respect it — browsers, for example — take effect immediately. Command-line tools and game clients ignore the system proxy, so they need TUN mode to be captured. Once it is on, visit any site to confirm connectivity, then check the connections page for the matched rule and the exit node to make sure routing behaves as expected.

Read the full guide →

OPEN SOURCE

Open-source kernel, community maintained

The client interface and the proxy kernel are two separate projects. Understanding that relationship tells you which side's logs to check when something goes wrong.

Project history

The Clash kernel is written in Go. It started out as a rule-driven local proxy with all configuration in a single YAML file — a design that has survived to this day. After the original author archived the project, the community carried development forward on the Clash Meta branch, which became today's mihomo kernel; new protocol support and DNS work land on that branch.

Ecosystem roles

The kernel and the mainstream GUI clients are all released under open-source licenses, with code hosted in public repositories. Rule sets, subscription converters and web dashboards are maintained by different teams, and they interoperate through the standard config.yaml and RESTful API. Any of them can ship a new release on its own schedule without waiting for the others.

How the kernel and the interface relate

A GUI client does not implement proxy protocols itself. It handles configuration editing, node display and on/off control, while the actual connections are made by the mihomo kernel. Drop the same config.yaml into another client and behaviour is largely identical; conversely, when the interface freezes the kernel is usually still running fine, so kernel logs are a more reliable place to troubleshoot than the UI.

Update mechanism

Kernel and client versions evolve independently, and some clients let you swap in a different kernel build, so upgrading the kernel does not mean reinstalling the whole app. Rule sets and GeoIP data are fetched periodically through providers rather than shipped inside the installer, so how current your rule library is depends on the update interval in your configuration — set it shorter to pick up new rules sooner.

Clone the mihomo kernel source

git clone https://github.com/MetaCubeX/mihomo.git

FAQ

Common questions

The four entries below come up most often during first-time setup. Expand one to see the cause and the order to work through; the guide page lists more, grouped by platform.

The node list is empty after importing a subscription — what now?
Open the subscription URL in a browser first and confirm it returns content. If the browser cannot open it either, the link has expired or your current network cannot reach it. If the browser works but the client fails to fetch, check the error type in the log: a certificate validation failure means switching to an HTTP URL or updating the system root certificates; if the returned content will not parse, check whether the subscription is actually in Clash format.
System proxy is on, the browser works but terminal commands do not?
Most terminal tools ignore system proxy settings and only read the http_proxy and https_proxy environment variables. Export both in your shell, pointing at 127.0.0.1:7890, to verify it works; once confirmed, add them to your shell profile. The long-term fix is TUN mode, which lets the kernel capture command-line traffic directly instead of configuring each tool by hand.
In rule mode a site goes through the proxy — how do I make it go direct?
Insert a DOMAIN-SUFFIX rule pointing to DIRECT near the top of the rules section — it has to come before any existing rule of the same kind, or an earlier rule will match first. Reload the configuration and check the connections page to confirm the new rule is the one matching. If traffic still goes through the proxy, check whether an IP-CIDR or GEOIP rule is matching it earlier.
Startup fails with a listen error in the log because the port is in use?
That means the port set by mixed-port is already taken by another program. Use a system command to find the process holding it and stop it, or simply change the port to a free value such as 7891 and restart the kernel. After switching ports, remember to update the proxy settings in your browser extensions and terminal, otherwise they keep connecting to the old port — which looks like the kernel is running but nothing loads.