MCPcopy Index your code
hub / github.com/CodeOne45/vex-tui

github.com/CodeOne45/vex-tui @v2.1.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v2.1.0 ↗ · + Follow
156 symbols 476 edges 13 files 134 documented · 86%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

📊 Vex — Terminal Spreadsheet Editor

A beautiful, fast, and feature-rich terminal-based Excel and CSV editor with vim-style keybindings, live row filtering, instant data profiling, formula support, and chart export.

Go Version License Version Stars

Buy Me A Coffee

Vex Demo


✨ Features

🔍 Live Row Filtering

Press f to filter any dataset without leaving the keyboard:

f  →  type expression  →  Enter to apply  •  Esc to clear
Expression Matches
apple rows containing "apple" (case-insensitive)
>1000 rows where current column > 1000
<=50.5 rows where current column ≤ 50.5
=Canada exact match (text or number)
  • Tab while typing toggles between current column and all columns
  • Active filter shown in the title bar as ▾ >1000
  • Esc clears the filter instantly — original data is always preserved in memory
  • Works on any column of any CSV or Excel file

📊 Data Profile

Press W to get a full column-by-column breakdown of any dataset — like pandas.describe() right in your terminal:

  Col   Type      Non-null  Nulls   Stats
  A     number    1,234     0       Σ 2.4M  avg 1.9K  [0 – 9,999]
  B     text      1,230     4       891 unique  Alice, Bob, Carol…
  C     mixed     800       200     200 nulls, some numbers
  • Auto-detects column types: number, text, mixed
  • Shows non-null count, null count, unique values for text columns
  • Shows Σ / avg / min / max for numeric columns
  • Highlights the column currently under your cursor

↕️ Sort Columns

  • s — sort current column ascending
  • S — sort current column descending
  • uunsort — restore original row order

Sort indicator shown in the column header (A↑) and in the title bar. Numeric and text columns are sorted with the appropriate comparison. When freeze header is enabled, the header row stays pinned during sort.

⌶ Freeze Header Row

Press Ctrl+R to pin the first row permanently at the top while scrolling through large files. The indicator appears in the title bar when active. Sort is freeze-header aware — the header row is never moved.

📈 Live Column Statistics

When the cursor is on any numeric column the status bar automatically shows:

Σ 45,230  avg 1,004  min 2  max 9,999  n=45

No selection required — just move your cursor.

📁 CSV — Any Delimiter, Auto-Detected

Vex reads the first line of every CSV file and picks the most likely delimiter from , ; \t | automatically. You can also specify it explicitly:

vex data.csv                   # auto-detect
vex data.csv -d ';'            # semicolon
vex data.tsv -d '\t'           # tab
vex data.csv --delimiter '|'   # pipe

📊 Data Visualization with Chart Export

Select a range with V, then press v to open the chart viewer:

  • Bar chart — supports negative values, responsive width, unfilled track
  • Line chart — Bresenham algorithm draws actual connecting lines between points
  • Sparkline — compact inline overview + bar chart
  • Pie chart — proportional breakdown with legend

Press p inside the chart to export a beautiful PNG image via freeze:

p  →  saves data-chart.png next to your file

If freeze is not installed, vex shows the install command. No other terminal spreadsheet lets you share charts as images.

🎨 Ten Beautiful Themes

Press t to switch theme live. All themes are 256-color and truecolor compatible.

Dark Themes: - Catppuccin Mocha — Soft pastels, perfect for all-day use - Nord — Cool Arctic blues, minimal and focused - Rosé Pine — Elegant rose tones, sophisticated - Tokyo Night — Vibrant cyberpunk aesthetic - Gruvbox — Warm retro colors, comfortable - Dracula — Classic high contrast theme

Light Themes: - Catppuccin Latte — Gentle pastel light theme - Solarized Light — Balanced contrast - GitHub Light — Clean and minimal - One Light — Soft Atom-inspired colors

🎨 Cell Type Coloring

