Skip to main content

CLI Reference

Command Index

CommandPhasePurpose
kindling initSetupBootstrap Kind cluster + operator
kindling runnersSetupRegister CI runner pool (GitHub/GitLab)
kindling intelSetupToggle AI assistant context files
kindling analyzeSetupCheck project readiness
kindling generateSetupAI-generate CI workflow
kindling deployDevelopApply DSE from YAML file
kindling pushDevelopRebuild + redeploy one service via CI
kindling syncDevelopLive-sync files into running pod
kindling debugDevelopAttach VS Code debugger to deployment
kindling devDevelopFrontend dev server with cluster access
kindling loadDevelopBuild + load image into Kind directly
kindling dashboardDevelopLaunch web dashboard
kindling exposeDevelopPublic HTTPS tunnel to cluster
kindling envDevelopManage deployment env vars
kindling secretsDevelopManage external credentials
kindling statusDevelopCluster + environment status
kindling logsDevelopTail controller logs
kindling snapshotProductionExport Helm/Kustomize + deploy
kindling production tlsProductionConfigure TLS with cert-manager
kindling resetLifecycleRemove runner pool, keep cluster
kindling destroyLifecycleDelete cluster and all resources
kindling versionPrint CLI version

Installation

brew install kindling-sh/tap/kindling

Build from source:

cd kindling && make cli
sudo cp bin/kindling /usr/local/bin/

Global Flags

FlagShortDefaultDescription
--cluster-cdevKind cluster name
--project-dir-p.Path to kindling project root

Setup

kindling init

Synopsis: kindling init [flags]

Bootstrap a Kind cluster with the kindling operator, ingress controller, and in-cluster registry.

Steps: preflight checks → kind create cluster → switch kubectl context → install Traefik ingress + registry → load operator image → apply CRDs → deploy operator → wait for rollout.

Recommended resources:

WorkloadCPUsMemoryDisk
Small (1–3 services)48 GB30 GB
Medium (4–6 services)612 GB50 GB
Large (7+ services)8+16 GB80 GB

Flags:

FlagShortDefaultDescription
--skip-clusterfalseSkip Kind cluster creation (use existing)
--buildfalseBuild operator from source instead of pulling
--operator-imageghcr.io/kindling-sh/kindling-operator:latestOperator image to pull
--imageKind node image (e.g. kindest/node:v1.29.0)
--kubeconfigPath to write kubeconfig
--waitWait for control plane (e.g. 60s, 5m)
--retainfalseRetain nodes for debugging
--exposefalseStart HTTPS tunnel after bootstrap

Examples:

kindling init
kindling init --build
kindling init --expose
kindling init --image kindest/node:v1.29.0
kindling init --skip-cluster

kindling runners

Synopsis: kindling runners [flags]

Create a CI runner pool. Supports GitHub Actions (default) and GitLab CI.

Flags:

FlagShortDefaultDescription
--username-uCI platform username
--repo-rRepository (owner/repo or group/project)
--token-tPAT or runner registration token
--ci-providergithubgithub or gitlab

Examples:

kindling runners -u myuser -r myorg/myrepo -t ghp_xxxxx
kindling runners --ci-provider gitlab -u myuser -r mygroup/myproject -t glpat_xxxxx

kindling intel

Synopsis: kindling intel on|off

Toggle agent context files for AI coding assistants (GitHub Copilot, Claude Code, Cursor, Windsurf). Generates .github/copilot-instructions.md, CLAUDE.md, .cursor/rules/, and .windsurfrules with full project context.


kindling analyze

Synopsis: kindling analyze [flags]

Check project readiness before generating a workflow. Detects Dockerfiles, dependencies (15 types), secrets, agent frameworks (LangChain, CrewAI, LangGraph, OpenAI Agents SDK, MCP), inter-service communication, and build context alignment.

Flags:

FlagShortDefaultDescription
--repo-path-r.Path to the repository
--verbose-vfalseShow additional detail

See Analyze for full reference.


kindling generate

Synopsis: kindling generate [flags]

AI-generate a CI workflow for any repository. Scans for Dockerfiles, dependencies, ports, health checks, Helm charts, Kustomize overlays, docker-compose files, .env templates, and agent frameworks. Produces a complete GitHub Actions or GitLab CI workflow.

Flags:

FlagShortDefaultDescription
--api-key-k— (required)GenAI API key
--repo-path-r.Path to the repository
--ai-provideropenaiopenai or anthropic
--modelautoModel name (default: o3 / claude-sonnet-4-20250514)
--output-oautoOutput path for workflow file
--dry-runfalsePrint to stdout instead of writing
--ingress-allfalseWire every service with an ingress
--no-helmfalseSkip Helm/Kustomize rendering
--ci-providergithubgithub or gitlab

Examples:

kindling generate -k sk-... -r .
kindling generate -k sk-... -r . --dry-run
kindling generate -k sk-ant-... -r . --ai-provider anthropic
kindling generate -k sk-... -r . --ci-provider gitlab
kindling generate -k sk-... -r . --ingress-all

