Pick the kernel first, then the client
In the Clash ecosystem, clients and kernels are two separate layers. The client handles the interface, subscription management, tray menu and launch-at-login; the kernel process parses configs, opens connections and applies routing rules. The two can be swapped independently — the same mihomo kernel can be launched by Clash Verge Rev or by FlClash, and the config file works with either.
The state of the kernel sets the floor for your choice. The original Clash and Clash Premium were maintained by Dreamacro and archived in November 2023; the repositories are gone. What is still updated is mihomo (formerly Clash.Meta, maintained by MetaCubeX). Checking is straightforward: open the client's Settings page and look at the kernel version. mihomo versions look like 1.19.x or higher, while the original kernel stopped at 1.18.0.
Protocol support is where people trip up most often. Outbound types such as VLESS, Hysteria2, TUIC, WireGuard and SSH can only be parsed by mihomo-family kernels. If a config file contains type: hysteria2 and the client throws unsupported proxy type while loading, the kernel is almost certainly too old.
When your subscription includes Hysteria2 or VLESS nodes
Confirm the client's kernel is from the mihomo family before importing. Otherwise the subscription may download fine and the UI may report a successful update while the node list stays empty — the failure happens when the kernel loads the config, not when the subscription is downloaded.
Four dimensions: kernel, platform, configuration, release cadence
Put the candidates in one table and the differences stand out.
| Client | Platforms | Kernel | UI shell | Maintenance |
|---|---|---|---|---|
| Clash Verge Rev | Windows / macOS / Linux | mihomo | Tauri | Active |
| Mihomo Party | Windows / macOS / Linux | mihomo | Electron | Active |
| FlClash | Windows / macOS / Linux / Android | mihomo | Flutter | Active |
| ClashMetaForAndroid | Android | mihomo | Native | Active |
| ClashX Meta | macOS | mihomo | Native menu bar | Infrequent updates |
| Stash | macOS / iOS | In-house, Clash config compatible | Native | Active, closed source |
| Clash for Windows | Windows / macOS / Linux | Clash Premium | Electron | Discontinued Nov 2023 |
| Clash for Android | Android | Clash Premium | Native | Discontinued Nov 2023 |
Kernel version
mihomo supports all three rule-providers behaviors (domain, ipcidr, classical) plus GEOSITE rule sets; the original Premium supports only the first two and uses an older rule-set file format. If your subscription uses GEOSITE categories or classical behavior rule sets, the kernel must be mihomo.
Platform coverage
Desktop, Android and iOS are three different tech stacks. On desktop you can swap the kernel freely; Android takes over traffic through a VPN service; iOS does not allow third-party apps to run their own TUN service, so you can only pick a finished client from the App Store, and the kernel cannot be replaced.
Configuration options
Three tiers: subscription URL import only; subscription plus local YAML; subscription plus Merge overrides plus JavaScript scripting. Clash Verge Rev and Mihomo Party sit in the third tier — you can change ports, append rules and replace DNS settings without touching the original subscription file.
Release cadence
Check the interval between GitHub Releases. Clash Verge Rev, Mihomo Party, FlClash and ClashMetaForAndroid ship roughly monthly; ClashX Meta releases less often. A discontinued project does not stop working immediately, but new protocols and rule formats will never arrive, and subscriptions will eventually leave it behind.
Per-platform recommendations
Windows 10 / 11:Clash Verge Rev
Tauri shell, with installers in the 10 MB range; idle memory on Windows 11 is around 110 MB (with a typical subscription-sized rule set). Default mixed port 7897, external controller at 127.0.0.1:9097. Common toggle paths:
- System proxy: Settings → System Settings → System Proxy
- TUN mode: Settings → Clash Settings → Tun Mode; the first launch requests administrator rights and installs the wintun driver
- Subscription import: Subscriptions → New → paste the link → Import
The difference between system proxy and TUN is worth noting: system proxy only affects programs that read the system proxy settings — browsers and most Electron apps are covered, while command-line tools, some games and UWP apps ignore it. TUN takes over all TCP and UDP traffic at the virtual adapter layer, which is more complete, at the cost of requiring administrator rights.
Alternative: Mihomo Party. Electron shell, around 320 MB idle in the same scenario, in exchange for a fuller override panel and built-in subscription conversion. On low-spec machines, prefer the Tauri option. Installing Clash for Windows fresh is not recommended: it stopped updating in November 2023 along with the original kernel, and hysteria2 or vless nodes in your config will not parse.
macOS 12 and later: Clash Verge Rev or Stash
Clash Verge Rev ships a native arm64 build for Apple Silicon, lives in the menu bar and keeps running when the window is closed. Enabling TUN for the first time requires system authorization. ClashX Meta is lighter to use — menu bar only — which suits switching nodes and toggling the proxy, but it updates infrequently.
Stash is a closed-source commercial client with Clash-compatible config syntax and its own kernel rather than mihomo. Choose it only if it supports every protocol in your subscription; otherwise a mihomo-family client is the safer bet.
Android 8 and later: ClashMetaForAndroid
It takes over traffic as a VPN service; under Settings → Network you can switch the routing mode (Rule / Global / Direct). One common conflict: when the system Private DNS is set to a fixed DoT address, Clash's DNS handling is bypassed, which shows up as failed resolution for some domains or broken routing — set it back to Automatic. If you want the same interface on desktop and phone, use FlClash; one config works on both platforms.
iOS: App Store clients only
iOS does not allow third-party apps to run their own TUN service, so there is no "mihomo kernel plus custom shell" combination. The options are finished clients on the App Store, each with a built-in kernel; they can import Clash-style rule configs but the kernel cannot be replaced. Before choosing, confirm the protocols in your subscription are supported — Hysteria2 and VLESS Reality arrived late in some iOS clients.
Linux and routers
On desktop distributions use the Clash Verge Rev AppImage or deb package; without a desktop environment, run the mihomo kernel directly with a systemd service and put the config at /etc/mihomo/config.yaml. On OpenWrt, use the OpenClash plugin with the kernel switched to the mihomo branch, and LAN devices need no configuration of their own. Be careful enabling the full GEOSITE rule set on routers with less than 128 MB of RAM — a single database can take tens of MB once decompressed.
| Platforms | First choice | Alternative | Key constraint |
|---|---|---|---|
| Windows 10 / 11 | Clash Verge Rev | Mihomo Party | TUN needs administrator rights and the wintun driver |
| macOS 12+ | Clash Verge Rev | Stash、ClashX Meta | Enabling TUN for the first time needs system authorization |
| Android 8+ | ClashMetaForAndroid | FlClash | Private DNS must be set to Automatic |
| iOS 15+ | App Store client | None | Kernel cannot be replaced |
| Linux desktop | Clash Verge Rev | FlClash | AppImage needs executable permission set manually |
| OpenWrt | OpenClash | mihomo kernel installed directly | Trim the rule set below 128 MB of RAM |
Configuration and migration cost
Only three things really need to come with you when you switch clients: the subscription URL, local custom rules and override scripts. Ports, TUN toggles and launch-at-login are client settings — just set them again in the new client.
Clash Verge Rev's override mechanism deserves a mention of its own. Merge on the subscription card merges YAML fields, and Script runs JavaScript to modify the config. For example, to change the ports that come with a subscription:
# Example Merge override for Clash Verge Rev mixed-port: 7897 allow-lan: false external-controller: 127.0.0.1:9097 tun: enable: true stack: mixed auto-route: true
This override takes effect automatically after every subscription update — no manual edits to the subscription file, and nothing is lost when the subscription is re-downloaded.
Run only one client at a time
If two clients enable TUN at the same time, their routing tables overwrite each other; the usual symptom is a kernel log that looks fine while no website loads. Before switching, turn off TUN and system proxy in the old client, then quit the process.
Port conflicts are common too. When the default mixed port 7897 is still held by an old process, the new client's startup log shows bind: address already in use. On Windows, find the process with netstat -ano | findstr 7897 and end it; on macOS and Linux use lsof -i :7897.
Five things to check before installing
- Does the subscription contain hysteria2, vless or tuic nodes? If so, the kernel must be from the mihomo family.
- Is the target platform iOS? If so, you can only choose an App Store client, and the kernel cannot be replaced.
- Do you need TUN? If so, make sure you have administrator or root rights, and on Windows allow the wintun driver to install.
- Are there local rules or override scripts you want to keep? If so, pick a client that supports Merge and Script overrides.
- How much memory does the device have left? On routers or low-spec devices, prefer a Tauri or native shell and avoid Electron.
Run through these five points and you will rarely end up with a client that does not fit. mihomo for the kernel, a shell that matches your platform — that is the least troublesome combination right now.