Clash vs Clash Meta vs mihomo: Kernel Differences, Version History, and How to Choose

Why Clash was discontinued, how Clash Meta became mihomo, and how the three kernels differ in protocol support, config fields, and maintenance.

Three Names, One Lineage

The name Clash now points to three things: the discontinued original core, the once-active Clash Meta branch, and the actively maintained mihomo. These are not competitors — they are three names for the same codebase at different points in time. Understanding this lineage is what lets you make sense of the kernel options in client settings and judge whether an old tutorial still applies.

The Original Clash: Founding and End of Development

The original Clash was written in Go by Dreamacro and open-sourced under GPL-3.0. It established the basic paradigm of "subscription + rule-based routing": proxies defines nodes, proxy-groups defines policy groups, and rules decides where traffic goes. In November 2023, the author deleted the GitHub repository, and the release page and documentation went offline with it. The version number froze at v1.18.0, with no updates since. The closed-source Premium enhanced core — which exclusively provided TUN, scripting, and other capabilities — was terminated at the same time.

Clash Meta: The Community Successor Branch

Before the original was discontinued, the MetaCubeX team had already forked Clash.Meta and kept iterating on new protocols and kernel capabilities: support for VLESS, Hysteria, TUIC, WireGuard, and other protocols, built-in TUN, and sniffer all appeared on this branch. After the original repository disappeared, Clash.Meta became the de facto successor, and a large number of clients switched their built-in core to it.

mihomo: The Same Project, Renamed

In early 2024, Clash.Meta was officially renamed mihomo, and the repository moved to MetaCubeX/mihomo. The first stable release under the new name was v1.18.0, continuing the version numbering from Clash.Meta's v1.17 series. The rename involved no change in code or maintainers, and the configuration format stayed compatible. When you see "Meta kernel" and "mihomo kernel" today, they refer to the same line of development; active clients such as Clash Verge Rev, FlClash, Clash Meta for Android, ClashX Meta, and Clash Plus all ship with it built in.

Protocol Support Comparison

The most visible difference between kernels is node protocols. When a subscription contains links starting with vless://, hysteria2://, or tuic://, the original core cannot parse them — nodes go missing from the list or throw errors. mihomo recognizes them without issue.

ProtocolOriginal ClashClash Meta / mihomo
ShadowsocksSupportedSupported
ShadowsocksRSupportedSupported
VMessSupportedSupported
TrojanSupportedSupported
SnellSupportedSupported
SOCKS5 / HTTPSupportedSupported
VLESSSupported
Hysteria / Hysteria2Supported
TUICSupported
WireGuardSupported
SSHSupported

The conclusion is straightforward: if your subscription comes from a provider active in the last couple of years, it very likely contains protocols the original core does not understand. Only a client running the mihomo kernel can use every node.

Config Fields and Rule Engine Differences

mihomo keeps the original three-section skeleton, so most old config.yaml files can be imported as-is. The differences concentrate on rule types and a batch of new fields.

  • Rule types: the original open-source core supports DOMAIN, DOMAIN-SUFFIX, DOMAIN-KEYWORD, GEOIP, IP-CIDR, SRC-PORT, DST-PORT, PROCESS-NAME, MATCH, and others. mihomo adds GEOSITE, RULE-SET, IP-ASN, IP-SUFFIX, PROCESS-PATH, NETWORK, UID, and DSCP, and introduces AND, OR, and NOT logic combinations plus SUB-RULES sub-rules, so complex routing no longer requires stacking long rule lists.
  • Rule sets: rule-providers on both sides support http and file sources and the three behaviors domain / ipcidr / classical. mihomo additionally offers the inline type and a format field, letting you write a small number of rules directly into the config.
  • Subscription fetching: mihomo's proxy-providers support override to uniformly rewrite node fields and support custom request headers, so when a subscription requires a specific User-Agent you no longer need a conversion tool.
  • Experimental fields: sniffer, unified-delay, tcp-concurrent, find-process-mode, global-client-fingerprint, geodata-mode, and other fields exist only in mihomo.

Note: a config containing mihomo-only fields cannot be rolled back to the old core — the original refuses to load at startup with an unknown field error. Before migrating a config across kernels, confirm the list of fields the target core recognizes.

TUN Mode: From Premium-Only to Built Into the Kernel

TUN uses a virtual network adapter to take over all device traffic, bringing programs that ignore the system proxy (command-line tools, games, some sandboxed apps) into rule-based routing. The original open-source core had no TUN; that capability belonged to the closed-source Premium core and disappeared when the project was discontinued.

mihomo builds TUN into the open-source kernel, enabled with a short block of config:

tun:
  enable: true
  stack: system
  auto-route: true
  auto-detect-interface: true
  dns-hijack:
    - any:53

stack accepts system, gvisor, or mixed, corresponding to the system network stack, a userspace network stack, and a hybrid mode respectively. auto-route installs the routing table automatically, and dns-hijack pulls DNS requests sent to port 53 into the kernel for handling, preventing programs from bypassing the proxy to reach DNS directly. GUI clients usually turn this block into a toggle — just enable "Enhanced Mode" or "TUN Mode"; no need to write it by hand.

Maintenance Status and Recommendations

ProjectRepositoryStatus
Original ClashDreamacro/clashRepository deleted in November 2023; no longer maintained
Clash MetaMetaCubeX/Clash.MetaRenamed; no longer developed separately
mihomoMetaCubeX/mihomoActively maintained; new protocols and fixes land here

Choose based on three criteria:

  1. Fresh installs: go straight for a client with the mihomo kernel built in. The top-recommended client for each platform on this site's download page uses the mihomo kernel — download it and import your subscription.
  2. Migrating from an old client: import your config as-is first and watch the logs. If you see unknown field errors or missing hysteria2 / vless nodes, switch to a mihomo-kernel client instead of deleting or editing the subscription.
  3. Reading old tutorials: when you see "Clash.Meta" or "Meta kernel", read it as mihomo; when you see "Premium core", the corresponding capabilities are already open-source and built into mihomo.

The kernel is the engine; the subscription is the fuel. Switching kernels does not touch your subscription link — nodes keep updating from the subscription URL, and groups and rules are preserved along with the subscription or your local config.

FAQ

Does my old Clash config still work?

Mostly yes. mihomo is compatible with the original three-section config format — just import it directly. Only configs written with mihomo-only fields cannot be rolled back to the original core.

My client settings show both Clash and mihomo kernel options. Which should I pick?

Pick mihomo. The Clash option is kept only for compatibility with old configs; protocol support and fixes have stopped, and nodes using newer protocols will not work under the original kernel.

Do I need to change my subscription link after the rename?

No. The kernel change has nothing to do with the subscription URL. Subscriptions are maintained by your provider, and the client keeps updating the node list on schedule as usual.

Is mihomo paid software?

No. mihomo continues under the GPL-3.0 open-source license — the source code is public and free to use, and most clients built on it across platforms are open-source projects too.

Download a Clash Client with the mihomo Kernel

The top-recommended clients for Windows, macOS, Linux, Android, and iOS all ship with the mihomo kernel built in — import your subscription and you're ready to go.

Download Clash