Skip to main content

A terminal library with CLI interface

Project description

ChukTerm

A modern terminal library with a powerful CLI interface for building beautiful terminal applications in Python.

Python 3.10+ License: Apache 2.0 Test Coverage Tests

๐Ÿ†• What's New in v0.2

  • ๐Ÿ“ˆ Progress Indicators: New progress_bar(), track(), and spinner() methods for better user feedback
  • ๐ŸŽจ Theme Preview CLI: chuk-term themes --side-by-side to compare all 8 themes
  • ๐Ÿ“š Examples Browser: chuk-term examples to discover and run examples
  • ๐Ÿงช Improved Testing: 93% code coverage with 616 passing tests
  • ๐Ÿ“– Better Documentation: New CONTRIBUTING.md and updated guides
  • ๐Ÿ”ง Quality Automation: Pre-commit hooks with latest tools (ruff, black, mypy)

See CHANGELOG.md for complete release history.

โœจ Features

  • ๐ŸŽจ Rich UI Components: Banners, prompts, formatters, and code display with syntax highlighting
  • ๐ŸŽฏ Centralized Output Management: Consistent console output with multiple log levels
  • ๐ŸŽญ Theme Support: 8 built-in themes including default, dark, light, minimal, terminal, monokai, dracula, and solarized
  • ๐Ÿ“ Code Display: Syntax highlighting, diffs, code reviews, and side-by-side comparisons
  • ๐Ÿ”ง Terminal Management: Screen control, cursor management, hyperlinks, and color detection
  • ๐Ÿ’ฌ Interactive Prompts: Text input, confirmations, number input, single/multi selection menus
  • ๐Ÿ“Š Data Formatting: Tables, trees, JSON, timestamps, and structured output
  • ๐Ÿ“ˆ Progress Indicators: Progress bars, spinners, and task tracking with track() and progress_bar()
  • ๐ŸŒŠ Streaming Support: Live-updating messages for real-time content streaming (LLM-style)
  • ๐Ÿค– AI-Friendly: Designed for AI agents with comprehensive docs and consistent APIs
  • ๐Ÿ”„ Environment Adaptation: Automatically adapts to TTY, CI, and NO_COLOR environments

๐Ÿ“ฆ Installation

Using uv (Recommended)

# Install as dependency
uv add chuk-term

# Install globally as tool
uv tool install chuk-term

Using pip

# Install from PyPI
pip install chuk-term

# With development dependencies
pip install chuk-term[dev]

From Source (Development)

# Clone the repository
git clone https://github.com/chrishayuk/chuk-term.git
cd chuk-term

# Install with uv (recommended)
uv sync --dev

# Or with pip
pip install -e ".[dev]"

# Verify installation
chuk-term --version

For detailed installation instructions, see the Getting Started Guide.

๐Ÿš€ Quick Start

For AI Agents and LLMs

ChukTerm is designed to be AI-friendly. For comprehensive guidance:

Basic Output

from chuk_term.ui import output

# Different message types
output.success("โœ“ Operation completed successfully")
output.error("โœ— An error occurred")
output.warning("โš  This needs attention")
output.info("โ„น Information message")
output.debug("๐Ÿ” Debug information")

# Special formatting
output.tip("๐Ÿ’ก Pro tip: Use themes for better visuals")
output.hint("This is a subtle hint")
output.command("git commit -m 'Initial commit'")

Interactive Prompts

from chuk_term.ui import ask, confirm, select_from_list, ask_number

# Get user input
name = ask("What's your name?")
age = ask_number("How old are you?", min_value=0, max_value=150)

# Confirmation
if confirm("Would you like to continue?"):
    output.success("Great! Let's proceed...")

# Selection menu
theme = select_from_list(
    ["default", "dark", "light", "minimal", "terminal"],
    "Choose a theme:"
)

Display Code with Syntax Highlighting

from chuk_term.ui import display_code, display_diff

# Show code with syntax highlighting
code = '''def hello_world():
    print("Hello from ChukTerm!")
    return True'''

display_code(code, language="python", title="Example Function")

# Show a diff
display_diff(
    old_text="Hello World",
    new_text="Hello ChukTerm!",
    title="Changes"
)

Streaming Messages (New!)

from chuk_term.ui.streaming import StreamingMessage, StreamingAssistant
import time

