jesseduffield/lazygit · warning
New version ({{.newVersion}}) has non-backwards compatible c
Error message
New version ({{.newVersion}}) has non-backwards compatible changes compared to the current version ({{.currentVersion}}) What it means
The updater refuses to auto-update across a major version boundary (majorVersionDiffers): if the release's major component differs from the running version's, it returns the translated MajorVersionErr. This is a safety guard because major releases may carry breaking, non-backwards-compatible changes.
Source
Thrown at pkg/updates/updates.go:121
newVersion, err := u.getLatestVersionNumber()
if err != nil {
return "", err
}
u.Log.Info("Current version is " + currentVersion)
u.Log.Info("New version is " + newVersion)
if newVersion == currentVersion {
return "", errors.New(u.Tr.OnLatestVersionErr)
}
if u.majorVersionDiffers(currentVersion, newVersion) {
errMessage := utils.ResolvePlaceholderString(
u.Tr.MajorVersionErr, map[string]string{
"newVersion": newVersion,
"currentVersion": currentVersion,
},
)
return "", errors.New(errMessage)
}
rawUrl := u.getBinaryUrl(newVersion)
u.Log.Info("Checking for resource at url " + rawUrl)
if !u.verifyResourceFound(rawUrl) {
errMessage := utils.ResolvePlaceholderString(
u.Tr.CouldNotFindBinaryErr, map[string]string{
"url": rawUrl,
},
)
return "", errors.New(errMessage)
}
u.Log.Info("Verified resource is available, ready to update")
return newVersion, nil
}View on GitHub (pinned to c477a2959b)
Solutions
- Update manually following the release notes and installation docs for the new major version (breaking changes may require config migration).
- Read the new major's changelog first — keybindings or config schema may have changed.
- If you must stay on the old major, ignore this error; the binary is not modified.
Defensive patterns
Strategy: try-catch
Validate before calling
// You can pre-check the major-version guard yourself:
if u.majorVersionDiffers(currentVersion, newVersion) {
// don't call the updater; surface a manual-update notice instead
} Try / catch
if err != nil && strings.Contains(err.Error(), u.Tr.MajorVersionErr) {
// notify user to update manually; not an auto-updater failure
} Prevention
- When a new major ships, plan a manual upgrade with config/keybinding migration.
- Don't script auto-update across major boundaries; the guard is intentional.
- Pin deployments to a known major if breaking changes are costly for you.
When it happens
Trigger: Running e.g. 0.x and asking for an update when the newest release is 1.x (or any major-number delta); the updater fetched a version string whose first component differs from yours.
Common situations: Long-lived installation after a big release; the GitHub release channel jumps majors; version parsing surprises with custom builds.
Related errors
- You already have the latest version
- Failed to retrieve version information
- Could not find any binary at {{.url}}
AI-assisted analysis of jesseduffield/lazygit@c477a2959b (2026-08-15).
Data as JSON: /api/errors/4ed1f2290b31aabb.
Report an issue: GitHub.