CLI Reference

Drive the control plane from your terminal

zipline is the operator CLI for the Zipline runtime control plane. Enroll once over mTLS, then apply specs, bind runtimes, and operate pipelines - all without leaving the shell.

macOS · Linux brew install zipline-run/tap/zipline
Shell curl -fsSL https://zipline.run/install.sh | sh
Windows scoop install zipline
Try it without installing

There is a cockpit, too

Everything below drives the control plane one command at a time. When you want to watch it instead, zipline tui opens a live six-screen cockpit: throughput and lag, every pipeline, the source-to-sink topology, connected instances, open incidents, and a running log tail.

zipline tui
The overview screen at 80 by 24, rendered from the real cockpit against demo data.

Walk through all six screens

How it fits together

Zipline has no deploy step. You apply a pipeline spec to the control plane, then bind a live runtime instance to it. Six ideas cover everything the CLI does.

Transport

mTLS, not passwords

Every command talks to the control plane over mutual TLS. You present a client certificate - there are no API keys to leak.

Identity

Enroll once

Redeem a single-use token; the CA issues you an OU=operator cert, cached locally. Every later command reuses it.

Targeting

Contexts

A context points the CLI at one runtime (address + cert dir). Switch environments with context use. Stored in ~/.zipline/config.

Topology

Pipelines & routes

A pipeline is one source feeding one or more routes (sinks). You describe it as YAML and apply it.

Wiring

Bindings

A spec is inert until you bind a runtime instance to its source (and sink slots). Bind/unbind is how you wire and unwire delivery.

Reuse

Profiles & placement

Profiles are reusable connector configs a slot references. Placement decides whether a connector runs in-process or as an external instance.

Common workflows

The everyday operator paths, start to finish.

Onboard a new pipeline

zipline connect rt.internal:9090 --token $ZIP_TOKEN --name prodPoint at a runtime, enroll, and save it as a context - in one step.
zipline auth whoamiConfirm your operator identity: common name, OU=operator, and cert expiry.
zipline pipeline apply -f orders.yamlRegister the pipeline spec with the control plane.
zipline pipeline bind orders --instance src-7f3aBind a live source instance - delivery begins from now.
zipline pipeline status ordersWatch it come up: state, bound instance, per-slot placement, incidents.

Look around

Daily ops
# everything at a glance - pipelines + instances
zipline status

# list pipelines, runtimes, and one pipeline in detail
zipline pipeline list
zipline instance list
zipline pipeline status orders

# any read command speaks JSON - pipe to jq
zipline pipeline list -o json | jq '.[].name'

Lifecycle: pick the right verb

Four ways to stop or steer delivery - they differ in whether resuming leaves a gap.

VerbWhat it doesData gap?
pause / resume HOLD a route (--route) or the source, then continue. Resume picks up from the held cursor. No - exactly where it left off
disable / enable Detach a sink route and release its WAL floor; keep the binding. Enable re-attaches. Yes - re-attaches from now
unbind Clear the binding entirely (whole pipeline, or one sink slot with --route). Re-bindable. Yes - resumes from now on re-bind
skip Accept the loss of a corrupt frame on a stalled route so the cursor can advance past it. One frame, deliberately

Recover a stalled pipeline

Recovery
# clear every stalled route at once
zipline pipeline skip orders --all

# swap to a healthy source instance without an explicit unbind
zipline pipeline bind orders --instance src-new --force

Everyday commands

The commands you reach for daily. The full reference covers connectors, tokens, route editing, and every flag.

Connect & authenticate
zipline connect <addr>

Point at a runtime and authenticate - the onboarding command. Saves a context and, if you pass a token, enrolls into it in one shot.

FlagTypeDescription
--tokenstringOperator enroll token (or use --token-file).
--namestringContext name to save. Defaults to default.
--enrollstringEnroll-plane address. Defaults to the control port + 2.
Example
zipline connect rt.internal:9090 --token $ZIP_TOKEN --name prod
zipline auth enroll

Redeem an operator enroll token for an operator client cert. Cache-first and idempotent - a valid cached cert is reused.

FlagTypeDescription
--tokenstringOperator enroll token.
--token-filestringFile containing the operator enroll token.
--enrollstringEnroll-plane address (env ZIPLINE_ENROLL). Defaults to the control port + 2.
Example
zipline auth enroll --token-file ./operator.tok
zipline auth whoami
local

Show the current operator certificate identity - common name, OU, and expiry - read straight from the local cert cache. No control-plane round-trip.

Example
zipline auth whoami
common_name: operator-ada
ou:          operator
expires:     2026-09-28T12:00:00Z
zipline context use <name>
local

Switch the current context - the runtime address, cert dir, and output format every command inherits. Pair with context current to see what's active.

Example
zipline context use staging
zipline context current
Pipelines
zipline pipeline apply

Apply a pipeline spec - YAML via -f or stdin. Creates or updates the pipeline on the control plane.

Example
zipline pipeline apply -f orders.yaml
# or from stdin
cat orders.yaml | zipline pipeline apply -f -
zipline pipeline plan

Dry-run a spec and print the diff - route changes, whether the source restarts, commit-mode changes - without applying anything.

