mihomo core · Desktop and mobile clients
Clash clientsDownloads and guides
Choose a client for your operating system, manage connections with subscription imports and rule-based routing, and explore configuration guides.
GPL-3.0 licensedmihomo / Clash Meta coreYAML configuration
Rules and menus are illustrative static UI. Setting names vary by client.
Clash Configuration and Connection Management
Explore configuration settings, from subscriptions to outbound policies.
Clash is an ecosystem of tools that uses configuration files to define proxies, policy groups, and routing rules. Graphical clients provide the interface for settings and subscription management, while the core parses configurations, handles connections, and routes traffic. After installing a client, add a subscription or local configuration compatible with its core, then choose an outbound mode. Opening the app alone does not mean your traffic is being proxied.
For your first setup, start with rule mode and the system proxy: make sure the configuration loads, check that a policy group has a working outbound selected, then review rule matches in the connection log. Consider TUN only if you need to handle apps that ignore system proxy settings. These five common configuration areas explain what key fields do; the examples are not complete, ready-to-use configurations.
mode: rule
rules:
- DOMAIN-SUFFIX,github.com,PROXY
- DOMAIN-KEYWORD,google,PROXY
- GEOSITE,category-ads-all,REJECT
- GEOIP,LAN,DIRECT
- GEOIP,CN,DIRECT
- MATCH,PROXY
Rule-based routing sends different traffic to different outbound policies, which is useful for handling developer tools, websites, and LAN services at the same time. Rules are checked from top to bottom; the first match determines the policy. Put more specific domain rules first and leave MATCH as the fallback at the end. In this example, PROXY must be defined as a policy group in the full configuration; DIRECT and REJECT are built-in policies. After making changes, check the matching rule on the Connections page to pinpoint the cause instead of repeatedly switching global modes. Domain-set rules also depend on the relevant rule data being available.
https://example.com/profile.yamlA subscription retrieves a configuration from a specified URL, so you don't have to maintain outbound details by hand. On the client's Profiles page, choose Add or Import and paste a compatible link from your provider. Once downloaded, make it the active profile. A successful import only confirms that the configuration was retrieved; you still need to check policy groups and connection status. The client manages the update interval, and providers may have their own refresh schedule. Subscription URLs often contain personal access credentials. Keep them private and redact them from logs or screenshots before sharing. The example URL shows the format only; it does not provide a working service.
tun:
enable: true
stack: mixed
auto-route: true
auto-detect-interface: true
TUN routes traffic through a virtual network interface and can cover apps that ignore system proxy settings. Before enabling it, confirm that your current subscription connects successfully, then follow the client prompts to install a service or grant network permissions. The stack setting selects a network stack; implementations and available options depend on the core and operating system, so don't judge performance by the name alone. Watch for route conflicts when using other VPNs, virtual machines, or container networks. If LAN access stops working, check routes and DNS, then adjust settings one at a time so you can identify the cause.
mixed-port: 7890
allow-lan: false
bind-address: "127.0.0.1"
# The GUI client sets the system proxy in the operating system
# LAN sharing also requires changes to the listening scope and firewall
System proxy and Allow LAN serve different purposes. The system proxy setting lets apps on this device that follow system settings use the proxy port; Allow LAN lets other devices connect to a service listening on this device. For local use, keep the listener bound to localhost. To share access, enable LAN access as described by your client, then check the bind address, proxy authentication, and firewall scope. On other devices, enter this computer's LAN address and port. Never expose a listening proxy directly to the public internet. Terminal tools may also need environment variables, so the system proxy toggle alone doesn't confirm that they are connected.
mode: rule
log-level: info
ipv6: false
# Manage local settings through the client's override feature
# Don't edit source files directly if subscription updates will replace them
Configuration overrides can preserve local settings such as ports, log levels, and custom rules across subscription updates. Clients that support overrides may offer configuration merging, scripts, or a dedicated override feature, but their behavior for appending lists and replacing fields can differ. Back up the original configuration first. Change one easy-to-verify field, inspect the resulting configuration, then add anything else. Where rules are inserted affects matching order, and replacing DNS or policy groups wholesale can break dependencies in the subscription. When switching clients, check how each one handles overrides rather than copying snippets blindly.
Similar feature names don't mean every client handles settings the same way. GUIs such as Clash Verge Rev and FlClash expose some fields in their settings panels, while others are still managed in YAML. Mobile clients are also subject to the system VPN interface and background restrictions. If you can't find a setting, check the client documentation and supported core features instead of following instructions for another platform. For step-by-step help, see the Clash setup guide. For protocol compatibility and core differences, see Protocol guide.
Download a Clash Client for Your Operating System
Check your operating system and processor architecture before choosing an installer.
Installers and System Requirements
Windows: For a first install, start with Clash Plus, then compare Clash Verge Rev, FlClash, and Clash Nyanpasu based on how you prefer to manage configurations. After installing, import a subscription and set up the system proxy. Grant additional permissions only if you need TUN or service mode. If your browser works but another app doesn't, first check how that app connects to a proxy. For Microsoft Store apps, see Clash UWP loopback setup.
macOS: Apple Silicon and Intel Macs need installers for different architectures. Check About This Mac to identify your chip before downloading. Follow the client-specific instructions to configure subscriptions in Clash Plus, Clash Verge Rev, or FlClash. If you prefer menu bar controls, also check whether the client is still maintained and review its permission prompts. TUN mode may require an additional service; permission to install an app is not the same as permission to create a network interface.
Android: Choose from Clash Plus, Clash Meta for Android, FlClash, and Surfboard. Their configuration formats aren't all the same, so confirm that your provider's format is supported before importing. The first time you connect, Android will ask for VPN permission. If another VPN app is running, resolve the conflict first. If connections drop in the background, check battery optimization and background activity restrictions; increasing the subscription refresh frequency is unlikely to help.
iOS: The download page links to Clash Plus on the App Store and its official website, clashplus.io. Import a compatible configuration in the app, grant the requested network permissions, then check your rules and policy groups. Desktop steps for installing services or setting system proxy ports don't apply directly to phones. Check each client's documentation for the configuration fields it supports.
Linux: Desktop users can choose Clash Verge Rev or FlClash, with an installer that matches their distribution's package system. For servers and routers, run the mihomo core directly and manage configuration files, service startup, and logs yourself. A GUI client is suited to everyday interactive use; a standalone core deployment requires familiarity with file permissions and network routing. For help choosing, see the client comparison guide.
Switching from an Older Client
Archived download links for Clash for Windows and ClashX Meta are available for compatibility with older setups. For a new installation, choose a client that is still maintained. Before migrating, note your subscription source, policy group selections, and local overrides. Reimport them in the new client and check that the configuration parses correctly. Fields recognized by an older interface may no longer be recommended, and newer protocols may require a more recent core. For details on discontinued clients, see archived client notes.
Running multiple clients at once can cause conflicts over the system proxy, listening ports, or TUN routes. Before testing a new client, quit the old one and make sure it has restored the proxy settings; then enable the new settings step by step. If you need to launch at startup, keep only the startup entry you actually use. See how to start Clash at login for the full steps. This helps prevent a misdirected proxy or occupied port after signing in.
The Clash Open-Source Ecosystem and mihomo Core
Understand the difference between clients, cores, and configuration sources, then check compatibility in project documentation.
Core Families and Project Origins
The Clash ecosystem includes the original core, later forks, and GUI clients built around these cores. Clash Meta became a major fork in this evolution, and mihomo continues related core development. Historical names may still appear in client titles, configuration guides, or subscription format options. To determine what a client supports, check the core it actually uses rather than inferring protocol support from the app's name.
mihomo source code and documentation are available through its public project repository, which includes build instructions, configuration references, and issue-tracking resources. The code is licensed under GPL-3.0. Public source code helps explain how features work and why they change, but GUI clients have their own interfaces, release schedules, and permission management. This site organizes ecosystem links and guides; refer to each project for its publisher and specific licensing terms.
Configuration Compatibility and Feature Limits
Configurations typically include proxy entries, policy groups, rules, and DNS settings. A core's support for a protocol doesn't guarantee that the client provides a GUI for configuring it. Conversely, a setting in the interface only works if the core supports it. If an import fails, check the logs for the field or protocol name, then confirm the subscription's output format. Don't treat YAML syntax errors, expired links, and unreachable networks as the same problem.
The basic approach to domain rules often carries over when migrating a configuration, but providers, geodata, network stacks, and DNS fields can differ. Keep a working copy of the original configuration and migrate local changes one at a time to make problems easier to trace. Choose among SS, VMess, Trojan, VLESS, Hysteria2, and TUIC based on server support, network conditions, and device resources. See the protocol and core reference for details.
Updates and Connection Checks
Client updates, core updates, subscription updates, and rule-data updates are separate operations. A client update may change the interface or system integration; a core update affects configuration parsing and protocol support; a subscription update retrieves a fresh configuration from your provider; and a rule-data update changes domain or IP lists. If a website is routed incorrectly, check the matching rule and the data source in use before reinstalling the app.
Record your current settings before updating. Afterward, check them in the same order: does the configuration load, are the policy groups present, is app traffic reaching the client, and which rule matches the destination? Comparing logs and the effective configuration before and after is more reliable than checking whether a single webpage opens. When reporting an issue, include your operating system, client name, reproduction steps, and redacted logs. Remove subscription URLs and credentials before sharing.
Look up common terms in the glossary. GeoIP data and domain lists serve different purposes, and clients may manage their updates separately; see Clash GeoIP updates for details. Whether a subscription remains usable and a server is reachable depends on the configuration source and network conditions. Installing a client does not automatically provide a working outbound connection.
Clash Guides and Core References
Find the right guide, from common settings to core differences.
10 Common Clash Questions for Beginners: Subscriptions, Proxy Modes, Proxy Selection, and Startup
Answers to 10 questions beginners often ask: where to get a subscription, how to choose between rule and global modes, why proxies fail to connect, how to launch at startup, and how to update the core.
Read article →Clash Original, Clash Meta, and mihomo: Core Differences, Features, and Configuration Compatibility
Explore the origins and relationships of the original, Meta, and mihomo cores. Compare protocol support, rule types, and configuration compatibility, with key changes to consider when migrating older configurations.
Read article →Running mihomo on a Router or Secondary Router: Deployment Options, Hardware Requirements, and Configuration
Learn ways to run the mihomo core directly on an OpenWrt router or secondary router. Compare hardware architectures and memory requirements, and explore transparent proxying, DNS, and LAN device access.
Read article →