Skip to main content

Clak

Clak Logo

Python Version License PyPI

Clak (Command Line avec Klass) is a Python library for building command-line interfaces with a class-based API on top of standard argparse. Nested commands, arguments, and optional batteries (views, logging, config, completion) stay close to what you already know from the stdlib.

Full docs: mrjk.github.io/python-clak · PyPI: mrjk.clak

Features

  • Class-based CLI — define apps with Parser, Argument, and Command; no new DSL
  • Argparse-native — same argument syntax as add_argument() / subparsers
  • Nested commands — git-like trees with inheritance and a command overview in --help
  • Optional components — views, logging, XDG config, shell-completion script generation
  • Light core; extras only when you need them (colors, config, markdown, rst)

Requirements

  • Python 3.10–3.14 (declared >=3.10,<4.0; CI and local matrix cover 3.10–3.14)
  • argparse (stdlib)

Developer setup and the version matrix: Development setup.

Install

pip install mrjk.clak

# Or with your project manager
poetry add mrjk.clak
pdm add mrjk.clak
uv add mrjk.clak

Optional:

pip install 'mrjk.clak[colors]'   # coloredlogs for LoggingOptMixin
pip install 'mrjk.clak[config]'   # PyYAML for YAML config / --format yaml
pip install 'mrjk.clak[markdown]' # rich for MarkdownView and colored --help
pip install 'mrjk.clak[rst]'      # docutils for RstView

Quick start

from clak import Argument, Command, Parser


class ShowCommand(Parser):
    """Show something."""

    target = Argument("--target", "-t", help="Target to show")
    format = Argument(
        "--format", choices=["json", "text"], help="Output format"
    )

    def cli_run(self, target=None, format=None, **_):
        print(f"show target={target} format={format}")


class MainApp(Parser):
    """Demo application."""

    debug = Argument("--debug", action="store_true", help="Enable debug mode")
    config = Argument("--config", "-c", help="Config file path")

    show = Command(ShowCommand, help="Show something")


# Instantiating the root parser parses argv and runs the matching command.
if __name__ == "__main__":
    MainApp()
$ python demo.py --help
usage: demo.py [-h] [--debug] [--config CONFIG] {show} ...

Key concepts

Arguments

class MyCommand(Parser):
    verbose = Argument("-v", "--verbose", action="store_true", help="Verbose")

Nested commands

Command binds a child Parser (aliases: SubParser, SubCommand, Cmd):

class MainApp(Parser):
    status = Command(StatusCommand, help="Show status")

Optional components

Component Mixin / class Docs
Tables / structured output ListViewMixin, ShowViewMixin, PprintViewMixin Views
Colored --help default (Rich extra, TTY) Colored help
Logging + -v LoggingOptMixin Logging
XDG paths + config file XDGConfigMixin Config
Shell completion scripts CompCmdRender Completion

Learn more

Contributing

Bug reports, questions, and PRs are welcome. See the contribution guidelines in the documentation (or CONTRIBUTING.md).

License

GPL v3.

Metadata

Release files for mrjk.clak 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 mrjk.clak 0.6.1
File Size Uploaded
mrjk_clak-0.6.1.tar.gz 84.8 kB Details

Built distribution (wheel)

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

Total release size: 188.6 kB

Release files / mrjk_clak-0.6.1.tar.gz

Download URL mrjk_clak-0.6.1.tar.gz
Size 84.8 kB
Tags Source
SHA-256 checksum
How to use checksums
240fd5aed91eac53efd3552b0fd639ab18082b3863561a133e823d92e5276437
BLAKE2b-256 checksum
How to use checksums
419967a06b5e6bb859c215add4454b85ad3386e94fdfd48c8403d86576219b71
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.1.4 CPython/3.12.3 Linux/6.17.0-1022-azure

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

Download URL mrjk_clak-0.6.1-py3-none-any.whl
Size 103.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ce4f1e3579a607175e50fe61ba7177a6b4ebc8cd45e06aba193ba43031a6ed79
BLAKE2b-256 checksum
How to use checksums
1641f1265aa9051432b5df794b8fbce2dfdfe55e36fd9997f77278f5ff468ab0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.1.4 CPython/3.12.3 Linux/6.17.0-1022-azure

Release history Release notifications | RSS feed

This release

0.6.1 This release

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.3.1

2 release files

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