What is VisiData
VisiData is an interactive multitool for tabular data that runs entirely in your terminal. It reads virtually any structured data format, presents it as a navigable spreadsheet-like sheet, and lets you reshape, filter, and analyze data using only keyboard commands.
Learning Focus
Use this lesson to build VisiData's core mental model: everything is a sheet, every sheet lives in a stack, and every transformation generates a derived sheet — not a destructive edit.
Tool Snapshot
- Command:
vdorvisidata - Language: Python (GPLv3)
- Formats: CSV, TSV, JSON, SQLite, Parquet, Excel, fixed-width, logs, URLs, and more
- Version (stable): v3.3 (2025)
- Config file:
~/.visidatarc - Help inside VisiData:
Ctrl+H(man page),Alt+H(menu)
The Problem VisiData Solves
Opening a large CSV in Excel or LibreOffice Calc:
Opening the same file in VisiData:
How VisiData Is Structured
| Layer | What it is | Analogy |
|---|---|---|
| Sheet | One tabular view of data | Spreadsheet tab |
| Sheet Stack | List of all open sheets | Browser tab history |
| Source Sheet | The original loaded data | Raw file |
| Derived Sheet | Transformed view (frequency, pivot) | Calculated report |
| CommandLog | Audit trail of all actions | Undo history |
Why Operators Use VisiData
| Need | VisiData capability | Practical effect |
|---|---|---|
| Fast large-file inspection | Lazy loading, 1M+ rows | No GUI freeze |
| Filter/slice data | Row selection, regex, Python expr | Replace grep+awk pipelines |
| Data type casting | ~#%$@ type keys | Instant int/float/date coercion |
| Frequency analysis | Shift+F frequency table | Instant histogram |
| Data export | Ctrl+S to any format | CSV → JSON → SQLite in seconds |
| Repeatability | CommandLog replay | Documented, reproducible transforms |
| Custom logic | Python expressions in columns | Full pandas-like power in-terminal |
VisiData vs Alternatives
| Feature | VisiData | csvkit | Miller | pandas |
|---|---|---|---|---|
| Interactive TUI | ✅ | ❌ | ❌ | ❌ |
| 1M+ rows | ✅ | ✅ | ✅ | ✅ (with RAM) |
| Multi-format | ✅ 40+ | Limited | TSV/CSV/JSON | ✅ |
| Python expressions | ✅ | ❌ | ❌ | ✅ |
| In-terminal graphs | ✅ | ❌ | ❌ | ❌ |
| Learning curve | Medium | Low | Medium | High |
tip
VisiData is the best choice when you need interactive, visual exploration of data without leaving the terminal.
The VisiData Interface
┌──────────────────────────────────────────────────────────┐
│ name │ age │ city │ salary │ ← Header row (column names)
│──────────────┼───────┼────────────────┼──────────────────│
│ Alice │ 29 │ Singapore │ 85000 │ ← Cursor row (highlighted)
│ Bob │ 34 │ Kuala Lumpur │ 72000 │
│ Carol │ 27 │ Jakarta │ 91000 │
│──────────────────────────────────────────────────────────│
│ visidata v3.3 │ data.csv │ 3 rows │ name │ ← Status bar
└──────────────────────────────────────────────────────────┘
Key interface elements:
- Header row: column names (use
^to rename) - Cursor row: highlighted row under your cursor
- Status bar: sheet name, row count, current column
Basic Commands Overview
# Open a file
vd data.csv
vd server.log
vd database.sqlite
# Inside VisiData:
# q quit current sheet
# gq quit all sheets (exit VisiData)
# Ctrl+H open man page / full reference
# Alt+H open help menu
# Shift+S open Sheets Sheet (see all open sheets)
Common Beginner Mistakes
| Mistake | What happens | Fix |
|---|---|---|
Pressing q to quit VisiData | Only closes current sheet | Use gq to quit all |
| Editing cells unintentionally | Pressing e enters edit mode | Press Ctrl+C to cancel |
| Losing the source sheet | Navigating derived sheets | Press Shift+S to see all sheets |
| Confusing column types | Numbers treated as strings | Set type with # (int) or % (float) |
Hands-On Practice
# Download a sample CSV
curl -o /tmp/sample.csv https://people.sc.fsu.edu/~jburkardt/data/csv/addresses.csv
# Open in VisiData
vd /tmp/sample.csv
# Try these inside VisiData:
# hjkl or arrow keys — move around
# Shift+F — frequency table on current column
# q — return to source sheet
# gq — quit VisiData