A fast, keyboard-driven terminal explorer for tabular data. Open CSV, JSON, Parquet, Excel and SQLite files directly in your terminal — filter, sort, pivot, compute new columns, and visualise distributions without leaving the shell.
tuitab data.csv
tuitab orders.csv customers.csv # open multiple files as a browseable list
ttab data.csv # short alias
ttb data.csv # shortest alias
cat data.csv | tuitab -t csv
- Multi-format input — CSV/TSV (auto-delimiter), JSON, Parquet, Excel (xlsx/xls), SQLite, DuckDB
- Keyboard-driven navigation — vim-style
hjkl,g/Gjump, column-width resize - Filtering — regex search
/, row selection by value,, expression filter|!=expr - Sorting — ascending/descending on any column, multi-key sort
- Computed columns —
=exprsyntax with arithmetic, string ops, date math - JOIN —
Jopens a step-by-step wizard to join the current table with another file or open sheet (INNER / LEFT / RIGHT / FULL OUTER, multi-column keys) - Pivot tables —
Wopens a pivot formula input with autocomplete - Statistics —
Ishows per-column stats (type, count, nulls, unique, min, max, mean, median, mode, stdev, quantiles) - Charts —
Vrenders histogram, frequency bar chart, line chart (date × numeric), and grouped bar chart (category × numeric). Pin a reference column with!first for 2-column charts - Transpose —
Ttransposes the current table in-place - Export — Ctrl+S saves as CSV/Parquet/Excel
- Clipboard — yank rows to clipboard, paste
- Aggregators — column footers with sum, count, avg, median, percentiles
- Theme — Everforest dark colour palette
cargo install tuitabThis installs three aliases: tuitab, ttab, and tt.
brew tap denisotree/tuitab
brew install tuitab# Download the .deb from the latest GitHub release, then:
sudo dpkg -i tuitab_0.1.0_amd64.debOr add the apt repository (see releases page).
# Using yay:
yay -S tuitab
# Or build manually:
git clone https://aur.archlinux.org/tuitab.git
cd tuitab && makepkg -siDownload for your platform from the Releases page.
tuitab [OPTIONS] [FILES]...
Arguments:
[FILES]... One or more files to open, a directory, or '-' for stdin.
Pass multiple files to browse them as a list.
Options:
-d, --delimiter <CHAR> Column delimiter (auto-detected if omitted)
-t, --type <FORMAT> Data format when reading from stdin (csv, json, parquet)
-h, --help Print help
-V, --version Print version
tuitab orders.csv customers.csv products.csvA directory-style listing opens with all three files as rows. Press Enter on
any row to open that file. Press Esc or q to return to the list.
psql -c "SELECT * FROM orders" --csv | tuitab -t csv
sqlite3 app.db ".mode csv" ".headers on" "SELECT * FROM users" | tuitab -t csv| Key | Action |
|---|---|
h / l |
Move column left / right |
j / k |
Move row down / up |
g / G |
Jump to first / last row |
0 / $ |
Jump to first / last column |
PgUp / PgDn |
Page up / down |
| Key | Action |
|---|---|
/ |
Start text search |
n / N |
Next / previous match |
c |
Clear search highlight |
, |
Select rows by cell value |
| |
Filter rows by expression (e.g. |!=age > 30) |
| Key | Action |
|---|---|
= |
Add computed column (expression) |
t |
Set column type |
! |
Pin / unpin column (used as reference for charts & pivot) |
_ |
Cycle column width |
+ / - |
Add / clear column aggregator |
Z |
Quick aggregate (sum visible selection) |
| Key | Action |
|---|---|
Enter |
Sort ascending by current column |
Shift+Enter |
Sort descending |
r |
Reset sort order |
| Key | Action |
|---|---|
V |
Chart current column (histogram / frequency). With a pinned column: line chart or bar chart |
I |
Column statistics (describe sheet) |
T |
Transpose table |
F |
Frequency table |
W |
Pivot table |
J |
JOIN with another table |
? |
Help popup |
| Key | Action |
|---|---|
s / u |
Select / unselect row |
" |
Create new sheet from selected rows |
d |
Delete selected rows |
y prefix |
Yank (copy) operations |
p |
Paste rows |
| Key | Action |
|---|---|
Ctrl+S |
Save file |
q |
Quit |
Press V on a column to open a chart. Behaviour depends on whether a reference
column is pinned with !:
| Cursor column | Pinned column (!) |
Chart |
|---|---|---|
| Numeric | — | Histogram (Freedman-Diaconis bins) |
| Categorical | — | Frequency bar chart |
| Numeric | Date / Datetime | Line chart (aggregation popup: sum/count/avg/median/min/max) |
| Categorical | Date / Datetime | Line chart (auto count) |
| Numeric | Categorical | Grouped bar chart (aggregation popup) |
Charts automatically switch between vertical and horizontal layout based on label length.
Press J in normal mode to start a step-by-step wizard that joins the current
table with another table.
A popup lists two options:
[Browse file...]— type a file path (Tab for autocomplete). Any format tuitab can open is accepted: CSV, Parquet, JSON, Excel, SQLite, DuckDB.- Open sheets — if you already have other sheets open in the stack (e.g. you navigated to them earlier), they appear here and can be selected directly.
| Option | SQL equivalent | Rows kept |
|---|---|---|
INNER |
INNER JOIN |
Only rows with a match in both tables |
LEFT |
LEFT JOIN |
All rows from the left table; unmatched right cells are null |
RIGHT |
RIGHT JOIN |
All rows from the right table; unmatched left cells are null |
OUTER |
FULL OUTER JOIN |
All rows from both tables |
A checkbox list of the current table's columns appears. Press Space to toggle
columns that will be used as join keys. The order of selection matters: key 1
on the left matches key 1 on the right. Press Enter to continue.
Same checkbox list for the right-hand table. Columns whose names match the
selected left keys are pre-selected. Adjust as needed and press Enter to
execute the join.
The key count must match: if you selected two left keys, select exactly two right keys. An error is shown in the status bar if they don't match.
A new sheet is pushed onto the stack with the title left JOIN right. Press
Esc or q to return to the original table.
Duplicate column names (non-key columns present in both tables) receive a
_right suffix in the result automatically.
# orders.csv has columns: order_id, customer_id, amount
# customers.csv has columns: customer_id, name, country
tuitab orders.csv- Press
J - Select
[Browse file...], typecustomers.csv, pressEnter - Select
LEFT, pressEnter - Toggle
customer_idon the left, pressEnter - Toggle
customer_idon the right, pressEnter
Result: orders enriched with customer name and country.
Used in = (computed columns) and |!= (row filter):
age * 2
price / 100
name contains "Smith"
date > 2024-01-01
amount in (100, 200, 300)
category != "N/A"
tuitab is inspired by VisiData — a brilliant terminal spreadsheet multitool by Saul Pwanson. If you find tuitab useful, check out VisiData too.
Bug reports, feature requests, and pull requests are welcome. See CONTRIBUTING.md for guidelines.
Apache-2.0 — see LICENSE.