Before You Install: Confirm the Client, Core, and Configuration Source
A search for “how to install Clash” may show desktop clients, Android apps, and standalone cores side by side. They are not interchangeable downloads: the client provides the interface, subscription updates, and configuration management, while the core handles proxy connections, rule matching, DNS, and related processing. Downloading only a core executable usually does not give you a desktop interface with a system-tray menu.
Clash Meta continued development under the name mihomo, but the core, version, and feature switches bundled with each client can differ. A configuration containing tun, proxy-providers, or protocol-specific fields does not mean every app with Clash in its name can load it. During first-time setup, record both the client version and core version so compatibility can be assessed later.
- Establish a network baseline: Disable any existing proxy or VPN, complete captive-portal sign-in on campus or hotel Wi-Fi, then visit a website that normally works without a proxy.
- Back up existing settings: If a similar app is already installed, export its configuration, overrides, and rules, and note the original system-proxy switch and port.
- Check the release notes: Confirm the target OS version, processor architecture, and required runtime components. Do not apply an old tutorial’s minimum requirements to a newer installer.
- Protect subscription details: Subscription URLs often contain access credentials. Do not upload the full URL in public screenshots or to unfamiliar online conversion services.
Choosing a System Architecture: x64, ARM64, and Package Formats
Architecture describes the processor instruction set targeted by the software, not network speed or OS version. x64 and amd64 usually refer to the same 64-bit x86 class, while arm64 and aarch64 usually refer to 64-bit ARM. A package finishing its download does not mean it can run on the current device.
| Platform | Where to Check or Command | How to Choose |
|---|---|---|
| Windows 11 | “Settings” → “System” → “System information” → “System type” | Choose x64 for an x64 processor; for ARM devices, prefer the ARM64 build provided by the project. |
| macOS | Apple menu → “About This Mac”; check “Chip” or “Processor” | Choose ARM64 for Apple silicon and x64 for Intel processors; confirm Universal builds in the release notes. |
| Linux | uname -m and cat /etc/os-release |
Confirm the architecture and distribution separately; Debian-based systems generally use deb, while Fedora-based systems generally use rpm. |
| Android | Device specifications; with ADB configured, you can run adb shell getprop ro.product.cpu.abilist |
If the list includes arm64-v8a, consider ARM64; if it contains only 32-bit ABIs, choose the matching build. |
| iOS / iPadOS | “Settings” → “General” → “About” → System Version | Use an available app distribution channel to verify the minimum OS version and configuration format; do not install APK, EXE, or DMG packages. |
Windows and macOS: Check the Architecture First, Then Handle Compatibility Warnings
In Windows 10, the usual path is “Settings” → “System” → “About” → “System type.” If you see “This app can’t run on your PC,” check the OS bitness, package architecture, and minimum OS version first. Windows on ARM compatibility does not mean every proxy service or driver is supported; a main window opening is not enough to confirm compatibility.
On an Apple silicon Mac, an Intel build may require Rosetta. If the project offers a native ARM64 package, follow the release notes and prefer it. For a client distributed as a DMG, move the app to the Applications folder before launching it, as running it indefinitely from the mounted image can cause update or permission-path problems.
Linux and Android: Check Both the File Format and the Architecture
Linux .deb and .rpm files describe package formats, not CPU architecture. Before installing, verify dependencies and distribution support separately; do not force an installation by ignoring dependency errors. Android devices may have 64-bit hardware but expose only a 32-bit app environment, so use the available ABI as the deciding factor. If the project provides a universal package, use it as a fallback when the documentation supports it, keeping in mind that universal packages are usually larger.
Permission Prompts: Installation, Service, and VPN Access Are Different
A permission prompt should match the action you just performed. An installation confirmation when opening a package, a service-permission request when enabling TUN, and a VPN authorization request on a mobile device’s first connection are separate system actions. If an unfamiliar administrator request appears before you have initiated the related action, cancel it and check the launching program and file source.
- Windows installation and firewall: Installing an application or service may trigger UAC. When the firewall asks which networks to allow, first decide whether other devices really need to access the proxy on this computer. For local-only use, do not open inbound access on every public network simply to dismiss the prompt.
- macOS security prompts: Verify the app source, signing message, and version requirements, then review “System Settings” → “Privacy & Security.” Do not treat disabling the entire system security check as an installation step. For an “app is damaged” message, obtain the correct package again and consult the notes for that version.
- Android installation permission: When installing an APK, Android may ask you to allow the browser or file manager to “install unknown apps.” This authorizes the app used as the installation source; it is not VPN permission. After installation, revoke the permission if it is no longer needed.
- Mobile connection authorization: Android’s VPN connection request and iOS’s prompt to add a VPN configuration allow the app to take over traffic through the system network extension. Approve them only when you have confirmed that the intended client is being enabled.
Notification permission mainly affects status displays and alerts; battery background limits can affect long-running Android connections. These settings are separate from whether a configuration can be imported for the first time. Complete a foreground connection test first, and investigate background policies for the app only if the connection drops after the screen locks. Avoid changing several system settings at once.
System Proxy, VPN, and TUN: Which Should You Use First?
A system proxy writes the proxy server address to the operating system settings, and only apps that honor those settings will use it. TUN uses a virtual network interface and routing to capture IP traffic, typically requiring more permissions and DNS configuration. The VPN shown on mobile devices is the system authorization and traffic-capture mechanism; it does not indicate a specific remote VPN protocol used by the client.
| Method | Recommended First Use | What It Does Not Prove |
|---|---|---|
| Desktop system proxy | Use it first to test browser access and verify the local address and listening port. | An enabled switch does not mean every app or UDP flow is being captured. |
| Desktop TUN | Enable it only when you need to handle apps that ignore the system proxy, following the core documentation. | Successful activation does not mean the node supports UDP or that every route behaves as expected. |
| Mobile VPN tunnel | After importing a valid configuration, authorize startup through the app’s connect button. | A VPN icon in the status bar shows only the tunnel state, not whether the remote node works. |
Configure Rule Mode and Traffic Capture Separately
mode: rule tells the core to choose an egress for each connection according to rules; it does not send every app into the core. Conversely, enabling TUN does not automatically route every connection through the same proxy node. For the first test, keep the rule mode prepared by the configuration provider and avoid changing global mode, DNS mode, and TUN at the same time. Otherwise, even a successful test will not reveal which change made the difference.
On desktop, start with the system proxy; on mobile, use the client’s VPN connection flow. On managed devices, ordinary users may not be allowed to install services or change routes. Ask the device administrator which access method is permitted instead of repeatedly retrying with higher privileges.
Initial Setup Checklist: Import a Configuration, Confirm the Port, and Choose a Policy
- Check version information. Record the client and core versions on the client’s About or version-information page. A release package name does not necessarily match the core version actually running.
- Import the configuration. Use the remote configuration entry for a subscription URL and the file-import entry for a local YAML file. A single-node share link requires explicit client support and cannot be imported as a complete YAML file.
- Activate it and check the logs. A successful import only means the content was saved. Select that configuration and confirm that the core loaded successfully. If you see an unknown field or YAML parsing error, fix the format or compatibility issue before enabling TUN.
- Check policy groups. Confirm that every policy group referenced by the rules exists, and select a working node in groups that require manual selection. Automatic latency-testing groups behave differently from manual-selection groups.
- Enable one traffic-capture method. On desktop, start with the system proxy; on mobile, authorize the connection through the connect button. Keep other network settings unchanged during the first test.
Configuration Example: Local Port and Rule Mode
# General fields only; not a complete configuration for direct connection
mixed-port: 7890
mode: rule
allow-lan: false
mixed-port: 7890 is a teaching example in which HTTP and SOCKS share one local listening port; use the port in the client’s active configuration in practice. allow-lan: false means proxy access is not exposed to the local network, making it a sensible starting point for local-only use. These three fields contain no nodes, policy groups, or rules and cannot replace subscription content on their own.
If the actual listening address is 127.0.0.1:7890, the system proxy must point to the same address and port. If the port is already occupied, the logs may show address already in use. First check whether an older client is still running in the background. After changing the port, also update the system proxy or any app with a manually configured proxy; changing only the YAML is not enough.
Connection Testing: From Local Listening to a Real Request
Do not treat the latency shown by a speed-test button as the sole proof that installation is complete. A speed test usually contacts a fixed test endpoint, so its result depends on that endpoint and the test method. One timeout does not necessarily mean every website is unreachable, and one success does not prove that the target app entered the proxy path.
- Confirm that the core is running. Look in the logs for configuration loading and listener-start records. If the interface opens while the core keeps reporting errors, the local port targeted by the system proxy may have nothing listening on it.
- Verify a real request. Open a known-working HTTPS site that you are allowed to access, then look in the client’s Connections or logs page for the target domain, matched rule, policy group, and final egress.
- Compare direct traffic. Visit a site that should use a direct connection under the current rules and confirm that the egress shows
DIRECTor the corresponding direct route. Do not test only requests that should use a proxy. - Test the target app. After the browser works, open the app you actually need to use. If no corresponding connection appears, first check whether the app honors the system proxy instead of immediately changing subscriptions.
- Test recovery. Disable the system proxy or disconnect the VPN, then quit the client and confirm that a site that normally works directly still opens.
Optional for Desktop: Explicit Proxy Testing
If curl is installed and an HTTP proxy is definitely listening on 127.0.0.1:7890, run the command below. In Windows PowerShell, use curl.exe to avoid command-alias differences in some versions. The test URL is only a public HTTPS example; use a destination confirmed to work on your current network.
curl --proxy http://127.0.0.1:7890 --connect-timeout 10 --max-time 20 --head https://example.com
--connect-timeout 10 limits the connection phase to 10 seconds, while --max-time 20 limits the entire request to 20 seconds. These are test parameters, not measured latency. The command explicitly specifies a local proxy, so success proves only that this request path works, not that the operating system proxy is configured correctly. A site that does not support HEAD may also return a method-related error; use the logs for context.
Common First-Time Setup Issues and Completion Criteria
The client opens, so why can’t I access websites?
Disable the system proxy or disconnect the VPN first, then check whether sites that normally work directly recover. If they do, check in order: whether the core started, whether the local port matches, whether the configuration is active, and whether the policy group has a usable egress selected. If the network remains offline after quitting the client, check for a leftover system proxy. In Windows 11, open “Settings” → “Network & internet” → “Proxy”; on macOS, open “Details” → “Proxies” for the current network connection. Record the original settings before restoring them, and do not overwrite configurations required by a managed network.
Must TUN Be Enabled or the App Always Run as Administrator After Installation?
Neither should be treated as a default requirement. When using only a local proxy port and the system proxy, desktop TUN is usually unnecessary. Installing a service or creating a virtual network interface may require elevated privileges, depending on the client. If the client handles these operations through a controlled background service, follow its documentation rather than running the entire app with elevated privileges as a general fix.
No Nodes After Import: Will Reinstalling Help?
First check whether the subscription returned the expected format and that you did not save a login page or error message as YAML. Configurations using proxy providers may also need to download provider contents separately; importing the main configuration does not mean the providers updated successfully. Keep the error type and ask the configuration provider to confirm the subscription validity and client compatibility. Reinstalling usually cannot fix subscription-content or authentication problems.
Keep This Record Before You Finish Installing
- The OS version, device architecture, client version, and core version have been recorded.
- The configuration loads, nodes or proxy providers are ready, and the local listener reports no errors.
- One proxied request and one rule-based direct request have both been checked against their actual egress.
- The traffic-capture method is clear, and no unnecessary VPN or proxy tools are running at the same time.
- Network recovery after exit has been tested, and the original configuration and local overrides are saved separately.
Once these conditions are met, consider startup launch, background operation, TUN, or LAN sharing one at a time. Add only one setting per step and repeat the connection test so you can return to the most recent working state if something breaks. To compare platform support and maintenance status across clients, see the Client Selection Guide.