Field excerpts, not a complete configuration. Override keys are interpreted by the client.
Platforms5CoremihomoLicenseGPL-3.0ConfigYAML
FIELD REFERENCE / CONFIG
The six most-edited sections in config.yaml
Understand inputs, exits, and matching order before changing settings. Ports accept connections, nodes provide proxies, groups organize exits, and rules decide where traffic goes.
These snippets explain individual fields; don't combine them and use them as-is. Node names, group names, and rule targets must match. Check which extensions your core and client support.
Browsers and other apps need a local proxy endpoint. mixed-port accepts both HTTP and SOCKS connections on the same port. Check the listening port shown by your client, then enter it in the app’s settings; this is not the proxy server’s port. If startup logs report that the address is already in use, quit the other proxy process before choosing a different port. Keep LAN access off when using the proxy only on this device. The rule mode routes traffic according to rules, but it does not mean the system is already sending traffic to the core. Configure the system proxy or TUN separately.
If a node connects but websites won't load, check DNS first. With core DNS enabled, fake-ip can associate domains with subsequent connections, allowing rules to route by domain—but only if the app's DNS requests actually use this path. The example below doesn't include TUN DNS interception settings. Don't stack DNS settings from multiple sources without checking them, especially whether an upstream resolver depends on a proxy that isn't up yet. If local device names or particular apps have compatibility issues, configure filters for those cases rather than excluding every domain.
A proxy node is a set of connection parameters, not a server entry where you can freely swap the protocol name. The proxies type determines which fields are required; use the address, port, encryption method, and credentials provided by your service. The example below uses a documentation address and sample password, so it won't establish a real proxy connection. Keep node names unique because groups refer to them by name. The udp setting allows a node to handle relevant traffic, but whether it works depends on the server, protocol, and how the system routes traffic. When updating a subscription, check whether manually added nodes will be overwritten.
Rules usually point to a proxy group rather than naming a node directly. proxy-groups provides a stable layer of indirection: select lets you choose manually, url-test picks based on test results, fallback checks exits in order, and load-balance distributes connections according to an algorithm. A low latency result doesn't guarantee fast downloads or access to a particular service. If you're new to this, start with one manual group, confirm your nodes work, then try automatic strategies. Node names in the example must match those in your node list. Groups can reference other groups, but circular references aren't allowed.
rules are evaluated in order, and the first match usually determines the exit. Put specific domain rules before broad geographic rules. DOMAIN-SUFFIX matches a domain and its subdomains; DOMAIN-KEYWORD is broader and can catch unrelated domains. GEOIP relies on IP geolocation data, which may not reflect a website's business location. Use MATCH last to catch everything else. After making changes, check the matched rule in the connections panel before adjusting the order. Repeatedly switching to global mode can mask problems in your routing rules.
Editing a downloaded subscription file directly often means losing your changes at the next update. A client's override, merge, or scripting features can save local rules separately and generate a final configuration for the core. prepend-rules and append-proxies are client-specific merge conventions, not universal fields understood by every core. The example below shows a merger format that supports these keys; check your client's documentation before using it. Prepended rules take priority. Appending nodes doesn't automatically add them to a group. To confirm the changes took effect, inspect the merged runtime configuration—not just the source file in the editor.
Choose your operating system, then check your processor architecture. A graphical client handles subscription imports, configuration management, and core controls. With a command-line core alone, you'll also need to manage the config path, startup options, and system service. For everyday desktop and mobile use, a graphical client is usually the easier place to start troubleshooting.
For desktop users who want a system tray, system proxy controls, and visual rule panels. The download page lists clients including Clash Plus, Clash Verge Rev, and FlClash, and retains an archived guide to Clash for Windows.
When migrating from an older client, back up your subscription URL and custom rules first—don't copy the entire application folder. If the app launches but other apps aren't proxied, check the system proxy toggle, listening port, and each app's proxy settings before considering TUN.
Check About This Mac to see whether your Mac has Apple silicon or an Intel processor, then choose the right installer. Clash Plus, Clash Verge Rev, and FlClash offer different interfaces and configuration workflows. Check the download page for current system requirements.
System proxy settings and terminal environment variables are separate routes. A working browser connection doesn't mean command-line tools are using the proxy; if terminal requests fail, check which proxy options the tool supports. Installing a helper service requires permissions—follow the client's prompts step by step.
Mobile users can choose from Clash Plus, Clash Meta for Android, FlClash, and Surfboard. Subscription format support varies between clients. A successful download only means the file was retrieved; it doesn't mean every field in it is supported.
On first connection, approve the system VPN request. If the connection drops after the screen locks, check battery management and background activity restrictions. Another app using the VPN connection may also cause conflicts. For per-app routing, check whether the selected apps belong in the include or exclude list.
The download page links to Clash Plus on the App Store and lists the official site, clashplus.io. After installing, follow the interface prompts to import a supported configuration. Make sure a selectable node is available in the proxy groups, then allow the app to add a VPN configuration.
Switching between Wi-Fi and cellular can change DNS resolution and available proxy exits. If a page stays stuck loading, first determine whether the subscription failed to refresh, the node failed to connect, or the rule for a particular domain is wrong. Don't assume desktop client scripts will work on mobile too.
For desktop, consider Clash Verge Rev or FlClash; for servers and routers, consider the mihomo core. Check the package format, processor architecture, and distribution environment together—seeing Linux in the filename isn't enough.
Command-line tools usually need proxy environment variables set separately; system services don't automatically inherit your current terminal settings. Before enabling transparent proxying, verify the connection through the local proxy port first, then check routing, DNS, and firewall settings. Avoid changing several layers of the network at once.
Installers provide the runtime; subscriptions provide connection settings. This site covers clients and configuration, but you'll still need a valid, authorized node or subscription. Don't expose subscription URLs or credentials in public screenshots, support requests, or shared configurations.
These three names often appear together, but they refer to different things. Choose a client for its usability, check core documentation for configuration fields, and inspect the active configuration when troubleshooting. Separating these layers helps uncover the real cause behind problems that might otherwise seem fixed by switching apps.
Clash popularized a way of working built around a rule-driven proxy core and YAML configuration. After the original Clash project and some early graphical clients stopped receiving updates, the community continued in different directions: some projects focus on interfaces and subscription management, while others extend core protocols and rule capabilities. So “Clash configuration” is a common term in the ecosystem, not a promise that every app supports the same fields.
With Clash for Windows no longer maintained, choose an alternative based on active maintenance, OS support, and migration effort—not just a familiar interface. Menu locations, helper service setup, and default field values in older tutorials may no longer apply. Keep old configurations for reference, but after importing one, check how it parses, how groups reference nodes, and how it takes over system traffic.
The interface and core handle different layers
Graphical clients usually handle subscription downloads, configuration switching, tray controls, and log display. Cores such as mihomo interpret the configuration, match rules, resolve domains, and establish connections. A toggle in the interface doesn't guarantee a field with the same name exists in the config file; conversely, a core-supported extension may not be editable in every client's interface. When consulting documentation, check both the client name and core type.
mihomo extends the configuration approach used across the Clash ecosystem. The project is licensed under GPL-3.0; its source code, changes, and issue discussions are available in the repository. That license applies to the open-source project in question, not automatically to every third-party interface, app store release, or related service. This site organizes community resources; each project remains responsible for its own releases, store listings, and feature scope.
Review changes before updating; verify results afterward
Client updates, core updates, and subscription refreshes are three different things. A client update may change the interface or system integration; a core update may affect field parsing or connection behavior; a subscription refresh mainly changes the sources of nodes and rules. When something goes wrong, note which layer changed most recently. Don't blame a subscription issue on the installer or repeatedly reinstall the app over a single dead node.
A safer approach is to keep a working configuration, change one category of settings at a time, reload, check the logs, and then test the target app's actual requests. When testing nodes, keep conditions consistent. For connection failures, record the time, target domain, and matched rule. Remove server credentials and subscription details before sharing logs. Reproducible steps are usually more helpful than a screenshot showing only a red error.
Browse source code · Git must be installed locally
git clone https://github.com/MetaCubeX/mihomo.git
Cloning is for reading source code and documentation; it doesn't install a client or provide working proxy nodes. For everyday use, choose a graphical client from the download page.
RECENT ARTICLES / NOTES
Subscription imports and connection troubleshooting
First identify whether the problem is fetching the configuration, parsing it, or establishing a connection. These articles focus on specific scenarios, so you don't need to read the entire field reference first. Start with the error and your actual configuration to find the next step.
Find subscription import options across clients and compare full YAML configurations, Base64 node lists, and single-node links. Identify the format before importing directly or using a conversion tool, so an incompatibility isn't mistaken for a broken link.
Troubleshoot refresh failures caused by network issues, certificates, expired links, or format incompatibility. Learn when to adjust auto-refresh intervals or refresh through a proxy. A configuration that already connects doesn't mean the subscription server is currently reachable.
Learn log levels and line formats, then troubleshoot connection timeouts, DNS resolution failures, and rules that don't match as expected. Find the entry for your request, then trace the port, node, and rule to avoid unnecessary changes.