datui - terminal UI for tabular data
datui [OPTION]... [PATH]...
command | datui [OPTION]... [-]
datui COMMAND [ARG]...
Datui is a terminal UI for tabular data: Parquet, CSV, JSON, Arrow
and more, local or in S3, GCS, Azure and HTTP, from a few rows to a few
billion. Run with no PATH for the home screen; datui formats lists
what it reads.
Each PATH is a file, a directory, a glob, or an
http://, https://, s3://, gs:// or az://
(abfss://) URL. Files of one shape are read as one table. -
reads standard input, as does no PATH when data is piped in; with no
PATH and nothing piped in, datui starts at its home screen.
A file is scanned where it is wherever its format allows, and only
the rows on screen are read; sorting, queries and analysis read what they
need. datui-formats(7) says how each format is read. On any screen, ?
shows its keys; datui-keys(7) lists them all.
- PATH ...
- Files, directories, globs or URLs to open; files of one shape are one
table. - reads standard input, as does no PATH when data is piped in. No
PATH opens the home screen.
- -F, --format
FMT
- File format, when the extension does not say: parquet, csv, tsv, psv,
json, jsonl, arrow, avro, orc, excel, safetensors, gguf, nmea, gpx, audio,
midi, sqlite, vcd, fix, sdf, numpy, elf, ulog, dataflash, candump, text,
journal; or a format spec: its name (datui formats lists them), its
file (a path with a / or ending .toml), or its http(s), s3, gs or az URL
(at most 1 MiB).
- -t, --table
NAME
- Table to open from a file that holds several. Excel: a worksheet by name,
or by 0-based index when no worksheet is so named. NMEA: fixes (default),
GGA, RMC, VTG, GSA, GSV, GLL, ZDA or sentences. SQLite: a table or view by
name. NumPy: an array of an archive (.npz) by name. ELF: symbols (default)
or sections. ULog: a topic. DataFlash: a message type. candump: frames
(default), signals, or a message a dictionary names. Hugging Face cache
and DatasetDict directories: a split (default train).
- --hive
- Read a glob as one partitioned table, or force partition columns on a
directory whose layout does not say so. Ignored for a single file.
- --compression
C
- Compression, when the extension does not say: gzip, zstd, bzip2 or
xz.
- --dict
FILE
- A dictionary to decode with, over those on the format search path:
QuickFIX XML (.xml) for FIX logs, DBC (.dbc) for CAN logs, or TOML with
kind = "fix" or "dbc". Repeatable.
- -f, --follow
- Follow the file as it grows, as tail -f does: a local CSV, TSV, PSV or
NDJSON file or Arrow IPC stream, or standard input (-). t pauses and
resumes; Esc stops.
- --tee
FILE
- Record standard input to FILE while viewing it. With -, pass it on to
standard output, as tee does, and draw on the terminal.
- --tee-raw
- With --tee: keep FILE exactly as the bytes came. Otherwise a stream that
left its header's sizes blank has them filled in when it ends.
- --force
- With --tee: replace FILE if it is there.
- --hex
- Open in the hex view, whatever the file holds.
- --hex-width
N
- Bytes a row of the hex view holds, so records line up (default: 8, 16, 32
or 64, as many as fit).
- --view
NAME
- Apply a saved view by name once the data is on screen.
- --temp-dir
DIR
- Directory for decompression temp files. Unset: the system's. [config:
read.temp_dir].
- --delimiter
C
- Column separator: one character, tab, \t or a code such as 0x1f (default:
, for .csv, tab for .tsv, | for .psv).
- --no-header
- Read the first row as data; columns are named column_1, column_2, ...
- The line, or comma-separated lines, holding the header, counted from 1
before anything is skipped. Several are joined per column ([csv]
header_join); the data starts after the last.
- Skip this many rows at the end, such as a footer. Reads the whole file to
count rows.
- --skip-rows
N
- Skip this many rows at the start; the header is read after them.
Quote-aware, unlike --skip-lines.
- --skip-lines
N
- Skip this many raw lines at the start, split on newlines alone: a newline
inside quotes counts.
- Lines starting with this are comments, before the header and among the
data. [config: csv.comment].
- --skip-initial-space[=BOOL]
- Ignore the spaces after a delimiter, so padded numbers are numbers and a
cell of spaces is null. [config: csv.skip_initial_space].
- --null
VAL
- Values read as null: VAL in every column, COL=VAL in column COL only.
--null is repeatable and replaces this list. [config:
csv.null_values].
- --infer-types[=COLS|off]
- Read string columns as dates, times, durations or numbers where every
value parses, after trimming: true for all, false for none, or a list of
columns. CSV, and dates in JSON. A column with a leading zero (02134)
stays text; a later value that does not parse is null, and the Notes tab
counts them. [config: read.infer_types].
- --infer-rows
N
- Rows read to infer column types. [config: csv.infer_rows].
- --ignore-errors[=BOOL]
- Skip rows that do not parse instead of failing. [config:
csv.ignore_errors].
- --row-numbers[=BOOL]
- Number rows on the left by their place in the source, kept through a sort
or filter (# toggles). auto: for text and logs; true or false: for all of
them. [config: display.row_numbers].
- --number-format
F
- Digit grouping: none, thousands, european, si, swiss, indian, underscore
or system, or a [display.number_format] table (, toggles). [config:
display.number_format].
- --mouse[=BOOL]
- Take the mouse: the wheel scrolls, a click selects. false leaves it to the
terminal. [config: display.mouse].
- --sample-rows
N
- Rows an analysis samples from a larger table, spread across all of it; 0
reads every row. [config: analysis.sample_rows].
- -c, --config
KEY=VALUE
- Set a config key for this run, as in the file: -c
display.row_numbers=true. Repeatable; a flag of the key's own still wins.
datui config keys lists them.
- --log-file
PATH
- Where the log goes. Unset: datui.log in the cache directory. [config:
log.file].
- --log-level
LEVEL
- How much the log says (default warn). DATUI_LOG beats a config file's; -c
and --log-level beat DATUI_LOG. [config: log.level].
- datui formats
- List the format specs and dictionaries (FIX, DBC) on the search path: each
one's name, what it matches, its file, and the copies it overrides. See
datui-formats(1).
- datui config
- Write the default config file, list the files read, or list every key. See
datui-config(1).
- datui catalog
- Show the catalogs of named datasets on the home screen, or check a catalog
file. See datui-catalog(1).
- datui theme
- List the themes, built in and in the config directory's themes/, or print
one as a file to start from. See datui-theme(1).
- datui cache
- Clear the cache: recents, history, schemas and copies. See
datui-cache(1).
- datui views
- List or remove saved views. See datui-views(1).
- datui completions
- Print the shell completion script for SHELL. See
datui-completions(1).
- datui man
- Show a manual page, list them, or write them all under a directory. See
datui-man(1).
- 0
- Success: the session was quit (q, Ctrl+Q or Ctrl+C), or the command did
what it was asked.
- 1
- An error, printed to standard error: a PATH that is not there, a
configuration file that cannot be used, nothing piped in for -, or a
command that failed (datui formats check on a spec with errors).
- 2
- A usage error: an unknown option or command, or a value an option does not
take.
- 129
- The terminal hung up (SIGHUP). The screen is restored and temporary files
removed first.
- 130
- Interrupted by SIGINT, as from kill -INT. The screen is restored and
temporary files removed first.
- 143
- Ended by SIGTERM. The screen is restored and temporary files removed
first.
- DATUI_CONFIG_DIR
- The config directory, in place of the platform's (~/.config/datui
on Linux). Saved views and format specs live there too.
- DATUI_CACHE_DIR
- The cache directory, in place of the platform's (~/.cache/datui on
Linux).
- DATUI_FORMATS_PATH
- Directories of format specs and dictionaries, separated as PATH is,
searched before [formats] path.
- DATUI_LOG
- The log level: error, warn, info, debug,
trace or off. Beats log.level in a file; -c
and --log-level beat it.
- DATUI_DEBUG
- 1 shows the debug overlay.
- DATUI_GCP_PROJECT
- The Google Cloud project to list when projects cannot be searched, as
GOOGLE_CLOUD_PROJECT.
- DATUI_TRACE_FIRST_ROWS
- A file to write the time to, in Unix nanoseconds, once the first rows are
drawn. For benchmarks.
- NO_COLOR
- Set to anything: no colors, the terminal's own for everything.
- COLORTERM,
TERM, FORCE_COLOR
- How many colors the terminal draws: 24-bit, 256 or 16. Theme colors are
brought down to fit.
- COLORFGBG
- With theme.mode = "auto", says whether the background is
light or dark, for a terminal that does not answer when asked.
- TERM_PROGRAM
- With theme.mode = "auto", names the terminal whose last
answer about its background picks the first frame's theme; TERM
when unset.
- LC_ALL,
LC_CTYPE, LANG
- With display.unicode = "auto", the first one set says
whether the terminal takes UTF-8; when it does not, glyphs are ASCII.
- WT_SESSION,
TERM_PROGRAM
- Windows only: Windows Terminal, or VS Code's terminal
(TERM_PROGRAM=vscode), draws Unicode glyphs whatever the code
page.
- VISUAL,
EDITOR, PAGER
- The inspector's o opens text in the first one set, else less
(on Windows, the system's opener).
Read as each provider's own tools read them; a variable set but
empty counts as unset. [cloud] env_files can read them from
.env files.
- AWS_PROFILE
- The AWS profile for s3://, else default.
- AWS_ACCESS_KEY_ID,
AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN
- AWS keys, and the token of temporary ones.
- AWS_REGION,
AWS_DEFAULT_REGION
- The AWS region.
- AWS_ENDPOINT_URL_S3,
AWS_ENDPOINT_URL, AWS_ENDPOINT
- An S3-compatible endpoint (MinIO, R2, Ceph); the first one set.
- AWS_CONFIG_FILE,
AWS_SHARED_CREDENTIALS_FILE
- The AWS config and credentials files, in place of ~/.aws/config and
~/.aws/credentials.
- GOOGLE_APPLICATION_CREDENTIALS,
GOOGLE_SERVICE_ACCOUNT, GOOGLE_SERVICE_ACCOUNT_PATH,
GOOGLE_SERVICE_ACCOUNT_KEY
- A Google Cloud service account or credentials file for gs://.
- GOOGLE_CLOUD_PROJECT,
GCLOUD_PROJECT, CLOUDSDK_CORE_PROJECT,
GCP_PROJECT
- The Google Cloud project to list buckets in, after
DATUI_GCP_PROJECT; the first one set.
- CLOUDSDK_CONFIG
- The gcloud configuration directory, in place of
~/.config/gcloud.
- AZURE_STORAGE_CONNECTION_STRING
- An Azure storage connection string, with AccountKey or
SharedAccessSignature.
- AZURE_STORAGE_ACCOUNT_NAME,
AZURE_STORAGE_ACCOUNT_KEY, AZURE_STORAGE_SAS_TOKEN
- An Azure storage account and its key or SAS token.
- AZURE_TENANT_ID,
AZURE_CLIENT_ID, AZURE_CLIENT_SECRET,
AZURE_FEDERATED_TOKEN_FILE
- An Azure service principal, or AKS workload identity.
- AZURE_CONFIG_DIR
- The Azure CLI's directory, in place of ~/.azure.
CONFIG is $DATUI_CONFIG_DIR when it is set, else
$XDG_CONFIG_HOME/datui (~/.config/datui) on Linux,
~/Library/Application Support/datui on macOS and
%APPDATA%\datui on Windows.
CACHE is $DATUI_CACHE_DIR when it is set, else
$XDG_CACHE_HOME/datui (~/.cache/datui) on Linux,
~/Library/Caches/datui on macOS and %LOCALAPPDATA%\datui on
Windows.
- CONFIG/config.toml
- The config file: see datui-config(5). datui config path prints the
files read.
- CONFIG/catalog.toml
- Your catalog, which Ctrl+D on the home screen adds to: see
datui-catalog(1).
- CONFIG/catalogs/
- More catalogs, one *.toml each, named by its file; examples.toml replaces
the bundled one.
- CONFIG/views/
- Saved views: see datui-views(1).
- CONFIG/formats/
- Format specs and dictionaries, searched first: see datui-formats(7).
- CACHE/recents_history.txt
- The recent datasets the home screen lists. datui cache clear
--recents forgets them.
- CACHE/*_history.txt
- The prompts' history.
- CACHE/shapes/,
CACHE/facts/, CACHE/cloud_listings/
- What the home screen has measured of datasets and listed of cloud sources,
so it can show rows, columns and sizes without reading them again.
- CACHE/datui.log
- The log, unless log.file names another.
Open the home screen. Example datasets lists the catalog that
comes with datui.
Palmer penguins from the web.
datui https://vincentarelbundock.github.io/Rdatasets/csv/palmerpenguins/penguins.csv
NOAA daily highs for 2024, one table from public S3.
datui s3://noaa-ghcn-pds/parquet/by_year/YEAR=2024/ELEMENT=TMAX/
A glob, read as one partitioned table: every 2024 element starting
with T.
datui --hive 's3://noaa-ghcn-pds/parquet/by_year/YEAR=2024/ELEMENT=T*/*.parquet'
Overture Maps releases in public Azure storage, listed on the home
screen.
datui abfss://release@overturemapswestus2.dfs.core.windows.net/
A model's tensors, read from its header without downloading the
weights.
datui https://huggingface.co/openai-community/gpt2/resolve/main/model.safetensors
Data piped in; the format is read from its first bytes.
printf 'id,amount\n1,9.50\n2,3.25\n' | datui
The last 1,000 systemd journal entries, a column per field.
journalctl -o json -n 1000 | datui
Rows as they arrive; t pauses, Esc stops following.
(echo time,value; while sleep 0.2; do echo "$(date +%s),$RANDOM"; done) | datui -f -
A file's bytes in the hex view.
Any config key, for this run.
datui -c display.row_numbers=true https://vincentarelbundock.github.io/Rdatasets/csv/palmerpenguins/penguins.csv
Write the config file, every key commented out at its default.
List the format specs and dictionaries datui finds.
The keys of every screen, as a manual page.
Print the catalog datui ships, the worked example of the
format.
datui catalog show examples
datui-config(1), datui-catalog(1),
datui-theme(1), datui-cache(1), datui-views(1),
datui-formats(1), datui-completions(1), datui-man(1),
datui-config(5), datui-keys(7), datui-query(7),
datui-formats(7), jq(1), less(1), journalctl(1),
vd(1)
The datui documentation:
<https://derekwisong.github.io/datui/>
Report bugs at
<https://github.com/derekwisong/datui/issues>.
Derek Wisong and the datui contributors.
Copyright © 2026 Derek Wisong
datui is free software under the MIT License.