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
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
LazyFrameuntil 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
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 →
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 →
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 →
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 →
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 →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
night-market and day-market built in, gruvbox-dark and high-contrast from contrib/themes/. Themes →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
Older releases
- v0.2.55
- v0.2.54
- v0.2.53
- v0.2.52
- v0.2.51
- v0.2.50
- v0.2.49
- v0.2.48
- v0.2.47
- v0.2.46
- v0.2.45
- v0.2.44
- v0.2.43
- v0.2.42
- v0.2.41
- v0.2.40
- v0.2.39
- v0.2.38
- v0.2.37
- v0.2.34
- v0.2.33
- v0.2.32
- v0.2.31
- v0.2.30
- v0.2.29
- v0.2.28
- v0.2.27
- v0.2.26
- v0.2.25
- v0.2.24
- v0.2.23
- v0.2.22
- v0.2.21
- v0.2.20
- v0.2.19
- v0.2.18
- v0.2.17
- v0.2.16
- v0.2.15
- v0.2.14
- v0.2.13
- v0.2.12
- v0.2.11
- v0.2.10
- v0.2.9
- v0.2.8
- v0.2.7
- v0.2.6
- v0.2.5
- v0.2.4
- v0.2.3
- v0.2.2
- v0.2.1