Skip to content

CLI Reference

The vorpal CLI is the single entry point for all user interactions with the Vorpal build system. It handles building artifacts, managing configuration, running built artifacts, and administering system services.

FlagDefaultDescription
--level <LEVEL>INFOLog level (TRACE, DEBUG, INFO, WARN, ERROR)
--versionPrint version information
--helpPrint help information

Log output goes to stderr. At DEBUG and TRACE levels, file names and line numbers are included.

Build an artifact by name from a Vorpal configuration file.

Terminal window
vorpal build <NAME> [OPTIONS]
ArgumentDescription
<NAME>Name of the artifact to build (required)
FlagDefaultDescription
--agent <ADDRESS>unix:///var/lib/vorpal/vorpal.sockAgent service address
--config <PATH>Vorpal.tomlPath to configuration file
--context <PATH>.Build context directory
--exportfalseExport the artifact definition as JSON instead of building
--namespace <NAME>libraryArtifact namespace
--pathfalsePrint the output path instead of the digest
--rebuildfalseForce rebuild, ignoring cached outputs
--registry <ADDRESS>unix:///var/lib/vorpal/vorpal.sockRegistry service address
--system <SYSTEM>Host systemTarget system (e.g., aarch64-darwin, x86_64-linux)
--unlockfalseAllow source digests to change (update lockfile)
--variable <KEY=VALUE>Set build variables (can be repeated)
--worker <ADDRESS>unix:///var/lib/vorpal/vorpal.sockWorker service address
Terminal window
# Build an artifact named "my-app"
vorpal build my-app
# Build with a custom config file
vorpal build my-app --config Vorpal.go.toml
# Force rebuild and print the output path
vorpal build my-app --rebuild --path
# Build for a specific target system
vorpal build my-app --system x86_64-linux
# Update locked source digests
vorpal build my-app --unlock
# Export artifact definition as JSON (no build)
vorpal build my-app --export
# Pass build variables
vorpal build my-app --variable VERSION=1.2.3 --variable ENV=prod

By default, prints the artifact’s SHA-256 content digest. With --path, prints the filesystem path to the artifact output directory. With --export, prints the artifact definition as pretty-printed JSON.

Manage project-level and user-level configuration settings.

Terminal window
vorpal config [--user] [--config <PATH>] <SUBCOMMAND>
FlagDefaultDescription
--userfalseApply to user-level config (~/.vorpal/settings.json) instead of project-level
--config <PATH>Vorpal.tomlPath to the project-level configuration file

Set a configuration value.

Terminal window
vorpal config set <KEY> <VALUE>

Valid keys: registry, namespace, language, name, system, worker.

Terminal window
# Set registry in project config
vorpal config set registry "https://registry.example.com:23151"
# Set namespace in user config
vorpal config --user set namespace "my-team"

Get a configuration value with its source.

Terminal window
vorpal config get <KEY>
Terminal window
$ vorpal config get registry
registry = unix:///var/lib/vorpal/vorpal.sock (default)

Show all configuration values with their sources.

Terminal window
$ vorpal config show
KEY VALUE SOURCE
--- ----- ------
registry unix:///var/lib/vorpal/vorpal.sock default
namespace library default
language rust project
name vorpal-config project
system aarch64-darwin default
worker unix:///var/lib/vorpal/vorpal.sock default

Scaffold a new Vorpal project with language selection.

Terminal window
vorpal init <NAME> [OPTIONS]
ArgumentDescription
<NAME>Project name (required)
FlagDefaultDescription
--path <PATH>.Output directory for the project files

The command presents an interactive language selector:

  • Go — Generates cmd/<name>/main.go, cmd/vorpal/main.go, go.mod, go.sum, Vorpal.toml. The template directory cmd/example/ is dynamically renamed to cmd/<name>/ using the project name.
  • Rust — Generates Cargo.toml, Cargo.lock, src/main.rs, src/vorpal.rs, Vorpal.toml, .gitignore
  • TypeScript — Generates src/vorpal.ts, src/main.ts, package.json, tsconfig.json, Vorpal.toml, .gitignore, bun.lock
Terminal window
# Create a new project in the current directory
vorpal init my-project
# Create a new project in a specific directory
vorpal init my-project --path /path/to/project

Inspect a stored artifact by its content digest. Prints the full artifact definition as JSON.

Terminal window
vorpal inspect <DIGEST> [OPTIONS]
ArgumentDescription
<DIGEST>Artifact SHA-256 content digest (required)
FlagDefaultDescription
--namespace <NAME>libraryArtifact namespace
--registry <ADDRESS>unix:///var/lib/vorpal/vorpal.sockRegistry service address
Terminal window
# Inspect an artifact by digest
vorpal inspect abc123def456...

Authenticate with an OAuth2 provider using the device authorization flow.

