Clash Core Versions Compared: Original Clash, Meta, and mihomo Configuration Compatibility

A practical guide to how the three core names evolved, covering maintenance status, configuration fields, rule support, and client compatibility.

Clash, Clash.Meta, Meta, and mihomo often appear together in client settings, configuration repositories, and subscription documentation. They are not four completely separate configuration systems, but they should not be treated as different spellings of one identical program either. To determine whether a YAML file will load, check more than its file extension: verify the core actually in use, its version, how the client preprocesses configuration, and which extension fields the subscription service outputs.

Most basic settings can be reused across these cores, including listening ports, proxy nodes, proxy groups, and common domain rules. However, TUN, traffic sniffing, newer protocols, rule sets, DNS extensions, and process matching differ significantly. Choosing the wrong core usually does not make the entire file unreadable. More often, certain fields are rejected, a node cannot be created, rules fail to match as expected, or the graphical client does not show the corresponding option at all.

How Clash, Clash.Meta, and mihomo are related

Original Clash

The term “original Clash” usually refers to the original open-source Clash core and its established configuration syntax. It defined the foundational structure still used widely today, including fields such as proxies, proxy-groups, rules, dns, mixed-port, and external-controller. Many subscription converters and client configuration templates still use this structure as their common foundation.

The original project is no longer under active development. It may still run normally on older devices or in existing clients, but it will not keep up with new protocols, platform networking changes, or later extension fields. For older configurations using only established capabilities such as HTTP, SOCKS5, Shadowsocks, and Trojan, the difference may not be noticeable in the short term. Once a subscription adds newer node types or depends on newer rule capabilities, the compatibility limits become apparent.

Clash.Meta

Clash.Meta is a branch that continued developing from the Clash configuration ecosystem. It retains many foundational fields while extending support for proxy protocols, TUN, DNS, sniffing, rule types, and platform integration. Some clients labeled the core simply as “Meta,” and configuration guides often referred to “Meta-only fields,” so the name still appears in subscription templates and troubleshooting logs.

mihomo

mihomo is the project name later adopted by Clash.Meta. In terms of lineage, the newer Meta releases and mihomo in everyday usage generally refer to the same actively maintained core line, not two configuration formats that must be converted between. Always check the version in practice, because the transition from early Clash.Meta to current mihomo included added fields, changed defaults, and updated protocol implementations.

Therefore, “Meta support” does not automatically mean support for every current mihomo configuration. An older client may bundle a Meta core yet fail to recognize node parameters added later. Conversely, current mihomo can usually read most basic Clash configurations, although the behavior, defaults, or recommended syntax of older fields may have changed.

Maintenance, protocol, and rule support compared

Comparison point Original Clash Clash.Meta / mihomo
Maintenance status The original project is no longer actively updated Actively maintained along the mihomo development line
Basic YAML Supports classic port, node, proxy-group, and rule structures Broadly compatible, with additional extension fields
New protocol support Limited to its existing implementation scope Covers more modern protocols and parameters
TUN and platform networking Depends on the specific historical version and client implementation More complete configuration options, but still requires system permissions and client support
Rule support Suitable for common domain, IP, GEOIP, and fallback rules Adds more rule types, rule sets, and matching conditions
DNS and sniffing Provides basic enhanced DNS modes Offers finer control over nameservers, policies, and sniffing

Protocol support is the easiest difference to observe. Each node in a subscription declares a type and its associated parameters. When the core does not recognize a node type, configuration validation or the startup log will usually report a parsing error. Even when the protocol is supported, an unsupported parameter can still trigger a field error. Renaming a proxy group will not fix this kind of problem; first verify the core version bundled with the client and the protocol requirements of the node.

Differences in rule support are more subtle. Classic rules such as DOMAIN-SUFFIX, DOMAIN, IP-CIDR, GEOIP, and MATCH are broadly portable. Configurations involving rule-set behavior, process names, network types, inbound labels, or logical combinations depend more heavily on the specific mihomo version. A configuration that starts successfully does not mean its extended rules will run as intended; after migration, check actual matches in the connection log.

YAML fields that are usually compatible

The following structure works well as the foundation for a cross-version configuration. It shows field relationships only and contains no real server credentials:

mixed-port: 7890
allow-lan: false
mode: rule
log-level: info

proxies:
  - name: Example-Node
    type: socks5
    server: 127.0.0.1
    port: 1080

proxy-groups:
  - name: PROXY
    type: select
    proxies:
      - Example-Node
      - DIRECT