# Basic streaming message
with StreamingMessage(title="๐Ÿค– Assistant") as stream:
    stream.update("Processing your request")
    time.sleep(0.5)
    stream.update("...")
    time.sleep(0.5)
    stream.update(" Done!")
# Automatically finalizes with Markdown rendering

# Using StreamingAssistant for simpler API
assistant = StreamingAssistant()
stream = assistant.start()
for word in "Hello from ChukTerm streaming!".split():
    assistant.update(word + " ")
    time.sleep(0.2)
assistant.finalize()

Progress Indicators (New!)

from chuk_term.ui import output
import time

# Progress bar with detailed tracking
with output.progress_bar("Processing files", show_time=True) as progress:
    task = progress.add_task("download", total=100)
    for i in range(100):
        progress.update(task, advance=1)
        time.sleep(0.01)

# Simple iteration tracking
items = ['file1.txt', 'file2.txt', 'file3.txt']
for item in output.track(items, "Processing files"):
    process(item)  # Your processing logic

# Spinner for indeterminate tasks
with output.spinner("Loading data..."):
    load_data()  # Long-running operation

Theme Support

from chuk_term.ui import output
from chuk_term.ui.theme import set_theme, get_theme, get_available_themes

# Set a theme
set_theme("monokai")  # or dracula, solarized, minimal, terminal

# Get current theme
current = get_theme()
output.info(f"Using theme: {current.name}")

# List all available themes
themes = get_available_themes()
output.info(f"Available themes: {', '.join(themes)}")

๐Ÿ–ฅ๏ธ CLI Usage

ChukTerm includes a powerful CLI for exploring and testing features:

# Show library information
chuk-term info
chuk-term info --verbose

# Run interactive demo
chuk-term demo

# Preview all themes (New!)
chuk-term themes                    # Detailed preview of each theme
chuk-term themes --side-by-side     # Compact side-by-side comparison

# Explore examples (New!)
chuk-term examples                  # List all available examples with descriptions
chuk-term examples --list-only      # Quick list of example names
chuk-term examples --run demo       # Run a specific example

# Run a command with theming
chuk-term run "ls -la"

# Test with specific theme
chuk-term test --theme monokai

๐Ÿ› ๏ธ Development

Setup Development Environment

# Clone the repository
git clone https://github.com/chrishayuk/chuk-term.git
cd chuk-term

# Install with dev dependencies using uv
uv sync --dev

# Install pre-commit hooks (automatic code quality checks)
uv run pre-commit install

# Verify installation
chuk-term --version
uv run pytest  # Run tests

Running Tests

# Run all tests with coverage
uv run pytest --cov=chuk_term

# Run specific test file
uv run pytest tests/ui/test_output.py

# Run with verbose output
uv run pytest -v

Code Quality

# Run linting
uv run ruff check src/ tests/

# Auto-fix linting issues
uv run ruff check --fix src/ tests/

# Format code
uv run black src/ tests/

# Type checking
uv run mypy src/

# Run all checks
make check

Available Make Commands

make help        # Show all available commands
make dev         # Install for development
make test        # Run tests with coverage
make lint        # Run linting checks
make format      # Format code
make clean       # Remove build artifacts

๐Ÿ“š Documentation

Quick Start

Core Documentation

API Reference

Output Levels

  • output.debug() - Debug information (only in verbose mode)
  • output.info() - Informational messages
  • output.success() - Success confirmations
  • output.warning() - Warning messages
  • output.error() - Error messages (non-fatal)
  • output.fatal() - Fatal errors (exits program)

Themes

  • default - Balanced colors, good for most terminals
  • dark - High contrast on dark backgrounds
  • light - Optimized for light terminals
  • minimal - Plain text, no colors or icons
  • terminal - Basic ANSI colors only
  • monokai - Popular dark theme
  • dracula - Gothic dark theme
  • solarized - Low contrast, easy on eyes

๐Ÿ“ Examples

The examples directory contains demonstration scripts:

File Description
ui_demo.py Comprehensive UI component showcase
ui_code_demo.py Code display and syntax highlighting
ui_output_demo.py Output management features
ui_terminal_demo.py Terminal control capabilities
ui_theme_independence.py Theme system demonstration
Streaming Demos
ui_streaming_demo.py Advanced streaming UI capabilities
ui_streaming_message_demo.py StreamingMessage and StreamingAssistant demos
ui_streaming_practical_demo.py Real-world streaming use cases
ui_streaming_quickstart.py Simple streaming examples to get started
streaming_long_text_demo.py Token-by-token streaming with proper wrapping
Other
ui_quick_test.py Quick functionality test

