Skip to content

CONGA

CONGA aims to deliver the most complete modern CLI experience with the least developer effort.

Model the CLI as Go types

Each command is a Go struct whose fields and tags describe its flags, arguments, subcommands, and constraints. CONGA reads that structure to generate the schema, help screen, validation, and completion.

12-factor configuration

Every value resolves through a deterministic precedence ladder — CLI > environment > config file > default — with provenance tracking on every field.

6-shell autocompletion

Bash, zsh, fish, powershell, elvish, and nushell — all driven by CONGA’s own completion engine and a decoupled predictor SDK.

Self-completing domain types

File, Dir, ByteSize, and friends complete and validate themselves; any type implementing TextUnmarshaler joins in for free. See the domain type reference.

Static schema linting

conga-lint checks the schema contract at build time — struct tags, leaf Runner implementations, and ancestor flag shadowing — before your binary ever runs. See linting schemas.

Lifecycle with guaranteed teardown

Validate → PreRun → Run → PostRun → Finally: hooks receive ctx and session, and Finally runs on success and failure alike. See the lifecycle.

Custom types and decoders

Turn any type into a flag with app.RegisterType, register map parsers, or add a decoder for a new configuration format. See custom types and decoders.

Opt-in subsystems, linker friendly

Completion, configuration, and .env loading link only when enabled, and unused payloads are dead-code eliminated. See About binary size and linking for measured comparisons.