cat / 012
clone

a spreadsheet for the terminal: lotus 1-2-3 looks, google sheets keys and formulas, one go binary

main
012
README.md

012

A spreadsheet for the terminal with a Lotus 1-2-3 look and Google Sheets behavior, built on Bubble Tea v2.

Inside the grid it works the way Sheets does: typing replaces a cell, = starts a formula, Enter and Tab move you on, Shift+arrows and the mouse select, and Sheets' shortcuts do what you expect. Around the grid, the control panel, the mode indicator and the character grid keep 1-2-3's look. Sheets and 1-2-3 are where it starts, not specs it follows to the letter. It is one pure-Go binary.

Typing a small budget, pointing at cells in a formula, and watching totals recalculate

Install

curl -fsSL https://012.dev.site/install.sh | sh              # macOS, Linux: into ~/.local/bin
go install src.rest/cat/012/cmd/012@latest  # or build it with Go 1.27

On Windows, irm https://012.dev.site/install.ps1 | iex in PowerShell.

Then run 012, or 012 budget.012 to open a sheet. F1 shows every shortcut, F10 or Alt+letter opens the menus, and Ctrl+K searches every command. Install and run has the rest: building from a clone, importing files, 012 serve and settings.

A short tour

  • Formulas as in Sheets, with Sheets' functions, suggestions and argument hints, pointing at cells with the arrows or the mouse, named ranges, references between sheets, arrays that spill (FILTER, SORT, UNIQUE, LAMBDA), optional decimal arithmetic for money, undo for everything, and tracing that marks what a formula reads and what reads it and steps through it part by part (formulas); numbers, dates and formulas typed and shown in a locale per file.
  • Data tools: freeze, sort, filter, find and replace, conditional formatting, dropdowns and checkboxes, notes, protected ranges, and live pivot tables (working with data); wrapped text, borders and merged cells drawn with the terminal's box-drawing lines (formatting).
  • Charts that float over the grid and follow their data, drawn as real images in kitty, Ghostty and WezTerm and as text elsewhere (charts).
  • Files: a diff-friendly JSON format, import from CSV, TSV, JSON, nushell's NUON, XLSX, SQLite, Parquet and Lotus 1-2-3, export to CSV, TSV, JSON, NUON, XLSX, SQLite and a self-contained web page with its charts as SVG (files).
  • Tables too big for any grid: a Parquet file or a SQLite table of tens of millions of rows links as a source on a tab of its own, scrolled, sorted and filtered in place, with SUMIFS, XLOOKUP and pivot tables streaming over every row (linked sources).
  • For agents: 012 describe, get, set --dry-run and recalc with JSON results, a Claude Code skill, and 012 mcp, an MCP server whose writes go through the same checks as yours, with views of ranges and charts in the chat (agents).
  • Coworking with agents: 012 --listen lets the agent into your running 012, its pointer and name in the grid, its changes suggestions you accept or reject cell by cell, within the scope you give it (live mode).
  • A stage in a pipeline: ls | sheet | where size > 1kb edits a table on the terminal and sends it on with its types, through the nushell module 012 nu --install-module installs, or as ls | to nuon | ^012 --pipe | from nuon without it (pipelines).
  • Nushell notebooks: 012 nu (or Data > Shell in any workbook) opens a notebook tab of code and note cells, run with Jupyter's keys, each output under its cell; later cells read it as $name, and sent to a sheet it's a live table formulas read as nu.name (notebooks).
  • Macros, recorded or written as Starlark scripts saved with the sheet (macros).
  • Made for terminals: the mouse, hyperlinks, the system clipboard over SSH, your terminal's colors or any of hundreds of schemes, optional vim keys, and 012 serve to reach your sheets over SSH (keys, themes, SSH).
  • Together over SSH: sessions of 012 serve opening the same file share it live, each with its own cursor, the others' in their colors, and undo that takes back only your own changes (sharing a workbook).
  • JEV functions ask TypeSafe's hosted model about your data from a formula (JEV).
Menus and the command palette Inserting a chart that follows its data
Menus and the command palette (Ctrl+K) Charts that float over the grid and follow their data
A task list with a color scale, a dropdown and checkboxes A pivot table of sales by region and quarter
Conditional formatting and data validation Pivot tables, live
UNIQUE, SORT and FILTER spilling their results A notebook: a cell reads a CSV, a second reads its output, which is sent to a sheet and summed there
Arrays that spill Nushell notebooks
JEV functions classifying reviews Recording a macro and replaying it
JEV functions in formulas Macros
Ten million rows of Parquet linked as a source, sorted and summed
Linked sources, too big for any grid

Each guide shows its own recordings too. They are VHS tapes in demos/, rendered by make demos in the Catppuccin Mocha palette; 012 draws in your terminal's own colors by default (themes). Charts show as text here.

More

Young and moving quickly. The file format is versioned and older files keep loading; the Go packages are internal and may change at any time.

License

MIT