Tabiew

March 14, 2026 · View on GitHub

Tabiew is a lightweight TUI application that allows users to view and query tabular data files, such as CSV, Parquet, Arrow, and ...

Image Alt text

Features

  • ⌨️ Vim-style keybindings
  • 🛠️ SQL support
  • 📊 Support for CSV, TSV, Parquet, JSON, JSONL, Arrow, FWF, Sqlite, Excel, and Logfmt
  • 🔍 Fuzzy search
  • 📝 Scripting support
  • 🗂️ Multi-table functionality
  • 📈 Plotting
  • 🎨 More than 400 beautiful themes

Wiki

Tabiew started as a humble hobby TUI project for viewing CSV data but has evolved to incorporate various features and improvements from valuable community feedbacks. As the project expanded, so did the need for comprehensive documentation, leading to the creation of the wiki page. The wiki offers explanations of features and the best practices to get the most out of Tabiew.

Installation

There are various ways to install Tabiew:

Shell (Linux / macOS)

curl -sS https://raw.githubusercontent.com/shshemi/tabiew/main/install.sh | sh

Arch Linux

You can install from the official repositories using pacman:

pacman -S tabiew

Debian-based

Download the .deb package from the GitHub releases page and run:

sudo dpkg -i <path_to_package.deb>

RPM-based

Download the .rpm package from the GitHub releases page and run:

sudo rpm -i <path_to_package.rpm>

MacOS

Installing Tabiew using Homebrew from Homebrew core:

brew update
brew install tabiew

or tap:

brew install shshemi/tabiew/tabiew

Note: Please be aware that installing Tabiew from the tap involves compiling it from the source, which may take some time to complete.

Cargo

Installing Tabiew from Crates.io:

cargo install --locked tabiew

Build from Source

Ensure you have rustc version 1.80 (or higher) installed. Download the desired source version from the release page. Extract the downloaded file and navigate into the extracted directory. Then run the following command:

cargo build --release
cp ./target/release/tw <system_or_local_bin_path>

Usage

Start Tabiew with tw

tw <path_to_file(s)>

Tabiew automatically detects the file format based on the file extension. Supported formats include:

  • CSV (.csv) - Comma-separated values
  • TSV (.tsv) - Tab-separated values
  • Parquet (.parquet, .pqt)
  • JSON (.json)
  • JSONL (.jsonl) - JSON Lines
  • Arrow (.arrow)
  • FWF (.fwf) - Fixed-width format
  • SQLite (.db, .sqlite)
  • Excel (.xls, .xlsx, .xlsm, .xlsb)

Examples:

Open various files (format automatically detected):

tw data.csv data.tsv data.arrow

Open CSV files with custom delimiter (pipe-separated):

tw data.csv --separator '|'

Open CSV files with custom delimiter and no header row (semicolon-separated):

tw data.csv --separator ';' --no-header

Override format detection:

tw data.txt -f parquet

Delimiter-separated formats (CSV, TSV, etc):

# Explicitly use CSV format (comma by default, but can use custom delimiter)
tw data.txt -f csv
tw data.txt -f csv --separator '|'

# Explicitly use TSV format (always tab-delimited)
tw data.txt -f tsv

# Use DSV with custom delimiter (equivalent to csv with --separator)
tw data.txt -f dsv --separator '|'

Open a URL using curl:

curl -s "https://raw.githubusercontent.com/wiki/shshemi/tabiew/housing.csv" | tw

Useful Keybindings️

Key CombinationFunctionality
F1Show help with all keyboard shortcuts
EnterOpen sheet
h j k l or ← ↓ ↑ →Navigation
b / wPrevious / next column
eToggle Auto-Fit
Ctrl + u / Ctrl + dMove half page up/down
Ctrl + b / Ctrl + fMove full page up/down
Home or gMove to first row
End or GMove to last row
Ctrl + rReset data frame
qClose
QQuit Application
:Command Palette
/Fuzzy Search

Useful Commands

CommandExampleDescription
Q or queryQ SELECT * FROM dfQuery the data in Structured Query Language(SQL). The table name is the file name without extension
S or selectS price, area, bedrooms, parkingQuery current data frame for columns/functions
F or filterF price < 20000 AND bedrooms > 4Filter current data frame, keeping rows were the condition(s) match
O or orderO areaSort current data frame by column(s)
tabntabn SELECT * FORM user WHERE balance > 1000Create a new tab with the given query
q or quitqReturn to table from sheet view otherwise quit
schemaschemaShow loaded data frame(s) alongside their path(s)
resetresetReset the table to the original data frame
helphelpShow command reference in a new tab

Contributing

Contributions are welcome! Please fork the repository and submit pull requests with your features and bug fixes.

Acknowledgments

This application uses themes from the Ghostty terminal.

License

This project is licensed under the MIT License - see the LICENSE file for details.