Skip to main content

term-sparkline 📈

Adaptive high-definition (1px Retina) and Unicode-based inline sparklines for modern terminals.

Designed specifically for CLI tables, financial monitoring dashboards, and real-time metric trackers.


✨ Features

  • Adaptive Terminal Detection: Automatically selects the best rendering protocol:
    • iTerm2 / WezTerm / Ghostty: Renders ultra-fine, anti-aliased 1-pixel inline graphics directly in a single text row.
    • Kitty: Uses Kitty graphics protocol.
    • Sixel: Pure Python Sixel encoding for Linux servers, Foot, and classic terminals.
    • Fallback / Standard Terminals: Gracefully degrades to smooth Unicode Braille vector curves (⡠⠤⠒⠊⠉) or classic Block bars ( ▂▃▅▇).
  • Financial Visualization Extras:
    • Technical Indicators Overlay: ma_sparkline(prices, windows=[5, 20]) for Moving Averages & bollinger_sparkline(prices) for Bollinger Bands.
    • Multi-Series / Benchmark Comparison: Overlay dual curves (e.g. Stock vs Benchmark Index).
    • Split-Color across Baseline: Automatically colors segments above baseline as Red and below as Green.
    • Mini Candlesticks (OHLC): Renders miniature inline candlestick charts.
    • Mini Volume Bars: Single-line volume histogram bars.
    • Extremum Highlighting: Accent markers on highest (peak) and lowest (trough) values.
    • 24-bit TrueColor Gradients: Smooth ANSI TrueColor gradient in Braille & Block text modes.
    • Area Gradient Fill: Semi-transparent smooth gradient area beneath the curve.
    • Reference Baseline: Subtle dotted baseline for previous close / zero level.
    • End-point Highlight Dot: Prominently marks the latest live price tick.
    • Auto Color & Market Palettes: Automatic color calculation (palette="cn" for Red Up/Green Down, palette="us" for Green Up/Red Down).
  • Streaming & Export Tools:
    • LiveSparkline: High-performance circular buffer for streaming real-time live tickers.
    • Animated GIF Export: to_gif(series, "trend.gif") creates lightweight animated cumulative drawing GIFs.
    • SVG & HTML / Jupyter Export: Standalone SVG vector or inline HTML for Jupyter Notebook (_repr_html_).
  • Ecosystem Ready:
    • Textual Widget: Drop-in SparklineWidget for interactive terminal applications.
    • Rich Renderable: Pass Sparkline directly into Table.add_row().
    • Pandas & Polars Extensions: Direct series.sparkline() accessor support for both Dataframe engines.
  • Zero-Friction & Lightweight: Zero required dependencies (optional Pillow for inline images).
  • CLI Utility & Interactive Demo: Ready to use as a standalone command-line tool with built-in sparkline --demo.

📦 Installation

pip install "term-sparkline[image]"

(Without [image], it functions in pure-text Unicode Braille/Block mode with zero dependencies).


🚀 Quick Start

Interactive Demo

Run the built-in terminal showcase to preview all rendering styles and live streaming:

sparkline --demo

Python API

from term_sparkline import sparkline

prices = [10.2, 10.3, 10.1, 10.5, 10.8, 10.7, 11.2, 11.0, 11.5]

# Auto-detects terminal, applies area fill, reference baseline and end-point dot
chart = sparkline(
    prices,
    fill=True,
    baseline=10.5,
    show_dot=True,
    palette="cn"  # Red for rise, Green for fall
)

print(f"600519 贵州茅台  1680.50  +2.15%  {chart}")

Polars & Pandas Integration

import polars as pl
import term_sparkline

s = pl.Series("price", [10, 12, 11, 15, 18, 22])
print(s.sparkline(fill=True, show_dot=True))

Integration with rich

from rich.table import Table
from rich.console import Console
from term_sparkline import Sparkline

console = Console()
table = Table(title="Live Stock Watcher")

table.add_column("Symbol", justify="center")
table.add_column("Price", justify="right")
table.add_column("Change", justify="right")
table.add_column("Trend (Sparkline)", justify="left")

table.add_row("600519", "1680.50", "+2.15%", Sparkline([10, 12, 11, 15, 18], fill=True, show_dot=True))
table.add_row("000001", "11.20", "-1.32%", Sparkline([18, 16, 14, 12, 11], fill=True, show_dot=True))

console.print(table)

Animated GIF Export

from term_sparkline import to_gif

to_gif([10, 12, 11, 15, 18, 22], filepath="sparkline.gif")

CLI Usage

# Pass numbers with baseline and area fill
sparkline 10 12 11 15 18 22 --baseline 12 --fill --dot

# Or pipe from other tools
echo "10,12,11,15,18,22" | sparkline --palette us

📄 License

MIT

Metadata

Release files for term-sparkline 0.6.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for term-sparkline 0.6.0
File Size Uploaded Provenance
term_sparkline-0.6.0.tar.gz 16.7 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for term-sparkline 0.6.0
File Interpreter ABI Platform
term_sparkline-0.6.0-py3-none-any.whl Python 3 none any Details

Total release size: 36.4 kB

Release files / term_sparkline-0.6.0.tar.gz

Download URL term_sparkline-0.6.0.tar.gz
Size 16.7 kB
Tags Source
SHA-256 checksum
How to use checksums
a5b682c49df277777306f3b77f5709f7da905646b1e600cc9e4fee150567cdf3
BLAKE2b-256 checksum
How to use checksums
fcc39b8315b925f5813ac234c223796864f405cd8bd94dbc32d0721db05ca708
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.15.0

Release files / term_sparkline-0.6.0-py3-none-any.whl

Download URL term_sparkline-0.6.0-py3-none-any.whl
Size 19.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
64c216f6b8486460bf8d098067acbc4d85d393d60293886de82a3bdbea73dc2e
BLAKE2b-256 checksum
How to use checksums
b25a6455aec516573069dc2c2d84c8af64d29e11be148781f28af9db971b45e0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.15.0

Security for term-sparkline 0.6.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page