Choose your operating system first, then check your processor architecture. Desktop users may prioritize tray controls and profile editing; mobile users should also consider background permissions, battery settings, and system network APIs. Similar client names don't guarantee identical installers, cores, or subscription formats.
Our top pick is Clash Plus. You can also choose Clash Verge Rev, FlClash, or Clash Nyanpasu. Check your system type before installing; if you need TUN, follow the client's instructions to grant service permissions. Clash for Windows is no longer maintained. When migrating an older setup, check your subscription, overrides, and system proxy port too—copying the app folder alone isn't enough.
Our top pick is Clash Plus; Clash Verge Rev and FlClash are also options for desktop rule management. Check System Information to see whether your Mac has Apple silicon or an Intel processor, then choose the matching installer. After granting network permissions, check whether another proxy app is still managing system settings. Archived ClashX Meta builds may help when reviewing older configurations, but aren't recommended as the default for a new setup.
Our top pick is Clash Plus. The guide also covers Clash Meta for Android, FlClash, and Surfboard. Most recent devices use ARM64, but check your system information to be sure. On first connection, approve the system VPN prompt; if the connection drops in the background, check battery optimization settings. Surfboard uses a different configuration format from Clash YAML, so subscription URLs aren't necessarily interchangeable.
Our top pick is Clash Plus. The download page links to the App Store and the official site at clashplus.io. After importing a profile, follow the system prompt to allow the VPN configuration, then confirm that rules and proxy groups have loaded. iOS clients use the network APIs permitted by the system, so desktop steps for service mode, port interception, or replacing the core don't apply directly to phones.
For desktop use, choose Clash Verge Rev or FlClash and install the package for your distribution. Proxy toggles depend on desktop environment and app support; command-line tools may also need environment variables configured separately. Server and router users can find the mihomo core on the download page. Before running it as a service, set the configuration directory, listening address, and permissions to avoid exposing a local port to your LAN.
The graphical client manages settings; the core handles connections. The examples below illustrate configuration fields—they aren't complete profiles you can import. Add your own proxy groups and connection details before use.
Rule-Based Routing: Match Traffic to an Outbound
Rule mode checks domains, IP ranges, or rule sets in order and sends traffic to the assigned policy on the first match. This lets you route local services, work resources, and other traffic separately instead of sending every connection through the same outbound. To troubleshoot, check the matched rule on the Connections page, then see which option the proxy group currently uses. More rules don't automatically mean better results. Unlike tools with a single proxy toggle, mihomo lets you maintain rule sources separately, but you'll still need to understand rule-set formats and update intervals. The example references a local rule file; the policy name must match a group in your configuration.
TUN Mode: Route Traffic Through a Virtual Interface
TUN routes network traffic to the core through a virtual interface. It can help with apps that ignore system proxy settings and some UDP traffic. Unlike a system proxy, it works at a different layer—but enabling it won't fix every network issue. Desktop setups usually need a service component or elevated permissions, and may require adjustments for routing, DNS, or conflicts with other VPNs. Before enabling TUN, make sure a standard proxy connection works, then check that LAN access and local development services still function. Network stacks and automatic routing differ by operating system. This example shows only basic fields and isn't a substitute for platform-specific installation instructions.
Fake-IP returns a mapped address for a domain first; the core then restores the domain and establishes the actual connection. This can preserve the destination name for rule matching. Fake-IP isn't another name for encrypted DNS, and a single toggle can't guarantee the resolution path you expect. Check system DNS, browser Secure DNS, and the scope of TUN interception together to make sure requests follow the intended resolution path. If printers, LAN discovery, or a particular app stop working, review the relevant filter list instead of repeatedly switching DNS servers. A complete setup is about keeping domain resolution aligned with the connection route, not just replacing DNS addresses.
Multiple Protocols: Check Transport and Server Settings
mihomo supports protocols including Shadowsocks, VMess, Trojan, VLESS, Hysteria2, and TUIC, but capabilities depend on the core build in use. When choosing a protocol, consider the server implementation, whether the network allows UDP, certificate settings, and mobile battery use—not just the protocol name or claimed speed. A client showing a node type doesn't guarantee support for every extension field in the subscription. A multi-protocol core makes centralized management easier than using separate tools for each protocol, but adds compatibility checks. The empty list below marks where connection definitions go; use a trusted source for the actual connection details.
proxies:[]proxy-groups:
- name: PROXY
type: select
proxies:
- DIRECT
Subscription and Profile Merging: Separate Upstream and Local Changes
A subscription may include proxies, proxy groups, rules, and DNS settings. Direct edits can be overwritten when it updates. A safer approach is to keep the upstream profile separate from local overrides and review the generated result before applying it. Clients handle merging, scripts, and extension fields differently, so don't assume the same override will work unchanged everywhere. Layered profiles are easier to update and roll back than a manually copied full configuration, but you need to know which layer takes precedence for conflicting fields. The example shows core configuration fields; how they're merged into a subscription depends on the client's profile management system.
mixed-port:7890allow-lan: false
mode: rule
log-level: info
Switching Cores: Check Field Compatibility First
The original Clash, Clash Meta, and mihomo are historically related, but their names don't mean they support exactly the same features. Clash Meta continued development under the mihomo name, and newer protocol and rule features may require additional fields. Some desktop clients let you choose a core or update channel; others bundle a fixed core. Check the client's actual interface for switching options. Migration involves more than replacing an executable: check service components, configuration parsing, and the control API too. The command below checks whether the target core can read a configuration; passing the check still doesn't replace testing DNS, routing, and app connections.
Start with the smallest working setup, then expand what it manages. After each step, check one observable result so subscription issues, proxy selection, and system settings don't get tangled during troubleshooting.
01 / PROFILE
Import a Subscription and Confirm It Loads
Add a subscription URL or import a YAML file, then select the profile. Check that proxy groups appear without parsing errors. Keep subscription credentials private; remove sensitive details before sharing errors.
02 / ROUTE
Choose Rule Mode and a Proxy
Keep rule mode on and choose an available proxy in the relevant group. Verify browser access before enabling TUN. A latency test is not a speed guarantee; use the system proxy alone if it meets your needs.
03 / VERIFY
Check Connections, DNS, and Recovery
Check the destination, matched rule, and outbound on the Connections page. Test your apps and LAN access. Before closing the client, turn off the system proxy and confirm normal access returns. See the guide for troubleshooting.
Clients, cores, and configuration sources are three separate layers. Knowing what each one does is more useful for migration, updates, and troubleshooting than memorizing a single software name.
Project History: Distinguish the Original from Later Forks
Clash established a workflow centered on YAML configuration, rules, and proxy groups. Later clients added graphical controls for those interfaces. After the original project and some early clients stopped being maintained, community forks continued to expand protocol and network-stack support. When you find an older tutorial, check which client it covers and compare its steps with the current interface and field documentation. Don't assume every step still applies just because the screenshots look familiar.
Clash for Windows and Clash Verge Rev are separate projects. The former being discontinued doesn't mean every Clash client has stopped receiving updates, and migrating to the latter isn't as simple as overwriting the old app folder. Record subscription URLs, shortcuts, service components, and override scripts from the old setup separately. Keep a backup of the old configuration during migration, verify the new setup works, then remove old services and leftover proxy settings.
Core Lineage: Meta and mihomo
Clash Meta is an important name to know when tracing mihomo's history. Older articles often mention the two together, but current support depends on the core actually running and its documentation. A graphical client's settings may hide some fields or generate the final configuration through its own override system. So the absence of a toggle in the interface doesn't necessarily mean the core lacks support; conversely, a field being accepted in the interface doesn't replace runtime testing.
The mihomo core is open source under GPL-3.0. See its repository for source code, release history, and issue discussions. Check the licenses and maintenance status of graphical clients, icon assets, and subscription services separately; the core's license doesn't determine theirs. This site organizes client downloads and Chinese-language resources, but implementation details should be verified against the relevant project's documentation, source code, and release notes.
Updates: Keep the App and Configuration Separate
Client, core, and subscription updates change different things. A client update may alter the interface, service components, or profile merging. A core update may change field parsing, protocol behavior, or DNS handling. A subscription update mainly replaces connection resources and upstream rules. If something breaks after an update, identify which layer changed and reproduce the issue with a saved copy of your configuration. Don't replace several components at once.
Read the release notes before upgrading, and save local overrides and any logs you need. In logs, focus on timestamps, destinations, and matched rules; remove subscription URLs and credentials before sharing. For devices you rely on, choose an update path you understand and can roll back. Test channels are useful for checking specific fixes, but a newer version number alone isn't a reason to replace a stable setup. The download page lists installation options; the homepage doesn't pin a specific release number.
Community Support: Make Issues Reproducible
A useful issue report includes the operating system, client, operating mode, and steps that trigger the error. Describe browser access, terminal requests, and LAN services separately. “Connection failed” or a single latency result usually isn't enough to identify the cause. Reproduce the issue with a minimal configuration, then restore rules and overrides one at a time to determine whether it comes from connection resources, configuration interactions, or the local environment.
For a closer look, read the protocol guide to compare trade-offs, check field definitions in the glossary, or troubleshoot by symptom in the FAQ. Open-source collaboration makes implementations inspectable, changes traceable, and issues discussable—it doesn't make every platform and configuration behave like the same environment.
mihomo Source Repository
Clone the repository to review its implementation and release history; most users don't need to do this to install a client. Check the repository instructions for build dependencies and commands.
Linux penguin graphic: Font Awesome, CC BY 4.0; shown in monochrome.
Configuration and Troubleshooting Notes
Start with a specific symptom and check logs, configuration, and network paths one layer at a time. Here are the three latest articles, for readers who've completed a basic installation.
Explains what causes DNS leaks and how to test for them online, with configuration examples for enhanced-mode, fallback filtering, nameserver-policy, and TUN DNS interception.
Traces the lineage of three core generations and compares protocol support, rule types, TUN, and DNS features, highlighting fields to update when migrating older configurations to mihomo.
Covers launch crashes and tray icons that disappear immediately, including log locations, how to clear corrupted configuration, port conflicts, and missing runtime libraries.