| Crates.io | xleak |
| lib.rs | xleak |
| version | 0.2.5 |
| created_at | 2025-11-09 02:24:20.05069+00 |
| updated_at | 2025-12-05 01:55:55.230735+00 |
| description | A fast terminal Excel viewer with interactive TUI, search, formulas, and export capabilities |
| homepage | https://github.com/bgreenwell/xleak |
| repository | https://github.com/bgreenwell/xleak |
| max_upload_size | |
| id | 1923520 |
| size | 1,507,495 |

Expose Excel files in your terminal - no Microsoft Excel required!
Inspired by doxx, xleak brings Excel spreadsheets to your command line with beautiful rendering, powerful export capabilities, and a feature-rich interactive TUI.

calamine, the fastest Excel parser in Rust.xlsx, .xls, .xlsm, .xlsb, .ods/, navigate with n/Nc) or entire rows (C) to clipboardCtrl+G to jump to any cell (e.g., A100, 500, 10,5)macOS / Linux (Homebrew):
brew install bgreenwell/tap/xleak
Windows (Scoop):
scoop bucket add bgreenwell https://github.com/bgreenwell/scoop-bucket
scoop install xleak
Arch Linux (AUR):
# Using yay
yay -S xleak-bin
# Or using paru
paru -S xleak-bin
Cargo (all platforms):
cargo install xleak
Nix:
# Run directly
nix run github:bgreenwell/xleak -- file.xlsx
# Install with flakes
nix profile install github:bgreenwell/xleak
macOS / Linux:
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/bgreenwell/xleak/releases/latest/download/xleak-installer.sh | sh
Windows (PowerShell):
irm https://github.com/bgreenwell/xleak/releases/latest/download/xleak-installer.ps1 | iex
Download platform-specific binaries from the latest release:
.exegit clone https://github.com/bgreenwell/xleak.git
cd xleak
cargo install --path .
Requirements: Rust 1.70 or later
# Launch interactive viewer
xleak quarterly-report.xlsx -i
# Start on a specific sheet
xleak report.xlsx --sheet "Q3 Results" -i
# View formulas by default
xleak data.xlsx -i --formulas
# Enable horizontal scrolling for wide files (auto-size columns)
xleak wide-data.xlsx -i -H
TUI Keyboard Shortcuts:
↑ ↓ ← → - Navigate cellsEnter - View cell details (including formulas)/ - Search across all cellsn / N - Jump to next/previous search resultCtrl+G - Jump to specific row/cell (e.g., 100, A50, 10,5)c - Copy current cell to clipboardC - Copy entire row to clipboardTab / Shift+Tab - Switch between sheets? - Show helpq - Quitxleak quarterly-report.xlsx
# By name
xleak report.xlsx --sheet "Q3 Results"
# By index (1-based)
xleak report.xlsx --sheet 2
# Show only first 20 rows
xleak large-file.xlsx -n 20
# Show all rows
xleak file.xlsx -n 0
# Export to CSV
xleak data.xlsx --export csv > output.csv
# Export to JSON
xleak data.xlsx --export json > output.json
# Export as plain text (tab-separated)
xleak data.xlsx --export text > output.txt
# List all tables in a workbook
xleak workbook.xlsx --list-tables
# Extract a specific table as JSON (default)
xleak workbook.xlsx --table "Sales"
# Extract table as CSV
xleak workbook.xlsx --table "Sales" --export csv > sales.csv
# Extract table as plain text
xleak workbook.xlsx --table "Employees" --export text
# Export specific sheet as CSV
xleak workbook.xlsx --sheet "Sales" --export csv > sales.csv
# Launch interactive viewer
xleak quarterly-report.xlsx -i
# Quick preview in non-interactive mode
xleak quarterly-report.xlsx
# See specific sheet with limited rows
xleak financial-data.xlsx --sheet "Summary" -n 10
# Interactive mode with formulas visible
xleak data.xlsx -i --formulas
# Export all data from a sheet
xleak survey-results.xlsx --sheet "Responses" --export csv -n 0
xleak supports configuration via a TOML file for persistent settings like default theme and keybindings.
Default: ~/.config/xleak/config.toml (or $XDG_CONFIG_HOME/xleak/config.toml)
Platform-specific fallback locations:
~/Library/Application Support/xleak/config.toml~/.config/xleak/config.toml (same as XDG)%APPDATA%\xleak\config.tomlCustom: Use --config flag to specify a different location:
xleak --config /path/to/config.toml file.xlsx -i
Copy the example:
mkdir -p ~/.config/xleak
cp config.toml.example ~/.config/xleak/config.toml
Or create a minimal config:
mkdir -p ~/.config/xleak
cat > ~/.config/xleak/config.toml << 'EOF'
[theme]
default = "Dracula"
[ui]
max_rows = 50
column_width = 30
[keybindings]
profile = "vim"
EOF
Test your config:
xleak file.xlsx -i
[theme]
# Default theme to use on startup
default = "Dracula"
Available themes:
"Default" - Clean light theme with subtle colors"Dracula" - Popular dark theme with purple accents"Solarized Dark" - Precision colors for machines and people"Solarized Light" - Light variant of Solarized"GitHub Dark" - GitHub's dark color scheme"Nord" - Arctic, north-bluish color palettePress t in interactive mode to cycle through themes at runtime.
[ui]
# Default maximum rows to display in non-interactive mode (0 = all)
max_rows = 50
# Default maximum column width in characters
column_width = 30
Notes:
max_rows only affects non-interactive display mode (xleak file.xlsx)-i) always shows all rows with lazy loading for large filescolumn_width applies to both modes and can be overridden with -w flagxleak supports two built-in profiles plus custom keybindings:
[keybindings]
# Profile: "default" or "vim"
profile = "default"
# Optional: override individual keys
[keybindings.custom]
quit = "x"
search = "?"
copy_cell = "y"
Standard keybindings for terminal applications:
| Action | Key | Description |
|---|---|---|
| Navigation | ||
| Move up/down/left/right | ↑ ↓ ← → |
Navigate cells |
| Page up/down | PgUp PgDn |
Scroll by page |
| Jump to top/bottom | Ctrl+Home Ctrl+End |
Jump to first/last row |
| Jump to row start/end | Home End |
Jump to first/last column |
| Actions | ||
| View cell details | Enter |
Show formula and full value |
| Jump to cell | Ctrl+G |
Jump to specific row/cell |
| Search | / |
Full-text search |
| Next/prev match | n N |
Navigate search results |
| Copy cell | c |
Copy cell to clipboard |
| Copy row | C (Shift+c) |
Copy entire row |
| Sheets | ||
| Next/prev sheet | Tab Shift+Tab |
Switch between sheets |
| General | ||
| Toggle theme | t |
Cycle through themes |
| Show help | ? |
Display help screen |
| Quit | q |
Exit application |
VIM-style keybindings for efficient keyboard navigation:
| Action | Key | Default Key | Description |
|---|---|---|---|
| VIM Navigation | |||
| Move left/down/up/right | h j k l |
← ↓ ↑ → | VIM-style movement |
| Page up/down | Ctrl+u Ctrl+d |
PgUp PgDn | Half-page scrolling |
| Jump to top | gg |
Ctrl+Home | Jump to first row |
| Jump to bottom | G (Shift+g) |
Ctrl+End | Jump to last row |
| Jump to row start/end | 0 $ |
Home End | First/last column |
| VIM Actions | |||
| Yank cell | y |
c |
Copy cell (yank) |
| Yank row | Y (Shift+y) |
C |
Copy row (yank) |
| Standard | |||
| Quit | q |
q |
Same as default |
| Search | / |
/ |
Same as default |
| Next/prev match | n N |
n N |
Same as default |
| All other keys | Same as default profile |
Enable VIM mode:
[keybindings]
profile = "vim"
Override individual keys while keeping the profile defaults:
[keybindings]
profile = "default"
[keybindings.custom]
# Use 'x' to quit instead of 'q'
quit = "x"
# Use '?' for search instead of '/'
search = "?"
# Use 'T' (Shift+t) to toggle theme
theme_toggle = "T"
# Use Ctrl+J to jump to cell
jump = "Ctrl+j"
All customizable actions:
| Action | Default | VIM | Description |
|---|---|---|---|
quit |
q |
q |
Exit application |
help |
? |
? |
Show help |
theme_toggle |
t |
t |
Cycle themes |
search |
/ |
/ |
Search cells |
next_match |
n |
n |
Next search result |
prev_match |
N |
N |
Previous result |
copy_cell |
c |
y |
Copy cell |
copy_row |
C |
Y |
Copy row |
jump |
Ctrl+g |
Ctrl+g |
Jump to cell |
show_cell_detail |
Enter |
Enter |
Show details |
next_sheet |
Tab |
Tab |
Next sheet |
prev_sheet |
Shift+Tab |
Shift+Tab |
Previous sheet |
up |
Up |
k |
Move up |
down |
Down |
j |
Move down |
left |
Left |
h |
Move left |
right |
Right |
l |
Move right |
page_up |
PageUp |
Ctrl+u |
Page up |
page_down |
PageDown |
Ctrl+d |
Page down |
jump_to_top |
Ctrl+Home |
g |
First row |
jump_to_bottom |
Ctrl+End |
G |
Last row |
jump_to_row_start |
Home |
0 |
First column |
jump_to_row_end |
End |
$ |
Last column |
Key format:
"q", "/", "Enter""Ctrl+g", "Shift+Tab", "Alt+s""Enter", "Esc", "Tab", "Home", "End", "PageUp", "PageDown", "Up", "Down", "Left", "Right"Minimal (theme only):
[theme]
default = "Nord"
VIM user:
[theme]
default = "Dracula"
[keybindings]
profile = "vim"
Custom workflow:
[theme]
default = "GitHub Dark"
[ui]
max_rows = 100
column_width = 40
[keybindings]
profile = "default"
[keybindings.custom]
quit = "x"
search = "s"
copy_cell = "Ctrl+c"
copy_row = "Ctrl+Shift+c"
Full reference: See config.toml.example for all options with detailed comments.
xleak is optimized for both small and large files:
| Tool | Format | Speed | Terminal Native | Interactive | Search | Formulas |
|---|---|---|---|---|---|---|
| xleak | ✅ xlsx/xls/ods | ⚡ Fast | ✅ Yes | ✅ Full TUI | ✅ Yes | ✅ Yes |
| Excel | ✅ xlsx | ❌ Slow startup | ❌ GUI only | ✅ Yes | ✅ Yes | ✅ Yes |
| pandas | ✅ Many | ❌ Slow | ❌ Python required | ❌ No | ❌ No | ❌ No |
| csvlook | ❌ CSV only | ✅ Fast | ✅ Yes | ❌ No | ❌ No | ❌ No |
Looking to view Word documents in the terminal? Check out doxx - a terminal viewer for .docx files with similar TUI capabilities.
"File not found"
xleak "My Report.xlsx""No sheets found"
"Sheet 'X' not found"
xleak file.xlsx (without --sheet) to see all available sheetsMIT License — see LICENSE file for details.
Made for developers who live in the terminal 🚀