Clash Kernel Versions Compared: Original Clash, Meta, and mihomo Compatibility
Compare three Clash kernels by maintenance, protocol support, rule features, configuration compatibility, and resource use, with practical guidance for choosing the right one.
1. How Original Clash, Clash.Meta, and mihomo Are Related
Clash is not the same thing as a particular desktop window or mobile app. A complete setup usually has three layers: the kernel that handles network traffic, the client that provides the user interface, and a YAML configuration generated from a local file or subscription service. The kernel parses proxy nodes, rules, and proxy groups, then handles DNS, the system proxy, or TUN interception; the client starts the kernel, refreshes subscriptions, displays logs, and switches policies.
The original Clash established the familiar configuration structure, including proxies, proxy-groups, rules, proxy-providers, and rule-providers. Many subscription converters still use this structure as their baseline. However, the original project is no longer actively maintained, so it will not keep up with new protocols, operating-system networking changes, or accumulated bug fixes. It can run older configurations, but that does not make it a sensible default kernel for a new setup.
Clash.Meta began as a maintained branch that extended the Clash configuration ecosystem with more proxy protocols, rule features, DNS options, and transparent-proxy capabilities. The project later adopted mihomo as its current name. In practice, “Meta kernel” and “mihomo kernel” are usually not two wholly separate modern kernels evolving in parallel: the former appears mainly in historical releases, client compatibility labels, and older documentation, while the latter is the current maintained name.
Some clients still display “Clash Meta,” while the kernel filename, startup log line, or project documentation says mihomo. That naming difference alone does not mean the client is outdated. Check the kernel version date, release source, supported configuration fields, and whether updates work correctly instead of judging by a single label in the interface.
| Comparison | Original Clash | Clash.Meta | mihomo |
|---|---|---|---|
| Project role | Original implementation of the base configuration model | Historical name of the extended branch | Current maintained name of the Meta branch |
| Maintenance status | No longer actively maintained | Still widely used in older releases and interfaces | Ongoing releases and fixes |
| Best suited for | Reproducing legacy configurations and compatibility testing | Identifying historical documentation and older clients | New installations, modern protocols, and complex routing |
| Configuration relationship | Provides the base fields | Extends the base structure | Continues and refines the extensions |
2. Protocol Support: Identify the Node Types in Your Subscription First
Protocol support is the most direct criterion when choosing a kernel. The original Clash handles common proxy types implemented during its maintenance period, such as Shadowsocks, SOCKS, HTTP, VMess, and Trojan, but it does not cover every protocol and extension parameter later added to the Meta line. If a subscription includes VLESS, Reality, Hysteria2, TUIC, or newer WireGuard configurations, you will generally need a recent mihomo kernel and should also verify that its exact version supports the fields supplied by the node provider.
Seeing the same protocol name does not guarantee compatibility. Shadowsocks also depends on the cipher, while VMess and VLESS may combine WebSocket, gRPC, TLS, Reality, and other transport parameters. Hysteria2 and TUIC are additionally affected by certificates, congestion control, port ranges, and UDP network conditions. The kernel must recognize both the node type and the specific combination of parameters used by that node.
If nodes disappear after importing a subscription, the configuration fails to load, or the log reports field-parsing errors, first inspect fields such as type, network, cipher, and reality-opts in the raw configuration, then check the kernel version. Do not repeatedly switch the system proxy first: when the configuration has not loaded successfully, changing the system proxy cannot fix protocol parsing.
Choose the Kernel Based on Protocol Requirements
- Only traditional nodes and basic rules: An older kernel may still work, but there is no reason to deliberately choose an unmaintained original kernel on a new device.
- Subscriptions include VLESS or Reality: Choose a recent mihomo build and verify that the client actually invokes that kernel rather than merely supporting the import link.
- Hysteria2, TUIC, or other UDP-based protocols: In addition to kernel support, check the local network, router, and server port policies.
- Configuration generated by a subscription converter: Match the output format to mihomo or Clash.Meta so the converter does not strip extension fields for the original Clash.
3. Rules, Proxy Groups, and DNS Capabilities
Basic rule syntax remains broadly consistent across the kernel families represented by these three names. Common rules such as DOMAIN, DOMAIN-SUFFIX, IP-CIDR, GEOIP, and MATCH still form the configuration backbone, while proxy groups such as select, url-test, fallback, and load-balance continue Clash’s design approach. As a result, most basic subscriptions can be migrated from the original structure to mihomo.
The main differences appear in extended rules, rule-set formats, sniffing, DNS routing, and additional proxy-group parameters. mihomo supports richer rule expressions that can combine rule sets, process information, network types, and logical conditions. Fields evolve with each version, so complex rules should follow the documentation for the corresponding release rather than copying an example from years ago into a current configuration.
On the DNS side, the original Clash already provided basic capabilities such as fake-ip; mihomo offers more control over resolution policies, designated DNS servers, rule integration, and Fake IP exclusions. The more complex the configuration, the more clearly you need to define which component handles DNS requests, when names are resolved, and whether rules match the hostname or destination IP. Otherwise, the node may connect normally while particular websites fail to resolve, local names stop working, or applications bypass the intended policy.
proxy-groups:
- name: Auto Select
type: url-test
use:
- provider-main
url: https://www.gstatic.com/generate_204
interval: 300
rules:
- DOMAIN-SUFFIX,example.com,Auto Select
- GEOIP,CN,DIRECT
- MATCH,Auto Select
The example uses a common basic structure, but it still depends on a proxy set named provider-main being defined under proxy-providers. Adjust the health-check URL, interval, and policy name to suit the actual network. When migrating an older configuration, keep the rules simple at first to verify connectivity, then add rule sets, DNS policies, and logical conditions step by step. This is easier to troubleshoot than loading a complex configuration all at once.
What to Check When Migrating Rules
- Check that every rule target points to an existing proxy group or proxy node.
- Make sure the format, type, and download URL of each remote rule set meet the current kernel’s requirements.
- Verify that the proxy sets referenced by proxy groups update successfully, so the groups do not end up with no usable nodes.
- Keep
MATCHat the end of the rule list so it catches connections not matched by earlier rules. - After changing the DNS mode, clear the necessary system DNS caches and test hostname and IP access separately.
4. Configuration Compatibility: One-Way Compatibility Is Not Full Compatibility
mihomo retains many fields from the original Clash, so migrating an original Clash configuration to mihomo is usually straightforward; the reverse does not necessarily hold. Once a configuration uses newer protocols, extended rules, enhanced DNS fields, or newer TUN parameters, the original kernel may refuse to load it or ignore the fields it does not recognize. “Clash configuration compatibility” generally means compatibility with the base structure, not that every version can read the same file without differences.
You also need to distinguish kernel configuration from client configuration. The kernel usually reads proxy ports, rules, and DNS settings from YAML, while startup at login, tray behavior, subscription refresh intervals, interface themes, and system-service permissions belong to the client. Copying an entire configuration directory from one client to another can also copy path, database, and service-state problems. A safer migration method is to re-import the subscription or move only a checked kernel YAML file.
Some clients generate an additional override layer outside the subscription file to add TUN, DNS, the control port, or local rules. The settings shown in the interface may differ from the final configuration sent to the kernel. When troubleshooting compatibility, look for the client’s “runtime configuration,” “merged configuration,” or kernel log instead of inspecting only the original subscription.
Migration Sequence from an Older Kernel to mihomo
- Record the currently working client, kernel version, listening port, and system proxy status.
- Export the local rules and proxy-group design you need; do not copy the client’s entire runtime directory.
- Import the original subscription into the new client, disable custom overrides initially, and verify node connectivity.
- Restore rules, DNS, and TUN settings one at a time, checking the startup log after each change.
- Test the browser, command-line programs, store apps, and UDP-dependent applications separately to confirm that the interception scope is correct.
5. TUN Mode and the Scope of Operating-System Interception
The system proxy mainly affects applications that follow the operating system’s proxy settings, making it suitable for browsers and typical desktop software. Some games, command-line tools, store apps, and programs with their own network stack may not read the system proxy. TUN mode uses a virtual network interface to handle a broader range of traffic, so it is often used when TCP and UDP need to be intercepted consistently.
mihomo provides a fairly complete modern implementation of TUN, DNS hijacking, automatic route configuration, and traffic sniffing, but the result still depends on how the client requests permissions, installs services, and configures system routes. Windows may require service mode or administrator privileges; macOS requests network-extension authorization; Linux involves device permissions, routing tables, and the firewall. Mobile clients generally run through the system VPN interface, and background restrictions may affect connection persistence.
TUN mode is not automatically faster once enabled. It expands the interception scope while adding complexity to DNS, routing, and loopback handling. If the system proxy already meets your browser’s needs, a simpler configuration is usually easier to maintain. If games using UDP, terminal programs, or specific applications cannot use the system proxy, enable TUN and check each component individually.
When migrating from the original kernel, do not copy an old TUN example verbatim. Network-stack options, auto-route fields, and DNS integration can change between versions. If the client already provides a TUN switch, start with the configuration it generates, then use the logs to add exclusions for subnets, local-network access, or DNS policies.
| Requirement | Recommended Mode | What to Check |
|---|---|---|
| Browsers and standard office software | System proxy | Proxy port, rule matches, and the browser’s own proxy settings |
| Command-line tools and apps that ignore the system proxy | TUN or dedicated environment variables | Routing, DNS, permissions, and local-network access |
| Games and UDP applications | Choose TUN based on the application | The node’s UDP capability, protocol support, and packet loss |
| Only checking whether the subscription works | Start with the system proxy | Reduce variables and first confirm that the configuration loads successfully |
6. Resource Use and Performance: Measure Your Actual Configuration
You cannot simply equate “more features” with “higher resource usage.” Kernel load is usually determined by concurrent connections, rule count, rule-set size, log level, DNS cache, protocol encryption, TUN traffic, and the client interface together. On the same device, a streamlined mihomo configuration may be more stable than an older configuration loaded with large rule sets and continuous debug logging.
The memory usage shown by a desktop client also includes the graphical interface, WebView, subscription database, and update service, so it should not all be attributed to the kernel. To compare kernels, observe the standalone kernel process with the same nodes, rules, interception mode, and roughly comparable traffic. Record idle usage after startup, sustained downloads, increases in connection count, and changes after rule updates for results that are actually useful.
On mobile devices, pay closer attention to persistent wakeups, reconnects on weak networks, and background runtime. A proxy-group health-check interval that is too short periodically accesses test URLs; large auto-updating proxy and rule sets also increase network activity. Extending health-check and update intervals, disabling long-term debug logging, and removing unused rule sets is usually more effective than reverting to an older kernel.
A Practical Performance-Tuning Order
- Return the log level to what daily use requires, enabling verbose logs only while troubleshooting.
- Remove duplicate rules and unused remote rule sets so each update does not process multiple copies of the same data.
- Lengthen the
url-test, proxy-set health-check, and subscription-update intervals as appropriate. - Determine whether abnormal usage comes from the kernel process or the client interface before deciding whether to upgrade, reset, or replace the client.
- Compare TUN with the system proxy to determine whether the issue is related to the interception scope.
7. Scenario-Based Recommendations
New users or new devices: Choose a client that includes a recent mihomo kernel, shows the kernel version, and provides configuration logs. This covers the modern protocols and rule formats commonly used by subscriptions and makes future updates easier. Whether the client name includes Clash is not the key factor; the actual kernel and its maintenance status matter more.
Legacy environments still using the original Clash: If the current configuration is stable and must remain unchanged, record the running environment and plan the migration instead of replacing it hastily during work. However, as soon as you need new protocols, support for a newer operating system, or security and stability fixes, move to the maintained mihomo. Before migrating, check proxy-group names, DNS, rule sets, and TUN fields.
When you see a Clash.Meta download: Check its release date and kernel log first. A newer client may retain the Meta name for recognition while actually running mihomo; an installer that has not been updated for a long time may contain an older Meta kernel. The same name can hide completely different maintenance status.
Basic subscriptions and the system proxy only: mihomo is still a good fit. Choosing a new kernel does not require enabling every advanced feature; you can continue using simple nodes, proxy groups, and rules. Keeping the configuration boundaries clear is more reliable than stacking options you do not understand just to use new features.
Complex routing, modern protocols, or TUN: Prefer a recent mihomo build and a client that properly manages system services, permissions, and configuration overrides. When something goes wrong, check in this order: whether the configuration loaded, whether the node connects, whether the rule matches, and whether the system is being intercepted. Avoid changing several layers at once.
Choose a Client and Verify the Kernel Version
Go to the download page, choose an operating-system client built around a recent kernel, then follow the quick-start guide to import your subscription, choose a policy, and configure the system proxy.