LogoCyanPrint
Reference

CLI Commands Reference

Complete reference for all CyanPrint CLI commands

CLI Commands Reference

Global Options

FlagDefaultDescription
-r, --registry <URL>https://api.zinc.sulfone.raichu.cluster.atomi.cloudRegistry endpoint
-d, --debug-Enable debug output
--version-Print version

Environment Variables

VariableCorresponding Flag
CYANPRINT_REGISTRY-r, --registry

Command Aliases

CommandAlias
buildb
createc
updateu
tryt
daemond
pushp
testte

cyanprint build

Build Docker images using buildx.

cyanprint build <TAG> [OPTIONS]

Arguments

ArgumentRequiredDescription
<TAG>YesBuild tag (e.g. v1)

Options

OptionDefaultDescription
-c, --config <PATH>cyan.yamlPath to config file
-p, --platform <PLATFORMS>-Target platforms (comma-separated)
-b, --builder <NAME>-Buildx builder to use
--no-cache-Don't use cache
--dry-run-Show commands without executing
--folder <DIR>.Working directory for the build

cyanprint create

Create a new project from a template.

cyanprint create <TEMPLATE_REF> [PATH]

Arguments

ArgumentRequiredDescription
<TEMPLATE_REF>YesTemplate reference (format: <username>/<name>:<version>)
[PATH]NoOutput directory (default: .)

Options

OptionDefaultDescription
-c, --coordinator-endpointhttp://coord.cyanprint.dev:9000Coordinator URL

Environment Variables

VariableCorresponding Flag
CYANPRINT_COORDINATOR-c, --coordinator-endpoint

cyanprint update

Update an existing project to the latest template version. This command uses the .cyan_state.yaml file to perform a 3-way merge between your local changes and the upstream template.

cyanprint update [PATH]

Arguments

ArgumentRequiredDescription
[PATH]NoProject directory (default: .)

Options

OptionDefaultDescription
-c, --coordinator-endpointhttp://coord.cyanprint.dev:9000Coordinator URL
-i, --interactive-Select versions interactively
--force-Force update even if git is dirty (skip confirmation prompt)

Environment Variables

VariableCorresponding Flag
CYANPRINT_COORDINATOR-c, --coordinator-endpoint

cyanprint try

Try a local template or group without publishing to the registry.

cyanprint try <COMMAND>

Subcommands

try template

Try a local template (with build/images).

cyanprint try template <TEMPLATE_PATH> <OUTPUT_PATH> [OPTIONS]
Arguments
ArgumentRequiredDescription
<TEMPLATE_PATH>YesPath to template
<OUTPUT_PATH>YesOutput directory
Options
OptionDefaultDescription
--dev-Enable dev mode for local development
--keep-containers-Preserve template container and blob volume after execution
--disable-daemon-autostart-Skip automatic daemon start
-c, --coordinator-endpointhttp://coord.cyanprint.dev:9000Coordinator URL

try group

Try a local group template (no build, dependencies from registry).

cyanprint try group <TEMPLATE_PATH> <OUTPUT_PATH> [OPTIONS]
Arguments
ArgumentRequiredDescription
<TEMPLATE_PATH>YesPath to template
<OUTPUT_PATH>YesOutput directory
Options
OptionDefaultDescription
--disable-daemon-autostart-Skip automatic daemon start
-c, --coordinator-endpointhttp://coord.cyanprint.dev:9000Coordinator URL

Environment Variables

VariableCorresponding Flag
CYANPRINT_COORDINATOR-c, --coordinator-endpoint

cyanprint daemon

Manage the CyanPrint Coordinator daemon.

cyanprint daemon <COMMAND>

Subcommands

daemon start

Start the CyanPrint Coordinator daemon.

Docker must be installed and running before starting the daemon.

cyanprint daemon start [VERSION] [OPTIONS]
Arguments
ArgumentRequiredDescription
[VERSION]NoCoordinator version (default: latest)
Options
OptionDefaultDescription
-p, --port9000Port to host the daemon container
-r, --registryhttps://api.zinc.sulfone.raichu.cluster.atomi.cloudRegistry endpoint for the coordinator
Environment Variables
VariableCorresponding Flag
CYANPRINT_REGISTRY-r, --registry

daemon stop

Stop the CyanPrint Coordinator daemon and cleanup.

cyanprint daemon stop [OPTIONS]
Options
OptionDefaultDescription
-p, --port9000Port where daemon is running

cyanprint push

Push templates, processors, plugins, resolvers, or groups to the registry.

cyanprint push [OPTIONS] <COMMAND>

Options

OptionDefaultDescription
-t, --token <TOKEN>-Authentication token
-c, --config <CONFIG_PATH>cyan.yamlPath to config file
-m, --message <MESSAGE>No descriptionPublish message
--platform <PLATFORMS>-Target platforms for build (comma-separated)
--builder <NAME>-Buildx builder to use for build
--no-cache-Don't use cache during build
--dry-run-Show build commands without executing
--folder <DIR>.Working directory for the build (used with --build)

Environment Variables

VariableCorresponding Flag
CYAN_TOKEN-t, --token

Subcommands

push template

Push a template to the registry.

