Skip to main content

quiCkLI

quiCkLI is a minimal, educational Python framework for building command-line interfaces. The package and import name is quickli. It supports Python 3.12, 3.13, and 3.14.

The project is in alpha. Select and test a released version before depending on its APIs. The online documentation follows the source checkout and may describe unreleased additions.

Installation

Install the published package in a virtual environment:

python -m venv .venv
source .venv/bin/activate
python -m pip install quickli

On Windows, activate the environment with .venv\Scripts\activate.

Your first command-line application

Save this example as hello.py:

from quickli import Application, Argument, Option

app = Application("hello", description="Greet a person.")


@app.entrypoint(
    arguments=[Argument("name", help_text="Person to greet.")],
    options=[Option("uppercase", short_name="u", is_flag=True)],
)
def greet(name: str, uppercase: bool = False) -> str:
    message = f"Hello, {name}!"
    return message.upper() if uppercase else message


if __name__ == "__main__":
    raise SystemExit(app.main())

Run the application:

python hello.py Ada
python hello.py Ada -u
python hello.py --help

The first two calls print Hello, Ada! and HELLO, ADA!. The help request prints usage without calling the handler. Application.main() prints results, reports errors to stderr, and returns a process exit code. For library use and tests, app.run(["Ada"]) returns the handler result without printing it.

Named commands

Use @app.command() for a CLI with several operations:

from quickli import Application, Argument, Option

app = Application("tasks")


@app.command(
    arguments=[Argument("target")],
    options=[Option("retries", converter=int, default=3)],
)
def deploy(target: str, retries: int = 3) -> str:
    """Deploy a target with a configurable retry count."""
    return f"Deploying {target} with {retries} retries"


if __name__ == "__main__":
    raise SystemExit(app.main())

Save it as tasks.py, then run python tasks.py deploy staging --retries 5. Use python tasks.py deploy -h for command help. Nested subcommands support help too. Explicit options claiming a help alias retain their behavior; set auto_help=False on the application to disable automatic help.

Configuration

Define your own schema and choose YAML, JSON, or TOML:

from quickli import Application, Config, ConfigField, ConfigSchema

schema = ConfigSchema(fields=[
    ConfigField("host", default="localhost"),
    ConfigField("port", value_type=int, default=8080),
])
config = Config("settings.json", schema=schema)
app = Application("service", config=config, auto_init_config=True)

data = app.run(["init"])
print(data["host"])

The opt-in init command creates a missing configuration from schema defaults. If a file already exists, initialization loads and validates it rather than resetting it. Construction does not write files. When the automatic command is disabled, use app.init_config() explicitly.

Loading does not merge missing defaults into existing files. Required fields without defaults are left out of new templates and must be filled in before loading. JSON/YAML configuration roots must be mappings with string keys. YAML files use PyYAML safe loading and serialization; the separate quickli.parsers YAML string helpers support a smaller subset.

Features

  • Single-action entrypoints, named commands, and nested subcommands.
  • Positional arguments, local/global options, boolean flags, and repeatable options.
  • Explicit converters and validators for checked input.
  • Automatic --help and -h with generated usage and docstring descriptions.
  • JSON/YAML/TOML configuration, validation, initialization, and JSON Schema export.
  • Explicit plugin loading and Bash, Zsh, and PowerShell completion generation.
  • Structured errors, exit codes, and optional JSON output through Application.main().

Documentation and examples

License

MIT License. The distribution includes the full license text in LICENSE.

Metadata

Release files for quickli 0.6.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for quickli 0.6.1
File Size Uploaded Provenance Actions
quickli-0.6.1.tar.gz 46.6 kB With provenance Details for quickli-0.6.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for quickli 0.6.1
File Interpreter ABI Platform Actions
quickli-0.6.1-py3-none-any.whl Python 3 none any Details for quickli-0.6.1-py3-none-any.whl

Total release size: 78.5 kB

Release files / quickli-0.6.1.tar.gz

Download URL quickli-0.6.1.tar.gz
Size 46.6 kB
Tags Source
SHA-256 checksum
How to use checksums
e5bd000cfea500ff007109a58cc1c6be23a6237ecfdc77e1b4a825a112b7e557
BLAKE2b-256 checksum
How to use checksums
b84db3f60695a249ae05555aa7e2895cd70108c65e9710758dc258f76abc33fc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 2, 2026.

Transparency log

Release files / quickli-0.6.1-py3-none-any.whl

Download URL quickli-0.6.1-py3-none-any.whl
Size 31.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1ebf19cf14319f0275959d9c99190947b5db87c2bcd932471428a3d44d5f8c86
BLAKE2b-256 checksum
How to use checksums
80a9a2ef4d84c855bf4a9c4927f2241f4a991742572fc34f707748e51af6426f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 2, 2026.

Transparency log

Security for quickli 0.6.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

Both files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for quickli-0.6.1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 2, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page