Numbers, formulas, and text are visually distinct — no configuration needed: - Numbers — accent color, easy to scan down columns - Formulas — secondary color, instantly recognizable - Text — default theme color

✏️ Full Editing Capabilities

  • Edit cells with values or formulas (i)
  • Insert / delete rows and columns
  • Copy / paste single cells or multi-cell ranges (Tab-separated from any app)
  • Fill down / right for quick data entry
  • Apply formulas to entire ranges with automatic reference adjustment
  • Modification indicator () in the title bar on first edit
  • Tab / Shift+Tab in edit mode saves and jumps to the next/previous cell

📐 Powerful Formula Engine

Arithmetic: =A1+B1, =C1*D1/E1, =B2-B1

15+ built-in functions:

Function Description
SUM(A1:A10) Sum a range
AVERAGE(B1:B20) / AVG(...) Average values
COUNT(C1:C50) Count numbers
MAX(D1:D100) / MIN(...) Find extremes
IF(A1>100,"High","Low") Conditional logic
CONCAT(A1," ",B1) / CONCATENATE(...) Join text
UPPER(A1) / LOWER(A1) Change case
LEN(A1) Text length
ROUND(A1,2) Round to decimals
ABS(A1) / SQRT(A1) / POWER(2,8) Math functions

Auto-recalculates on every edit. Formula references auto-adjust when applied to a range.

🔍 Powerful Navigation

  • Vim-style keybindings (hjkl) and arrow keys
  • Jump to cell (Ctrl+G) — supports A100, 500, or 10,5
  • Search (/) across cell values and formulas with n/N navigation
  • Page Up/Down, Home/End, gg/G
  • Multi-sheet support with Tab / Shift+Tab

📋 Data Operations

  • Copy cell (c) or entire row (C) to clipboard
  • Paste (p) — multi-row/column paste from any app
  • Export (e) to CSV or JSON
  • Save (Ctrl+S) with format preservation (xlsx / csv)
  • Save As (Ctrl+Shift+S) to a new file
  • Toggle formula display (Ctrl+F)
  • View cell details (Enter) — full value, formula, and type

📑 File Support

  • Excel (.xlsx, .xlsm, .xls) — full formula and multi-sheet support
  • CSV — auto-delimiter detection, any separator
  • Multiple sheets with easy navigation
  • Safe saving — file format preserved on save

🚀 Installation

Homebrew (macOS / Linux) — recommended

brew install CodeOne45/tap/vex

go install

go install github.com/CodeOne45/vex-tui@latest

Download binary

Pre-built binaries on the releases page: - macOS (Intel & Apple Silicon) - Linux (x64 & ARM64) - Windows (x64)

Build from source

git clone https://github.com/CodeOne45/vex-tui.git
cd vex-tui
make build
sudo mv vex /usr/local/bin/

📖 Usage

vex data.xlsx                    # open Excel file
vex report.csv                   # open CSV (delimiter auto-detected)
vex data.csv -d ';'              # explicit semicolon delimiter
vex data.tsv -d '\t'             # tab-separated
vex file.xlsx --theme nord       # start with a specific theme
vex --help                       # show all options

⌨️ Keyboard Shortcuts

Navigation

Key Action
↑↓←→ / hjkl Move cursor
PgUp / PgDn or Ctrl+U/D Scroll page
Home / End or 0 / $ First / last column
gg / G Top / bottom of file
Tab / Shift+Tab Next / previous sheet
Ctrl+G Jump to cell (A100, 500, 10,5)

Data & Analysis

Key Action
f Filter rows — >100, <=50, =exact, text
W Data profile — types, nulls, unique counts, stats
s / S Sort column ascending / descending
u Unsort — restore original order
Ctrl+R Toggle freeze header row
/ Search cells and formulas
n / N Next / previous search result
Esc Clear filter / search / selection

Editing

Key Action
i Enter edit mode
Tab / Shift+Tab Save and move right / left
Ctrl+S Save file
Esc Cancel edit
x Delete cell content
dd / dc Delete row / column
o / O Insert row / column
c / C Copy cell / row
p Paste
Ctrl+J / Ctrl+L Fill down / right (requires selection)
Ctrl+A Apply formula to range (requires selection)

