hashicorp/vagrant · error · Vagrant::Errors::BoxUpdateMultiArchitecture

You requested to update the box '%{name}' (v%{version}) with

Error message

You requested to update the box '%{name}' (v%{version}) with provider
'%{provider}'. This box has multiple architectures. You must explicitly
select a single architecture to update with `--architecture`.

What it means

Raised by `vagrant box update` when, after resolving the box and provider to its newest installed version (versions sorted with Gem::Version, last one wins), that exact version is installed for more than one architecture and --architecture was not passed. The message lists the architectures of that resolved version.

Source

Thrown at plugins/commands/box/command/update.rb:95

              raise Vagrant::Errors::BoxUpdateMultiProvider,
                name: name.to_s,
                providers: box_info.keys.map(&:to_s).sort.join(", ")
            end

            provider = box_info.keys.first
          elsif !box_info[provider]
            raise Vagrant::Errors::BoxNotFoundWithProvider,
              name: name.to_s,
              provider: provider.to_s,
              providers: box_info.keys.map(&:to_s).sort.join(", ")
          end

          version = box_info[provider].keys.sort_by{ |v| Gem::Version.new(v) }.last
          architecture_list = box_info[provider][version]

          if !architecture
            if architecture_list.size > 1
              raise Vagrant::Errors::BoxUpdateMultiArchitecture,
                name: name.to_s,
                provider: provider.to_s,
                version: version.to_s,
                architectures: architecture_list.sort.join(", ")
            end

            architecture = architecture_list.first
          elsif !architecture_list.include?(architecture)
            raise Vagrant::Errors::BoxNotFoundWithProviderArchitecture,
              name: name.to_s,
              provider: provider.to_s,
              version: version.to_s,
              architecture: architecture,
              architectures: architecture_list.sort.join(", ")
          end

          # Architecture gets cast to a string when collecting information
          # above. Convert it back to a nil if it's empty

View on GitHub (pinned to 35f3160f4a)

Solutions

  1. Add --architecture matching one of the listed values: `vagrant box update --box mybox --provider virtualbox --architecture arm64`
  2. Run `uname -m` (or check the host arch) to decide which architecture to select
  3. Pin --architecture in shared scripts to keep updates deterministic

Example fix

# before
vagrant box update --box mybox --provider virtualbox
# error: multiple architectures, must select one (amd64, arm64)

# after
uname -m   # e.g. arm64
vagrant box update --box mybox --provider virtualbox --architecture arm64
Defensive patterns

Strategy: validation

Validate before calling

# bash: pass --architecture explicitly on mixed-arch fleets
ARCH=$(uname -m)                 # e.g. arm64 / x86_64
vagrant box update --box "$BOX" --provider "$PROVIDER" --architecture "$ARCH"

Prevention

When it happens

Trigger: `vagrant box update --box mybox --provider virtualbox` where the newest installed version has both amd64 and arm64 variants; multi-arch boxes on Apple Silicon or ARM CI hosts.

Common situations: Mixed fleets of Intel and Apple Silicon machines sharing scripts; newer Vagrant box distributions that ship per-architecture packages.

Related errors


AI-assisted analysis of hashicorp/vagrant@35f3160f4a (2026-08-21). Data as JSON: /api/errors/7a9dce9d39ae22b6. Report an issue: GitHub.