Introduction
Grist is a modern, open-source spreadsheet that stores data in proper relational tables instead of flat grids. It gives spreadsheet users the power of a database with familiar formulas, while giving developers a real API and Python-based computed columns. You self-host it and own all your data.
What Grist Does
- Organizes data in relational tables with typed columns and foreign-key references
- Evaluates formulas written in Python instead of traditional spreadsheet syntax
- Provides multiple views (grid, card, chart, calendar) over the same underlying data
- Exposes a REST API for programmatic reads, writes, and webhooks
- Supports granular access rules to control who sees or edits which rows and columns
Architecture Overview
Grist is a Node.js server that manages SQLite-backed documents. Each document is an independent SQLite file, making backups and portability straightforward. The Python formula engine runs in a sandboxed subprocess (gvisor or pyodide) that evaluates column formulas on each change. The frontend is a TypeScript single-page app using GrainJS for reactive DOM updates.
Self-Hosting & Configuration
- Run with Docker using the official
gristlabs/gristimage with a persistent volume - Set
GRIST_SESSION_SECRETfor session security andAPP_HOME_URLfor your domain - Configure authentication via SAML, OpenID Connect, or a header-based auth proxy
- Enable sandboxing with
GRIST_SANDBOX_FLAVOR=gvisorfor untrusted formula execution - Optionally connect to an external PostgreSQL or S3 for document metadata and storage
Key Features
- Python formulas with full standard library access inside a security sandbox
- Access control rules that restrict data visibility at the row and column level
- Incremental imports that update existing records by matching on key columns
- Webhooks that fire on row changes for integrating with external services
- Document snapshots for point-in-time restore and version history
Comparison with Similar Tools
- Airtable — SaaS with vendor lock-in; Grist is self-hosted with portable SQLite files
- NocoDB — wraps an existing SQL database; Grist manages its own data in SQLite docs
- Baserow — similar concept but uses Django and PostgreSQL; Grist offers Python formulas in cells
- Google Sheets — collaborative but cloud-only; Grist provides local ownership and relational modeling
FAQ
Q: Can I use Grist as a backend for my app? A: Yes. The REST API supports full CRUD and filtering, making it a lightweight backend for small applications.
Q: How do Python formulas work? A: Each computed column has a Python expression. When dependent data changes, Grist re-evaluates affected formulas in a sandboxed Python process.
Q: Is there a row or data limit? A: Limits depend on your hardware. Since each document is an SQLite file, practical limits are in the hundreds of thousands of rows per document.
Q: Can I import from Excel or CSV? A: Yes. Grist supports importing Excel, CSV, JSON, and Google Sheets with column type detection and incremental update matching.