TOC Prev Next

Modules, Packages, and Instances


A CUE file is a standalone file by default. A package clause allows a single configuration to be split across multiple files.


All files within a directory hierarchy with the same package identifier belong to the same package. Each directory within this hierarchy provides a different “view” of this package called an instance. An instance of a package for a directory is defined by all CUE files in that directory and all of its ancestor directories, belonging to the same package. This allows common configuration to be shared and policies to be enforced across a collection of related configurations.

See the Kubernetes Tutorial for a concrete example of instances.


A module is the directory hierarchy containing the CUE files of a package. The root of this directory hierarchy is the module root. It may be explicitly marked with a cue.mod file.

The module root may contain a pkg directory containing packages that are importable with import. The first package path component needs to be a domain name, else the cue tool is unable to import non-core packages. The convention is to use the URL from which the package is retrieved.


For importing a package from the pkg directory you can create the directory layout as follows:

touch cue.mod
mkdir -p pkg/

In our example the package contains the following content. Note that only identifiers starting with a capital letter may be imported.


package example

Foo: 100


package a

import ""

bar: example.Foo

$ cue eval a.cue

bar: 100