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

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.1.tar.gz (38.6 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.1-py3-none-any.whl (26.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: python_clack-0.1.1.tar.gz
  • Upload date:
  • Size: 38.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.7

File hashes

Hashes for python_clack-0.1.1.tar.gz
Algorithm Hash digest
SHA256 c446928aa2767a8522763c8a97a43d21aa04a42928434114f7595700d4bcef14
MD5 8f5dada10e7c518a764da78216a8e8a8
BLAKE2b-256 9327a0729fe4e581c7e940e210faf75f8db9be1a5552ff37897ef50e8d5588ca

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for python_clack-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 02b0958e1f6361de1a7a8eab171a3a6f6b7f77f92350a287c1718efe7a7b3a7b
MD5 1c7e693bb980ce02150b8b2e3da16749
BLAKE2b-256 42af38090f263b01db93b4e8da5983bb917970fb1a78ca526ee4eefd96566174

See more details on using hashes here.

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