Develop

kindling deploy

Synopsis: kindling deploy -f <file>

Apply a DevStagingEnvironment from a YAML file (manual deploy).


kindling push

Synopsis: kindling push -s <service>

Rebuild and redeploy a single service via CI. Verifies workflow secrets and workflow file exist before triggering.


kindling sync

Synopsis: kindling sync [flags]

Live-sync local files into a running pod with language-aware hot reload. Automatic rollback on Ctrl+C.

Restart strategies (auto-detected):

StrategyRuntimesMechanism
wrapper + killNode.js, Python, Ruby, Perl, Lua, Julia, R, Elixir, Deno, BunPatch deployment, sync files, kill child to respawn
signal reloaduvicorn, gunicorn, Puma, Unicorn, Nginx, ApacheSIGHUP for zero-downtime reload
auto-reloadPHP, nodemonSync files, runtime re-reads automatically
local build + syncGo, Rust, Java, Kotlin, C#/.NET, C/C++, ZigCross-compile locally, sync binary, restart

Flags:

FlagShortDefaultDescription
--deployment-d— (required)Target deployment name
--src.Local source directory
--dest/appDestination inside container
--namespace-ndefaultKubernetes namespace
--restartfalseRestart app after each sync
--oncefalseSync once and exit
--containerContainer name (multi-container pods)
--excludeAdditional exclude patterns
--debounce500msDebounce interval
--languageautoOverride runtime detection
--build-cmdautoLocal build command for compiled languages
--build-outputautoPath to built artifact

Examples:

kindling sync -d my-api --restart
kindling sync -d my-api --restart --once
kindling sync -d orders --src ./services/orders --restart
kindling sync -d gateway --restart --language go
kindling sync -d frontend --src ./dist --dest /usr/share/nginx/html --restart

kindling debug

Synopsis: kindling debug -d <deployment> [flags]

Attach a VS Code debugger to a running deployment. Auto-detects runtime, injects debug agent, port-forwards, and writes launch.json.

Flags:

FlagShortDefaultDescription
--deployment-d— (required)Deployment name
--stopfalseStop an active debug session
--namespace-ndefaultKubernetes namespace
--portautoOverride local debug port
--no-launchfalseSkip writing launch.json

Supported runtimes:

RuntimeDebug toolDefault port
Pythondebugpy5678
Node.jsV8 Inspector9229
DenoV8 Inspector9229
BunBun Inspector6499
GoDelve2345
Rubyrdbg12345

Examples:

kindling debug -d my-api          # start debugging, then F5 in VS Code
kindling debug --stop -d my-api # stop and restore original deployment

See Debugging for language-specific details.


kindling dev

Synopsis: kindling dev -d <deployment> [flags]

Run a frontend dev server locally with full access to cluster APIs. For frontend deployments (nginx, caddy, httpd) where you want local hot reload instead of build+sync.

Steps: detect frontend → resolve source dir → port-forward backend APIs → detect OAuth/start tunnel → patch Vite/Next.js config → launch dev server.

Flags:

FlagShortDefaultDescription
--deployment-d— (required)Frontend deployment name
--namespace-ndefaultKubernetes namespace
--stopfalseStop the dev session

Examples:

kindling dev -d my-frontend       # start dev mode
kindling dev --stop -d my-frontend # stop

See Dev Mode for full documentation.


kindling load

Synopsis: kindling load -s <service> --context <path>

Build and load a container image directly into Kind (without CI).


kindling dashboard

Synopsis: kindling dashboard [--port 9090]

Launch the kindling web dashboard. Provides visual management for environments, sync, load, pods, logs, secrets, env vars, scaling, and tunnels.

Dashboard sections:

SectionCapabilities
SetupApp Designer, Analyze & Generate, Runners
DevelopEnvironments, API Explorer, Cluster Resources
ProductionOverview, Deploy, Workloads, Network, TLS, Metrics

kindling expose

Synopsis: kindling expose [flags]

Create a public HTTPS tunnel to the cluster's ingress controller.

ProviderAccount required
cloudflaredNo (free quick tunnels)
ngrokYes (free tier available)

Flags:

FlagShortDefaultDescription
--tunnelauto-detectcloudflared or ngrok
--port80Local port to expose
--stopfalseStop tunnel and restore ingress
--serviceSpecific ingress to route to

kindling env

Synopsis: kindling env <subcommand> <deployment> [args]

Manage environment variables on running deployments.

SubcommandSynopsisDescription
setkindling env set <deploy> KEY=VALUE [...]Set environment variables
listkindling env list <deploy>List environment variables
unsetkindling env unset <deploy> KEY [...]Remove environment variables

kindling secrets

Synopsis: kindling secrets <subcommand>

Manage external credentials as Kubernetes Secrets with local backup.

