# Python Rich

> Creating beautiful terminal output with Python Rich library

- Skill: `neuralblitz/python-rich` (Agent Skill)
- Install (CLI): `npx skillmds@latest add neuralblitz/python-rich`
- Raw SKILL.md: https://api.skillmd.com/api/skills/neuralblitz/python-rich/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- License: MIT
- Author: NeuralBlitz (https://skillmd.com/u/neuralblitz)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/neuralblitz/python-rich

---


# Skill: Python Rich

## What I do
Create rich, formatted terminal output with Python Rich library - including colored text, tables, progress bars, syntax highlighting, and beautiful console applications.

## When to use me
When enhancing terminal output with colors, tables, progress bars, Markdown rendering, or building rich CLI applications without a full TUI framework.

## Installation
```bash
pip install rich
```

## Basic Usage

### Simple Colored Output
```python
from rich import print as rprint
from rich.console import Console
from rich.theme import Theme

console = Console()

# Simple colored text
rprint("[red]This is red[/red]")
rprint("[bold blue]Bold blue[/bold blue]")
rprint("[yellow on black]Yellow on black[/yellow on black]")

# Combinations
rprint("[bold][italic][underline]All styles[/underline][/italic][/bold]")
```

### Console Object
```python
from rich.console import Console

console = Console()

# Print with styling
console.print("Hello, World!", style="bold green")

# Different output streams
console_err = Console(stderr=True)  # For warnings/errors
console_err.print("[red]Error![/red]", stderr=True)

# Width control
console = Console(width=80)
console = Console(force_terminal=True)
```

## Color Reference

### Named Colors
```
black, red, green, yellow, blue, magenta, cyan, white
bright_black (gray), bright_red, bright_green, bright_yellow
bright_blue, bright_magenta, bright_cyan, bright_white
```

### RGB & Hex Colors
```python
from rich.color import Color

# RGB
console.print("[color(255,128,0)]Orange text[/color]")

# Hex
console.print("[#FF8800]Orange text[/#FF8800]")

# With Color class
color = Color.from_rgb(255, 128, 0)
console.print(f"[{color}]Orange text[/{color}]")
```

## Text Styles

| Style | Description |
|-------|-------------|
| `bold` | Bold text |
| `italic` | Italic text |
| `underline` | Underlined |
| `strike` | Strikethrough |
| `blink` | Blinking text |
| `reverse` | Reversed colors |
| `dim` | Dimmed text |
| `bold not dim` | Bold and not dim |

### Combinations
```python
console.print("[bold red]Bold Red[/bold red]")
console.print("[bold italic underline]All combined[/bold italic underline]")
```

## Tables

### Basic Table
```python
from rich.console import Console
from rich.table import Table

console = Console()

table = Table(title="Users")
table.add_column("Name", style="cyan", no_wrap=True)
table.add_column("Email", style="magenta")
table.add_column("Role", style="green")

table.add_row("Alice", "alice@example.com", "Admin")
table.add_row("Bob", "bob@example.com", "User")
table.add_row("Charlie", "charlie@example.com", "User")

console.print(table)
```

### Advanced Table
```python
from rich.table import Table

table = Table(
    title="Sales Report",
    show_header=True,
    header_style="bold magenta",
    border_style="bright_blue",
    row_styles=["", "dim"]
)

table.add_column("Product", justify="left")
table.add_column("Q1", justify="right")
table.add_column("Q2", justify="right")
table.add_column("Total", justify="right", style="bold green")

table.add_row("Widget A", "$10,000", "$12,000", "$22,000")
table.add_row("Widget B", "$8,000", "$9,500", "$17,500")
table.add_row("Widget C", "$15,000", "$14,000", "$29,000")

console.print(table)
```

## Progress Bars

### Simple Progress
```python
from rich.progress import Progress

with Progress() as progress:
    task = progress.add_task("[cyan]Processing...", total=100)
    for i in range(100):
        progress.advance(task)
        # Do work...
```

### Multiple Tracks
```python
from rich.progress import Progress, SpinnerColumn, TextColumn, BarColumn

with Progress(
    SpinnerColumn(),
    TextColumn("[progress.description]{task.description}"),
    BarColumn(),
    TextColumn("[progress.percentage]{task.percentage:>3.0f}%"),
    console=console
) as progress:
    
    task1 = progress.add_task("[red]Download", total=100)
    task2 = progress.add_task("[green]Process", total=100)
    
    for i in range(100):
        progress.advance(task1)
        if i % 2 == 0:
            progress.advance(task2)
```

### File Download Simulation
```python
from rich.progress import Progress, DownloadColumn, TransferSpeedColumn

with Progress(
    TextColumn("[bold blue]{task.description}"),
    BarColumn(),
    DownloadColumn(),
    TransferSpeedColumn(),
    console=console
) as progress:
    task = progress.add_task("Download", total=1000000)
    for chunk in download_chunks():
        progress.advance(task, len(chunk))
```

## Syntax Highlighting

### Code Highlighting
```python
from rich.syntax import Syntax
from rich.console import Console

console = Console()

code = """
def fibonacci(n):
    if n <= 1:
        return n
    return fibonacci(n-1) + fibonacci(n-2)

result = fibonacci(10)
print(f"Result: {result}")
"""

syntax = Syntax(code, "python", theme="monokai", line_numbers=True)
console.print(syntax)
```

### Themes
```
monokai, github-dark, dracula, nord, one-dark, vim, etc.
```

## Panels & Boxes

### Panels
```python
from rich.panel import Panel
from rich.text import Text

console = Console()

text = Text("Welcome to my application!", style="bold green")
panel = Panel(text, title="Info", border_style="blue")
console.print(panel)

# Without title
console.print(Panel("Simple panel", style="red"))
```

### Boxes
```python
from rich.box import Box, DOUBLE, ROUNDED

console.print(
    "Content in rounded box",
    box=ROUNDED,
    border_style="cyan"
)
```

## Tree View

```python
from rich.tree import Tree
from rich.console import Console

console = Console()

tree = Tree("📁 Project", guide_style="bold blue")

src = tree.add("📂 src", style="cyan")
src.add("📄 main.py")
src.add("📂 utils", style="green")
src.add("📄 helpers.py")

tests = tree.add("📂 tests", style="yellow")
tests.add("📄 test_main.py")

console.print(tree)
```

## Markdown Rendering

```python
from rich.console import Console
from rich.markdown import Markdown

console = Console()

md = """
# Heading 1
## Heading 2

This is **bold** and this is *italic*.

- List item 1
- List item 2

```python
print("code block")
```
"""

console.print(Markdown(md))
```

## Logging

```python
from rich.logging import RichHandler
import logging

logging.basicConfig(
    level=logging.DEBUG,
    format="%(message)s",
    handlers=[RichHandler(rich_tracebacks=True)]
)

log = logging.getLogger("myapp")
log.debug("Debug message")
log.info("Info message")
log.warning("Warning message")
log.error("Error message")
```

## Live Display

### Dynamic Updates
```python
from rich.live import Live
from rich.table import Table

with Live(build_table(), refresh_per_second=4) as live:
    for _ in range(10):
        # Update table
        live.update(build_table())
```

### Status Spinner
```python
from rich.console import Console
from rich.progress import Progress, SpinnerColumn

console = Console()

with console.status("[bold green]Working on something..."):
    time.sleep(2)
    console.print("[green]Done!")
```

## Pretty Printing

### Dict/Object Pretty Print
```python
from rich.pretty import pprint
from rich.console import Console

console = Console()

data = {
    "name": "Alice",
    "age": 30,
    "skills": ["Python", "JavaScript"],
    "active": True
}

pprint(data, console=console, expand_all=True)
```

## Bar Charts

```python
from rich.console import Console
from rich.bar import Bar

console = Console()

console.print(Bar(50, width=30, color="cyan"))
```

## Column Layout

```python
from rich.console import Console
from rich.columns import Columns

console = Console()

columns = Columns([
    "[bold]Name[/bold]\nAlice\nBob\nCharlie",
    "[bold]Role[/bold]\nAdmin\nUser\nUser"
], equal=True, expand=True)

console.print(columns)
```

## Best Practices

1. **Use Console object** for consistent styling
2. **Close tags properly** `[/red]` or use context manager
3. **Test terminal compatibility** - not all terminals support all styles
4. **Respect user preferences** - check `Console.options.no_color`
5. **Width matters** - use `console.width` for responsive layouts
6. **Combine with Click/Typer** for complete CLI applications

