BundlePackage represents a set of packages that are expected to work well together, such as a collection of commonly used software libraries. The associated software is specified as dependencies.

If it makes sense, variants, conflicts, and requirements can be added to the package. Variants ensure that common build options are consistent across the packages supporting them. Conflicts and requirements prevent attempts to build with known bugs or limitations.

For example, if MyBundlePackage is known to only build on linux, it could use the require directive as follows:

require("platform=linux", msg="MyBundlePackage only builds on linux")

Spack has a number of built-in bundle packages, such as:

where Xsdk also inherits from CudaPackage and RocmPackage and Libc is a virtual bundle package for the C standard library.


Be sure to specify the bundle template if you are using spack create to generate a package from the template. For example, use the following command to create a bundle package whose class name will be Mybundle:

$ spack create --template bundle --name mybundle


The BundlePackage base class does not provide any phases by default since the bundle does not represent a build system.


The url property does not have meaning since there is no package-specific code to fetch.


At least one version must be specified in order for the package to build.