ConfigsApr 22, 2026·3 min read

Grist — Modern Relational Spreadsheet You Can Self-Host

A spreadsheet-database hybrid that combines the familiar grid interface with relational data modeling, Python formulas, and a full API, all self-hostable.

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/grist image with a persistent volume
  • Set GRIST_SESSION_SECRET for session security and APP_HOME_URL for your domain
  • Configure authentication via SAML, OpenID Connect, or a header-based auth proxy
  • Enable sandboxing with GRIST_SANDBOX_FLAVOR=gvisor for 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.

Sources

Discussion

Sign in to join the discussion.
No comments yet. Be the first to share your thoughts.

Related Assets