Choose a client for your OS, use the mihomo core to handle proxy connections, manage requests with rule-based routing, and follow the English documentation to configure it.
One entry point A mixed port for HTTP and SOCKS
Choose what to route Configure the system proxy and TUN separately
Readable configuration Manage subscriptions, proxy groups, and rules in layers
MIHOMO CORE · GPL-3.0 OPEN SOURCE · RULE-BASED ROUTING
CONFIGURATIONYAML configurationInbound / proxy groups / rules
PROTOCOLS / CORE
Protocol types and core supportCheck compatibility before choosing
Protocol names describe how connections work, not a guaranteed speed. Server settings, network paths, and client cores must be compatible. After importing a subscription, make sure the active core recognizes its protocol fields.
SSShadowsocks
VMVMess
TJTrojan
VLVLESS
HY2Hysteria2
TUTUIC
Already have a subscription?
Use the protocol and transport settings provided by the server. Parsing the configuration is only the first step; also check that TLS, the transport layer, and proxy group references are all configured correctly.
Mobile networks
Check how connections recover when switching networks, and account for background restrictions. QUIC-based protocols require UDP connectivity; the protocol name alone cannot tell you how much battery it will use or how stable the connection will be.
Desktop and server deployments
Desktop clients focus on their interface and OS integration; servers need manageable services and maintainable configuration. Explore the protocol and core reference →
01 / CLIENT SELECTION
Clash Clients for Every PlatformChoose by OS and processor
The GUI handles subscription management, proxy switching, and OS integration. The core parses rules and establishes connections. Choose a package for your device, then check that the core supports the protocols your configuration requires.
Choose a GUI client such as Clash Plus, Clash Verge Rev, or FlClash. Check your processor architecture in system information first. After installation, start by testing the system proxy; if you need to route apps that ignore it, follow the guide to configure the TUN service.
Choose the build for Apple Silicon or Intel. System proxy and network extension permissions are managed in different places; follow the prompts when you first launch the app. Back up your configuration before updating. Reinstalling is no substitute for diagnosing subscription or rule issues.
Choose from Clash Plus, Clash Meta for Android, FlClash, or Surfboard. Check your device architecture and configuration format. On first connection, allow the app to set up a VPN. If the connection drops when you switch apps, check Android's background activity and battery restrictions for the client.
Install Clash Plus from the App Store. Its official website is clashplus.io. After importing a configuration, allow the app to add a VPN configuration, then choose a proxy group. The app interface differs from desktop clients; when troubleshooting, check the connection status, active configuration, and matched rules.
For desktop Linux, choose Clash Verge Rev or FlClash and download the package for your distribution. On a headless host, run mihomo directly and use a service manager to keep it running. Also check configuration directory permissions, listening addresses, and service logs.
Inbound, rules, and proxy groupsUnderstand the connection path
Each request passes through local inbound, rule matching, and outbound selection in turn. Configure these stages in order to verify the result more easily than by toggling several settings at once.
Rules are evaluated in order; proxy groups choose the outbound route
Rule mode doesn't send every connection through the same node. The core checks domains, addresses, or rule sets from top to bottom, then routes each request to the policy that matches. A policy can send traffic directly or select a proxy group. When editing your configuration, put specific conditions first and the fallback MATCH rule last. Make sure every referenced group exists. Unlike global mode, rule mode lets different types of traffic take different routes, but the outcome depends on your rules. If an app uses the wrong route, check the matched rule in the connections list and adjust that condition rather than switching all your nodes repeatedly.
A mixed port accepts both HTTP and SOCKS proxy connections, giving browsers, terminals, and developer tools a single local entry point. The port number isn't fixed; use the value in the active configuration. If you change mixed-port, update any apps where you've entered the proxy address manually. allow-lan controls whether devices on your LAN can connect, but reachability also depends on the bind address and system firewall. Leave it off for local use. The external controller port is for communication between the client and core, not proxy traffic. Don't enter it as a browser proxy or expose it directly to the public internet.
Pair virtual network interface routing with DNS settings
The system proxy depends on apps reading the OS proxy settings. TUN uses a virtual network interface and routes to capture eligible traffic, making it useful for apps that don't support explicit proxies. Before enabling it, make sure the client service is running and required permissions are granted, then check that DNS settings match your routing setup. Exclusions, interface settings, and platform behavior still affect which traffic is captured; turning on the switch doesn't guarantee that all traffic goes through the proxy. If domains fail to load but direct IP connections work, check DNS resolution first. Avoid running multiple tools that modify routes or DNS at the same time, as they may overwrite each other's settings.
Recommended test sequence
Verify a basic connection through the system proxy.
Grant permissions and enable TUN mode.
Test domain resolution and the target app separately.
Check the matched rule and outbound route in the connections list.
Keep remote configuration separate from local changes
A subscription may provide a full configuration or just a list of nodes; these are different kinds of input. After importing, check which configuration is active and whether its proxy groups contain selectable nodes. For rules or port changes you need to keep, use the client's override or merge features where available. Direct edits to remote files may be overwritten on update. An automatic group switches nodes based on probe results; a manual group keeps the outbound route you select. If an update fails, keep the current working configuration and check subscription URL reachability, response format, and core parsing logs separately.
Three configuration layers
Remote subscription → local overrides → active core configuration
The subscription text shown in the client may differ from the configuration ultimately passed to the core. When troubleshooting, check the merged configuration too.
Treat speed test results and actual download speeds separately
Node speed tests typically measure response time to a specified probe URL; they aren't sustained download tests. A node with a fast response may still be limited by bandwidth, server load, or the destination site. For a fair comparison, use the same network and test target at roughly the same time, changing only one variable. If a browser works but a terminal doesn't, first check whether the terminal reads proxy environment variables rather than assuming the node is at fault.
Use logs to locate the failure stage, not jump to conclusions
First determine whether the failure is subscription download, configuration parsing, DNS resolution, or the connection to the destination, then check the relevant settings. Temporarily increasing log verbosity can help. Before sharing logs, remove subscription URLs, authentication fields, and personal addresses. Recording the active configuration, mode, and steps to reproduce the issue is often more useful than reinstalling repeatedly.
03 / FIRST CONNECTION
Import a subscription and verify the connectionStart with one connection you can reproduce
For your first setup, keep the default ports and enable only the network mode you need. Check the status after each step before moving on.
STEP 01
Import and activate a subscription
Add the subscription URL on the client's subscription or configuration page. Once it downloads, select that configuration. Make sure the file parses and its proxy groups contain selectable options before continuing. Subscription URLs often include access credentials, so don't post them publicly. If the import fails, first check whether the response is configuration data or an error page.
STEP 02
Choose a mode and outbound route
Start with rule mode and select an available node in your main proxy group. On desktop, enable the system proxy; on mobile, allow the VPN when prompted by the OS. Don't run multiple proxy apps at once or change DNS, ports, and routes together before verifying a basic connection.
STEP 03
Visit a destination and check the connection
Open the app you want to test, find its domain or process in the connections list, and check the matched rule and actual outbound route. An enabled switch alone doesn't mean requests are reaching the core. If the app doesn't appear in the list, check the proxy entry point first. If it appears but fails, check DNS results, the node connection, and the destination service.
The Clash ecosystem and mihomo coreHow the projects fit together beyond the client interface
Here, Clash refers to an ecosystem of clients and cores that share configuration concepts; not every app is developed by the same team. Similar interfaces don't guarantee identical protocol support or configuration behavior.
From the original configuration model to mihomo
Clash uses YAML to define proxies, proxy groups, and rules. GUI clients build on this model to offer imports, switching, and OS integration. After the original project was discontinued, other projects in the ecosystem continued to evolve. The name Clash Meta is part of the project history leading to mihomo, so you'll see both names in older guides. To check whether a feature is supported, look at the core currently in use rather than relying on whether the app name includes Meta.
Check open-source scope and licensing separately
The mihomo core is licensed under GPL-3.0. You can review its source code, issues, and commit history in the project repository. GUI clients, system service components, and configuration tools may have their own repositories and licenses; the core's license doesn't automatically apply to all of them. Before modifying, distributing, or integrating code, read the relevant project's license and dependency notices. For everyday use, start with the download page to check maintenance status and system requirements.
Configuration compatibility doesn't mean every setting works the same way
Basic rules and some proxy fields in older configurations may still work, but newer protocols, rule types, and advanced DNS fields require support in the core. Before copying a configuration to another client, check whether it accepts full YAML or only node subscriptions, and whether it automatically merges default settings. If parsing fails, address the fields identified in the logs one by one. Avoid deleting unfamiliar settings in bulk just to make the file load.
Clients, cores, and subscriptions update separately
Updating the client mainly changes its interface, platform integration, and bundled components. Updating the core affects protocol implementations and rule parsing. Updating a subscription changes remotely provided nodes or configuration. These updates solve different problems. Keep a recoverable copy of your configuration before updating; afterward, check the active configuration, listening ports, and system proxy status. If a connection changes, compare what was updated before deciding whether to roll back a setting or adjust the configuration.
05 / TECHNICAL NOTES
Clash configuration and troubleshooting guidesFind the settings that match your symptoms
The quick-start guide gets your first connection working, the technical reference explains protocols and cores, and topic guides walk through how to investigate specific issues. Note what you're seeing, then choose the guide that fits.
Trace how three generations of cores evolved and compare their protocol support, rule types, and configuration fields to see whether your existing configuration can be reused as-is.
Diagnose browser extensions that override proxy settings, terminals that ignore the system proxy, and missing environment variables separately, with steps to verify each fix.
Starting with virtual network interfaces and routing tables, this guide explains how TUN mode captures traffic from apps that ignore the system proxy, with platform-specific setup steps and permission requirements.