Skip to main content

Beautiful CLI prompts for Python, inspired by clack

Project description

python-clack

Beautiful CLI prompts for Python, inspired by clack.

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

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.0.tar.gz (34.4 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.0-py3-none-any.whl (24.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: python_clack-0.1.0.tar.gz
  • Upload date:
  • Size: 34.4 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.0.tar.gz
Algorithm Hash digest
SHA256 306d0a20fbea35dd0e74e30963735089954339f4677e7fbfe23ff77a8cba8094
MD5 2cb56886451495577a49f882f060793f
BLAKE2b-256 b018329bf441dadf19eca76ed87297cb546dd18e5ea5850924b347b77a74be98

See more details on using hashes here.

Provenance

The following attestation bundles were made for python_clack-0.1.0.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.0-py3-none-any.whl.

File metadata

  • Download URL: python_clack-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 24.6 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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d075e6076af4b46600c32b08814d8540602c345903be3ef61dd302e8a6b8f663
MD5 45dfbab201df4f14f7298966f66af12a
BLAKE2b-256 d35fc77ca2d970d1d598bb01d528824d5736d4cdf4690fda76fe2d4cc5dd615c

See more details on using hashes here.

Provenance

The following attestation bundles were made for python_clack-0.1.0-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