Installation and Migration · Clash Technical Blog

How to Fix an OpenClash Core Download Failure

When OpenClash fails to check, download, validate, or move a core, identify the failing stage first, then verify the CPU architecture, free space, system time, and CA certificates. This guide covers the official retry path, a GitHub address proxy, safe manual upload, and rollback to the previous core.

  • OpenClash
  • Core download
  • CPU architecture
  • TLS
  • Manual upload
On this page

Identify the Failing Stage from the Log First

When OpenClash shows “Core not found” or “Core update failed,” do not reinstall the plugin first. The current official script reads the remote version, downloads an archive for the selected CPU architecture, checks gzip, extracts to a temporary file, grants execute permission, and runs -v. It replaces the installed core only after every step passes. The first explicit error tells you what to check next.

Core Version Check Error means the remote version information could not be read; Core Download Failed means the archive request failed; Core Verification Failed means the downloaded content did not pass the gzip check.

Core Update Failed means extraction, permissions, or the -v self-check failed. Core Move Failed specifically means the verified temporary file could not be placed at the target path. These are different problems.

As of 2026/9/13, the latest stable OpenClash release remains v0.47.156. This guide describes a safe troubleshooting path supported by the current master update script and that stable release; it does not treat one router environment from a single issue as a failure affecting every device.

Where to Look Based on the First Error

Log or symptomFailure stageCheck first
Core Version Check ErrorVersion metadataSystem time, CA certificates, curl, and GitHub access
Core Download FailedArchive downloadNetwork, download timeout, and GitHub address proxy setting
Core Verification FailedArchive verificationWhether the download is an HTML error page, a truncated file, or content from the wrong mirror
Core Update FailedExtraction and execution self-checkCPU architecture, archive format, execute permission, and binary integrity
Core Move FailedWriting to the installed pathFree space, a read-only filesystem, and the target directory
No Compiled Version SelectedNo architecture selectedBuild architecture option on the version update page
Five Checkpoints in an OpenClash Core Update
  1. Read the remote versionRecord Core Version Check Error if this step fails
  2. Download the architecture-specific packageRequest the official archive using core_version
  3. Verify and extractPass gzip, extraction, permissions, and -v in sequence
  4. Move to the target pathOnly a verified temporary file may replace the old core
  5. Restart and verifyCheck the version, startup log, and a real HTTPS request

Fix only the checkpoint identified by the first failure line. Do not combine download, architecture, storage, and configuration problems into one diagnosis.

Preserve a Working Old Core Before Making Changes

If OpenClash still starts and forwards traffic, do not delete /etc/openclash/core or click Update repeatedly. The official script writes the new file to a temporary path containing .new and the process ID. It overwrites the installed file only after the gzip check, extraction, chmod 4755, and the -v self-check pass. When an automatic update fails, the old core is usually the most reliable rollback point.

First record the active core and its version on the OpenClash status page, then follow the site's upgrade guide to back up UCI settings, configuration files, and overrides. A core file is only a short-term rollback copy for the same device and architecture; it does not replace a configuration backup. Never publicly upload an entire directory containing subscriptions or secrets.

Establish a Rollback Baseline

  1. Stop Repeating the Update

    Wait for the current task to finish and retain one complete log so multiple downloads and restarts do not run at the same time.

  2. Record the current state

    Record the OpenClash version, active core, core version, selected build architecture, and small-flash mode state.

  3. Back Up the Configuration

    Export the current working configuration and OpenClash settings. Redact any copy before sharing it publicly.

  4. Verify the Old Core

    Pin the current node and complete one real HTTPS request to confirm the failure is limited to the update rather than existing forwarding already being broken.

Check CPU Architecture, Target Path, Storage, and Time

The current download script reads core_version directly from UCI and uses it in clash-${core_version}.tar.gz. This must be the build architecture offered on the OpenClash version update page, not a similar value guessed from the router's product name. A complete download can still fail at -v when the wrong architecture is selected.

The log in issue #4758 shows both a download timeout and “can only run on an AMD64 processor that supports the v3 microarchitecture.” It demonstrates that this device had at least a network problem and an architecture problem; it does not prove every manual-upload failure is caused by amd64-v3.

