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

  1. Update manually following the release notes and installation docs for the new major version (breaking changes may require config migration).
  2. Read the new major's changelog first — keybindings or config schema may have changed.
  3. 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 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


AI-assisted analysis of jesseduffield/lazygit@c477a2959b (2026-08-15). Data as JSON: /api/errors/4ed1f2290b31aabb. Report an issue: GitHub.