cells

Programmable data.

Plain text .cell files: typed, reactive and composable.

Try it in the editor

Typed
amount:EUR>0 holds euros above zero, so a wrong value is named where it is written.
Make 42.50 negative.
Reactive
vat:EUR=amount * 21 / 121 is computed for every row and written beside its =.
Change 950.00 and watch its vat follow.
Composable
to:accounts.account names an account in accounts.cell, checked across the two files.
Change rent to rant.

AND NOT

Why not what exists. Each is good at something else.

CSV with a JSON schema beside it
two files that drift: the schema says one thing, the file another, and nothing notices
the types are the header: one file, read and checked as one
Parquet
typed, fast, and a binary: no keys, no references, nothing you can read, diff in git or fix by hand
text you read and diff, keys and references checked; Parquet stays a good export
Oils' TSV8
types in the file for shell pipes; the spec is syntax only, so int, float or decimal is each reader's guess
what a value means is the spec, money exact at its cents, the same in every reader
a spreadsheet
a formula points at B7, and a row inserted above moves what B7 is; a macro can run when the file opens
a formula names columns and keys, and reads no clock, network or file; opening a file runs nothing

WHERE IT STANDS

Built

  • The spec, and a conformance suite every reader runs.
  • The engine in Rust, passing all of it natively and as WebAssembly: what runs on this page.
  • Formulas in headers and cells, tables written inline, imports (a URL's pinned by its hash), references checked across files.
  • cells check, fix, show, pin, and run with Bun.
  • cells lsp: the problems you saw on this page, in your editor, with hover, completion, go to, rename, and every computed value stored as you save. Checked in Helix.
  • cells merge, git's merge driver: a computed value is never a conflict.
  • The engine bound on the web (the tables on this page) and in Swift, on macOS, iOS and tvOS.

Next

  • cells sql, DuckDB over the typed columns of a folder.
  • A daemon that keeps the schedules and serves every app.
  • Charts from the types, with no setup.