In the current official build workflow, both amd64 and amd64-v3 require GOAMD64 v3. x86_64 does not mean the CPU supports v3. If you see v3 unsupported, select amd64-compatible or amd64-v1 on the update page; do not treat plain amd64 as the compatibility build.

In normal mode, the installed target is /etc/openclash/core/clash_meta. In small-flash mode, the automatic update target changes to /tmp/etc/openclash/core/clash_meta. Do not bypass the interface and copy a file into a guessed directory. Check the setting first, then inspect free space on the relevant mount and in /tmp.

Record Architecture, Storage, and System Time over SSH (Read-Only)
uci -q get openclash.config.core_version
uci -q get openclash.config.small_flash_memory
df -h /etc/openclash /tmp
date

How to Interpret the Results

ResultMeaningAction
core_version is empty or 0No downloadable build architecture is selectedReturn to the version update page and select an architecture that matches the device
The log says the processor is unsupportedThe binary architecture or microarchitecture does not matchRestore the old core and select a more compatible official build
/etc does not have enough free spaceThe installed file may not be movable into placeRemove only package caches or logs you have confirmed are unnecessary; do not delete the configuration or old core
Small-flash mode is enabled and /tmp is too smallThe RAM-backed target cannot hold the new coreFree temporary space or restart before retrying; do not change the automatic target path
The system date is clearly wrongTLS certificate validation may failRestore NTP or correct the time manually before retrying the official address

Fix System Conditions Before Retrying a Version Check or TLS Failure

The official v0.47.156 installation notes list curl and ca-bundle as dependencies. One device in issue #5114 recorded curl 35 TLS connect error and curl 60 certificate has expired while downloading openclash_last_version and clash_last_version, respectively.

That issue is a single-device report without a maintainer-confirmed root cause. It shows only that version files can encounter TLS errors; it does not prove the core archive is missing or that reinstalling ca-bundle will necessarily work.

Confirm the router's time first, then verify on the package page that curl and ca-bundle are installed and intact. Do not add -k to curl, disable TLS validation, or change the version address to HTTP. Those changes remove the source-validation boundary from core updates.

If direct GitHub access is unstable, use the GitHub address proxy option under OpenClash's Override Settings > General Settings. The current script uses this setting to construct an address for the official OpenClash core branch or a supported CDN. Choose only an option offered by the interface that you trust; do not paste an unknown mirror from a forum.

Restore the Version and Download Path

  1. Correct System Time

    Let NTP synchronize successfully first, then refresh the page and confirm the date, time zone, and year.

  2. Check Official Dependencies

    Confirm on the OpenWrt package page that curl and ca-bundle are installed. Do not mix in a certificate bundle from an unknown source.

  3. Make One Isolated Retry

    After saving the settings, run the version or core check once and use the new log to confirm whether the error still stops at the same stage.

  4. Change the Built-In Proxy Option If Needed

    Change the GitHub address proxy once using OpenClash's built-in setting, then compare the error and download progress.

Make One Clean Retry Through the Official Update Flow

After architecture, storage, time, and CA certificates are all correct, return to the OpenClash version update page and check the core again. The current script retries up to three times per task and removes this attempt's download and temporary new core before each retry. Do not start a second task while it is still running.

A successful download does not mean the update is complete. The log should then show a successful download, the start of the update, and Core Update Successful in sequence. If it stops at Verification, Update, or Move, handle that stage instead. Reaching 100% does not prove the core was replaced.

The script schedules a restart only after a successful update. Do not change subscriptions, DNS, or the firewall before that restart, because doing so introduces another variable. If the plugin still uses the old version, fully refresh the status page and verify the actual -v output before attempting another replacement.

Minimum Evidence of a Successful Official Retry

  • The log contains one core update task with no concurrent retries
  • The download passes the gzip check and is extracted
  • The temporary core passes chmod 4755 and the -v self-check
  • The log shows Core Update Successful, not only a 100% download
  • The status page shows the changed core version after the restart

Manually Upload the Core Safely If Automatic Download Still Fails

Manual upload only works around a router that cannot download the official file reliably. It does not fix a wrong architecture, insufficient storage, or an untrusted TLS source. On another trusted device, first obtain the official file from the vernesong/OpenClash core branch that exactly matches the current release branch, Meta type, and core_version.

