Open Source · macOS & Linux

The spreadsheet that
lives in your terminal.

Formulas, freeze panes, formatting, and fill — with full mouse support, at terminal speed. Click cells, drag to select ranges, scroll with the wheel, or stay on the keyboard. No startup lag, no Electron, no waiting for anything to load. Saves as JSON you can git diff. Runs over SSH. Download a binary or build from source with zero dependencies.

macOS users: Do not run ss directly until you run bash install.sh from the extracted archive. The installer clears the macOS Gatekeeper restriction automatically.

macOS (ARM64 / x86) Linux (x86_64) Raspberry Pi
ss terminal spreadsheet showing a cap table with formulas, currency formatting, and color styling
git diff cap_table.sheet

Version everything

Spreadsheets save as readable JSON. Commit them, diff them, review them in PRs. No opaque binary blobs in your repo.

ssh prod && ss metrics.sheet

Works over SSH

Need a spreadsheet on a remote box? Just run it. No X forwarding, no port tunnels, no "let me download that file first."

click. drag. scroll.

Full mouse support

Click cells, drag to select ranges, scroll with the wheel. Use menus and dialogs with the mouse — or ignore it entirely and stay on the keyboard. Your choice.

make clean; make

Zero dependencies

No Boost. No CMake. No package manager. Built on the cx portable C++ library. Compiles in seconds, or just download the binary.

The spreadsheet parts you actually use.

Not a CSV viewer. Not a toy. The things you reach for Excel to do — formulas, formatting, references, fill — except it launches instantly and runs anywhere a terminal does.

🖱︎

Mouse & Keyboard, Your Choice

Full mouse support in the terminal. Click to navigate cells, drag to select ranges, scroll with the wheel. Use menus and commands with the mouse — or stay on the keyboard. Every action works both ways.

=︎

Formulas & Cell References

SUM, ranges, absolute and mixed references — the formula basics engineers actually need. References auto-adjust on paste, so copying a row of calculations just works.

Freeze Panes

Pin header rows and label columns so they stay visible while you scroll through data. Essential when your sheet has more rows than your terminal.

$

Rich Number Formatting

Currency, percentages, decimal precision, thousands separators, dates. Cycle through formats with Ctrl+N — no dialog boxes, no hunting through menus.

Colors & Styling

Per-cell and per-column foreground and background colors. Alignment control. Column defaults cascade so new data inherits formatting. Makes cap tables and dashboards readable.

Clipboard & Fill

Copy, cut, paste with smart reference adjustment. Fill down and fill right to replicate a formula across a range — the same workflow you already know from Excel.

Structure & Layout

Insert and delete rows and columns. Hide and show them. Auto-fit column widths. UTF-8 box drawing characters let you create clean visual dividers right in the grid.

Cell Hunt Mode

Press TAB or Up/Down arrow while writing a formula to visually navigate the grid and select cell references. Arrow keys move cell-to-cell with the reference updating live in your formula. Shift+Arrow to select a range. ENTER locks the selection and auto-closes the parenthesis for ranges. It's the fastest way to build formulas without memorizing cell addresses.

Smart entry. Discoverable commands.

The first character you type determines the mode. Press ESC for commands that autocomplete as you go.

Just start typing

No insert mode, no prefix keys. Navigate to a cell, type, and ss infers what you mean from the first character.

Hello text
42.5 number
$1,234.56 currency
=SUM(A1:A10) formula
2026-03-14 date
@C1>100: Over textmap

Every command is discoverable

Press ESC and a command prompt appears. Type one letter and the shared prefix auto-fills. Type one more and the unique match executes. No memorization — you explore a tree, two keystrokes at a time.

All commands follow a consistent category-action pattern. Learn the categories and you can find anything without a manual.

Watch: saving a file in 2 keystrokes

Click through each step. The completer auto-fills shared prefixes as you type — and executes the moment there's a unique match. No TAB. No ENTER.

command>

ESC, f, s — that's it. The shared prefix auto-fills, the unique match auto-executes. Every command works this way.

Try another:

Formula editing with cell hunt

Type = to start a formula, then press TAB or Up/Down arrow to visually navigate and select cell references. The formula updates live as you move. Shift+Arrow to select a range, ENTER to lock it in. Ranges auto-insert a closing parenthesis.

References inserted via cell hunt use absolute addressing by default. Paste adjusts relative references automatically.

Formula editing in ss with cell hunt mode active

Built-in help, always a keystroke away

Press Ctrl+H to open an in-app help overlay listing every command by category. No man pages, no browser tabs, no leaving the spreadsheet.

Consistent prefix patterns — file-, edit-, modify-, view- — mean once you've used one command, the rest are intuitive.

ss built-in help overlay showing all commands

Mouse or keyboard — your call

Use the mouse when it's natural, keyboard when it's fast. Everything works both ways. If you're comfortable in vim or emacs, you'll feel at home.

Ctrl+K Copy selection
Ctrl+Y Paste
Ctrl+H Help overlay
Ctrl+N Cycle number format
Ctrl+5 Toggle percentage
Ctrl+A Cycle alignment
Ctrl+D Cycle date format
Shift+Arrow Select range
Ctrl+Arrow Jump to data edge
Ctrl+X Ctrl+S Save
Ctrl+X Ctrl+C Quit
ESC Command mode

Download and run, or build from source

Grab the binary and go. Or clone the repo, build it yourself, and make it your own.

Download for macOS Download for Linux

macOS users: Do not run ss directly until you run bash install.sh from the extracted archive. The installer clears the macOS Gatekeeper restriction automatically.

# Or build from source
mkdir -p ~/dev/cx/cx_apps && cd ~/dev/cx
git clone https://github.com/toddvernon/cx.git
cd cx_apps
git clone https://github.com/toddvernon/ss.git

# Build
cd ~/dev/cx/cx && make
cd ~/dev/cx/cx_apps/ss && make

# Run
./darwin_arm64/ss mydata.sheet