hashicorp/packer · error

unsupported remote protocol MINOR version %d. The supported

Error message

unsupported remote protocol MINOR version %d. The supported MINOR protocol versions are version %d and below. Please upgrade Packer or use an older version of the plugin if possible

What it means

Within a matching MAJOR protocol version, CheckProtocolVersion() still rejects plugins whose MINOR protocol version is NEWER than what this Packer supports — the plugin may use RPC features Packer's side doesn't implement. Older minor versions are accepted (forward compatibility only goes down).

Source

Thrown at packer/plugin-getter/plugins.go:540

		localVersion, err = NewAPIVersion(fmt.Sprintf("x%s.%s", binOpts.APIVersionMajor, binOpts.APIVersionMinor))
		if err != nil {
			return fmt.Errorf("Failed to parse API Version from constraints: %s", err)
		}
	}

	remoteVersion, err := NewAPIVersion(remoteProt)
	if err != nil {
		return err
	}

	if localVersion.Major != remoteVersion.Major {
		return fmt.Errorf("unsupported remote protocol MAJOR version %d. The current MAJOR protocol version is %d."+
			" This version of Packer can only communicate with plugins using that version", remoteVersion.Major, localVersion.Major)
	}

	if remoteVersion.Minor > localVersion.Minor {
		return fmt.Errorf("unsupported remote protocol MINOR version %d. The supported MINOR protocol versions are version %d and below. "+
			"Please upgrade Packer or use an older version of the plugin if possible", remoteVersion.Minor, localVersion.Minor)
	}

	return nil
}

func (gp *GetOptions) Version() string {
	return "v" + gp.version.String()
}

func (gp *GetOptions) VersionString() string {
	return gp.version.String()
}

// A Getter helps get the appropriate files to download a binary.
type Getter interface {
	// Get allows Packer to know more information about releases of a plugin in
	// order to decide which version to install. Get behaves similarly to an

View on GitHub (pinned to eb36e3c3e4)

Solutions

  1. Upgrade Packer to the latest version so its supported MINOR protocol version covers the plugin.
  2. Downgrade the plugin to a release whose x{major}.{minor} is within your Packer's supported minor version.
  3. Check the plugin's README/docs for the minimum Packer version and align your binary.

Example fix

// upgrade the Packer binary
$ packer --version   # old, supports x5.0
$ # install latest packer, then retry: packer plugins install ...
Defensive patterns

Strategy: validation

Validate before calling

local, _ := NewAPIVersion(fmt.Sprintf("x%s.%s", pluginsdk.APIVersionMajor, pluginsdk.APIVersionMinor))
remote, err := NewAPIVersion(entry.ProtVersion)
if err == nil && remote.Minor > local.Minor {
	return fmt.Errorf("plugin needs newer packer (protocol x%d.%d > x%d.%d)", remote.Major, remote.Minor, local.Major, local.Minor)
}

Try / catch

if err := binOpts.CheckProtocolVersion(entry.ProtVersion); err != nil {
	if strings.Contains(err.Error(), "MINOR version") {
		return fmt.Errorf("upgrade packer or pin an older plugin release: %w", err)
	}
}

Prevention

When it happens

Trigger: Calling CheckProtocolVersion with remoteProt parsing to Major equal but Minor greater than localVersion.Minor — e.g. a plugin built with SDK protocol x5.1 installed by a Packer that only knows x5.0.

Common situations: Running a newly released plugin with an outdated Packer binary; a plugin release shipped ahead of the corresponding Packer version; CI images with pinned old Packer installing latest plugins.

Related errors


AI-assisted analysis of hashicorp/packer@eb36e3c3e4 (2026-09-05). Data as JSON: /api/errors/41922bf1792edf4c. Report an issue: GitHub.