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
README.md 6.5K rendered
1# 01223A spreadsheet for the terminal with a Lotus 1-2-3 look and Google Sheets4behavior, built on [Bubble Tea v2](https://github.com/charmbracelet/bubbletea).56Inside the grid it works the way Sheets does: typing replaces a cell, `=`7starts a formula, Enter and Tab move you on, Shift+arrows and the mouse8select, and Sheets' shortcuts do what you expect. Around the grid, the9control panel, the mode indicator and the character grid keep 1-2-3's look.10Sheets and 1-2-3 are where it starts, not specs it follows to the letter.11It is one pure-Go binary.1213![Typing a small budget, pointing at cells in a formula, and watching totals recalculate](docs/media/first-steps.gif)1415## Install1617```sh18curl -fsSL https://012.dev.site/install.sh | sh # macOS, Linux: into ~/.local/bin19go install src.rest/cat/012/cmd/012@latest # or build it with Go 1.2720```2122On Windows, `irm https://012.dev.site/install.ps1 | iex` in PowerShell.2324Then run `012`, or `012 budget.012` to open a sheet. F1 shows every25shortcut, F10 or Alt+letter opens the menus, and Ctrl+K searches every26command. [Install and run](docs/getting-started/install.md) has the27rest: building from a clone, importing files, `012 serve` and settings.2829## A short tour3031- **Formulas as in Sheets**, with [Sheets' functions](docs/reference/functions.md),32 suggestions and argument hints, pointing at cells with the arrows or the33 mouse, named ranges, references between sheets, arrays that spill34 (FILTER, SORT, UNIQUE, LAMBDA), optional decimal35 arithmetic for money, undo for everything, and36 [tracing](docs/formulas/tracing.md) that marks what a formula reads37 and what reads it and steps through it part by part38 ([formulas](docs/formulas/README.md)); numbers, dates and formulas39 typed and shown in a [locale](docs/sheets/locale.md) per file.40- **Data tools**: freeze, sort, filter, find and replace, conditional41 formatting, dropdowns and checkboxes, notes, protected ranges, and live42 pivot tables ([working with data](docs/sheets/README.md)); wrapped43 text, borders and merged cells drawn with the terminal's box-drawing44 lines ([formatting](docs/sheets/formatting.md#wrapping)).45- **Charts** that float over the grid and follow their data, drawn as real46 images in kitty, Ghostty and WezTerm and as text elsewhere47 ([charts](docs/sheets/charts.md)).48- **Files**: a diff-friendly JSON format, import from CSV, TSV, JSON,49 nushell's NUON, XLSX, SQLite, Parquet and Lotus 1-2-3, export to CSV,50 TSV, JSON, NUON, XLSX, SQLite and a self-contained web page with its51 charts as SVG ([files](docs/files/README.md)).52- **Tables too big for any grid**: a Parquet file or a SQLite table of53 tens of millions of rows links as a source on a tab of its own,54 scrolled, sorted and filtered in place, with SUMIFS, XLOOKUP and pivot55 tables streaming over every row ([linked sources](docs/files/sources.md)).56- **For agents**: `012 describe`, `get`, `set --dry-run` and `recalc`57 with JSON results, a Claude Code skill, and `012 mcp`, an MCP server58 whose writes go through the same checks as yours, with views59 of ranges and charts in the chat ([agents](docs/agents/README.md)).60- **Coworking with agents**: `012 --listen` lets the agent into your61 running 012, its pointer and name in the grid, its changes suggestions62 you accept or reject cell by cell, within the scope you give it63 ([live mode](docs/agents/live.md)).64- **A stage in a pipeline**: `ls | sheet | where size > 1kb` edits a65 table on the terminal and sends it on with its types, through the66 nushell module `012 nu --install-module` installs, or as67 `ls | to nuon | ^012 --pipe | from nuon` without it68 ([pipelines](docs/nushell/pipelines.md)).69- **Nushell notebooks**: `012 nu` (or Data > Shell in any workbook)70 opens a notebook tab of code and note cells, run with Jupyter's keys,71 each output under its cell; later cells read it as `$name`, and sent to72 a sheet it's a live table formulas read as `nu.name`73 ([notebooks](docs/nushell/notebooks.md)).74- **Macros**, recorded or written as Starlark scripts saved with the sheet75 ([macros](docs/sheets/macros.md)).76- **Made for terminals**: the mouse, hyperlinks, the system clipboard over77 SSH, your terminal's colors or any of hundreds of schemes, optional vim78 keys, and `012 serve` to reach your sheets over SSH79 ([keys](docs/reference/keys.md), [themes](docs/terminal/themes.md), [SSH](docs/terminal/ssh.md)).80- **Together over SSH**: sessions of `012 serve` opening the same file81 share it live, each with its own cursor, the others' in their colors,82 and undo that takes back only your own changes83 ([sharing a workbook](docs/terminal/ssh.md#sharing-a-workbook)).84- **JEV functions** ask TypeSafe's hosted model about your data from a85 formula ([JEV](docs/formulas/jev.md)).8687| | |88|---|---|89| ![Menus and the command palette](docs/media/menus-palette.gif) | ![Inserting a chart that follows its data](docs/media/charts.gif) |90| Menus and the command palette (Ctrl+K) | Charts that float over the grid and follow their data |91| ![A task list with a color scale, a dropdown and checkboxes](docs/media/rules.gif) | ![A pivot table of sales by region and quarter](docs/media/pivot.gif) |92| Conditional formatting and data validation | Pivot tables, live |93| ![UNIQUE, SORT and FILTER spilling their results](docs/media/arrays.gif) | ![A notebook: a cell reads a CSV, a second reads its output, which is sent to a sheet and summed there](docs/media/notebook.gif) |94| Arrays that spill | Nushell notebooks |95| ![JEV functions classifying reviews](docs/media/jev.gif) | ![Recording a macro and replaying it](docs/media/macros.gif) |96| JEV functions in formulas | Macros |97| ![Ten million rows of Parquet linked as a source, sorted and summed](docs/media/sources.gif) | |98| Linked sources, too big for any grid | |99100Each guide shows its own recordings too. They are101[VHS](https://github.com/charmbracelet/vhs) tapes in [`demos/`](demos),102rendered by `make demos` in the Catppuccin Mocha palette; 012 draws in103your terminal's own colors by default ([themes](docs/terminal/themes.md)).104Charts show as text here.105106## More107108- [Documentation](docs/README.md): every guide, for using 012 and for109 working on it, starting with [getting started](docs/getting-started/README.md);110 also as a site at [012.dev.site](https://012.dev.site/)111- [Roadmap](ROADMAP.md)112- Working on 012: `make build`, then `make check` before a push; see113 [testing](docs/contributing/testing.md) and [CLAUDE.md](CLAUDE.md)114115Young and moving quickly. The file format is versioned and older files116keep loading; the Go packages are internal and may change at any time.117118## License119120[MIT](LICENSE)