Skip to content

Starter template

The maintained starter is examples/minimal_cli. It is deliberately a copyable project rather than an interactive generator: the first five minutes should expose the framework's public boundaries instead of hiding them behind template machinery.

Five-minute proof

Copy the directory into a clean location and run the same commands a new consumer would use:

cp -R examples/minimal_cli my-cli
cd my-cli
python -m venv .venv
source .venv/bin/activate  # Windows: .venv\Scripts\activate
python -m pip install --upgrade pip
python -m pip install -e ".[dev]"
base-minimal --name Ada
python -m pytest

The starter has no private-repository dependency and uses only the public base_cli facade. Its tests cover a successful invocation, lifecycle help, and the missing-option error boundary. The repository's example workflow installs and tests it as an installed consumer as well.

What to customize

The command implementation belongs in src/minimal_cli/cli.py; the package and console-script names belong in pyproject.toml; product behavior belongs in tests/ and README.md. Keep base_cli.run_app(app) as the process boundary and do not import framework-private modules. Add JSON, configuration, or optional integrations only when the product needs them, following the corresponding contract docs.

The starter's base-cli>=0.5.1,<1.0 requirement is a release-line guard for the current pre-1.0 framework. It should be updated deliberately when the consumer adopts base-cli 1.0.

Why there is no base-cli init command yet

The copyable starter is the 1.0 adoption surface. A generator would add a second templating and upgrade contract before there is enough consumer feedback to stabilize it. Interactive scaffolding remains a follow-up design item; it must not become a hidden dependency of the core package.