--- layout: docs page_title: Box File Format description: |- The box file format for Vagrant supports a number different providers. --- # Box File Format A Vagrant `.box` file is a [tarball]() (`tar`, `tar.gz`, `zip`) that contains all the information for a provider to launch a Vagrant machine. There are four different components that make up a box: - VM artifacts (required) - This is the VM image and other artifacts in the format accepted by the provider the box is intended for. For example, a box targeting the VirtualBox provider might have a `.ofv` file and some `.vmdk` files. - metadata.json (required) - Contains a map with information about the box. Most importantly the target provider. - info.json - This is a JSON document that can provide additional information about the box that displays when a user runs `vagrant box list -i`. More information is provided [here](/vagrant/docs/boxes/info). - Vagrantfile - The Vagrantfile embedded in the Vagrant box will provide some defaults for users of the box. For more information on how Vagrant merges Vagrantfiles including ones sourced within the box file see the [Vagrantfile docs](/vagrant/vagrant-cloud) So, if you extract a box and look at it's contents it will look like: ``` # contents of the hashicorp/bionic64 box # ref: https://app.vagrantup.com/hashicorp/boxes/bionic64 $ ls hashicorp_bionic_box Vagrantfile metadata.json box.ovf ubuntu-18.04-amd64-disk001.vmdk ``` ## Box metadata.json Within the archive, Vagrant does expect a single file: `metadata.json`. There is only one `metadata.json` per box file. `metadata.json` must contain at least the "provider" key with the provider the box is for. Vagrant uses this to verify the provider of the box. For example, if your box was for VirtualBox, the `metadata.json` would look like this: ```json { "provider": "virtualbox" } ``` If there is no `metadata.json` file or the file does not contain valid JSON with at least a "provider" key, then Vagrant will error when adding the box, because it cannot verify the provider. Other keys/values may be added to the metadata without issue. The value of the metadata file is passed opaquely into Vagrant and plugins can make use of it. Values currently used by Vagrant core: * `provider` - (string) Provider for the box * `architecture` - (string) Architecture of the box