Skip to main content

Installation and First Run

VisiData is a Python package available via pip (recommended) or system package managers. The pip version is always the most current.

Think of this lesson as your "hello world" for VisiData: install it, open one file, confirm it works, and you're ready for everything that follows.

Learning Focus

Install VisiData, open a file, and confirm the interface loads correctly before moving on. Do not spend time exploring — that comes in later lessons.

Installation Methods

# Requires Python 3.8+
pip install visidata

# Verify installation
vd --version
# Expected: VisiData v3.x

Method 2: System Package Manager

# Debian / Ubuntu
sudo apt install visidata

# Fedora / RHEL
sudo dnf install visidata

# macOS (Homebrew)
brew install saulpw/vd/visidata

# Arch Linux
sudo pacman -S visidata
warning

The apt version may be significantly older than the pip version. For the latest features and format support, use pip install visidata.

Method 3: pipx (Isolated Install)

# Install pipx first if needed
sudo apt install pipx

# Install VisiData in an isolated environment
pipx install visidata

# Verify
vd --version

Optional Dependencies

VisiData's core is dependency-free, but additional formats require extra packages:

# Excel (.xlsx) support
pip install openpyxl

# Parquet support
pip install pyarrow

# PostgreSQL support
pip install psycopg2-binary

# HDF5 support
pip install h5py

# All extras at once
pip install "visidata[full]"

Your First File

Let's create a simple CSV and open it in VisiData. This is the sample data we'll use:

hostname,ip,role,status
web01,192.168.1.10,webserver,active
web02,192.168.1.11,webserver,active
db01,192.168.1.20,database,active
cache01,192.168.1.30,cache,standby
# Create the practice directory and file
mkdir -p ~/github/practice-folder/visidata/01-loading

cat > ~/github/practice-folder/visidata/01-loading/01-servers.csv << 'EOF'
hostname,ip,role,status
web01,192.168.1.10,webserver,active
web02,192.168.1.11,webserver,active
db01,192.168.1.20,database,active
cache01,192.168.1.30,cache,standby
EOF

# Open with VisiData
vd ~/github/practice-folder/visidata/01-loading/01-servers.csv

What you see on screen:

┌──────────────┬─────────────────┬───────────┬─────────┐
│ hostname │ ip │ role │ status │
│──────────────┼─────────────────┼───────────┼─────────│
│ web01 │ 192.168.1.10 │ webserv… │ active │
│ web02 │ 192.168.1.11 │ webserv… │ active │
│ db01 │ 192.168.1.20 │ database │ active │
│ cache01 │ 192.168.1.30 │ cache │ standb │
└──────────────────────────────────────────────────────┘
01-servers.csv 4 rows hostname
  • The top row shows column names
  • The bottom line shows: filename, row count, current column name
  • The cursor (highlighted row) starts on the first data row

Essential First Keystrokes

Once inside VisiData, try these immediately:

KeyAction
Arrow keys / hjklMove cursor (up/down/left/right)
qQuit current sheet (go back one level)
gqQuit VisiData entirely
Ctrl+HOpen full man page
Alt+HOpen help menu
Ctrl+GShow cursor position and sheet bounds

Open a File and Browse It

vd ~/github/practice-folder/visidata/01-loading/01-servers.csv

# Inside VisiData:
# Press → or l → move cursor to next column
# Press ↓ or j → move cursor down one row
# Press G → jump to last row
# Press gg → jump to first row
# Press q → quit (back to terminal)

Common Installation Issues

ProblemCauseFix
vd: command not foundpip installed to user path not in PATHAdd ~/.local/bin to PATH
ModuleNotFoundError: cursesWindows environmentVisiData requires Unix/Linux/macOS terminal
Garbled displayNon-UTF-8 terminalSet export LANG=en_US.UTF-8
Colors missingTERM not set correctlySet export TERM=xterm-256color

Fix PATH for pip user install

# Add to ~/.bashrc or ~/.zshrc
export PATH="$HOME/.local/bin:$PATH"

# Reload
source ~/.bashrc

Hands-On Practice

# 1. Open a log file directly
vd /var/log/syslog

# 2. Open a directory (Directory Sheet)
vd /var/log/nginx/

# 3. Open multiple files at once
vd ~/github/practice-folder/visidata/01-loading/01-servers.csv /var/log/auth.log
# Use Shift+S to switch between them

What's Next