Skip to content

lets

A declarative CLI builder. Define commands in KDL, get a production-quality CLI instantly.

description "My project tasks"

build "cargo build"
test "cargo test"
lint "cargo clippy -- -D warnings"

db {
    description "Database commands"
    migrate "diesel migration run"
    reset "diesel database reset"
}
$ lets --help
My project tasks

Commands:
  build
  test
  lint
  db     Database commands

$ lets db migrate
Running migration...

No code. No build step. Just a config file.

Why lets?

Most task runners make you choose between simplicity and power. Simple tools like make give you targets but no help text, no typed arguments, no completions. Powerful tools require learning a scripting language or a complex YAML schema.

lets gives you the UX of a hand-written clap CLI — colored help, typo suggestions, tab completion, typed arguments — from a config file you can write in under a minute.

lets Make just task
Config format KDL Makefile Justfile YAML
Typed args & flags Yes No Limited Limited
Shell completions Auto-generated No Manual Manual
Nested subcommands Yes No No Yes
Parallel deps Yes Yes No Yes
Interactive prompts Built-in No No No
Help text Auto-generated No Yes Yes
Arg validation Choices, types No No No

Install

cargo install lets-cli

Quick start

# Generate a starter lets.kdl for your project
lets self init

# Set up shell completions (add to your .zshrc/.bashrc)
eval "$(lets self setup)"

# See what's available
lets --list

# Run a command
lets build

Ready to dive in? Start with the Getting Started guide.