1. Understand the Difference Between the Client, Core, and Subscription
Clash for Windows (CFW) is no longer maintained. Existing configurations may still connect, but client compatibility, dependency updates, and bug fixes will not continue. Migration isn't about copying the old folder over the new app. It's about restoring your subscription source, custom rules, and system traffic settings separately. The old client's database and service components are not compatible with newer clients.
Clash Verge Rev is a desktop GUI client. Mihomo is the core that parses configurations, matches rules, and establishes connections. Mihomo follows the Clash Meta development line, so its supported configuration fields aren't necessarily the same as those in older Clash cores. A subscription is a remote configuration source that may include nodes, proxy groups, rules, and DNS settings. Check each component separately; a successful subscription import doesn't mean everything is working.
2. Choosing a Replacement Client: Start with Your Configuration Workflow
On Windows, consider Mihomo-based clients such as Clash Verge Rev, Clash Nyanpasu, and FlClash. To check whether a project is still maintained, review its release history, issue responses, and core updates on the day you migrate. A download page labeled “latest” isn't enough. Don't assume similarly named forks are the same project.
| Client | Best suited for | What to check before installing |
|---|---|---|
| Clash Verge Rev | Subscription management, local Merge or script processing, desktop system proxy, and TUN | How the current version associates overrides, service installation status, and core version |
| Clash Nyanpasu | Desktop configuration management and configuration processing workflow | The core used by the current version and its local configuration processing capabilities |
| FlClash | Users who want a similar workflow across desktop and mobile devices | Supported platforms, configuration import options, and local rule editing |
If you mainly manage subscriptions and a few YAML settings in CFW, Verge Rev's Merge workflow is usually easier to map over. If you rely on complex Parsers scripts, focus on script APIs, execution order, and update behavior—not how similar the interface looks. Compare more platforms in the client comparison.
3. What to Back Up from CFW
Back up your data while the old client still launches. In CFW, open the user data directory from the configuration directory option under “Settings.” The location can vary by installation type and version history, so don't search only the installation folder. First copy the entire user configuration directory to an offline backup location, then make a separate migration checklist from the items below.
- Original subscription URLs: Record each subscription's name, URL, and update interval. A subscription URL containing a token is a credential; don't post it in a public support ticket.
- Parsers content: Save the matching conditions, YAML changes, and original scripts. Note which subscription each one applies to.
- Local rules: Record rule order, referenced proxy group names, rule-set URLs, and any local file dependencies.
- Ports and system traffic settings: Record the HTTP, SOCKS, and mixed ports, whether LAN access is enabled, and the status of the system proxy and TUN.
- Personal settings: Record the rule mode, selected nodes in frequently used proxy groups, and any custom DNS settings.
Don't treat the temporary node list generated from a subscription as your only backup. Subscription updates can change node names, credentials, or proxy groups. Copying only the current YAML can leave you unable to get future updates. If you can't find the original URL, import the current YAML as a local configuration to test it, then contact the subscription provider to recover the update link.
After backing up, turn off the system proxy, TUN, and startup launch in CFW, then quit the app. Stop any old service that is still handling network traffic. Keep the old app available for rollback, but don't let two clients compete for the system proxy or virtual network adapter routes.
4. Import the Subscription and Verify the Baseline
- Launch Clash Verge Rev and open the “Subscriptions” page. Add the original subscription URL using the create or import option. Button names may vary between versions.
- Update the subscription and select it as the active configuration. Confirm that proxy groups and nodes appear. Seeing only the subscription name, with no nodes, does not mean the import succeeded.
- On the “Proxies” page, select rule mode and check the options in your main proxy groups. Automatic and manual selection groups behave differently, and the old client's selections usually won't carry over automatically.
- Leave TUN off for now and enable only the system proxy. Use a browser to visit one site that should connect directly and another that requires a proxy, then check the rules and outbound connections on the “Connections” page.
Troubleshoot Import Errors by Type
For HTTP 401 or 403 errors, check the token, account permissions, and subscription URL. For timeouts, distinguish between DNS issues, network reachability, and the download path. If YAML parsing fails, check whether the response is actually a web page or error message. For missing proxy groups or references to nonexistent nodes, check the core logs instead of repeatedly toggling the system proxy.
Don't send your subscription to an online converter without a good reason. Before converting, check whether the provider supports Mihomo configurations directly; using a third-party converter means sharing your subscription credentials with another service. Don't layer on DNS, rule, or TUN changes until the baseline works.
5. Migrate Parsers to Merge by Recreating Their Effects
CFW Parsers is a client-side configuration processing mechanism, not a set of universal core fields. You can't paste parsers:, matching conditions, or JavaScript functions from an old file into the Mihomo main configuration. First identify what the old setup changed, then choose Merge or script processing in Verge Rev.
| Old Parsers behavior | Migration approach | What to verify |
|---|---|---|
| Override a scalar or object field | Prefer Merge, using the YAML structure of the target configuration | Field hierarchy, value type, and final runtime value |
| Prepend or append rules | Use list operations explicitly supported by the current version; otherwise, use a script | Whether the subscription's original rules are preserved and where rules are inserted |
| Rename nodes or conditionally modify proxy groups | Rewrite the script for the new client's API | Update all references to renamed entries; return the complete configuration from the script |
| Apply different processing based on the subscription URL | Associate each override with its corresponding subscription | Whether switching subscriptions incorrectly applies an override to another configuration |
Merge example: Set the log level and DNS cache algorithm
The YAML below applies when the current core supports cache-algorithm. It demonstrates changes to two specific fields without replacing upstream DNS settings, proxy groups, or rules from the subscription. If the old Parsers setup was only used to set these two values, create a local Merge processing item on the “Subscriptions” page and associate it with the target subscription using the controls available in your version.
log-level: info
dns:
cache-algorithm: arc
After saving, reapply the configuration. Check that log-level is set to info and dns.cache-algorithm to arc in the runtime configuration. If the core reports an unknown field, verify the actual core version and configuration documentation; don't ignore the error to force the migration through. This example won't enable DNS if the original subscription has DNS disabled.
Don't Migrate Rule Arrays as Ordinary Fields
The YAML rules field is an ordered list, usually evaluated from top to bottom until the first match. Adding a rules: section with just two entries to Merge doesn't guarantee that they will be prepended; list handling depends on the client implementation and version, and may replace the original list. The old Parsers prepend-rules option is also not a field you can pass directly to Mihomo.
- Test first with a narrowly scoped rule, such as
DOMAIN,example.com,DIRECT. Don't start by changing the global fallback rule. - Inspect the final rule list: the test rule should be in the expected position, the subscription's original rules should still be present, and
MATCHshould remain at the end. - When referencing a proxy group from a subscription, its name must match exactly. Differences in spaces, capitalization, or symbols can break the reference.
- If an old script includes conditional logic, rewrite it using the new client's script signature. Don't assume CFW parameters, helper functions, or return behavior can be reused as-is.
6. Migrate Ports: Preserve How Apps Connect, Don't Copy Defaults Blindly
CFW commonly uses port 7890 for HTTP and 7891 for SOCKS, but these values may have been changed. Verge Rev's default ports can also vary by version or existing user data. Check the port settings under “Settings” and the runtime configuration. Either keep the old ports or update every app and tool that uses them.
For example, if you want to use 127.0.0.1:7890 as a single mixed port, set it in the client's port settings and check the final configuration. A mixed port accepts both HTTP and SOCKS requests; it doesn't automatically forward traffic from the old separate ports.
mixed-port: 7890
allow-lan: false
This configuration only sets up a local mixed-port listener. GUI-managed fields may override matching Merge entries, so change them in the corresponding client settings first. You don't need to enable LAN access for normal local use. If other devices need to use the proxy, configure the listening address, authentication, and firewall rules separately.
Two Checks on Windows
netstat -ano | findstr :7890
curl.exe --proxy http://127.0.0.1:7890 https://example.com/ -I
The first command checks which process, if any, is using the port and reports its process ID; stop the old client if it's the one listening. The second sends a request explicitly through the HTTP proxy, helping distinguish a working proxy listener from an app that uses the system proxy. Check the HTTP response status in the context of the destination site; a command completing successfully alone doesn't prove the proxy connection is working.
Terminal environment variables, Git proxy settings, browser extensions, and download tools may still use the old port. The system proxy usually won't change those apps' independent settings. The external-controller is a management API, not a proxy port for web traffic. Don't enter it as a browser proxy address or expose it on every network interface to complete the migration.
7. Restore TUN and DNS Without Double-Routing Traffic
The system proxy relies on apps honoring the system proxy settings. TUN uses a virtual network adapter and routing to capture more traffic. They aren't the same setting. Once the baseline and overrides are stable, install or start any required service as prompted by the client, then enable TUN and check the virtual adapter, routes, and logs. On Windows, resolve service permission issues by checking the service status; don't reuse old CFW service files.
- Make sure CFW's TUN is off and quit any other VPN tools that may be capturing the default route. For corporate VPNs, follow your organization's network requirements first.
- Enable TUN in Verge Rev. Test a regular website first, then an app that didn't previously honor the system proxy.
- Check the Connections page for the relevant process, destination, and rule. If a request isn't reaching the core, troubleshoot the traffic capture scope before changing nodes.
- If a domain fails but its IP address is reachable, check the DNS upstream, DNS hijacking configuration, and logs. Don't change the resolution mode and all DNS servers at the same time.
With Fake-IP, an app may receive a synthetic address. A commonly used address pool is 198.18.0.1/16, but check your configuration for the actual value. This isn't the real destination address and doesn't by itself indicate DNS poisoning. After switching from an older DNS mode, Windows may still cache old results. Run ipconfig /flushdns, then restart the affected app.
If a LAN printer, NAS, or corporate hostname stops working, check separately whether DNS can resolve internal names, the rules route the traffic directly, and the TUN routes include the relevant subnets. Adding a single DIRECT rule won't necessarily make internal DNS work. For more configuration details, see Advanced Usage.
8. Migration Checklist and Rollback
Run at least one subscription update and restart the client once before removing the old setup. An update verifies that overrides remain in place; a restart can reveal issues such as a service not starting automatically, a port setting not being saved, or the system proxy not being restored. Migration is complete only when all the checks below pass.
- The subscription updates successfully, all nodes and proxy groups are present, and the expected subscription is selected.
- In rule mode, direct and proxied requests match the expected rules and outbound connections.
- Local Merge settings or scripts still work after a subscription update, and the original rule list is intact.
- Browsers, terminals, and frequently used download tools use the new ports, and no old process is still listening.
- If you need TUN, the service and virtual network adapter work after a restart. If not, leave TUN off.
- Return temporary debug logging to its normal level. Before sharing logs, remove subscription tokens, node credentials, and sensitive domain names.
If the new client still isn't stable, turn off its system proxy and TUN, then quit. Confirm that routing and proxy settings have been restored before launching the old client for comparison. When rolling back, use only one traffic-capture mechanism at a time. Don't treat occasional connectivity with both clients running as a working setup; it often masks a real port or routing conflict.