Introduction

Improv is a cross-platform multidimensional spreadsheet written in Rust, in the line of Lotus Improv and Quantrix. It separates three things a traditional grid tangles together:
- Structure: the named dimensions of a model (categories and their items).
- Logic: formulas over dimensions, not cell addresses.
- Data: the raw input values.
You model in named categories, items and measures instead of A1
cell coordinates:
Revenue = Price * Quantity
Total = SUM(Revenue OVER Time)
Derived values flow through a differential-dataflow graph, so recalculation is always incremental: an edit propagates only to the cells it actually affects.
One model, many ways in
The same model opens in a NeXTSTEP-style desktop GUI, a terminal UI,
a scriptable CLI, a streaming pipe, a JSON HTTP server, and
inside Postgres, where pg_improv keeps results current as your tables
change and LANGUAGE improv turns a formula into a SQL function. A model is
a single store file, or lives in a Postgres database. Ways to Use
Improv says which to reach for and when.
Status
Version 0.10.0 builds and passes its tests on Linux, macOS and Windows; the
Postgres extension supports Postgres 15 to 18. External functions in Python, R,
Julia or Pure run under a bubblewrap sandbox on Linux; WebAssembly functions
run in-process with fuel and memory limits. On other systems they are
refused unless the operator sets IMPROV_EXTFN_ALLOW_UNSANDBOXED=1. The
GUI has no Save As, Open or Print yet, and the Postgres connection has no
TLS (use a loopback port or an SSH tunnel). See the
changelog
for what changed in each release.
Reading order
- Ways to Use Improv: pick a front end.
- The Improv Model: categories, items, measures, coordinates.
- Getting Started: build a model from the CLI.
- The Formula Language: dimension-aware formulas and aggregation.
- The Desktop GUI and Improv in Postgres.
- Architecture & Design and Storage & Persistence: how it works inside.