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:
- 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.
- 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 Vector Export: Easily export sparklines to standalone SVG strings or files via
to_svg(series).
- Ecosystem Ready:
Rich&Textual: PassSparklinedirectly intoTable.add_row().Pandas&PolarsExtensions: Directseries.sparkline()accessor support for both Dataframe engines.
- Zero-Friction & Lightweight: Zero required dependencies (optional
Pillowfor 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.5.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| term_sparkline-0.5.0.tar.gz | 14.1 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| term_sparkline-0.5.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 30.8 kB
Release files / term_sparkline-0.5.0.tar.gz
| Download URL | term_sparkline-0.5.0.tar.gz |
|---|---|
| Size | 14.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5650d5f319f854b547c4bbdb2049393b3a443be42b7c2ad209c65bb4dacad715
|
|
BLAKE2b-256 checksum How to use checksums |
5987757f21e77051f9d95a922d1a8b08e1ab42c467421a37696fcd2d61e83d0a
|
| 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.5.0-py3-none-any.whl
| Download URL | term_sparkline-0.5.0-py3-none-any.whl |
|---|---|
| Size | 16.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2abe19f5aee93c9c0273ddb52c5c0a5ab08715b14c62f0bbe0f8bb8818012275
|
|
BLAKE2b-256 checksum How to use checksums |
b0fe2a223c00a9f354a8ef33bfb2bdd87e05339a41de0344f5e84e879246ef20
|
| 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.5.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.