Skip to content

A fast terminal Excel viewer with an interactive TUI. Features full-text search, formula display, lazy loading for large files, clipboard support, and export to CSV/JSON. Built with Rust and ratatui.

License

Notifications You must be signed in to change notification settings

bgreenwell/xleak

Repository files navigation

xleak

CI Crates.io Downloads

License: MIT Rust Easy Install Platform

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.

xleak demo

Features

Core Functionality

  • Beautiful terminal rendering with formatted tables
  • Interactive TUI mode - full keyboard navigation with ratatui
  • Smart data type handling - numbers right-aligned, text left-aligned, booleans centered
  • Multi-sheet support - seamlessly navigate between sheets (Tab/Shift+Tab)
  • Excel Table support - list and extract named tables (.xlsx only)
  • Multiple export formats - CSV, JSON, plain text
  • Blazing fast - powered by calamine, the fastest Excel parser in Rust
  • Multiple file formats - supports .xlsx, .xls, .xlsm, .xlsb, .ods

Interactive TUI Features

  • Full-text search - search across all cells with /, navigate with n/N
  • Clipboard support - copy cells (c) or entire rows (C) to clipboard
  • Formula display - view Excel formulas in cell detail view (Enter key)
  • Jump to row/column - press Ctrl+G to jump to any cell (e.g., A100, 500, 10,5)
  • Large file optimization - lazy loading for files with 1000+ rows
  • Progress indicators - real-time feedback for long operations
  • Visual cell highlighting - current row, column, and cell clearly marked

Installation

Package Managers

macOS / Linux (Homebrew):

brew install bgreenwell/tap/xleak

Windows (Scoop):

scoop bucket add bgreenwell https://github.com/bgreenwell/scoop-bucket
scoop install xleak

Windows (WinGet): (Coming soon - pending initial PR merge)

winget install bgreenwell.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

Quick Install Scripts

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

Pre-built Binaries

Download platform-specific binaries from the latest release:

  • macOS: Universal binary (Apple Silicon + Intel)
  • Linux: x86_64 (glibc and musl)
  • Windows: x86_64 MSI installer or standalone .exe

Build from Source

git clone https://github.com/bgreenwell/xleak.git
cd xleak
cargo install --path .

Requirements: Rust 1.70 or later

Usage

Interactive TUI Mode (Recommended)

# 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 cells
  • Enter - View cell details (including formulas)
  • / - Search across all cells
  • n / N - Jump to next/previous search result
  • Ctrl+G - Jump to specific row/cell (e.g., 100, A50, 10,5)
  • c - Copy current cell to clipboard
  • C - Copy entire row to clipboard
  • Tab / Shift+Tab - Switch between sheets
  • ? - Show help
  • q - Quit

Non-Interactive Mode

View a spreadsheet

xleak quarterly-report.xlsx

View a specific sheet

# By name
xleak report.xlsx --sheet "Q3 Results"

# By index (1-based)
xleak report.xlsx --sheet 2

Limit displayed rows

# Show only first 20 rows
xleak large-file.xlsx -n 20

# Show all rows
xleak file.xlsx -n 0

Export data

# 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

Work with Excel Tables (.xlsx only)

# 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

Combine options

# Export specific sheet as CSV
xleak workbook.xlsx --sheet "Sales" --export csv > sales.csv

Examples

# 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

Configuration

xleak supports configuration via a TOML file for persistent settings like default theme and keybindings.

Config File Location

Default: ~/.config/xleak/config.toml (or $XDG_CONFIG_HOME/xleak/config.toml)

Platform-specific fallback locations:

  • macOS: ~/Library/Application Support/xleak/config.toml
  • Linux: ~/.config/xleak/config.toml (same as XDG)
  • Windows: %APPDATA%\xleak\config.toml

Custom: Use --config flag to specify a different location:

xleak --config /path/to/config.toml file.xlsx -i

Quick Start

  1. Copy the example:

    mkdir -p ~/.config/xleak
    cp config.toml.example ~/.config/xleak/config.toml
  2. 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
  3. Test your config:

    xleak file.xlsx -i

Configuration Options

Theme Settings

[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 palette

Press t in interactive mode to cycle through themes at runtime.

UI Settings

[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)
  • Interactive TUI mode (-i) always shows all rows with lazy loading for large files
  • column_width applies to both modes and can be overridden with -w flag

Keybindings

xleak 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"

Keybinding Profiles

Default Profile

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 Profile

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"

Custom Keybindings

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:

  • Single key: "q", "/", "Enter"
  • With modifier: "Ctrl+g", "Shift+Tab", "Alt+s"
  • Special keys: "Enter", "Esc", "Tab", "Home", "End", "PageUp", "PageDown", "Up", "Down", "Left", "Right"

Example Configurations

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.

Performance

xleak is optimized for both small and large files:

  • Small files (< 1000 rows): Instant loading with full eager loading
  • Large files (≥ 1000 rows): Automatic lazy loading with row caching
    • Memory usage: ~400KB for 10,000 row files
    • Loads only visible rows on demand
    • Progress indicators for long operations

Comparison to Alternatives

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

Related Projects

Looking to view Word documents in the terminal? Check out doxx - a terminal viewer for .docx files with similar TUI capabilities.

Built With

  • Rust - for performance and reliability
  • calamine - the fastest Excel/ODS parser
  • ratatui - terminal user interface framework
  • prettytable-rs - beautiful terminal tables
  • clap - elegant CLI argument parsing
  • arboard - cross-platform clipboard support

Troubleshooting

"File not found"

  • Ensure the file path is correct
  • Use quotes if the filename has spaces: xleak "My Report.xlsx"

"No sheets found"

  • The Excel file might be corrupted
  • Try opening it in Excel/LibreOffice first to verify

"Sheet 'X' not found"

  • Run xleak file.xlsx (without --sheet) to see all available sheets
  • Sheet names are case-sensitive

License

MIT License — see LICENSE file for details.

Credits


Made for developers who live in the terminal 🚀

About

A fast terminal Excel viewer with an interactive TUI. Features full-text search, formula display, lazy loading for large files, clipboard support, and export to CSV/JSON. Built with Rust and ratatui.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •