Explore, compare, inspect, and query tabular data from the terminal.
Open a file into a layered red interactive table, browse folders with live counts, compare related CSVs, inspect columns, export filtered views, run schema drift checks, and use SQL without leaving the shell.
- open
.csv,.tsv,.txt, compressed text files like.csv.gz, and.parquet - launch a bundled guided demo with
csvex demo - launch a colorful TUI with
csvex data.csvor browse folders withcsvex explore - fuzzy-find files and folders inside the explorer with
/ - search rows, filter columns, sort data, pin columns, hide columns, and export visible views
- inspect a selected column with mini charts and run lightweight data quality checks
- keep favorites and recent files in the explorer
- compare two files and show added, removed, and changed rows
- summarize a folder of files and detect schema drift across it
- run SQL against a single file with an in-memory table named
data - read from
stdinwithcsvex - ...
./install-dev-global.shThis creates .venv, installs the project in editable mode, and links both csvex and c
into /usr/local/bin.
python3 -m pip install --user .csvex
ccsvex demo
csvex demo --browse
c democsvex demo opens a bundled showcase dataset and starts with a guided overlay. From there you can
press b to browse the rest of the demo pack, including a compare-friendly sales pair, a survey
dataset, and a TSV inventory file.
csvex data.csv
c data.csvLarge text files automatically open in preview mode inside the TUI so startup stays responsive.
csvex explore
csvex explore data/
c explore .csvex compare before.csv after.csv --key idcsvex sql data.csv "select country, count(*) as total from data group by country order by total desc"csvex summary data/
csvex drift data/csvex data.csv head -n 20
csvex data.csv filter age '>' 30
csvex data.csv select name email salary
csvex data.csv inspect country
csvex data.csv quality
csvex data.csv export output.csvprintf 'name\tage\nAna\t30\nBen\t41\n' | csvex - head -n 2| Command | Description |
|---|---|
head [-n N] |
Display the first N rows |
filter <col> <op> <val> |
Filter rows by value |
select <cols...> |
Show only selected columns |
stats |
Show numeric summary statistics |
unique <col> |
List unique values in a column |
inspect <col> |
Inspect one column in depth |
quality |
Run lightweight data quality checks |
export <path> |
Export the file to another path |
explore [path] |
Open the interactive explorer |
demo [entry] [--browse] |
Launch the bundled csvex showcase workspace |
summary [path] |
Summarize a folder or one file |
drift [path] |
Show schema drift across a folder |
compare <left> <right> [--key col] |
Compare two files |
sql <file> "<query>" |
Run an in-memory SQL query against one file |
Enterorl: open the selected folder or fileh,u, orBackspace: go up one foldera: toggle folder browser and recursive all-files viewF: toggle favorites viewR: toggle recents view*: add or remove the selected item from favorites/: fuzzy-find files and folders in the current explorer viewC: clear the explorer search filterm: show a folder summary overlayD: show schema drift for the current folder or rootUp/Downorj/k: move selectionPgUp/PgDn: page through entriesg/G: jump to top or bottomr: rescan?: help overlayq: quit
Up/Downorj/k: move the selected rowLeft/Rightorh/l: scroll horizontallyPgUp/PgDn: page through rowsg/G: jump to top or bottom0/$: jump to the left or right edge[/]: move the active column/,n,N: search rows and cycle through matchesf: filter the active column with a contains matchC: clear search and filter states/S: sort ascending or descending by the active columnx/X: hide the active column or restore all columnsp: pin or unpin the active columnEnter: open the selected row detail viewi: inspect the active columnd: show file-wide data quality checkse: export the current visible vieww: watch the file for changes and auto-reload itR: reload the active file immediatelyb: go back to the file listr: go back to files and rescan?: help overlayq: quit
.csv.tsv.txt.csv.gz,.tsv.gz, and other pandas-supported compressed text variants.parquetstdinvia-
csvex is still intentionally compact enough to hack on quickly. Most of the behavior lives in
csvex.py, so it is easy to trace loader logic, CLI dispatch, explorer state, and TUI rendering.
Good contribution areas:
- stronger large-file support beyond preview mode
- richer SQL features and multi-file joins
- better schema drift reports and validations
- smarter data quality checks
- deeper tests around curses behavior and parser edge cases
Basic development loop:
./install-dev-global.sh
python3 -m py_compile csvex.py
c
c test_data.csv
c explore .MIT