Terminal window
vorpal login [OPTIONS]
FlagDefaultDescription
--issuer <URL>http://localhost:8080/realms/vorpalOIDC issuer base URL
--issuer-audience <AUDIENCE>OAuth2 audience parameter
--issuer-client-id <ID>cliOAuth2 client ID
--registry <ADDRESS>unix:///var/lib/vorpal/vorpal.sockRegistry to associate credentials with

The command performs OAuth2 device flow authentication, displays a verification URL and code, then stores the resulting credentials at /var/lib/vorpal/key/credentials.json.

Terminal window
# Login with default settings (local Keycloak)
vorpal login
# Login to a production identity provider
vorpal login --issuer https://id.example.com/realms/vorpal --registry https://registry.example.com:23151

Execute a previously built artifact by alias. The alias format is [<namespace>/]<name>[:<tag>].

Terminal window
vorpal run <ALIAS> [OPTIONS] [-- ARGS...]
ArgumentDescription
<ALIAS>Artifact alias (required). Format: [namespace/]name[:tag]
[ARGS...]Arguments passed through to the artifact binary
FlagDefaultDescription
--bin <NAME>Artifact nameOverride the binary name to execute within the artifact
--registry <ADDRESS>unix:///var/lib/vorpal/vorpal.sockRegistry service address

The command resolves the alias to a digest (checking local store, then registry), locates the binary in the artifact’s bin/ directory, and replaces the current process with the binary (exec).

Terminal window
# Run an artifact
vorpal run my-tool
# Run with a specific binary from the artifact
vorpal run my-tools --bin specific-tool
# Run with arguments
vorpal run my-tool -- --verbose --output /tmp/out
# Run from a specific namespace and tag
vorpal run my-namespace/my-tool:v1.0

Manage Vorpal system resources and services.

Generate TLS key pairs for secure service communication. Creates CA certificate, service certificate, service keypair, and service secret in /var/lib/vorpal/key/.

Terminal window
vorpal system keys generate

Generated files:

  • CA private key and certificate
  • Service private key, public key, and certificate (signed by the CA)
  • Service secret (UUID v7)

Files are only generated if they do not already exist. Safe to run multiple times.

Clean up the local artifact store to free disk space.

Terminal window
vorpal system prune [OPTIONS]
FlagDefaultDescription
--allfalsePrune all resource types
--artifact-aliasesfalsePrune artifact alias references
--artifact-archivesfalsePrune compressed artifact archives
--artifact-configsfalsePrune compiled configuration outputs
--artifact-outputsfalsePrune unpacked artifact outputs
--sandboxesfalsePrune build sandbox directories
Terminal window
# Prune everything
vorpal system prune --all
# Prune only archives and outputs
vorpal system prune --artifact-archives --artifact-outputs
# Prune only sandboxes
vorpal system prune --sandboxes

Start the gRPC backend services (agent, registry, worker).

Terminal window
vorpal system services start [OPTIONS]
FlagDefaultDescription
--archive-cache-ttl <SECONDS>300TTL for caching archive check results (0 to disable)
--health-checkfalseEnable plaintext gRPC health check endpoint
--health-check-port <PORT>23152Port for health check listener
--issuer <URL>OIDC issuer URL for JWT validation
--issuer-audience <AUDIENCE>Expected JWT audience
--issuer-client-id <ID>OAuth2 client ID for worker-to-registry auth
--issuer-client-secret <SECRET>OAuth2 client secret for worker-to-registry auth
--port <PORT>TCP port (omit for Unix domain socket mode)
--registry-backend <BACKEND>localRegistry storage backend (local or s3)
--registry-backend-s3-bucket <BUCKET>S3 bucket name (required when backend is s3)
--registry-backend-s3-force-path-stylefalseUse path-style S3 URLs
--services <LIST>agent,registry,workerComma-separated list of services to start
--tlsfalseEnable TLS (requires keys from vorpal system keys generate)
  • Unix domain socket (default): Listens on /var/lib/vorpal/vorpal.sock. Override with VORPAL_SOCKET_PATH environment variable.
  • TCP: When --port is specified. Listens on [::]:<port>.
  • TLS over TCP: When --tls is enabled. Defaults to port 23151 if --port is not specified.
Terminal window
# Start all services with defaults (Unix socket)
vorpal system services start
# Start with TLS enabled
vorpal system services start --tls
# Start on a specific TCP port
vorpal system services start --port 23151
# Start with S3 registry backend
vorpal system services start --registry-backend s3 --registry-backend-s3-bucket my-bucket
# Start only the registry service
vorpal system services start --services registry
# Enable health checks
vorpal system services start --health-check
# Start with OIDC authentication
vorpal system services start \
--issuer https://id.example.com/realms/vorpal \
--issuer-audience vorpal \
--issuer-client-id worker \
--issuer-client-secret <secret>
VariableDescription
VORPAL_SOCKET_PATHOverride the default Unix domain socket path (/var/lib/vorpal/vorpal.sock)
CodeMeaning
0Success
1Error (build failure, missing artifact, configuration error, etc.)