Start by separating the core, the GUI client, and the subscription config
Search for “Clash for Android” and you’ll often see Clash Meta, mihomo, FlClash, and Clash Verge Rev in the results. These names refer to different layers: some are proxy cores that handle connections, some are clients with buttons and settings screens, and some are names from earlier stages of the project. Treating them as different skins of the same app can lead to downloading the wrong package or assuming a config is compatible when it isn’t.
| Layer | What it does | Common names or examples |
|---|---|---|
| Proxy core | Parses configs, applies rules, handles DNS, and establishes outbound connections | Clash、Clash Meta、mihomo |
| GUI client | Imports and updates configs, displays proxy groups, and requests system network permissions | FlClash、Clash Verge Rev、Clash Meta for Android |
| Config and subscription | Provides proxy parameters, proxy groups, rules, and other runtime settings | YAML configs, remote config URLs, rule sets |
Phone users typically install a GUI client rather than run a core executable directly. A client may bundle the core or let you update it separately. The app version and core version are therefore two separate details; the client name alone won’t tell you which protocols or newer config fields it supports.
From Clash to Meta to mihomo: a brief timeline
Original Clash: the starting point for rule-based proxying and config structure
Developed by Dreamacro, Clash is a Go-based rule-driven proxy core. Config sections such as proxies, proxy-groups, and rules became the foundation for many later clients and subscription services. The core itself is not an Android app and does not include a mobile subscription management screen.
The open-source original Clash project is also distinct from the historical Clash Premium. Premium was released as a separate binary, and some of its enhanced features were not part of the original open-source core. Features described in older guides as “requiring Premium” don’t necessarily apply to every client with Clash in its name. Check which core and release period the guide refers to.
Clash Meta: extending the ecosystem while maintaining compatibility
Maintained by the MetaCubeX community, Clash Meta forked from Clash and continued to develop support for protocols, DNS, rules, and TUN. It retains many familiar config structures but adds parameters the original core can’t recognize. So “Clash format” means the overall structure is similar; it doesn’t guarantee that every older core can load the config.
For example, a subscription labeled “Meta / mihomo” may use newer outbound types such as type: hysteria2. An older core may reject the config during parsing with an unsupported proxy type error. Rearranging proxies won’t help; first check which core the client actually bundles and its version.
Maintenance changes around 2023 and the name that followed
Around November 2023, the public maintenance status of the original Clash project and several related clients changed. The availability of the original repository, the archiving of desktop clients, and the end of development for an Android project were separate events—not evidence that “all Clash software was discontinued at once.” Installed apps may still run, but ongoing OS compatibility and support for newer protocols need to be assessed separately.
By early 2024, the Meta fork had adopted the name mihomo, and its repository became MetaCubeX/mihomo. This was a rename and continued development within the same project lineage, not a switch to an unrelated core. Config docs, older app titles, and logs may still say Meta, so both names can show up in the same troubleshooting process.
- If you see Clash: check whether it refers to the ecosystem in general or specifically to Dreamacro’s original core.
- If you see Meta: it usually refers to the Meta fork or a client retaining that name; check the specific project.
- If you see mihomo: it refers to the core project developed under that name today, not to one particular mobile app.
Which cores do popular GUI clients use?
The table below summarizes the approaches these projects typically take. Use it to understand the ecosystem, not as a substitute for release notes. Third-party repackaging, development builds, and older versions may use different combinations. Before installing, check the project’s release page and the app’s About screen.
| Project | Core relationship | Main platforms and how to identify it |
|---|---|---|
| FlClash | GUI client built on mihomo | Android, Windows, macOS, and Linux; interface built with Flutter |
| Clash Meta for Android | Follows the Clash for Android interface approach, with a Meta / mihomo core | Android; a familiar-looking interface doesn’t confirm which core it uses |
| Clash Verge Rev | Desktop client built on mihomo | Windows, macOS, and Linux; a successor fork of Clash Verge |
| Original Clash Verge | Historical releases offered a choice of Clash or Clash Meta core | Desktop platforms; a separate project from Rev, with the original project archived |
| Original Clash for Android | Historical releases used Clash-family cores; check the specific release | Android; the original project is no longer maintained and should not be treated as a current mihomo client |
FlClash and Clash Verge Rev aren’t phone and desktop versions of the same app
Both can use mihomo, but each client implements its own interface, config storage, system proxy settings, and update mechanism. Copying the location of the desktop “System Proxy” toggle to Android often leads nowhere. Android typically routes traffic through the system VPN interface, while desktop clients may offer separate System Proxy and TUN options.
Similar Android app names don’t mean you can install one over the other
Clash for Android and Clash Meta for Android have similar names, but their package names, signatures, and data directories may differ. Whether Android allows an in-place install depends on factors such as package name and signature—not the icon or app title. Before switching clients, save your subscription URL, local overrides, and proxy group selections. Don’t assume the new app will read data from the old one.
Check iOS apps and config formats separately
The FlClash, Clash Meta for Android, and Clash Verge Rev entries in the table don’t imply that installable iOS versions are available. iOS clients must support system features such as Network Extension, and their distribution channels differ from Android’s. An iOS app that imports some Clash configs doesn’t necessarily run mihomo or support every mihomo YAML field.
When choosing an iPhone client, first check its supported protocols, subscription formats, rule types, and installation method, then see whether your existing subscription will work. Android APKs can’t be installed on iOS, and a desktop core executable isn’t an iPhone app. Compare options by platform in the client selection guide.
Why can the same subscription import differently?
A full config is not the same as a list of proxies
A full YAML config can include proxies, proxy groups, DNS, rules, and listening ports. A subscription containing only proxies may rely on the client to provide a template for everything else. If one app generates proxy groups automatically while another expects a complete config, they may not accept the same input—even if they use the same core.
Subscription providers may also return different content based on export options or request details. When comparing results, check whether you selected “Clash,” “Clash Meta / mihomo,” or a client-specific format, then inspect the imported config. Subscription URLs often contain access tokens, so hide tokens and proxy credentials in troubleshooting screenshots.
A config that parses doesn’t mean every feature is enabled
This snippet illustrates the config structure; it is not a complete config to use in place of a subscription. 7890 is an example mixed-proxy port, and 9090 is an example controller port. The client may override these settings or use different ports.
mixed-port: 7890
allow-lan: false
mode: rule
external-controller: 127.0.0.1:9090
rules:
- DOMAIN-SUFFIX,example.com,DIRECT
- MATCH,DIRECT
mixed-port accepts local HTTP / SOCKS proxy requests, while external-controller provides the management API. They serve different purposes. When a mobile app routes device traffic through the VPN interface, you usually don’t need to enter 7890 in every app. Don’t expose the controller to your entire local network just to troubleshoot a connection issue.
Choosing a mobile client: check maintenance, compatibility, and OS integration
When choosing a client, start with your phone’s OS, then check subscription requirements, and finally consider how you prefer to use it. Having “Clash” in an app’s name is not enough. For configs that rely on newer protocols, the core version is more useful than a similar-looking icon. For devices that need to stay connected in the background, OS compatibility and access to logs matter too.
- Check the platform and installation method. On Android, confirm the APK matches your device architecture. On iOS, check which installation methods are currently available. Don’t use a desktop download page as a mobile download source.
- Check the app and core versions. Record them separately from the app’s About screen, core menu, or startup logs. Menu names vary by client; there’s no single path that works for every app.
- Match the subscription format. If the provider specifies Meta / mihomo, prefer a client whose documentation clearly says it uses that core, and check the minimum version required for the features you need.
- Check access to everyday tools. Subscription updates, proxy group selection, runtime logs, and local overrides should be easy to find. Switching proxies alone won’t be enough to troubleshoot issues later.
- Check OS integration. On Android, grant VPN permission and adjust battery optimization, background activity, or auto-start settings as needed. Setting names vary by phone manufacturer.
Frequent updates don’t mean every release is worth installing immediately. Read the release notes before upgrading and save a restorable copy of your config. Pay particular attention to changes in DNS, TUN, rule syntax, and config migration. Even if an unmaintained client still works for now, consider gaps in support for new OS versions and security fixes.
Migration checklist before switching clients
Using clients in the same mihomo ecosystem may reduce some config migration work, but it doesn’t guarantee that app data will transfer directly. To be safe, test the new client independently before removing the old app’s data. Don’t let two apps that need the system VPN interface compete for the connection.
- Save your inputs. Note the subscription source, update method, local rules, override files, and any manually configured DNS settings. Copying only the remote subscription usually won’t include local changes.
- Start with defaults. Import the config into the new client and check the logs for errors such as unknown fields, unsupported proxy types, or references to missing proxy groups.
- Check rule routing. Switch to Rule mode and confirm that each proxy group points to the expected outbound. Rules are evaluated from top to bottom, so check the target of the final
MATCHrule in particular. - Test network changes. Test Wi-Fi and mobile data separately, and check whether the connection recovers after switching networks or locking the screen. A successful connection only confirms that the route worked at that moment.
- Migrate overrides last. Restore local changes one at a time, changing only one type of setting per step. That way, if something breaks, you can isolate the cause instead of changing DNS, rules, and TUN settings all at once.
If the old app works but the new one doesn’t, check config parsing, proxy group selection, DNS logs, VPN permissions, and background restrictions in that order. Don’t assume mihomo and Clash configs are completely incompatible. For DNS and rule fields, see the DNS section in the technical reference.
Common questions about project names
Do I need to install both Clash Meta and mihomo?
Usually not. The names refer to the same project lineage, and mobile users install a client that bundles the relevant core. Install both only if you’re specifically comparing clients; for everyday use, avoid running multiple VPN clients at once.
Can I use Clash Verge Rev as Clash for Android?
Clash Verge Rev is a desktop project for Windows, macOS, and Linux. On Android, choose a client with an Android release, such as FlClash or an Android-specific project. Using the same core doesn’t make an installer compatible across operating systems.
If a subscription says Clash, will it work with every client?
Not necessarily. Check whether it returns a full config or just a list of proxies, whether it uses Meta / mihomo extensions, and which version of the core the client includes. If importing fails, keep the error details after removing credentials; that’s more useful than repeatedly trying the same subscription URL.
Will my rules still work after switching mihomo clients?
Rules supported by the core can usually be migrated, but clients may use different override formats and merge rules. After migrating, confirm that the rules appear in the active config and that all referenced proxy group names still exist.
Once you understand this project lineage, the checks are straightforward: identify the OS and client first, then confirm the core and its version, and finally check the subscription and system permissions. The Clash, Meta, and mihomo relationship explains why configs look similar; each client’s implementation determines how installation, updates, and background use work on a phone.