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/cuelang.org/example
In our example the package cuelang.org
contains the following content. Note that only identifiers starting with a capital letter may be imported.
pkg/cuelang.org/example/example.cue:
package example Foo: 100
a.cue:
package a import "cuelang.org/example" bar: example.Foo
$ cue eval a.cue
bar: 100