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.
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.