Edward Langley ecd001e589 chore: add Apache-2.0 LICENSE file
Pulled from apache.org/licenses/LICENSE-2.0.txt.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 00:07:57 -07:00
2026-04-02 16:21:45 -07:00
2026-04-11 00:06:51 -07:00
2026-04-11 00:06:38 -07:00
2026-04-11 00:07:57 -07:00
2026-04-11 00:07:56 -07:00
2026-04-02 11:34:22 -07:00
2026-04-11 00:07:57 -07:00
2026-04-11 00:07:57 -07:00

improvise

Terminal pivot-table modeling in the spirit of Lotus Improv — multidimensional cells, formulas over dimensions instead of cell addresses, and vim-style keybindings for reassigning axes on the fly.

demo

Why this exists

Lotus Improv (NeXT, 1991) separated data from its presentation: cells were addressed by named dimensions, not grid coordinates, and rearranging a view didn't break formulas. That idea never made it into mainstream tools. Excel pivot tables borrowed the visual rearrangement but kept cell-address formulas. Terminal data tools like sc-im and VisiData do different things well — sc-im is a traditional spreadsheet, VisiData is a data explorer — but neither offers the dimension-keyed data model that made Improv interesting. improvise is a small attempt to bring that model to a modern terminal, with a formula language that references category and item names, views that can be rearranged with a single keystroke, and a plain-text file format you can diff in git.

Quick start

nix develop
cargo build --release
./target/release/improvise examples/demo.improv

Or import your own CSV:

./target/release/improvise import path/to/data.csv

Key bindings to try first

Key Action
T Enter tile mode — reassign category axes
[ / ] Cycle through page-axis items
> Drill into an aggregated cell
< Return from drill-down
F Open the formula panel
t Transpose rows and columns
? / F1 Full key reference
:w Save
:q Quit

Installation

From source with Nix (preferred)

nix develop
cargo build --release
# optionally install to your PATH:
cargo install --path .

From crates.io

cargo install improvise

Prebuilt binaries

See the GitHub releases page for prebuilt binaries (Linux x86_64, macOS Intel and Apple Silicon).

What's interesting about the codebase

The data model stores every cell at the intersection of named categories and items — (Region=East, Measure=Revenue) — rather than at a grid address like B3. A view is a configuration that assigns each category to a row, column, page, or hidden axis, and the grid layout is computed as a pure function from (Model, View) to GridLayout. Transposing a pivot is just swapping the row and column assignments; records mode is just assigning the virtual _Index and _Dim categories to particular axes. The formula language references dimension names (Profit = Revenue - Cost), so formulas survive any rearrangement without rewriting. All user actions go through a command/effect pipeline: commands are pure functions that read an immutable context and return a list of effects, which are the only things that mutate state. The same command registry serves both the interactive TUI and the headless cmd/script CLI subcommands. Models persist to a markdown-like .improv format that is human-readable, git-diffable, and optionally gzip-compressed.

Expectations

improvise is a personal project I built for my own use. I'm sharing it because other people might find it useful, but I can't promise active maintenance or feature development. Issues and PRs are welcome but may not get a fast response. If you want to build on it, fork away.

License

Apache-2.0

Description
No description provided
Readme Apache-2.0 2.5 MiB
Languages
Rust 98.1%
Python 1.1%
Shell 0.6%
Nix 0.2%