Example
zipline pipeline plan -f orders.yaml
zipline pipeline list

List pipelines with name, state, and bound instance.

Example
zipline pipeline list
NAME     STATE     INSTANCE
orders   running   src-7f3a
audit    pending   (unbound)
zipline pipeline status <name>

Print a pipeline's status: state, bound instance, incidents, and a per-slot table (role, route, state, placement, profile).

Example
zipline pipeline status orders
zipline pipeline get <name>

Print a pipeline spec as canonical YAML - handy for review, version control, or feeding back into apply.

Example
zipline pipeline get orders > orders.yaml
zipline pipeline bind <name>

Bind an instance id to a pipeline (source) or a sink slot (with --route). This is what actually starts delivery.

FlagTypeDescription
--instance *stringRuntime-minted instance id to bind.
--routestringSink-slot route name. Omit to bind the source.
--forceboolUnbind any conflicting binding first, then bind.
Example
zipline pipeline bind orders --instance src-7f3a
# bind an external sink to a named route
zipline pipeline bind orders --route warehouse --instance sink-22b1
zipline pipeline unbind <name>

Clear the binding for a pipeline, or a single sink slot with --route (the route stays in the spec and is re-bindable).

Example
zipline pipeline unbind orders --route warehouse
zipline pipeline delete <name>

Delete a pipeline from the control plane.

Example
zipline pipeline delete audit
Lifecycle
zipline pipeline pause / resume

Pause a sink route (--route) or the source (no --route). Pause is a HOLD - resume continues from the held cursor with no gap.

Example
# hold the source, then continue later - no data gap
zipline pipeline pause  orders
zipline pipeline resume orders
zipline pipeline disable / enable

Disable a sink route - detach + release the WAL floor, keeping the binding. Enable re-attaches from now (any events during the gap are skipped).

Example
zipline pipeline disable orders --route warehouse
zipline pipeline enable  orders --route warehouse
zipline pipeline skip <name> [route]

Accept the loss of a corrupt frame on a stalled route so its cursor can advance. Pass a route, or --all to clear every stalled route.

Example
zipline pipeline skip orders warehouse
zipline pipeline skip orders --all
Profiles & secrets
zipline profile apply

Create or update a reusable connector profile from a YAML file. Pipelines reference profiles instead of repeating connector config.

Example
zipline profile apply -f pg-prod.yaml
zipline profile list
zipline secret set <ref> <value>

Store a secret value under a ref. The value is a positional arg (kept out of flag history) and is never echoed back - list shows refs only.

Example
zipline secret set pg-prod/password 's3cr3t'
zipline secret list   # names only, never values
Inspect
zipline status

Aggregate pipeline + instance overview in a single dial - counts, a pipelines table, and an instances table.

Example
zipline status
3 pipelines, 4 instances, 2 bound
zipline instance list

List runtime instances: instance id, display name, role (source / sink), and the pipeline they're bound to.

Example
zipline instance list
zipline version
local

Print the zipline version.

Example
zipline version
zipline v2.4.1

Tips & tricks

JSON for scripting

Every read command speaks structured output. Add -o json and pipe to jq - or -o yaml for a human diff.

A context per environment

Keep prod, staging, and dev contexts. context use prod once, then drop the --runtime flag from every command.

The operator cockpit

Run zipline tui, or just zipline on an interactive terminal, for a live six-screen view of the runtime. See what it looks like.

Quiet in CI

Pass -q to suppress confirmation chatter on mutations. The exit code still tells your pipeline whether it worked.

Plan before you apply

pipeline plan -f spec.yaml shows the diff - including whether the source must restart - before apply touches anything.

Secrets are write-only

secret set takes the value as a positional arg and never prints it back. secret list returns refs, never values.

Global flags

These apply to every command. Precedence is flag > environment variable > context profile > default. The full reference lists them all.

FlagEnv varDescriptionDefault
--contextZIPLINE_CONTEXTContext profile to usecurrent
--runtimeZIPLINE_RUNTIMEControl-plane address (mTLS); overrides the context-
--cert-dirZIPLINE_CERT_DIROperator cert cache dir; overrides the context-
-o, --outputZIPLINE_OUTPUTOutput format: text, json, yamltext
--timeout-Per-RPC timeout10s
-v, --verboseZIPLINE_VERBOSEDebug loggingfalse
-q, --quietZIPLINE_QUIETSuppress non-error outputfalse

Install the CLI

A single static binary. Pick your platform.

Homebrew
brew install zipline-run/tap/zipline

# or, no Homebrew - one-line installer
curl -fsSL https://zipline.run/install.sh | sh

# verify
zipline version

Upgrade with brew upgrade zipline, or re-run the installer to pull the latest release.

Scoop · winget · PowerShell
# Scoop
scoop install zipline

# winget
winget install Zipline.CLI

# or PowerShell one-liner
irm https://zipline.run/install.ps1 | iex

All three land zipline.exe on your PATH. Verify with zipline version.

Direct downloads

Prefer a raw binary? Grab one for your platform.

Every binary self-reports its build: run zipline version after install.

Need the full surface?

Every command, every flag, the mTLS auth model, connectors, and tokens - laid out for power operators.