01 · DECISION MODEL
Choose by constraints, not by how new a protocol sounds
Protocols, transports and clients are three different layers
When a node name appears in a Clash client, it rarely tells you the full technical story. Connection behavior is determined by the protocol, transport, encryption or authentication settings, and server implementation. SS, VMess, Trojan, VLESS, Hysteria2 and TUIC are protocol-layer technologies; TCP, WebSocket, gRPC, HTTP/2 and QUIC are transport or carrier layers; Clash Plus, Clash Verge Rev, FlClash, Clash Nyanpasu and Clash Meta for Android are graphical clients. A graphical client imports configuration, switches policies and calls the kernel. Whether a protocol works ultimately depends on the bundled kernel and its configuration parser.
Therefore, “the client supports subscription import” does not mean that every node in the subscription will run. A subscription may download and parse successfully while some nodes use transport parameters unknown to the current kernel. A node may also establish a TCP connection but fail its handshake because authentication fields, the TLS hostname or UDP settings do not match. Start with the complete parameters supplied by the server, then confirm that the client and kernel support those fields instead of comparing only protocol abbreviations in node names.
Five dimensions make a reusable decision framework
The first is the network path. Stable wired or Wi-Fi connections usually do not need elaborate congestion control; a simple TCP protocol is easier to troubleshoot. Mobile networks with high jitter, random packet loss or frequent cell-tower changes are where QUIC-based protocols can show their value in connection migration and loss recovery. The second is device resources. Desktop computers prioritize throughput and compatibility, while phones must also handle continuous wakeups, background keep-alive, health checks and heat. Routers and small servers are constrained by CPU architecture, memory and concurrent connections.
The third is traffic type. Web browsing consists largely of short connections and DNS queries; video and large downloads prioritize sustained throughput; voice, real-time collaboration and gaming generate UDP traffic and are more sensitive to jitter than peak bandwidth. The fourth is server-side control. If you can only use an existing subscription, prioritize nodes with complete parameters that the client recognizes reliably. If you can tune both server and client, then compare finer options such as congestion control, certificates, ALPN and UDP relaying. The fifth is maintenance cost. The more parameters a setup has, the more likely fields are to differ during upgrades, migration and cross-client reuse. Observable, reversible configurations are often better for daily use than combinations that are theoretically faster but difficult to diagnose.
| Decision dimension | Questions to answer first | Common mistake |
|---|---|---|
| Network path | Are packet loss, jitter or NAT changes frequent? | Choosing a long-term protocol from one speed test |
| Device resources | Will it run in the background for long periods, and are CPU or battery limited? | Applying desktop results directly to a phone |
| Traffic type | Is the workload mostly short connections, sustained downloads or real-time UDP? | Comparing peak throughput alone |
| Compatibility scope | Do the kernel, subscription converter and server fields match? | Assuming every node works because import succeeded |
| Maintenance cost | Is there a reliable fallback and a clear error log? | Stacking too many experimental parameters at once |
Establish a baseline before comparing alternatives
Reliable selection does not start by speed-testing all six protocols at once. Choose one complete, stable node as the baseline, fix the client, kernel, network, DNS and test targets, and change only the protocol node. Observe connection setup time, sustained transfers, recovery after network changes, background reconnection and log errors instead of recording only a speed-test snapshot. On mobile, test foreground use, screen-off background operation, and Wi-Fi-to-cellular switching separately because scheduling differs across these states.
Keep rule-mode and direct-connection results as controls. A website may slow down because rules sent traffic to a different policy group or DNS returned different addresses; the protocol itself is not always responsible. Confirm that the same target really passes through the node under test before drawing conclusions. The goal is not to find the “fastest protocol” in the abstract, but the combination that produces the fewest errors, has clear recovery behavior and remains acceptably stable on the current path, device and maintenance setup.
02 · TCP FAMILIES
Design trade-offs among SS, VMess, Trojan and VLESS
SS: compact structure with explicit encryption requirements
Shadowsocks is usually abbreviated as SS. Its core approach is to carry proxy traffic with a lightweight protocol structure, protecting data through a pre-shared password and selected encryption method. Modern configurations should use an AEAD method supported by the current kernel, with the server and client using exactly the same method, password and port. SS has relatively few fields, making subscription imports and cross-client migration straightforward; failures can usually be traced through the port, password, encryption method and network reachability.
Fewer fields do not mean that all SS nodes perform alike. Server implementation, hardware acceleration for the cipher, UDP relaying, plugin parameters and the underlying network all affect results. Some subscriptions also include plugin and plugin-opts to add another transport layer; if the current kernel lacks the specified plugin, the node will not work even when server, port, cipher and password are correct. On resource-constrained routers, SS is often an easy starting point, but encryption overhead should be tested on the target architecture rather than inferred from desktop CPU results.
VMess: more identity, timing and transport options
VMess comes from the V2Ray ecosystem, and its configurations often include a user identifier, alterId, encryption options, network transport and TLS fields. Older configurations commonly show different alterId values, while newer server deployments tend to use simpler combinations; clients may still retain parser fields for compatibility with legacy subscriptions. VMess authentication is sensitive to clock state. A significantly incorrect device clock can cause authentication failures, so troubleshooting should check system time synchronization as well as the address and user identifier.
VMess becomes more complex because it can be paired with multiple transports. TCP, WebSocket, HTTP and gRPC have different requirements for paths, reverse proxies and server configuration. WebSocket requires checking path and Host; gRPC requires checking service-name; with TLS enabled, also check servername, certificate verification and ALPN. Subscription converters sometimes omit less common transport fields, leaving a node name and basic details intact while the handshake always fails. Compare the single-node configuration before and after conversion field by field instead of repeatedly switching proxy modes.
Trojan: TLS transport makes certificate settings critical
Trojan usually carries traffic over a standard TLS connection, with a password as its core authentication method. Its configuration may look simple, but TLS fields determine whether the connection can be established. server is the actual connection address, while servername or SNI supplies the hostname used in the TLS handshake; they may be the same or different. When connecting through a domain, DNS resolution, certificate validity and hostname matching must all succeed. If a subscription replaces the domain with an IP address but fails to preserve the correct servername, TCP may be reachable while TLS verification fails.
Some users enable skip-cert-verify immediately to bypass certificate errors, masking problems with the domain, certificate chain or system clock. A safer order is to verify the device clock, check that servername matches the certificate name, and then inspect the server certificate chain and network path. Adjust verification only when you understand why it fails and accept the associated risk. Trojan can also use WebSocket or gRPC as its carrier. Troubleshoot it like VMess: verify TLS first, then check path, Host or service-name, and finally inspect UDP and policy-group behavior.
VLESS: less protocol overhead, with security delegated to the transport
VLESS also comes from the V2Ray ecosystem, but unlike VMess it does not provide the same encryption mechanism at the protocol layer. Confidentiality and identity verification usually come from TLS or another secure transport. It authenticates with a user identifier, and common fields include uuid, flow, network, tls, servername and transport-specific options. Its simpler protocol-layer handling makes VLESS popular for flexible transport combinations, but lighter fields do not mean that secure transport can be omitted.
VLESS compatibility issues tend to center on extensions. Different kernels may support flow, Reality, client fingerprints, transport details and UDP behavior at different times. mihomo supports several VLESS extensions, but the exact usable fields should be checked against the current kernel documentation and runtime logs. When a subscription contains unknown fields, the parser may ignore them or reject the entire node. Ignoring a field is harder to notice: the node appears imported but fails at runtime. Before moving to another client, confirm that important extensions survived conversion.
proxies:
- name: "SS baseline"
type: ss
server: example.com
port: 443
cipher: aes-128-gcm
password: "your-password"
udp: true
The example above shows only the minimum structure of an SS node, for identifying field relationships. The actual address, port, password and encryption method must come from the server configuration. YAML is indentation-sensitive, and fields under a list item must remain at the same level. Passwords containing colons, hash marks or other special characters should be quoted. Configuration-load failures and connection failures are different problems: check YAML syntax and field names for the former, then network access, authentication and server status for the latter.
03 · QUIC TRANSPORT
Hysteria2 and TUIC: QUIC options for unstable paths
Why use QUIC as the foundation
A traditional TCP connection is maintained by the operating system, which handles congestion control and retransmission state while the proxy protocol carries application data on top. QUIC runs over UDP and implements reliable delivery, encrypted handshakes and multiplexed streams in user space. It can reduce head-of-line blocking between logical streams and handle connection migration more flexibly. When a phone switches from Wi-Fi to cellular, its egress address changes or the link experiences brief packet loss, a well-designed QUIC implementation may recover faster than rebuilding a complete TCP and TLS connection.
These capabilities are not free benefits. Some networks restrict or shape UDP, while enterprise networks, firewalls and public hotspots may block the relevant ports outright. User-space QUIC processing consumes CPU and creates timer, acknowledgment and keep-alive activity. On low-end devices or phones running in the background for long periods, the resource cost may exceed that of a simple TCP node. To judge whether Hysteria2 or TUIC fits, first confirm that the UDP path is stable, then compare recovery and variance in real workloads rather than a single large-file speed test on an ideal network.
Hysteria2: throughput-oriented congestion control
Hysteria2 uses QUIC and is designed around transport control for high-loss, high-latency paths. Configurations typically include a server address, authentication details, a TLS hostname, and optional bandwidth, obfuscation or certificate-verification settings. In mihomo, the common node type is hysteria2. Depending on the subscription format, the authentication field may be expressed as password or auth; the parser must map the naming correctly. When a connection fails, first distinguish unreachable UDP, TLS failure and authentication failure because each requires a different fix.
Do not casually set Hysteria2 bandwidth parameters to the device's speed-test maximum. Congestion control must adjust sending to the path capacity. An overly large declared value can increase queues, packet loss and jitter, while an overly small value limits usable throughput. If the provider generated a complete subscription, keep its parameters initially; adjust them only when managing both ends with ongoing tests. For video downloads, observe average speed and buffer stability over time. For voice or interactive traffic, prioritize jitter, retransmissions and network-switch recovery over peak speed.
TUIC: low-latency connections over UDP
TUIC is also built on QUIC. Common configuration fields include uuid, password, server, port, sni, alpn, udp-relay-mode and congestion-control options. Field combinations can vary between server generations and kernel implementations, so pay particular attention when importing older subscriptions. If only one of uuid and password is retained, or ALPN differs from the server, the connection ends during the handshake or authentication stage. For certificate-hostname errors, check sni first; for a direct timeout, verify the UDP port and network path.
TUIC is attractive for UDP workloads, but that does not mean every application should be forced through TUN. A system proxy usually covers applications that support HTTP or SOCKS, while TUN takes over a broader range of IP traffic. If you only need a proxy for a browser and common desktop applications, a system proxy generally costs less and is easier to troubleshoot. Consider TUN for games, command-line tools or applications that ignore system proxy settings. Protocol choice and traffic interception are independent variables; choosing TUIC does not require enabling every interception feature.
| Item | Hysteria2 | TUIC | What to check |
|---|---|---|---|
| Underlying transport | QUIC / UDP | QUIC / UDP | Does the network allow the target UDP port? |
| Authentication | Usually a password or authentication string | Usually a UUID and password | Did subscription conversion preserve every field? |
| TLS | SNI, certificate verification, ALPN | SNI, certificate verification, ALPN | Are the hostname and system clock correct? |
| Tuning | Declared bandwidth and congestion control | Congestion control and UDP relay mode | Keep defaults first, then test one variable at a time |
A standard troubleshooting path for QUIC nodes
First, use the same network to test a known-good TCP node and confirm that DNS, rules and the client itself work. Second, check whether the target UDP port may be restricted by the current network. Compare another Wi-Fi or cellular network if possible, without changing node parameters at the same time. Third, read kernel logs: timeouts usually indicate reachability, TLS errors point to SNI, certificates or time, and authentication failures require checking the password and user identifier. Fourth, confirm that the client bundles a mihomo kernel supporting the node type and that subscription conversion preserved ALPN, congestion-control and UDP fields.
If Hysteria2 or TUIC keeps failing on one network while TCP remains stable, do not force the issue through parameter tuning. Keep an SS, Trojan or VLESS over TCP node as a fallback. Selection should allow different policy groups for different networks: use a verified QUIC node on home Wi-Fi and switch automatically or manually to TCP on restricted public networks. This makes network-path differences explicit instead of trying to cover every environment with one parameter set.
04 · PERFORMANCE
Connection speed, resource use and mobile battery life
Connection setup time and sustained throughput are different metrics
Web page load time reflects DNS, TCP or QUIC handshakes, TLS, server processing and the number of page resources. A lighter protocol handshake can reduce only part of that time. If DNS is slow or a page connects to many domains, a node's single-connection advantage may not translate into a noticeable experience. Sustained downloads depend more on path capacity, congestion control and the server's egress. Repeat short-connection tests across multiple targets while minimizing cache effects; run sustained transfers long enough to see whether speed remains stable, periodically drops to zero or recovers after a network change.
Multiplexing also needs careful interpretation. Putting multiple logical connections on fewer underlying connections can reduce repeated handshakes, but congestion or interruption of an underlying connection affects more traffic. Multiplexing over TCP can still be affected by loss recovery on one TCP connection. QUIC's multi-stream design reduces blocking between streams but adds user-space state management. Multiplexing may help with many short requests, while the benefit may be limited for a few long, high-volume connections. Neither enabled nor disabled should be treated as an absolute rule; test according to the application type.
CPU, memory and encryption overhead
SS resource use depends on the cipher, processor instruction set and concurrency. Desktop CPUs with hardware acceleration can process common AEAD algorithms efficiently, while some low-power architectures favor other algorithms. Trojan, VMess over TLS and VLESS over TLS all incur TLS processing; actual overhead also depends on whether the transport uses WebSocket, gRPC or additional multiplexing. In addition to encryption, Hysteria2 and TUIC maintain QUIC acknowledgment, retransmission, congestion and stream state in user space.
Memory use is rarely determined by the protocol name alone. Connection count, rule-set size, DNS cache, TUN routing, log level and provider count can make a larger difference than a single node. When a router is under memory pressure, first remove unnecessary rule sets, shorten excessive provider chains and limit verbose logging before comparing protocols. On desktops, watch for sustained growth during long runs instead of recording only the startup value. When usage rises abnormally, preserve the configuration structure and reproduction steps; that is more useful for diagnosis than simply declaring one protocol “more memory-hungry.”
Mobile battery drain is driven mainly by wakeup frequency
Phone battery life depends not only on encryption work but also on how often the wireless module and CPU wake up. Frequent node health checks, short DNS caches, continuous logging, background speed tests and aggressive keep-alive settings all increase wakeups. Even tiny per-event workloads can materially affect standby time when accumulated over hours. QUIC-based nodes may send keep-alives to maintain NAT mappings, while TUN mode processes more system traffic; with many background applications, these factors compound.
Optimize global behavior before changing protocols. Set health-check intervals to a reasonable value that meets failure-detection needs, avoid having multiple providers probe at high frequency, keep only the policy groups you use, restore normal logging after debugging, prefer a system proxy when full traffic interception is unnecessary, and make sure the LAN-access setting matches actual needs. Only then compare TCP and QUIC nodes during the same period. Keep screen brightness, app activity and network type similar during testing, or system scheduling differences may hide protocol differences.
| Usage state | Main source of overhead | What to observe | Adjust first |
|---|---|---|---|
| Foreground browsing | DNS, short connections and rule matching | Time to first byte and failed retries | DNS and rule matches |
| Video or downloads | Continuous encryption and congestion control | Average throughput and buffer stability | Node path and protocol baseline |
| Screen-off background use | Keep-alive, health checks and app wakeups | Standby drain and reconnection frequency | Check intervals and log level |
| TUN interception | Full-system traffic handling and DNS mapping | CPU wakeups and unexpected app traffic | Routing scope and exclusions |
Create repeatable test records
A test sheet should record at least the device, operating system, client, kernel, network type, interception method, DNS mode, node protocol and test period. Change one variable at a time: for example, keep rule mode and system proxy fixed while swapping SS and Hysteria2 nodes; in the next round, keep the node fixed and compare system proxy with TUN. Record both success rate and error type for every round. If two of five connections time out, the node is unsuitable as the sole member of an automatic selection group even if its successful runs are very fast.
On mobile, observe at least one full day of normal use and check the system battery page for the client's foreground and background activity. A few minutes of runtime cannot represent standby keep-alive costs. When battery use is abnormal, stop all active health checks and disable verbose logging first, then restore settings one by one to identify the wakeup source. For further background-use and power-saving steps, read How to reduce Clash battery drain on phones.
05 · CORE FAMILY
How the original Clash, Clash Meta and mihomo fit together
The original Clash established the configuration model
The original Clash established the widely used YAML configuration model: proxies define nodes, proxy-groups organize selection, health testing and fallback, rules match traffic in order, and proxy-providers and rule-providers load content from external sources. Concepts such as system proxy, mixed-port, DNS and rule mode also became common interface foundations across many clients. Many subscriptions and tutorials still use this structure, so even though the original kernel is no longer maintained, its configuration semantics remain the starting point for understanding ecosystem compatibility.
The original supported a limited range of protocols and extensions. Later features such as VLESS, Reality, Hysteria2, TUIC, richer DNS, TUN and rule capabilities should not be assumed to run on the original kernel. A configuration using only SS, VMess, Trojan and basic rules may appear broadly compatible; once Meta extension fields are added, the kernel must be identified explicitly. Check node type, enhanced DNS options, TUN fields and rule types when determining configuration ownership instead of relying on whether the filename is config.yaml.
Clash Meta extends protocols and network capabilities
Clash Meta extends the Clash configuration model with more protocol, transport, DNS, TUN and rule capabilities, partly to keep migration costs manageable for common configurations. It supports more node types from different ecosystems, allowing one kernel to handle SS, VMess, Trojan, VLESS, Hysteria2, TUIC and other configurations. For users, the most visible change is that new protocols in a subscription no longer require a separate core for each protocol. For client developers, it provides a more unified control surface for building policy, connection and logging interfaces.
Compatibility still works in one direction. Basic Clash configurations generally migrate more easily into Meta-family kernels, while configurations using Meta extensions cannot be assumed to run on the original kernel. Even when field names match, defaults and edge behavior may change as implementations evolve. During a cross-kernel migration, first verify that the configuration loads, then check DNS, rules and UDP behavior, and finally test each node type. Do not rewrite rule sets and node formats at the same time, or you will not know whether a failure comes from the kernel or the configuration change.
mihomo is the current continuation name
mihomo is the name adopted later by the Clash Meta project. Many graphical clients still use Clash, Meta or Clash Meta as ecosystem labels, while the bundled core may be identified as mihomo. Distinguish the project's historical name, the client brand and the actual core binary. Clash Plus, Clash Verge Rev, FlClash and Clash Nyanpasu can provide interfaces around mihomo; Clash Meta for Android retains Meta in its name. Different names do not mean the configuration ecosystem is completely fragmented. The key factors are the kernel build and the fields it supports.
Choose a package based on the device platform and maintenance status. The downloads page recommends Clash Plus first and also lists clients available for Windows, macOS, Android, iOS and Linux. Users comfortable with command lines, servers or routers can run the mihomo kernel directly, but must manage configuration, service startup, logs and upgrades themselves. For ordinary desktop and phone users, a graphical client makes system proxy settings, TUN permissions, configuration updates and policy switching easier. See client comparisons and the package downloads for specific combinations.
| Kernel branch | Role | Protocol coverage | Configuration migration notes |
|---|---|---|---|
| Original Clash | Foundational configuration model and rule system | Traditional protocols and basic proxy features | Do not assume support for Meta extension fields |
| Clash Meta | Extended protocol, DNS, TUN and rule capabilities | Covers extensions such as VLESS, Hysteria2 and TUIC | Basic configurations migrate directly; reverse migration requires trimming |
| mihomo | Current continuation of Meta-family projects | Continues support for multiple protocols and extensions | Confirm fields and defaults against current documentation |
Client versions and kernel capabilities are not the same thing
A graphical client update may change only the interface, configuration management or system integration, or it may also replace the kernel. A kernel update may add protocol fields, fix connection problems or change defaults. Record both when troubleshooting compatibility instead of saying only that “Clash does not work.” Logs often show the core name or startup information, and the client's About page may provide kernel details. If the same subscription behaves differently in two clients, compare kernel types and parsed configurations first, then system proxy, TUN permissions and DNS settings.
Replacing kernel files manually requires caution. A graphical client may depend on fixed core filenames, startup arguments, control ports and permissions; overwriting files directly can prevent startup or stop the interface from connecting to the core. A safer approach is to use the client's kernel-update mechanism or run mihomo from a separate directory for comparison. For a standalone server deployment, use a service manager to control startup order and automatic recovery, and validate the configuration before reloads so a syntax error does not interrupt existing connections.
mihomo -t -f config.yaml
mihomo -d ./profile
The first command checks the specified configuration file, while the second illustrates starting from a separate working directory. The executable name and path depend on the platform and installation method. A successful configuration check only means that syntax and known fields can be read; it does not prove that every remote node is reachable. After startup, verify network behavior through logs, policy groups and actual requests.
06 · SUBSCRIPTIONS
Subscription formats, configuration compatibility and field fidelity
Node links, node lists and complete configurations
“Subscription” can refer to three different things. The first is a list of protocol links, such as ss, vmess, trojan or vless links; the client or conversion service parses them into Clash nodes. The second is an already converted proxies list containing nodes but no complete rules or DNS settings. The third is a complete Clash or mihomo configuration containing proxy-groups, rules, rule-providers, dns, tun and other sections in addition to nodes. Identify the type before importing to avoid treating a full configuration as a node provider or overwriting local rules with a subscription update.
Node links are convenient for moving data between tools, but not every extension has a standardized representation. VLESS flow and Reality fields, Hysteria2 bandwidth and obfuscation parameters, and TUIC authentication and congestion-control options may be lost depending on the link format, generator or converter. Complete YAML can express more fields but makes its dependency on the target kernel clearer. When moving complex configurations among mihomo clients, retaining YAML is usually more reliable than repeatedly converting to share links.
proxy-providers manage sources, not protocol conversion
proxy-providers let mihomo load a node collection from a file or URL and update it at a chosen interval. They separate node sources from the main configuration, allowing multiple policy groups to reference the same provider. A provider health-check can periodically access a test URL to assess node availability, but its frequency affects network requests and mobile battery use. A provider reads content that the target kernel can parse; placing an incompatible format inside a provider does not automatically convert arbitrary protocols.
proxy-providers:
primary:
type: http
url: "https://example.com/subscription.yaml"
path: ./providers/primary.yaml
interval: 21600
health-check:
enable: true
interval: 1800
url: "https://www.example.com/"
The domain in the example represents structure only. Replace url with the actual subscription address and avoid publicly sharing links containing access credentials. path points to a cache file under the kernel's working directory; interval is the update period, while health-check interval is the health-check period. These are different settings. Use a stable, lightweight test address comparable to the real network target. If several providers use very short check intervals, the client will create continuous background connections, so mobile devices require particular care.
Conversion is most likely to lose extension fields
Subscription conversion usually involves three steps: parsing the source format, mapping fields and generating the target YAML. Common fields for SS, VMess and Trojan map relatively well, while plugins, gRPC, Reality, client fingerprints, Hysteria2 and TUIC extensions are more constrained by converter capabilities. After conversion, sample at least one node of each protocol and compare key fields such as server, port, uuid or password, network, tls, servername, alpn, flow and udp. Do not compare node counts alone; equal counts can still hide missing fields.
Node names can also affect management. A converter may rename nodes to remove duplicates, while proxy-groups that still refer to old names will fail with a missing-proxy error. Referencing node collections through providers reduces name coupling, but rule targets and policy-group names must still exist. During a full migration, check the policy group targeted by every rule first, then the nodes or providers referenced by each group, forming a reference chain from rules to proxy-groups to proxies.
Valid YAML can still contain semantic errors
YAML validation can detect indentation, duplicate structures and type problems, but it cannot confirm that a remote address, password, SNI or rule target is correct. Common semantic errors include ports written as strings that some parsers reject, inconsistent boolean values, duplicate policy-group names, rules pointing to nonexistent groups, provider paths without write permission, and nodes enabling UDP unsupported by the server. Run the kernel's configuration check first, then start it and watch the first provider update, DNS initialization and node-handshake logs.
When a provider maintains the complete subscription, local changes may be overwritten on the next update. Rules that must persist should go in the client's supported override, merge or local configuration layer rather than directly editing a remote cache file. Override names and capabilities differ between clients, so export local rules before migrating. Clients such as Clash Plus can simplify configuration management, but you still need to distinguish the remote subscription, generated runtime configuration and local overrides, and confirm which layer is actually active during troubleshooting.
| Content form | Best use | Main risk | Migration advice |
|---|---|---|---|
| Protocol share link | Transfer one or a few nodes | Incomplete representation of extension fields | Verify key parameters after import |
| Node YAML | Source for a proxy-provider | Does not include policy groups or rules | Keep a separate main configuration |
| Complete configuration | Replicate a complete runtime environment | Depends on specific kernel extensions | Check the kernel first, then migrate in layers |
| Converted subscription | Connect ecosystems using different formats | Fields, names or types may be lost | Sample each protocol instead of checking counts alone |
07 · USE CASES
Choose protocols by device and network scenario
Desktop work and everyday browsing
Windows, macOS and Linux desktops generally have ample processing power, so prioritize stability and maintainability. If SS, Trojan, VMess or VLESS already runs reliably, there is no need to switch merely because a newer protocol name appears. Browsing and collaboration software mainly generate short connections, DNS queries and TLS requests. Accurate rules, stable DNS responses and a correctly configured system-proxy port often matter more than small performance differences between protocols.
For clients, this site recommends Clash Plus first on each platform, while also offering Clash Verge Rev, FlClash and Clash Nyanpasu. After choosing a GUI, establish a baseline with rule mode and the system proxy; enable TUN only when an application ignores the system proxy or broader traffic interception is needed. Create one manual-selection group and one automatic-fallback group for protocol nodes. Use a verified node by default and switch during failures instead of running frequent automatic tests that cause connection fluctuations.
Mobile networks and frequent access-point changes
Android and iOS devices encounter screen-off states, background restrictions, Wi-Fi-to-cellular switching and changing NAT mappings. When UDP is friendly on the current network, Hysteria2 or TUIC can be candidates for network-switch recovery and real-time UDP. When public networks frequently restrict UDP, keep Trojan, VLESS over TCP, VMess or SS as fallbacks. Avoid putting many nodes into a high-frequency automatic test group on mobile: more nodes and tighter checks mean more background wakeups.
Test foreground browsing, messaging, screen-off recovery and network switching separately. If a QUIC node recovers quickly after switching networks but increases screen-off battery drain, lengthen health-check intervals, reduce policy groups and inspect keep-alive settings. If it remains unsuitable, use a TCP node by default and reserve QUIC for real-time traffic or specific networks. Protocol choice need not be permanent; policy groups can switch it according to usage state.
Video, large files and sustained transfers
For sustained transfers, focus on average throughput, speed variance and long-connection stability. On high-loss paths, Hysteria2 congestion control may maintain throughput more easily, and TUIC can also use QUIC's multi-stream and recovery features. Server egress, line capacity and destination limits remain the ceiling. On stable, low-loss networks, well-configured SS, Trojan or VLESS can deliver equally reliable results with lower resource costs and a more direct troubleshooting path.
Do not chase speed by enabling multiplexing, changing bandwidth declarations, switching TUN and replacing DNS at the same time. Fix interception and DNS first, then compare protocol nodes; once a node is selected, test multiplexing; only then adjust congestion parameters. Preserve the result after each step. If speed periodically drops, check for packet loss, reconnects, policy-group changes or DNS updates. Only single-variable records can show where an improvement came from.
Real-time voice, gaming and UDP applications
Real-time workloads are sensitive to jitter and loss recovery; peak bandwidth is usually not the main metric. First confirm that the application traffic actually passes through Clash: some applications ignore system proxies and require TUN or their own proxy settings. Then confirm that the node declares udp: true and that the server supports UDP relay. Hysteria2 and TUIC use QUIC and are suitable candidates, but poor UDP paths affect them too. UDP support for SS, Trojan, VMess and VLESS depends on the kernel, node configuration and server implementation.
Do not choose a gaming node using only a browser speed test. Observe whether the actual session stays connected, whether map changes or rematching cause disconnects, and how it recovers after NAT changes. If LAN discovery, printing or casting breaks after enabling TUN, check private-address rules and route exclusions instead of changing protocols. Real-time policy groups should contain a small number of verified nodes and avoid switching egress during a session.
Routers, servers and low-resource devices
These devices are constrained first by CPU architecture, memory, storage writes and service management. A basic SS configuration is usually useful for establishing a resource baseline. Trojan or VLESS over TLS can be candidates when TLS transport is required; Hysteria2 and TUIC should be tested on the target hardware for user-space QUIC overhead. Do not infer performance on low-end ARM or other architectures from protocol documentation alone. Rule-set size, DNS cache and connection concurrency also consume resources, so trim rules and providers when necessary.
When running mihomo directly, include configuration checks, startup, log rotation and failure recovery in service management. A router acting as a LAN gateway must also handle forwarding, firewall rules and DNS correctly, making the problem space larger than a desktop system proxy. If only a few devices on the same Wi-Fi need a proxy, first read LAN shared proxy setup and assess whether mixed-port and allow-lan are sufficient before deploying transparent interception.
| Scenario | First candidates | Fallback direction | Key checks |
|---|---|---|---|
| Desktop browsing and office work | Parameter-complete SS, Trojan, VMess or VLESS | Hysteria2 or TUIC | DNS, short-connection success rate and system proxy |
| Mobile networks | Verified Hysteria2, TUIC or a stable TCP node | Keep a TCP fallback that works across networks | Network-switch recovery, background battery use and UDP reachability |
| Sustained downloads | A node with a stable path and high average throughput | Change the path before tuning congestion parameters | Long-run variance, reconnects and server capacity |
| Real-time UDP | Hysteria2, TUIC or a node confirmed to support UDP | A small set of fixed fallback nodes | Jitter, session continuity and TUN routing |
| Low-resource devices | Simple configuration and trimmed rules | Benchmark QUIC on the actual hardware | CPU, memory, concurrency and log writes |
08 · MIGRATION
Protocol testing, configuration migration and troubleshooting
Build a recoverable minimal configuration before migrating
When moving from an older client to Clash Plus, Clash Verge Rev, FlClash or another mihomo client, keep the old working configuration and do not delete it immediately. In the new client, import only one node or one provider and create minimal rules containing DIRECT, a single proxy and MATCH. Confirm that the core starts and DNS and the system proxy work before adding full policy groups, rule sets and TUN. This separates installation, kernel compatibility and complex-configuration problems.
When moving an original Clash configuration to mihomo, most basic fields can continue to work, but still check DNS and TUN defaults. For the reverse migration, remove VLESS, Hysteria2, TUIC and other nodes unsupported by the original, along with Meta extension rules. Update policy-group references at the same time or the configuration will fail when a target is missing. Copy the file before any batch change, run the kernel check command, and only then replace the active configuration.
Read logs by phase
Startup logs answer whether the configuration can load. Focus on YAML parsing, unknown fields, provider files, listening ports and TUN permissions. Update logs answer whether remote content can be fetched and parsed; check subscription requests, response format, cache paths and node counts. Connection logs answer whether traffic matches a rule and completes its handshake; check rule targets, node names, DNS, timeouts, TLS and authentication. Mixing these phases leads to false conclusions: a successful subscription update does not prove that a node handshake succeeded.
The common dial tcp timeout means a TCP connection did not complete within the allowed time. Possible causes include an unreachable address, blocked port, abnormal DNS result or a server that is not listening. connection refused means the target actively rejected the connection, so check the port and service first. TLS errors require checking the system clock, servername and certificate. authentication failed points to a password, UUID or authentication string. If a QUIC node repeatedly times out, switch networks first to assess the UDP path, then check protocol parameters. For more log examples and troubleshooting order, see How to read Clash runtime logs.
Check ports, system proxy and TUN in layers
mixed-port is commonly used to provide HTTP and SOCKS entry points together. When the system proxy is enabled, the operating system must point to the address and port the client is actually listening on. If another program already occupies the port, the kernel may fail to start; an enabled switch in the interface does not prove that a listener exists. Close other proxy tools first and check listening errors in the logs. LAN sharing also requires allow-lan, firewall access and a correct listening address; entering the local machine's address on another device is not enough.
TUN operates at a lower interception layer and requires system permissions, a virtual network adapter or the relevant network extension. If enabling it removes network access, disable TUN and return to the system-proxy baseline. If the system proxy works, the node, subscription and basic DNS are probably fine; the issue is more likely TUN permissions, routing or DNS interception. Re-enable TUN and check automatic routes, interface selection, private-address exclusions and DNS mode one at a time. Do not change the protocol node while TUN is failing, or you will lose a useful control.
Replace protocols one variable at a time
When switching from VMess to VLESS or from Trojan to Hysteria2, keep the target service, client, rules, DNS and interception method as consistent as possible. First confirm that the new node connects by itself in a manual-selection group, then add it to an automatic-test or fallback group. Test browsing, sustained downloads, UDP applications and network-switch recovery, and record errors. If the new protocol is better only for one workload, create a dedicated policy group instead of replacing the global default all at once.
Tune complex protocols in layers: use subscription defaults in round one; adjust only transport options in round two; consider multiplexing, bandwidth or congestion control in round three; and handle TUN and DNS last. Each round must be reversible. If performance drops after tuning, undo the most recent change instead of adding more settings. Reversibility is an important production property because it provides a clear way back when updating the kernel, switching clients or changing networks.
mode: rule
mixed-port: 7890
allow-lan: false
log-level: info
rules:
- DOMAIN-SUFFIX,example.com,DIRECT
- GEOIP,LAN,DIRECT
- MATCH,PROXY
This fragment shows a basic troubleshooting structure: rule mode, mixed port, LAN access, a normal log level and three rules. A real configuration also needs a policy group or proxy named PROXY. Rules are matched in order, so specific domains should come before broader GEOIP and MATCH rules. If logs show that a target matched DIRECT, stop troubleshooting the proxy handshake and correct the rule target first.
Create a final selection record
After testing, record each default node's protocol, transport, TLS hostname, suitable networks, UDP support, associated provider and fallback node. Do not save passwords or other sensitive content; record only structural information needed for diagnosis. On mobile, also note whether TUN is enabled, the health-check interval and background restrictions. On routers, record the core architecture, service startup method and rule-set source. After the next client or kernel update, retest against the same record rather than choosing again by intuition.
A final configuration does not need to cover every protocol. One or two stable TCP nodes, one verified QUIC node and clear policy groups are enough for most desktop and mobile scenarios. Too many nodes increase health-check, naming and troubleshooting costs. The purpose of this guide is not to require every technology at once, but to explain the problem each option solves, the conditions it depends on and the fallback path when it fails.
Checklist before applying the default configuration
- The kernel is clearly identified as mihomo, and the client matches the device platform.
- Key protocol fields remain present after subscription import and conversion.
- At least one TCP fallback node has been verified on different networks.
- The target UDP port for Hysteria2 or TUIC has been confirmed reachable.
- TUN is enabled and troubleshot only after the system-proxy baseline works.
- The health-check interval balances mobile battery life with failure detection.
- Rule targets, policy groups, nodes and provider references all resolve correctly.
- Configuration validation passed, followed by browsing, sustained-transfer, UDP and network-switch tests.