cell
A terminal spreadsheet editor with Vim keybindings, written in Rust.
Install
From crates.io:
cargo install cell-sheet-tui
Pre-built binaries for Linux, macOS, and Windows are available on the GitHub Releases page.
Build from source
git clone https://github.com/garritfra/cell.git cd cell cargo build --release # Binary at target/release/cell
Usage
cell # empty sheet cell data.csv # open CSV cell data.tsv # open TSV cell sheet.cell # open native format
To explore an example sheet with formulas, ranges, and IF logic:
cell examples/demo.cell
Keybindings
If you know Vim, you know cell.
Normal Mode
Key Action h j k l Move cursor gg First row G Last row 0 First column $ Last column Ctrl-D / Ctrl-U Half-page down/up Ctrl-F / Ctrl-B Full page down/up w / b Next/previous non-empty cell i / a / Enter Edit cell (Insert mode) x Clear cell dd Delete row yy Yank row p / P Paste below/above u Undo Ctrl-R Redo v Visual selection Ctrl-V Visual block selection / Search n / N Next/previous match : Command mode
Insert Mode
Type to edit the cell. ESC or Enter confirms.
Visual Mode
Select with hjkl , then y to yank, d to delete.
Commands
Command Action :w Save :w file.csv Save as CSV :w file.cell Save as native format :w! Force save (flatten formulas) :q Quit :q! Quit without saving :wq Save and quit :e file Open file :sort A asc Sort by column A ascending :sort B desc Sort by column B descending
Formulas
Formulas start with = and support Excel-compatible syntax:
=A1+B1 =SUM(A1:A10) =AVERAGE(B1:B5) =IF(A1>100, "high", "low")
Supported Functions (v1)
SUM , AVERAGE , COUNT , MIN , MAX , IF
Formula compliance with the ODF (OpenDocument Formula) spec is tracked and will expand over time.
File Formats
CSV/TSV -- Opens and saves standard comma/tab-separated files. Formulas are flattened to their computed values on CSV export.
-- Opens and saves standard comma/tab-separated files. Formulas are flattened to their computed values on CSV export. **.cell ** -- Native format that preserves formulas. Plain text, human-readable, inspired by sc-im.
When saving a CSV that contains formulas, cell warns you and suggests saving as .cell instead. Use :w! to force a CSV save.
Architecture
cell/ crates/ cell-sheet-core/ # Data model, formula engine, file I/O (no TUI dependency) cell-sheet-tui/ # Ratatui rendering, Vim modes, event loop
The core library is independent of the terminal UI and can be tested without a terminal.
Releasing
Update the version in [Cargo.toml](Cargo.toml) (workspace version) Update [CHANGELOG.md](CHANGELOG.md) with the new version's changes Commit: git commit -am "release: bump to vX.Y.Z" Tag and push:
git tag vX.Y.Z git push origin main --tags
Pushing a v* tag triggers the release workflow, which:
Builds binaries for Linux (x86_64, aarch64), macOS (x86_64, aarch64), and Windows (x86_64)
Creates a GitHub Release with the binaries attached
Publishes cell-sheet-core and cell-sheet-tui to crates.io via trusted publishing
License
MIT