rules:
  - DOMAIN-SUFFIX,example.com,PROXY
  - GEOIP,CN,DIRECT
  - MATCH,PROXY

mixed-port provides both HTTP and SOCKS proxy entry points; mode: rule routes connections according to rules; and proxy-group names must match the targets referenced at the end of the rules. These errors are unrelated to the core branch. For example, if a rule points to Proxy while the actual proxy group is named PROXY, no core can infer that they are the same group.

Node fields are the first layer of compatibility checks. Even when the proxies list itself uses a common structure, its protocol types, transport parameters, TLS fingerprints, UDP behavior, and authentication options may be supported only by specific versions. When a subscription service updates its node template and an older client suddenly stops launching, the usual cause is that the core version lags behind the subscription format.

DNS is the second layer. The classic enhanced-mode: fake-ip, default resolvers, and fallback resolvers are widely recognized, but nameserver-policy, proxy-server domain resolution, Fake-IP exclusion lists, and upstream transport formats can vary by core version. Before copying a current mihomo example into an older Clash release, check each field against the core documentation instead of simply deleting the first line that produces an error.

Why TUN, sniffing, and rule sets often cause problems

TUN mode is more than a switch

TUN mode lets the core receive traffic through a virtual network interface, which is useful for applications that do not follow system proxy settings. mihomo configurations commonly include a tun block with parameters such as enable, stack, auto-route, and auto-detect-interface. Whether it works also depends on operating-system permissions, routing tables, existing VPNs, virtual-machine networking, and whether the client starts its service components correctly.

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

Putting this configuration into the original core or an older Meta core may produce unknown-field errors, or the interface may fail to initialize because of platform-specific implementation differences. Even when the core supports it, the graphical client may rewrite the TUN settings at startup. Troubleshoot in this order: confirm the core version, validate the configuration, read the startup log, verify system permissions, and only then check for route conflicts.

Sniffing restores domain information

Traffic sniffing attempts to extract destination domains from HTTP, TLS, and other recognizable traffic, allowing requests that appear to connect only to an IP address to participate in domain-rule matching. mihomo provides fine-grained control over sniffed protocols, port ranges, forced domains, and skipped domains. Older cores cannot consume these fields directly, and an incorrect configuration may also affect LAN services, game connections, or applications using unusual handshakes.

Rule sets require checking both format and behavior

Remote rule sets involve download URLs, cache updates, rule behavior types, and content formats. Different cores and versions may use different field names, payload formats, and update methods for Rule Provider or Rule Set. A successful rule-file download is not enough: confirm that the target rule references it and that the set's behavior matches its contents. For example, a domain set cannot be interpreted in the same way as an IP-range set.

Rules are matched from top to bottom. Regardless of the core, an overly broad rule placed too early will stop later rules from being evaluated. MATCH should generally be last; direct rules for LAN and private addresses should be placed appropriately; and with Fake-IP enabled, DNS mappings and rule decisions should be checked together with connection logs. Upgrading the core will not automatically fix an incorrect rule order.

How to verify the actual core behind a client

Graphical clients usually bundle core files inside the application directory and use a control interface to read proxy groups, connections, logs, and configuration status. Some clients let you switch cores in settings, some are fixed to one branch, and others update the core together with the app. To identify the actual environment, check in this order:

  1. Check the About page or the first line of the log. Startup logs usually show the core name, version, and build information, making them more reliable than the client's marketing page for identifying what is running.
  2. Use the client's built-in configuration validator. Validate the YAML syntax first, then check whether errors point to unknown fields, node types, or invalid values.
  3. Confirm overrides and subscription conversion. The client may merge local settings before loading the configuration, so the raw subscription stored on disk may not be the same configuration ultimately received by the core.
  4. Check control-interface compatibility. mihomo retains much of the Clash API structure, but older interfaces may not fully display its extended features.
  5. Verify that core switching actually took effect. After replacing the file, fully stop the old process and restart the client so the interface does not remain connected to a leftover background instance.

If the client interface does not offer an option, that does not necessarily mean the core lacks the capability; the interface may simply not provide a form for it yet. Conversely, an interface may retain an old toggle without guaranteeing that the current core uses the same default value. For advanced fields, the safer approach is to edit the YAML or override file, then inspect the final configuration and logs after startup.

Mobile and desktop platforms also differ in system capabilities. Desktop clients commonly take over traffic through the system proxy or TUN, while mobile systems generally rely on the system VPN interface. When copying the same mihomo configuration across platforms, nodes and rules can be reused, but inbound ports, TUN routing, LAN access, and DNS takeover settings should be adjusted for each platform.

