spicetify/cli · error
unexpected HTTP status
Error message
unexpected HTTP status: %s for %s
What it means
During Update, spicetify downloads the latest release asset and expects HTTP 200. If the download response status is anything else it closes the body/file, fails the spinner, and calls utils.Fatal with this error naming the status and asset URL. It means the release asset could not be downloaded at that URL.
Solutions
- Retry the update; CDN 5xx/429 issues are often transient.
- Check the assetURL printed in the error manually in a browser to confirm it 404s or is blocked.
- If rate limited, authenticate requests with a GITHUB_TOKEN or wait for the limit reset.
- Update via an alternative channel (package manager, manual download of the release asset) if the proxy blocks GitHub.
- Verify spicetify version supports the current upstream release layout (asset name changes cause 404s).
Example fix
// before
if resp2.StatusCode != http.StatusOK {
utils.Fatal(fmt.Errorf("unexpected HTTP status: %s for %s", resp2.Status, assetURL))
}
// after (caller-side retry)
for i := 0; i < 3; i++ {
if err := tryUpdate(); err == nil { break }
time.Sleep(5 * time.Second)
} Defensive patterns
Strategy: retry
Validate before calling
// Preflight: HEAD the asset URL
resp, err := http.Head(assetURL)
if err == nil && resp.StatusCode != http.StatusOK {
return fmt.Errorf("asset unavailable: %s", resp.Status)
} Try / catch
err := runUpdate()
if err != nil && strings.Contains(err.Error(), "unexpected HTTP status") {
time.Sleep(10 * time.Second)
err = runUpdate() // retry once for transient 5xx/429
} Prevention
- Retry downloads with backoff; GitHub CDN hiccups are common.
- Authenticate GitHub downloads in CI to avoid 403/429 rate limits.
- Check the release asset name/URL scheme still matches your updater version.
When it happens
Trigger: Update() performs the asset download request (resp2) and resp2.StatusCode != http.StatusOK — e.g. 403 (rate limit/expired URL), 404 (asset renamed/removed), 302-followed-to-error, or 5xx from the CDN.
Common situations: GitHub rate limiting in CI; upstream release re-replaced and old asset URL 404s; corporate proxy blocking github release CDN (objects.githubusercontent.com); transient GitHub outage.
Related errors
AI-assisted analysis of spicetify/cli@1f13f73616 (2026-08-31).
Data as JSON: /api/errors/0b428129e66c3f13.
Report an issue: GitHub.
Appendix: source
Thrown at src/cmd/update.go:69
out, err := os.Create(location)
if err != nil {
spinner.Fail("Failed to download Spicetify")
utils.Fatal(err)
}
defer out.Close()
resp2, err := http.Get(assetURL)
if err != nil {
out.Close()
spinner.Fail("Failed to download Spicetify")
utils.Fatal(err)
}
if resp2.StatusCode != http.StatusOK {
resp2.Body.Close()
out.Close()
spinner.Fail("Failed to download Spicetify")
utils.Fatal(fmt.Errorf("unexpected HTTP status: %s for %s", resp2.Status, assetURL))
}
defer resp2.Body.Close()
_, err = io.Copy(out, resp2.Body)
if err != nil {
resp2.Body.Close()
out.Close()
spinner.Fail("Failed to download Spicetify")
utils.Fatal(err)
}
spinner.Success("Downloaded Spicetify")
exe, err := os.Executable()
if err != nil {
utils.Fatal(err)
}
if exe, err = filepath.EvalSymlinks(exe); err != nil {View on GitHub (pinned to 1f13f73616)