datui

A terminal UI for tabular data

Explore tabular data in your terminal.

Parquet, CSV, JSON, Excel, SQLite, logs and more, from your disk, S3, GCS, Azure, HTTP(S), a pipe or Python. Query with SQL or q, chart, reshape and export.

datui s3://noaa-ghcn-pds/parquet/by_year/YEAR=2024/   # 38M rows, no login

Linux, macOS and Windows · One binary, built on Polars · MIT license · No telemetry

datui opening NYC flights (2013) from Example datasets, sorting by departure delay and charting the mean delay by hour, one line per airport

Get started

Install

Every method installs the same datui. Check it with datui --version.

Linux, macOS

curl -fsSL https://raw.githubusercontent.com/derekwisong/datui/main/scripts/install/install.sh | sh

Windows, WinGet

winget install derekwisong.datui

macOS, Homebrew

brew tap derekwisong/datui && brew trust derekwisong/datui && brew install datui

Python, PyPI

pip install datui

Rust, crates.io

cargo install datui --locked

Arch Linux, AUR

yay -S datui-bin   # or: paru -S datui-bin

Debian, Ubuntu

curl -fsSL https://derekwisong.github.io/datui-apt/public.key | sudo gpg --dearmor -o /usr/share/keyrings/datui-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/datui-archive-keyring.gpg] https://derekwisong.github.io/datui-apt/ ./" | sudo tee /etc/apt/sources.list.d/datui.list
sudo apt update
sudo apt install datui

Binaries

Linux (x86_64, arm64), macOS (Intel, Apple silicon) and Windows binaries, plus .deb, .rpm and Arch tarballs, are on the latest release.

More ways to install, and how to uninstall: Installation guide · Latest release

How it stays fast

  • Rust on Polars. Every table is a LazyFrame until it is drawn.
  • Only the rows on screen and a lookahead buffer are collected. Sort, filter and query build on the lazy plan.
  • A Parquet file in S3, GCS or Azure is read in place: footers for the schema and row count, then only the row groups the screen needs.
  • The row count runs in the background; the table is usable before it is done.

First rows in milliseconds on local files, under a second from S3. Performance has the numbers.

What it does

The worksheet picker over an Excel workbook opened by URL: three worksheets, each with its range and size

Formats, and yours

From Parquet, CSV, Arrow and JSON to SQLite, GGUF, audio and flight logs. A TOML format spec describes your own binary or delimited format; any file opens in the hex view.

Formats → · Format specs →
The home screen: Example datasets, NOAA daily weather selected, its publisher, license and column notes beside it

Cloud or home

Local files, directories, globs, S3, GCS, Azure and HTTP(S). Hive-partitioned folders read as one table. The home screen lists your catalogs, the cloud accounts it finds logins for, and Example datasets that need no login.

Home screen → · Cloud storage →
A SQL GROUP BY over NYC flights: mean arrival delay per carrier, F9 latest, AS early

Query and find

: runs SQL or q; / finds text, a regex or letters in order. [ ] sort by the cursor's column, + - keep or drop its value, and v saves the steps as a view for the next file.

Query data →
A line chart of mean departure delay by hour, one line per New York airport, over all 336,776 rows

Chart

c charts the column under the cursor: line, scatter, bar, histogram, box, KDE or heatmap, of the rows the query and filters leave. e exports it to PNG, SVG or PDF.

Charts →
The Pivot & Melt builder with its live preview: three names as columns, one row per year

Reshape and retype

Pivot or melt (p) with a live preview. Change a column's type from the Info panel's Schema tab or a right click on a cell.

Reshaping → · Column types →

Pipes and Python

Pipe a command's output in, follow a file as it grows, or call datui.view() on a Polars frame.

Pipes → · Python →

Also: catalogs of your own datasets with a Documentation view (Ctrl+E), themes (datui theme list), the mouse, and copy over SSH through OSC 52. Every key

Formats

Each one reads from disk, HTTP(S) or a bucket. The formats table says which read lazily and which read compressed.

Columnar and JSON
Parquet · JSON · NDJSON · Arrow IPC · Avro · ORC · Excel
Delimited text
CSV · TSV · PSV · plain text
Model files
SafeTensors · GGUF
Signals and logs
NMEA · GPX · WAV/AIFF audio · MIDI · VCD · FIX · SDF · ELF · ULog · DataFlash · candump · systemd journal
Databases and arrays
SQLite · NumPy
Format specs
Your own binary formats, described in TOML

Try it

In your terminal

datui     # home screen: your files, and Example datasets to open with no login
datui https://vincentarelbundock.github.io/Rdatasets/csv/palmerpenguins/penguins.csv
printf 'id,amount\n1,9.50\n2,3.25\n' | datui

Press ? for the keys on any screen; Ctrl+Q quits. Quick start · Keys

From Python

import datui
import polars as pl

url = "https://vincentarelbundock.github.io/Rdatasets/csv/palmerpenguins/penguins.csv"
datui.view(pl.scan_csv(url))

pip install datui installs the command and the module. Use datui from Python

What it is not

  • An editor: cells cannot be changed, and datui does not write to the files it opens unless you export over one. Results leave as an export or a copy.
  • A service: no telemetry, no update check. datui connects only to the data and the cloud accounts you open or browse.

Documentation

Read the latest release's docs · Keys · Query syntax · Command line

  • devDevelopment
  • v0.4.0Latest release
  • v0.3.2
  • v0.3.1
  • v0.3.0
  • v0.2.56
Older releases