Migration steps from original Clash to mihomo

When moving from an older core, do not enable every new feature at once. First get the existing configuration running reliably on the new core, then enable DNS, TUN, sniffing, and rule sets one layer at a time. This makes problems much easier to isolate.

  1. Preserve the original configuration and client settings. Back up the raw subscription, local overrides, proxy-group selections, and DNS settings separately so multiple sources do not become one difficult-to-revert file.
  2. Build a minimal working configuration. Keep one usable node, one selection proxy group, and a small number of rules. Confirm that the core starts and establishes a connection.
  3. Restore all nodes and proxy groups. Pay particular attention to in-group references, health-check URLs, filter expressions, and protocol parameters.
  4. Restore the rules. Add classic domain and IP rules first, then connect remote rule sets. After each change, observe actual matches and the log.
  5. Configure DNS. Confirm basic resolution, proxy-server domain resolution, and Fake-IP exclusions, then check LAN domains and specialized applications.
  6. Enable TUN and sniffing last. These features change the system traffic entry point and destination-identification behavior, so test browsers, terminals, games, and LAN access separately.

After migration, “the browser works but the terminal does not” usually means checking whether the terminal reads the system proxy, whether the relevant environment variables are set, and whether TUN is required. If “nodes connect but domains do not open,” check upstream DNS, Fake-IP mode, and proxy-server domain resolution. If “some websites use the wrong policy,” inspect the rule that actually matched instead of replacing every node.

If the new core reports deprecated fields, replace them according to the current version's documentation rather than relying on compatibility handling indefinitely. Configuration files are long-running infrastructure; keeping fields that no longer have meaning increases future upgrade costs. For subscription-generated fields, adjust the subscription template or conversion rules first to avoid manual edits after every update.

Choosing a core for different scenarios

Keeping an existing legacy environment

If a device stays offline for long periods, its configuration is fixed, node protocols are stable, and neither the client nor the operating system will change, original Clash may continue to serve its existing purpose. This is suitable for maintaining the status quo, not as a baseline for a new deployment. As soon as a subscription introduces a new protocol or parameter, the older core may expose compatibility limits immediately.

New installations and frequently updated subscriptions

For new installations, frequently updated subscriptions, TUN requirements, or modern rule support, prefer a client that bundles a recent mihomo core. When choosing a client, also review its core update mechanism, configuration directory, log access, system-proxy controls, and TUN service installation method rather than comparing the interface alone.

Sharing a configuration across devices

For multiple devices, center the configuration on a highly compatible base layer and add platform-specific overrides. Nodes and proxy groups can come from the same subscription; desktop systems can add TUN and process rules, mobile devices can retain settings suited to the system VPN interface, and servers can be configured for command-line services and environment variables. This prevents a platform-specific field from blocking other devices from loading the configuration.

Server-side or command-line deployment

When running the core directly on a Linux server, software router, or container, mihomo's active maintenance makes it a stronger deployment foundation. Beyond syntax, establish a controlled version-update process and define the configuration directory, working directory, Geo data location, control port, and service permissions. Before upgrading, validate the configuration, restart the service, and inspect the logs so syntax problems are not mistaken for network failures.

Common compatibility questions

Does a Clash.Meta configuration need to be converted before mihomo can use it?

Most basic configurations can be read directly because the two belong to a continuous core lineage. Older configurations should still be checked for changed fields, legacy protocol parameters, and altered defaults. If the configuration contains client-specific fields, confirm whether the client preprocesses them instead of passing them to the core for parsing.

Can mihomo read an original Clash subscription directly?

Common nodes, proxy groups, and classic rules are usually compatible. The actual result depends on the subscription contents, not its name. Invalid formatting, broken references, or client-specific fields can still cause loading failures. Validate the configuration first, then check that all nodes and rules appear as expected.

Why does TUN still fail to provide network access after configuration validation passes?

Passing syntax validation only means that the fields can be parsed. TUN also depends on system permissions, the virtual interface, the default route, DNS takeover, and the state of other VPNs. Check runtime logs and route changes, temporarily disable potentially conflicting network tools, and determine whether the failure occurs during core startup, route insertion, or DNS resolution.

Do all rules need to be rewritten after switching to mihomo?

Usually not. Keep existing DOMAIN, DOMAIN-SUFFIX, IP-CIDR, GEOIP, and MATCH rules first, then adopt extended rule types after stable behavior is confirmed. The migration focus should be rule order, proxy-group references, rule-set format, and the effect of DNS mode on matching.

Download Clash