# 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. ## Install Save in your project root: # Grist — Modern Relational Spreadsheet You Can Self-Host ## Quick Use ```bash docker run -d -p 8484:8484 -v grist-data:/persist -e GRIST_SESSION_SECRET=changeme gristlabs/grist # Open http://localhost:8484 ``` ## 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 - https://github.com/gristlabs/grist-core - https://support.getgrist.com/ --- Source: https://tokrepo.com/en/workflows/df3a683f-3e02-11f1-9bc6-00163e2b0d79 Author: AI Open Source