Introduction

In this tutorial you will learn how to create and work with CUE modules, using the Central Registry.

Along the way you will:

  • Create a module that depends on an existing, well-known module
  • Use cue mod tidy to automatically add dependencies and their versions to the module.cue file

Create a module

1

Initialize a local CUE module. We will not publish this module:

TERMINAL
$ cue mod init glacial-tech.example/frostyapp@v0

We refer to such a module as the main module. Because we won’t publish this module, its module path is not significant. The module path we have chosen makes this guide consistent with its companion tutorial Working with a custom module registry.

2

Create the code for the new module:

config.cue
package frostyapp

import "github.com/cue-labs/examples/frostyconfig@v0"

config: frostyconfig.#Config & {
	appName: "alpha"
	port:    80
	features: logging: true
}

This imports the frostyconfig package first introduced in the tutorial Working with a custom module registry. Instead of depending on a version of that module published to a custom registry, we have instead published a version to the Central Registry. In our local module we define some concrete values for the configuration, constrained by the frostyconfig.#Config schema.

3

Ensure the module is tidy, pulling all dependencies:

TERMINAL
$ cue mod tidy

If you see an error message mentioning “too many requests” then login to the Central Registry and re-run this command. The Central Registry allows more requests from authenticated users.

We can see that the dependencies have now been added to the cue.mod/module.cue file:

TERMINAL
$ cat cue.mod/module.cue
module: "glacial-tech.example/frostyapp@v0"
language: {
	version: "v0.13.0"
}
deps: {
	"github.com/cue-labs/examples/frostyconfig@v0": {
		v: "v0.0.1"
	}
}

Evaluate the configuration

4

Export the configuration as YAML:

TERMINAL
$ cue export --out yaml
config:
  appName: alpha
  port: 80
  features:
    logging: true

Congratulations!

That’s it, you have just created a local module that depends on a well-known module from the Central Registry!