Skip to main content

Beautiful CLI prompts for Python, inspired by clack

Project description

python-clack

Beautiful CLI prompts for Python, inspired by clack.

https://github.com/user-attachments/assets/389ae92a-052a-44cb-bfe4-0fc803ef6b44

Installation

pip install python-clack

Or with uv:

uv add python-clack

Features

  • Text input - Free-form text with placeholder, validation, and default values
  • Select - Single selection from a list of options
  • Multi-select - Multiple selection with checkboxes
  • Confirm - Yes/No confirmation prompts
  • Password - Masked password input
  • Spinner - Animated loading indicator
  • Log utilities - Styled info/success/warn/error messages
  • Messages - Intro/outro banners

Try It Out

Run the interactive demo:

# With uv (recommended)
uv run python-clack-demo

# Or run examples directly
uv run python examples/basic.py

If installed globally via pip install python-clack:

python-clack-demo

Quick Start

from python_clack import intro, text, select, confirm, outro, is_cancel

intro("Welcome to my app")

name = text(
    "What is your name?",
    placeholder="Anonymous",
    validate=lambda v: "Name is required" if not v else None
)

if is_cancel(name):
    outro("Cancelled!")
    exit(1)

color = select(
    "Pick your favorite color",
    options=[
        {"value": "red", "label": "Red", "hint": "warm"},
        {"value": "green", "label": "Green"},
        {"value": "blue", "label": "Blue", "hint": "cool"},
    ]
)

confirmed = confirm("Continue?", initial_value=True)

outro("All done!")

API Reference

Prompts

text(message, **options) -> str | CANCEL

Text input prompt.

Options:

  • placeholder - Placeholder text when empty
  • default_value - Value if user submits empty
  • initial_value - Starting value
  • validate - Validation function (value) -> error_message | None

select(message, options, **kwargs) -> T | CANCEL

Single selection prompt.

Options:

  • options - List of {"value": T, "label": str, "hint": str, "disabled": bool}
  • initial_value - Initially selected value

multiselect(message, options, **kwargs) -> list[T] | CANCEL

Multiple selection prompt.

Options:

  • options - List of option dicts
  • initial_values - Initially selected values
  • required - Require at least one selection

confirm(message, **options) -> bool | CANCEL

Yes/No confirmation prompt.

Options:

  • active - Label for "yes" (default: "Yes")
  • inactive - Label for "no" (default: "No")
  • initial_value - Initial selection (default: False)

password(message, **options) -> str | CANCEL

Password input with masked characters.

Options:

  • mask - Character to show (default: "*")
  • validate - Validation function

Utilities

is_cancel(value) -> bool

Check if a prompt was cancelled.

result = text("Name?")
if is_cancel(result):
    print("User cancelled")

intro(title)

Display an intro banner.

outro(message)

Display an outro message.

cancel(message)

Display a cancellation message.

log

Log utilities with styled output.

from python_clack import log

log.info("Processing...")
log.success("Done!")
log.warn("Deprecation warning")
log.error("Something failed")
log.step("Step completed")

spinner()

Animated spinner for loading states.

from python_clack import spinner
import time

s = spinner()
s.start("Loading...")
time.sleep(2)
s.stop("Done!")

# Or with error/warn/cancel
s.error("Failed!")
s.warn("Warning!")
s.cancel("Cancelled!")

group(prompts, on_cancel=None)

Run multiple prompts sequentially.

from python_clack import group, text, confirm

results = group({
    "name": lambda _: text("Name?"),
    "email": lambda _: text("Email?"),
    "confirm": lambda r: confirm(f"Create {r['name']}?"),
})

Unicode Support

python-clack automatically detects terminal Unicode support:

  • Uses Unicode symbols on modern terminals (Windows Terminal, VSCode, iTerm, etc.)
  • Falls back to ASCII on legacy terminals

Force a specific mode with environment variable:

# Force Unicode
PYTHON_CLACK_UNICODE=1 python app.py

# Force ASCII
PYTHON_CLACK_UNICODE=0 python app.py

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

python_clack-0.1.2.tar.gz (41.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

python_clack-0.1.2-py3-none-any.whl (31.9 kB view details)

Uploaded Python 3

File details

Details for the file python_clack-0.1.2.tar.gz.

File metadata

  • Download URL: python_clack-0.1.2.tar.gz
  • Upload date:
  • Size: 41.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for python_clack-0.1.2.tar.gz
Algorithm Hash digest
SHA256 e175ac1ef4bcd9abf2b4931de3841d90e03e3bf0ce4d884bf1e775b55923980d
MD5 e15b8e61a86c707613442702ab2fbd71
BLAKE2b-256 acec949c89058ab972263b0930820c1681839a36acda027d436c2c0c4d93a1b4

See more details on using hashes here.

Provenance

The following attestation bundles were made for python_clack-0.1.2.tar.gz:

Publisher: publish.yml on oharu121/python-clack

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file python_clack-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: python_clack-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 31.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for python_clack-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 9745a0f818480fae0a5230f4b61a481e0d53e00ca45b08710bc8698759221a78
MD5 2e8cc3fedefa3be76325447bfad5cbde
BLAKE2b-256 3eeca7f27e47f5922d95c8c4add125ec53570285374700a5ec9266b51f198852

See more details on using hashes here.

Provenance

The following attestation bundles were made for python_clack-0.1.2-py3-none-any.whl:

Publisher: publish.yml on oharu121/python-clack

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page