View

Key Action
> / < Widen / narrow column
Ctrl+F Toggle formula display
t Change theme
? Toggle help

Visualization

Key Action
V Start / finish range selection
v Open chart (requires selection)
1 / 2 / 3 / 4 Bar / Line / Sparkline / Pie
p Export chart as PNG image (inside chart view)

File

Key Action
Ctrl+S Save
Ctrl+Shift+S Save as
e Export to CSV or JSON
q Quit (press twice if unsaved)

💡 Quick Start

Explore an unknown CSV

vex data.csv
# W  → see column types, nulls, unique counts instantly
# f  → type >1000 to show only matching rows
# s  → sort the column under cursor
# u  → restore original order

Visualize and export a chart

1. Press V  — start range selection
2. Move to end of data, press V  — finish selection
3. Press v  — open chart
4. Press 1-4  — switch chart type
5. Press p  — save as PNG (requires freeze: brew install charmbracelet/tap/freeze)

Bulk formula entry

i             Enter edit mode
=A1*B1        Type formula
Tab           Save and move right
...           Continue typing
Ctrl+S        Save file

Or: enter one formula → select range with V → press Ctrl+A to apply with auto-adjusted references.


🏗️ Project Structure

vex-tui/
├── main.go                     # Entry point + CLI flags
├── internal/
│   ├── app/
│   │   ├── model.go            # State + filter/sort/stats logic
│   │   ├── update.go           # Event handling
│   │   ├── view.go             # Rendering, charts, data profile
│   │   ├── keys.go             # Keybindings
│   │   ├── edit.go             # Edit / save operations
│   │   └── formulas.go         # Formula evaluation engine
│   ├── loader/
│   │   ├── loader.go           # File loading + CSV delimiter detection
│   │   └── save.go             # File saving
│   ├── theme/
│   │   └── theme.go            # Theme definitions
│   └── ui/
│       └── ui.go               # Styles + helpers
└── pkg/
    └── models/
        └── models.go           # Data models + mode constants

🤝 Contributing

Contributions are welcome! Please open an issue first for large changes.

git clone https://github.com/CodeOne45/vex-tui.git
cd vex-tui
make test            # run tests
make build           # build binary
make snapshot        # local multi-platform build via goreleaser
make tag VER=v2.1.0  # tag + push → triggers GitHub Actions release

Follow Effective Go and run make fmt before opening a PR.


☕ Support

If Vex saves you time or you just enjoy using it:

Buy Me A Coffee

Every coffee keeps the terminal dream alive. ☕


📄 License

MIT — see LICENSE.

🙏 Acknowledgments

📮 Contact


⭐ If Vex is useful to you, a star goes a long way — thank you!

Made with ❤️ for terminal enthusiasts and spreadsheet power users.

Core symbols most depended-on inside this repo

GetCurrentTheme
called by 23
internal/theme/theme.go
ColIndexToLetter
called by 16
internal/ui/ui.go
Max
called by 16
internal/ui/ui.go
evaluateExpression
called by 15
internal/app/formulas.go
adjustViewport
called by 14
internal/app/model.go
formatStatNum
called by 12
internal/app/view.go
Min
called by 12
internal/ui/ui.go
extractFunctionArg
called by 11
internal/app/formulas.go

Shape

Method 89
Function 54
Struct 11
TypeAlias 2

Languages

Go100%

Modules by API surface

internal/app/formulas.go28 symbols
internal/app/view.go26 symbols
internal/app/update.go25 symbols
internal/app/edit.go17 symbols
internal/ui/ui.go12 symbols
internal/chart/chart.go12 symbols
internal/app/model.go10 symbols
internal/loader/loader.go7 symbols
main.go5 symbols
pkg/models/models.go4 symbols
internal/theme/theme.go4 symbols
internal/app/keys.go4 symbols

For agents

$ claude mcp add vex-tui \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page