{"record":{"id":"b4ed4d7c4e8a0eb8","repo":"hashicorp/vagrant","slug":"the-box-name-is-not-a-versioned-box-the-box","errorCode":null,"errorMessage":"The box '%{name}' is not a versioned box. The box was added directly instead of from a box catalog. Vagrant can only check the versions of boxes that were added from a catalog such as from the public Vagrant Server.","messagePattern":"The box '%(.+?)' is not a versioned box\\. The box was added directly instead of from a box catalog\\. Vagrant can only check the versions of boxes that were added from a catalog such as from the public Vagrant Server\\.","errorType":"exception","errorClass":"Vagrant::Errors::BoxUpdateNoMetadata","httpStatus":null,"severity":"error","filePath":"lib/vagrant/box.rb","lineNumber":191,"sourceCode":"        message: e.extra_data[:message]\n    ensure\n      tf.unlink if tf\n    end\n\n    # Checks if the box has an update and returns the metadata, version,\n    # and provider. If the box doesn't have an update that satisfies the\n    # constraints, it will return nil.\n    #\n    # This will potentially make a network call if it has to load the\n    # metadata from the network.\n    #\n    # @param [String] version Version constraints the update must\n    #   satisfy. If nil, the version constrain defaults to being a\n    #   larger version than this box.\n    # @return [Array]\n    def has_update?(version=nil, download_options: {})\n      if !@metadata_url\n        raise Errors::BoxUpdateNoMetadata, name: @name\n      end\n\n      if download_options.delete(:automatic_check) && !automatic_update_check_allowed?\n        @logger.info(\"Skipping box update check\")\n        return\n      end\n\n      version += \", \" if version\n      version ||= \"\"\n      version += \"> #{@version}\"\n      md      = self.load_metadata(download_options)\n      newer   = md.version(version, provider: @provider, architecture: @architecture)\n      \n      return nil if newer == nil || !md.compatible_version_update?(@version, newer.version, provider: @provider, architecture: @architecture)\n\n      [md, newer, newer.provider(@provider, @architecture)]\n    end\n","sourceCodeStart":173,"sourceCodeEnd":209,"githubUrl":"https://github.com/hashicorp/vagrant/blob/35f3160f4ad6edc3a9f3aa9570adfc1a4d73aaa5/lib/vagrant/box.rb#L173-L209","documentation":"BoxUpdateNoMetadata is raised by Box#has_update? (lib/vagrant/box.rb:191) when @metadata_url is nil, meaning the box was added from a bare .box file rather than from a versioned catalog. Only boxes with a catalog metadata URL carry version information, so update checks are impossible for them.","triggerScenarios":"Calling box.has_update? (or running 'vagrant box outdated' / 'vagrant box update' / Vagrantfile box_check_update) on a box added via 'vagrant box add /path/file.box --name x' — such boxes have no metadata_url, so the guard at the top of has_update? raises immediately.","commonSituations":"Teams distributing internal .box files directly instead of hosting a catalog metadata.json; CI images added offline; users expecting 'vagrant box outdated' to work on locally-built boxes.","solutions":["Re-add the box from a catalog (host a metadata.json with versions/providers and run 'vagrant box add <metadata-url> --name x') so version tracking works","If updates are not needed, stop invoking outdated/update checks on this box and set config.vm.box_check_update = false","Remove the ambiguity: keep versioned boxes in Vagrant Cloud or an internal catalog and reference them by name, not by .box path"],"exampleFix":"# before: unversioned add\nvagrant box add ./mybox_virtualbox.box --name corp/mybox\n\n# after: versioned catalog add\nvagrant box add https://boxes.corp/mybox/metadata.json --name corp/mybox","handlingStrategy":"validation","validationCode":"skip_update_check = box.metadata_url.nil? # only catalog boxes are versioned\nbox.has_update? unless skip_update_check","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Distribute internal boxes via a catalog metadata.json URL, never a bare .box path, if you need update checks","Turn off box_check_update in Vagrantfiles that use local .box artifacts"],"tags":["vagrant","box","update","versioning","catalog"],"backgroundTag":"artifact-missing-registry-metadata","analyzedSha":"35f3160f4ad6edc3a9f3aa9570adfc1a4d73aaa5","analyzedAt":"2026-08-21T13:34:32.514Z","schemaVersion":2},"datasetVersion":"2026-08-21T18:17:14.833Z"}