cyanprint push --token <TOKEN> template [OPTIONS] [BLOB_IMAGE] [BLOB_TAG] [TEMPLATE_IMAGE] [TEMPLATE_TAG]
Options
OptionDescription
--build <TAG>Build with tag before pushing (requires build config in cyan.yaml)
Arguments
ArgumentRequiredDescription
[BLOB_IMAGE]NoBlob image name
[BLOB_TAG]NoBlob tag
[TEMPLATE_IMAGE]NoTemplate image name
[TEMPLATE_TAG]NoTemplate tag

push processor

Push a processor to the registry.

cyanprint push --token <TOKEN> processor [OPTIONS] [IMAGE] [TAG]
Options
OptionDescription
--build <TAG>Build with tag before pushing (requires build config in cyan.yaml)
Arguments
ArgumentRequiredDescription
[IMAGE]NoImage name
[TAG]NoImage tag

push plugin

Push a plugin to the registry.

cyanprint push --token <TOKEN> plugin [OPTIONS] [IMAGE] [TAG]
Options
OptionDescription
--build <TAG>Build with tag before pushing (requires build config in cyan.yaml)
Arguments
ArgumentRequiredDescription
[IMAGE]NoImage name
[TAG]NoImage tag

push resolver

Push a conflict resolver artifact to the registry.

cyanprint push --token <TOKEN> resolver [OPTIONS] [IMAGE] [TAG]
Options
OptionDescription
--build <TAG>Build with tag before pushing (requires build config in cyan.yaml)
Arguments
ArgumentRequiredDescription
[IMAGE]NoImage name
[TAG]NoImage tag

push group

Push a template group (meta-template that combines other templates) to the registry.

Groups are config-only artifacts with no Docker images. Define the group structure in cyan.yaml and push without specifying images.

cyanprint push --token <TOKEN> group

cyanprint test

Automated snapshot-based testing for templates, processors, plugins, and resolvers. Unlike try (interactive development testing), test runs automated test cases defined in test.cyan.yaml and compares output against expected snapshots.

cyanprint test <COMMAND>

Subcommands

test init

Auto-generate test cases by walking a template's Q&A tree. For each question, all possible answer branches are explored to produce test combinations.

test init is only available for templates. Processors, plugins, and resolvers require manually creating test.cyan.yaml.

cyanprint test init [PATH] [OPTIONS]
Arguments
ArgumentRequiredDescription
[PATH]NoPath to template directory (default: .)
Options
OptionDefaultDescription
--max-combinations <N>30Maximum test combinations to generate
--text-seed <VALUE>"dummy"Seed value for Text question answers
--password-seed <VALUE>"secret"Seed value for Password question answers
--date-seed <VALUE>today's dateSeed value for Date question answers (YYYY-MM-DD)
-i, --interactive-Interactively select which branches to explore
-p, --parallel <N>1Parallel test cases for snapshot generation
-o, --output <DIR>.cyan_outputOutput directory for test results
--config <PATH>cyan.yamlPath to build config file
-c, --coordinator-endpointhttp://coord.cyanprint.dev:9000Coordinator URL
--disable-daemon-autostart-Skip automatic daemon start

test template

Run snapshot tests for a template.

cyanprint test template [PATH] [OPTIONS]
Arguments
ArgumentRequiredDescription
[PATH]NoPath to template directory (default: .)
Options
OptionDefaultDescription
--test <NAME>-Run only a specific test by name
--parallel <N>1Number of parallel test cases
--update-snapshots-Update expected snapshots with actual output
-o, --output <DIR>.cyan_outputOutput directory for test results
--config <PATH>cyan.yamlPath to build config file
--junit <PATH>-Write JUnit XML report to file
-c, --coordinator-endpointhttp://coord.cyanprint.dev:9000Coordinator URL
--disable-daemon-autostart-Skip automatic daemon start

test processor

Run snapshot tests for a processor.

cyanprint test processor [PATH] [OPTIONS]

Arguments and options are the same as test template.

test plugin

Run snapshot tests for a plugin.

cyanprint test plugin [PATH] [OPTIONS]

Arguments and options are the same as test template.

test resolver

Run snapshot tests for a resolver.

cyanprint test resolver [PATH] [OPTIONS]

Arguments and options are the same as test template.

Environment Variables

VariableCorresponding Flag
CYANPRINT_COORDINATOR-c, --coordinator-endpoint

Test Configuration (test.cyan.yaml)

Test cases are defined in a test.cyan.yaml file at the project root:

tests:
- name: my-test-case
expected:
type: snapshot
value:
path: ./fixtures/expected/my-test-case
# Template-specific fields:
answer_state:
project_name:
type: String
value: "test-project"
deterministic_state:
seed: "12345"
validate:
- "bun install --dry-run"
# Processor-specific fields:
input: ./fixtures/input
config: {}
globs:
- pattern: "**/*.ts"
type: Template
# Resolver-specific fields:
resolver_inputs:
- path: ./inputs/template-a
origin:
template: template-a
layer: 0

Snapshot Comparison Rules

File TypeComparison Method
.json filesDeep comparison (field order ignored)
Other text filesExact string match (trailing whitespace trimmed)
Binary filesSkipped (reported but not compared)

Extra files in actual output or missing files from expected output cause test failure.