Run any example:

# Run the main demo
uv run python examples/ui_demo.py

# Try the streaming demos
uv run python examples/ui_streaming_quickstart.py
uv run python examples/ui_streaming_practical_demo.py

๐Ÿ—๏ธ Project Structure

chuk-term/
โ”œโ”€โ”€ src/chuk_term/
โ”‚   โ”œโ”€โ”€ __init__.py        # Package metadata
โ”‚   โ”œโ”€โ”€ cli.py             # CLI interface
โ”‚   โ””โ”€โ”€ ui/                # UI components
โ”‚       โ”œโ”€โ”€ output.py      # Output management (singleton)
โ”‚       โ”œโ”€โ”€ terminal.py    # Terminal control
โ”‚       โ”œโ”€โ”€ theme.py       # Theme system (8 themes)
โ”‚       โ”œโ”€โ”€ prompts.py     # User prompts
โ”‚       โ”œโ”€โ”€ formatters.py  # Data formatters
โ”‚       โ”œโ”€โ”€ code.py        # Code display
โ”‚       โ”œโ”€โ”€ banners.py     # Banner displays
โ”‚       โ””โ”€โ”€ streaming.py   # Streaming message support
โ”œโ”€โ”€ tests/                 # Test suite (616 tests, 93% coverage)
โ”œโ”€โ”€ examples/              # Example scripts
โ”‚   โ”œโ”€โ”€ ui_demo.py
โ”‚   โ”œโ”€โ”€ ui_streaming_*.py # Streaming demonstrations
โ”‚   โ””โ”€โ”€ ...
โ”œโ”€โ”€ docs/                  # Documentation
โ”‚   โ”œโ”€โ”€ ui/                # UI documentation
โ”‚   โ”‚   โ””โ”€โ”€ GETTING_STARTED.md  # Quick start guide
โ”‚   โ””โ”€โ”€ testing/           # Testing documentation
โ”‚       โ”œโ”€โ”€ UNIT_TESTING.md
โ”‚       โ””โ”€โ”€ TEST_COVERAGE.md
โ”œโ”€โ”€ llms.txt              # LLM-optimized docs (llmstxt.org)
โ”œโ”€โ”€ CLAUDE.md             # Project context for AI agents
โ”œโ”€โ”€ CONTRIBUTING.md       # Contribution guidelines
โ””โ”€โ”€ pyproject.toml        # Package configuration

๐Ÿค Contributing

We welcome contributions! Please see our Contributing Guide for details.

Quick Contribution Steps

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Make your changes
  4. Run tests (uv run pytest)
  5. Commit with a descriptive message
  6. Push to your fork
  7. Open a Pull Request

๐Ÿ“„ License

This project is licensed under the Apache 2.0 License - see the LICENSE file for details.

๐Ÿ™ Acknowledgments

  • Built with Rich for beautiful terminal output
  • Package management by uv
  • Testing with pytest

๐Ÿ“ฎ Support

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

chuk_term-0.4.tar.gz (199.5 kB view details)

Uploaded Source

Built Distribution

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

chuk_term-0.4-py3-none-any.whl (49.9 kB view details)

Uploaded Python 3

File details

Details for the file chuk_term-0.4.tar.gz.

File metadata

  • Download URL: chuk_term-0.4.tar.gz
  • Upload date:
  • Size: 199.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.11

File hashes

Hashes for chuk_term-0.4.tar.gz
Algorithm Hash digest
SHA256 15e3050ec96d0fd7181571893c1567ba40b6c2d12a1a560dde2591af309d7587
MD5 f85a8881d041032fd911ed123c7f2f2c
BLAKE2b-256 631bbc7382a4280ee18c8fe8654c9d9e3622f1d8e429813c8c84740ee926d728

See more details on using hashes here.

File details

Details for the file chuk_term-0.4-py3-none-any.whl.

File metadata

  • Download URL: chuk_term-0.4-py3-none-any.whl
  • Upload date:
  • Size: 49.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.11

File hashes

Hashes for chuk_term-0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 c7d1d08cf8b3609dd2075e632be4e4d7bbc363dbf91f808ab7430ed40d55ef40
MD5 25e49e9d05782695e56b2efca99ad6ab
BLAKE2b-256 544b0d57297ca96dc85f123520bbd08b244b7c38e49cff2386bf6835f8a736e6

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