A personal Grist is a database with a spreadsheet face: typed columns, reference columns that point at rows in other tables, formula columns that recalculate when their inputs change, and a few views. An agent builds the tables, CSV import and editable grid in one sitting. The weekend goes on the formula engine, with a dependency graph that recalculates only what changed inside a sandbox, plus undo and the many small rules around reference columns. Grist's own core is Apache-2.0 and free to self-host, so for most people running it in Docker is a shorter road than rebuilding it.
Before you buildTry Grist first: the free cloud plan allows 5,000 records per document, and the Community edition is free to self-host with Docker. Building only pays off if you want your own formula language or a single local file.
Build me a local spreadsheet-database to replace Grist. Requirements:
- Node.js 22 + TypeScript: a Fastify server and a React UI built with Vite. `npm start`
serves http://127.0.0.1:4620.
- Storage: one SQLite file per document in ./data/docs/ (better-sqlite3). A _meta table holds
tables, columns (type, formula, reference target) and view layouts; every table is a real table.
- Column types: text, number, boolean, date, choice and reference to a row in another table,
showing a chosen display column.
- Formula columns are JavaScript expressions run in a sandbox (`quickjs-emscripten`, 50 ms and
16 MB limits): $Column reads the current row, Table.lookupRecords({field: value}) reads related
rows. Keep a dependency graph, recalculate only the cells that depend on an edited cell, and
reject cycles with a readable error.
- Views: an editable grid with sort, filter, undo and redo (50 steps); a cards view; a bar or line
chart over a grouped column (`chart.js`).
- Import CSV and XLSX (`exceljs`) with column type guessing; export one table as CSV and the whole
document as .xlsx. Copy the document file to ./data/backups/ before each editing session and
delete copies after 30 days.
- Tests: a chain of three formula columns recalculates only its dependents, a cycle is rejected,
and a CSV import then export keeps every value.
- Single user. No accounts, no telemetry, local-first: nothing leaves the machine.
- Out of scope: Python formulas, row-level access rules, real-time collaboration, attachments,
custom widgets.
- README: how formulas are sandboxed, where the data and backups live, and a pointer to grist-core
as the free, ready-made option.Opens your agent with the prompt filled in, you press enter. Or copy it and paste it into an empty folder.
The first prompt builds the core. Run these one at a time in the same folder to grow it into your own Grist.
Add linked views to the spreadsheet-database in this folder. Requirements: - A page can hold several views. A view can be linked to another view on the same page by a reference column, so selecting a row in the source filters the linked view to the rows pointing at it. - Show the link in the page layout and let me remove it. Store layouts in the _meta table. - A new row added in a linked view fills the reference column automatically. - Selecting nothing shows an empty linked view, not all rows. - Add a test for the filter and the automatic fill. Update the README.
Add read-only share links to the spreadsheet-database in this folder. Requirements: - From a document, create a link with a random 32-byte token stored hashed in SQLite, an expiry date and a revoke button. - The link opens a view-only grid with sort and filter but no editing, import, export or formula text. - The share routes listen on a second port (SHARE_PORT in .env) so only that one can be exposed through a tunnel. - Rate-limit by token and log each open with the token id. - Update the README with how to expose the second port.
Add a Grist importer to the spreadsheet-database in this folder. Requirements: - A command `import-grist <file.grist>` that opens the downloaded SQLite file read-only. - Read _grist_Tables and _grist_Tables_column to recreate tables, column types and reference columns, then copy the rows. - Formula columns arrive as plain values, with a report listing each one and its original Python formula. - Print a summary of tables, rows and skipped features before writing, and refuse to overwrite an existing document. - Add a test with a small fixture file. Update the README.
Teams pay for a shared, hosted database that non-programmers can edit, with access rules, history and an API already attached. Pro removes the 5,000-record cap per document and skips running Docker yourself. Many individuals never need to pay, because the free cloud plan and the free self-hosted edition cover small documents.
Estimate · Runs on your machine; a small VPS at a few dollars a month only matters if you want to reach it from elsewhere. The build is token usage on your agent plan, and the formula engine takes several rounds.
| Plan | Monthly | Annual, per month | What you get |
|---|---|---|---|
| Free | $0 | $0 | 5,000 records per document, 10 members, 2 guests per document, 1 GB attachments per document, 30 days of snapshots, 3,000 API calls a month for the team, 100 one-time AI credits. |
| Pro | $10 | $8 | 100,000 records per document, unlimited members, 3 GB attachments per document, 3 years of snapshots, 40,000 API calls per document per day, 100 AI credits a month. |
| Business | $30 | $24 | 150,000 records per document, 20 GB attachments per document, 5 years of snapshots, 60,000 API calls per document per day, 2,000 AI credits a month. |
| Enterprise | custom | — | Custom limits, dedicated server, custom SSO and domain, audit-log streaming. |
| Self-hosted (full edition) | $30 | $24 | The licensed edition on your own servers, without support. |
The free cloud plan allows unlimited documents of up to 5,000 records each, with up to 10 members; the Community edition is free to self-host.
Kinda. The core is a weekend build with the prompt on this page, but real gaps remain: Python formulas with the standard library, and the AI formula assistant, Row-level access rules and sharing with colleagues and guests.
About $10 a month on the Pro plan per seat, $120 a year (checked 2026-10-20).
Python formulas with the standard library, and the AI formula assistant; Row-level access rules and sharing with colleagues and guests; Linked widgets, custom widgets and Grist's snapshot history; Several people editing the same document at once; The API, webhooks and Zapier or Make connections around your documents. If any of those matter to you, keep paying.
Yes: Grist Community edition (open source), Teable (open source), Baserow (open source).