The filename should correspond to clash-${core_version}.tar.gz as constructed by the automatic script. The upload control is explicitly labeled [Meta] Core File (.tar.gz). Do not rename and upload a ZIP, a custom multi-file archive, or apply this step to Smart or Oix.

Open the upload area in OpenClash Configuration Management and select [Meta] Core File (.tar.gz). The current config.lua extracts the archive in a temporary subdirectory, moves the first regular file to /etc/openclash/core/clash_meta, sets permission 4755, and cleans up the temporary upload directory.

This manual entry point does not run -v, perform a hash check, or verify a signature, and it directly replaces the old file. Save a separate copy of the working core before uploading. File saved means only that file processing completed; it does not prove architecture compatibility or that the core can run.

Small-flash mode, custom firmware, or later versions may handle the core through a link or runtime directory. Treat the current interface's save message, the status page, and -v output as authoritative. If the core is still reported missing after upload, do not cycle through different architectures; return to the previous section and recheck core_version and storage.

Safe Manual Upload Sequence

  1. Confirm the Exact Architecture

    Copy core_version from the version update page; do not substitute a CPU brand or product model.

  2. Back Up the Working Core

    Before uploading, save a separate copy of the working clash_meta and confirm that it comes from the same device and architecture.

  3. Use Only the Official File

    Obtain a single-file .tar.gz from the official OpenClash core branch that matches the architecture, branch, and Meta type. Do not use a third-party repack.

  4. Upload Through Configuration Management

    Select [Meta] Core File (.tar.gz) and let the current plugin handle extraction, renaming, and permissions.

  5. Self-Check Before Starting

    Confirm that the status page can read the core version before starting OpenClash. If it cannot, stop immediately and do not change the firewall.

Verify the Version, Startup, and Real Traffic After the Update

An upload-success message only confirms that file processing completed. Before starting OpenClash, confirm on the status page that the Meta core file exists, has working execute permissions, and displays a version. If the page still shows a cached result, refresh and read it again instead of uploading again to try your luck.

Then inspect the configuration test, core startup, DNS, and firewall stages in the startup log. Finally, pin a known working node and complete one domain-name lookup and one real HTTPS request. If the core starts but traffic still fails, investigate the configuration, DNS, rules, or node instead of replacing the binary again.

Check the Normal-Mode Core Version over SSH (Read-Only)
/etc/openclash/core/clash_meta -v

Final Verification Checklist

  • The architecture selected on the status page exactly matches the downloaded file
  • The core file exists, has valid permissions, and outputs its version
  • The startup log no longer shows Version, Download, Verification, Update, or Move Failed
  • The configuration test passes and the OpenClash service remains running
  • Domain-name resolution succeeds and a real HTTPS request completes
  • The old core and configuration backup remain stored in a nonpublic location

If It Still Fails, Roll Back the Core Without Deleting the Configuration

If the new core cannot execute, exits immediately after startup, or breaks a previously working configuration, stop OpenClash first. Restore the old core saved before the repair from the same device and architecture, then let the plugin read its version and start. Do not leave an incompatible new file in the installed path and restart repeatedly, or downgrade the plugin, core, and configuration at the same time.

Automatic updates use a separate temporary path until the new file passes its self-check. If download, verification, or extraction fails, the safest action is usually to stop updating and continue using the old core. If a manual upload overwrote the old core and no backup exists, obtain a known working version for the same architecture from the official core branch. Do not download a file merely named clash_meta from a group chat or cloud drive.

After rollback, verify the version output, startup log, DNS, and HTTPS again. Submit the plugin version, core_version, first failure line, remaining storage, and redacted environment details to an OpenClash issue only after the old core works again and the new-version problem is reproducible.

The old core works after recovery

Stay on the old version while waiting for an official fix or rechecking the new file's architecture; do not keep updating repeatedly.

The old core also cannot execute

Check the target path, permissions, filesystem, and whether the backup uses the same architecture.

The core starts but the configuration test fails

Investigate YAML and core-field compatibility instead of continuing to treat this as a download failure.

The service starts but the device has no internet access

Restore the network state from before system interception, then troubleshoot DNS, the firewall, rules, and the node separately.

References