plotui

Installation

Install the plotui CLI with one command, and the Python library with pip.

CLI

The plotui command plots data piped from the shell — line, scatter, and bar charts as real terminal pixels. Install a prebuilt binary:

curl -fsSL https://plotui.xyz/install.sh | sh

Or through a package manager:

brew install sebaheg/tap/plotui      # Homebrew (macOS / Linux)
pip install plotui                   # prebuilt wheel: the Python library + the CLI
cargo install plotui                 # build from source
cargo binstall plotui                # prebuilt, via cargo-binstall

Then pipe numbers at it:

seq 1 100 | awk '{print $1, sin($1/10)}' | plotui line
plotui scatter -H -d, data.csv

On a TTY the chart opens interactively (drag to pan, scroll to zoom, hover for the crosshair, q to quit); piped or with --static it prints one frame and exits. The CLI needs a terminal with Kitty graphics — Kitty, Ghostty, iTerm2 ≥ 3.5, WezTerm, or Konsole; see Terminal support.

Python library

Prebuilt wheels (Python 3.9+, macOS and Linux) include the CLI:

pip install plotui

Build from source

plotui is a Rust extension for Python, built with maturin. Building it yourself requires Rust and Python 3.9+.

python -m venv .venv && source .venv/bin/activate
pip install maturin textual
maturin develop --release

This compiles the three crates and installs the plotui package (with the native plotui._plotui module) into your virtualenv.

Try the demos

In a terminal with Kitty graphics support — Kitty, Ghostty, iTerm2 ≥ 3.5, or WezTerm:

python examples/raw_demo.py        # 3D scatter via Kitty images
python examples/textual_demo.py    # embedded in Textual
python examples/textual_graph.py   # interactive graph: hover + click-to-inspect

plotui only draws real pixels. Terminals without Kitty graphics get a notice naming supported terminals — never a degraded plot. See Terminal support for the full matrix.

Project layout

crates/
  plotui-core/      pure engine: data model, 3D camera, rasterizer -> RGBA
  plotui-protocol/  RGBA -> terminal bytes (Kitty graphics protocol)
  plotui-py/        PyO3 bindings -> the plotui._plotui native module
python/plotui/      the Python package + Textual PlotWidget

On this page