SubcommandSynopsisDescription
setkindling secrets set <name> <value>Create/update Secret + local backup
listkindling secrets listList all kindling-managed secrets
deletekindling secrets delete <name>Remove from cluster and backup
restorekindling secrets restoreRe-create secrets from backup after cluster rebuild

kindling status

Synopsis: kindling status

Show cluster, operator, runner, and environment status. Includes crash diagnostics for unhealthy pods.


kindling logs

Synopsis: kindling logs [flags]

Tail the kindling controller logs.

Flags:

FlagShortDefaultDescription
--allfalseAll containers in the pod
--since5mDuration (e.g. 5m, 1h)
--follow-ftrueFollow output

Production

kindling snapshot

Synopsis: kindling snapshot [flags]

Export a Helm chart or Kustomize overlay from the current cluster state, optionally push images to a container registry, and deploy to a production cluster.

Steps: read all DSEs → strip actor prefix from names → generate chart with values.yaml (clean defaults) + values-live.yaml (dev values) → optionally push images via crane copy → optionally helm install on production cluster.

Flags:

FlagShortDefaultDescription
--format-fhelmhelm or kustomize
--output-o./kindling-snapshotOutput directory
--name-nkindling-snapshotChart/project name
--registry-rContainer registry (e.g. ghcr.io/myorg)
--tag-tgit SHAImage tag
--deployfalseDeploy after generating chart
--contextKubeconfig context for production cluster
--namespacedefaultNamespace to deploy into

Examples:

# Generate only
kindling snapshot # Helm chart in ./kindling-snapshot/
kindling snapshot --format kustomize # Kustomize overlay
kindling snapshot -o ./my-chart # custom output directory

# Push images + deploy to production
kindling snapshot -r ghcr.io/myorg --deploy --context do-prod
kindling snapshot -r ghcr.io/myorg -t v1.2.0 --deploy --context do-prod --namespace staging

Manual usage:

helm template my-app ./kindling-snapshot -f values-live.yaml
helm install my-app ./kindling-snapshot \
--set gateway.env.DATABASE_URL=postgres://prod-host:5432/mydb

kindling production tls

Synopsis: kindling production tls [flags]

Configure TLS with cert-manager for production Ingress resources. Installs cert-manager, creates a Let's Encrypt ClusterIssuer, and optionally patches a DSE YAML to enable TLS.

Flags:

FlagShortDefaultDescription
--context— (required)Kubeconfig context for production cluster
--domain— (required)Domain for TLS certificate
--email— (required)Email for Let's Encrypt registration
--issuerletsencrypt-prodClusterIssuer name
--stagingfalseUse Let's Encrypt staging server
--file-fDSE YAML to patch with TLS config
--ingress-classtraefikIngressClass for ACME solver

Examples:

kindling production tls --context my-prod --domain app.example.com --email admin@example.com
kindling production tls --context my-prod --domain app.example.com --staging
kindling production tls --context my-prod --domain app.example.com -f dev-environment.yaml

Lifecycle

kindling reset

Synopsis: kindling reset [-y]

Remove the runner pool to point at a new repo. Leaves the cluster intact.


kindling destroy

Synopsis: kindling destroy [-y]

Delete the Kind cluster and all resources.


kindling version

Synopsis: kindling version

Print the CLI version.


Dependency Auto-Injection

When a dependency is declared in spec.dependencies[], the operator auto-injects the connection URL:

DependencyInjected env var
postgresDATABASE_URL
redisREDIS_URL
mysqlDATABASE_URL
mongodbMONGO_URL
rabbitmqAMQP_URL
minioS3_ENDPOINT
elasticsearchELASTICSEARCH_URL
kafkaKAFKA_BROKER_URL
natsNATS_URL
memcachedMEMCACHED_URL
cassandraCASSANDRA_URL
consulCONSUL_URL
vaultVAULT_ADDR
influxdbINFLUXDB_URL
jaegerJAEGER_URL

Do not duplicate these in spec.env[] — they are injected automatically.


Typical Workflow

# ── SETUP ────────────────────────────────────────
kindling init
kindling runners -u alice -r acme/myapp -t ghp_xxxxx
kindling analyze
kindling generate -k sk-... -r .
kindling secrets set STRIPE_KEY sk_live_...

# ── DEVELOP ──────────────────────────────────────
git push origin main # outer loop: build + deploy
kindling status # verify deployment
kindling sync -d alice-myapp --restart # inner loop: live sync
kindling debug -d alice-myapp # attach debugger
kindling dev -d alice-frontend # frontend hot reload
kindling dashboard # visual control plane
kindling env set alice-myapp LOG_LEVEL=debug
kindling push -s alice-myapp # rebuild one service
kindling expose # public URL for OAuth

# ── PRODUCTION ───────────────────────────────────
kindling snapshot -r ghcr.io/myorg --deploy --context my-prod
kindling production tls --context my-prod --domain app.example.com --email admin@example.com

# ── LIFECYCLE ────────────────────────────────────
kindling reset # switch repos
kindling destroy -y # tear down