On this page
First confirm this is the same Profile cleanup failure
This guide addresses one specific symptom: Clash Verge Rev v2.5.2 already had subscriptions, local Profiles, or global Merge/Script settings, but after a normal exit, shutdown, or restart, reopening the app leaves only a few items in the configuration list and may reset existing overrides to blank templates.
Official issue #7577 records 30 of 32 Profile files being deleted during startup on macOS. Issue #7804 records 18 of 20 files being deleted on the next Fedora startup after a normal shutdown, with later comments also reporting Windows and macOS cases. These reports point to orphan-file cleanup during startup, not a subscription provider simultaneously removing every node.
Open the app log first and look for Removed file, Profile file cleanup complete, and an unusually high deletion count during a single startup. If the Profile still exists on disk and only the Proxies page is blank, troubleshoot core communication first. If the file exists but reports Invalid YAML, fix its formatting or fields first. If only one subscription update failed while other Profiles remain, do not immediately restore the entire app backup.
Use this guide only when all four signals appear together
| Check | Matches this article | If it does not match |
|---|---|---|
| Client version | Clash Verge Rev v2.5.2 or a build based on that code | Check the Release and issue for the version actually installed |
| Scope of the loss | Multiple subscriptions, local Profiles, or Merge/Script settings disappear together | For one subscription, check its response and update log first |
| When it happens | The first startup after exiting, shutting down, or restarting | If it disappears immediately after editing, check save and validation errors |
| Log evidence | Removed file or a cleanup-complete message with an abnormal deletion count | Without evidence, preserve the log instead of assuming files were deleted |
Preserve the entire app data directory before recovery
Restoring a backup rewrites the app data directory with config.yaml, verge.yaml, profiles.yaml, and the profiles directory from the archive. First copy the entire current directory and its clash-verge-rev-backup subdirectory to another location.
Keep that copy even if the current directory already looks incomplete. It lets you return to the original evidence if you choose the wrong backup or an old configuration overwrites newer changes.
A standard installation usually stores data in the io.github.clash-verge-rev.clash-verge-rev folder under the system data directory. A portable installation uses the .config directory next to the program instead. If you are unsure, use the app-directory shortcut in the client settings. Do not delete data based only on a similar folder name.
Common app data locations
| System | Typical location for a standard installation |
|---|---|
| Windows | %APPDATA%\io.github.clash-verge-rev.clash-verge-rev |
| macOS | ~/Library/Application Support/io.github.clash-verge-rev.clash-verge-rev |
| Linux | $XDG_DATA_HOME/io.github.clash-verge-rev.clash-verge-rev; when unset, it is usually under ~/.local/share |
| Portable version | Application directory/.config/io.github.clash-verge-rev.clash-verge-rev |
What to preserve before recovery
- A read-only copy of the entire app data directory
- Every existing ZIP in clash-verge-rev-backup
- The logs directory and the latest.log from when the failure occurred
- Any remaining profiles.yaml, profiles directory, Merge.yaml, and Script.js
- The original subscription URL or the provider's reimport option
Find the newest complete local backup first
Clash Verge Rev v2.5.2 stores local backups in clash-verge-rev-backup inside the app data directory. Automatic backup filenames may include -auto-scheduled, -auto-merge, or -auto-script.
The reporter in issue #7804 recovered the global script from an auto-script ZIP created three days earlier.
The official v2.5.2 backup implementation places the profiles directory, config.yaml, verge.yaml, optional DNS configuration, and profiles.yaml in the same ZIP.
Do not restore a ZIP merely because it opens. Copy it first, confirm that the archive contains both profiles.yaml and profiles/, then choose the newest one created before the failure.
A complete ZIP from before the failure
Prefer the built-in backup history for recovery, and keep a copy of the ZIP.
Only an auto-script or auto-merge ZIP is available
Check its timestamp and contents; it may still contain the complete configuration set, not just one script.
The ZIP is missing profiles.yaml or will not open
Do not write it into the active directory. Use an earlier backup or rebuild from the original subscription instead.
No ZIP is available
Preserve the remaining profiles files, then rebuild each item from its original source.
If the client opens, restore from its backup history
Keep the system proxy and TUN off. Open "Backup Settings" in Settings, then choose "View History" under "Local Backup." Find a backup from before the failure, use Export to save another copy first, and then select Restore and confirm. The official interface restarts the app after recovery finishes.
If the ZIP was moved elsewhere, use "Import Backup" to add the copy to the local backup list, then restore it from the history. Do not extract the ZIP directly into the directory of a running app. Built-in recovery reloads config, profiles, and interface settings after writing them; manual replacement can leave the files on disk out of sync with in-memory state.
Built-in recovery sequence
Turn off traffic-capture controls
Turn off TUN and the system proxy first so the device can still connect directly if recovery fails.
Open the backup history
Go to Settings → Backup Settings → Local Backup → View History.
Export a separate copy
Save the ZIP you plan to restore outside the app data directory.
Select a backup from before the failure
Confirm it by the timestamp in the filename; do not use an empty-configuration backup created after the failure.
Confirm recovery and wait for the restart
Do not force-quit the process during recovery. After the restart, check the Profiles before enabling the proxy.
Without a complete backup, rebuild each item from its source
When no usable ZIP exists, do not invent profiles.yaml references or arbitrarily rename randomly named files. Reimport each remote Profile from its saved subscription URL. For a hand-written local configuration, identify the copied profiles files from before the failure one at a time, create a new local Profile, paste in the content, and let the client regenerate the index relationship.
If an older copy of the global Merge.yaml or Script.js still exists, compare it in an offline copy first, then restore it through the client's global extension editor. Rewrite it only when no older content exists in any backup. Do not reconstruct complete rules that may contain secrets or internal domains from public screenshots.
If the subscription URL is also lost, retrieve or reset it through the original provider instead of piecing together a token from browser history, public logs, or someone else's configuration. Save the state after restoring each source so that a problem is traceable, rather than importing everything at once.
Choose the recovery method by content source
| Missing content | Preferred source | Recovery method |
|---|---|---|
| Remote subscription | The original provider account or a saved URL | Reimport it, then verify the node count and last-updated time |
| Local Profile | A saved YAML or a copy of the app directory | Create a new local configuration, import the content, and validate it |
| Merge/Script | A pre-failure ZIP or offline copy | Restore and save it through the global extension editor |
| Only scattered, randomly named files remain | The copied profiles directory | Inspect and identify each file; do not overwrite the index directly |
Verify Profiles, overrides, and a real connection after recovery
After the app restarts, do not enable TUN immediately. Check the number, names, and types of Profiles and which one is selected. Then open Merge and Script separately and confirm that critical rules are not blank templates. Remote subscriptions should update manually, and local Profiles should pass configuration validation.
Next, select one known-good node, enable only the system proxy, and complete a real HTTPS request. Confirm the domain, rule, and outbound in Connections. Finally, fully quit and reopen the app once more, then check the Profile count and logs again. Recovery is stable only if the second startup also shows no abnormal deletions.
Recovery completion criteria
- The number, names, and types of subscriptions and local Profiles match the backed-up state
- Critical content in Merge.yaml and Script.js is present and can be saved
- The current Profile passes configuration validation and starts Mihomo
- A fixed node completes a real HTTPS request, and Connections shows the expected outbound
- The Profiles still exist after a full exit and another startup
- The new log contains no abnormal Removed file entries or mass-deletion records
If recovery fails, roll back to the preserved state
If the app will not start after recovery, fewer Profiles remain, or the restored configuration fails validation, close the app first. Do not try several ZIP files in succession. Save a separate copy of the app data directory from this recovery attempt, then use the original preserved state to return to the pre-recovery condition.
Keep TUN and the system proxy off first. If the client still does not work after rollback, leave it closed for now. Preserve the log, backup ZIP, and directory copy, then submit the redacted version, operating system, deletion count, and first error to the official issue. Do not uninstall virtual adapters, reset the entire system network, or delete all app data to repair a configuration.
Rollback after a failed recovery
Stop further writes
Fully quit Clash Verge Rev and confirm that its related processes have ended.
Preserve the failed result
Save a separate copy of the recovered directory and log so you can compare which file caused the failure.
Restore the original preserved state
Use the full directory copy saved before recovery; do not mix in a second unknown ZIP.
Stay on a direct connection while waiting for a resolution
Leave the system proxy and TUN off, and report the issue upstream with redacted evidence.
The fix is in the development branch but not yet in a stable release
On 9/2/2026, the maintainer confirmed in issue #7804 that commit 44f6f6e removed the unreliable cleanup logic and closed the issue. The commit is titled “preserve files until explicit deletion”; its code directly removes the startup call to cleanup_orphaned_files and the entire automatic-deletion implementation.
As of 9/3/2026, the latest stable version in the official Releases is still v2.5.2, published on 7/19/2026, and its release notes do not include this later fix. Therefore, “issue closed” does not mean “fixed in v2.5.2,” and you should not move an everyday device to a development build solely to avoid this risk.
The safer approach is to complete the backup and recovery first, avoid unnecessary repeated launches, and wait for an official stable release that explicitly includes 44f6f6e. When a new stable version arrives, keep the current backup, verify the Release, and run one regression check with a full exit, restart, and real connection.
Keep both automatic backups and an external copy going forward
After recovery, enable scheduled local backups in Backup Settings and keep “Back up automatically on critical changes” enabled. The v2.5.2 implementation creates archives on schedule and after global Merge/Script changes, retaining up to 20 automatic archives. This limit means the local directory is not a permanent history.
Export at least one verified ZIP outside the app data directory, or configure a WebDAV service you control. Before a major subscription-override change, client migration, or upgrade, manually create and export a backup. Run recovery drills only when a rollback copy is available.
Long-term protection checklist
- Scheduled local backups are enabled at a frequency that matches how often you make changes
- Automatic backups on critical changes remain enabled
- The newest ZIP has been exported outside the app data directory
- The archive has been confirmed to contain profiles.yaml and profiles/
- Subscription URL values, Profiles, and backups are never shared publicly
- Before upgrading, verify that the stable Release explicitly includes 44f6f6e or an equivalent later fix
References
- Clash Verge RevmacOS report of v2.5.2 deleting active Profiles during startup
- Clash Verge RevCross-platform report of Profiles, Merge, and Script disappearing after a normal shutdown
- Clash Verge RevFix commit that removes the unreliable Profile cleanup logic
- Clash Verge RevClash Verge Rev v2.5.2 stable release
- Clash Verge Revv2.5.2 local backup and recovery interface implementation
- Clash Verge RevConfiguration files included in a v2.5.2 backup archive
