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 emptyView on GitHub (pinned to 35f3160f4a)
Solutions
- Add --architecture matching one of the listed values: `vagrant box update --box mybox --provider virtualbox --architecture arm64`
- Run `uname -m` (or check the host arch) to decide which architecture to select
- 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
- Derive --architecture from `uname -m` in scripts instead of omitting it
- Check `vagrant box list` for architecture variants of the newest version before updating
- Pin provider and architecture in shared scripts to avoid ambiguity errors
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
- You requested to update the box '%{name}'. This box has mult
- The box '%{name}' for the provider '%{provider}' isn't insta
- The box '%{name}' is not a versioned box. The box was added
- The box '%{name}' does not exist. Please double check and tr
- The box '%{name}' isn't installed for the provider '%{provid
AI-assisted analysis of hashicorp/vagrant@35f3160f4a (2026-08-21).
Data as JSON: /api/errors/7a9dce9d39ae22b6.
Report an issue: GitHub.