Grist is a modern relational spreadsheet that merges the intuitive interface of Excel with the structured power of a database. It’s designed for teams and organizations that need to move beyond static spreadsheets while avoiding vendor lock-in — offering full data control through self-hosting. Whether you’re an IT department locking down sensitive data or a nonprofit managing donor records, Grist provides a no-code platform that scales from simple lists to complex data apps.
Built with TypeScript and powered by SQLite, Grist supports deployment via Docker, desktop apps, or static web hosting. It integrates with S3, Azure, OIDC, SAML, Zapier, and REST APIs, and includes sandboxing via gVisor, Deno/Pyodide, and external attachment storage. The open-source grist-core edition provides the core relational engine, while hosted and enterprise editions add advanced features like Azure storage and GristConnect.
What You Get
- Python Formulas - Full Python syntax support with standard library access, plus Excel functions and an AI Formula Assistant powered by OpenAI, Llama, and OpenRouter for generating and debugging formulas.
- Portable SQLite Format - All documents are stored as self-contained SQLite files, enabling direct access with any SQLite tool and reliable backups that preserve structure and relationships.
- Drag-and-Drop Dashboards - Build custom views with charts, card layouts, calendars, and summary tables; link widgets to filter data dynamically across views without duplicating data.
- Two-Way References - Automatically synchronize data between tables via bidirectional references, ensuring consistency across related records without manual updates.
- Native Forms with Attachments - Create web forms that directly populate spreadsheets, supporting file uploads, hidden fields, and URL-based pre-population for surveys and intake workflows.
- Granular Access Rules - Control row- and column-level access based on user attributes, cell values, or team membership — enabling secure sharing of partial data with external parties.
- REST API & Zapier Integration - Full REST API with interactive console, Zapier triggers/actions, and webhooks with column-specific triggers and formula-based conditions for automation.
- AI Formula Assistant - Use conversational AI to generate, explain, or debug formulas in plain language, with support for OpenAI, Llama, and OpenRouter-compatible models.
- SCIM & SAML/OIDC SSO - Standardized user provisioning via SCIM and single sign-on via SAML and OIDC for enterprise identity management (French government contributions).
- External Attachments via S3 - Store media and files in S3-compatible storage to keep .grist files lightweight while maintaining full access and versioning.
- High-Contrast Theme (WCAG AA) - Accessibility-focused UI with high-contrast mode compliant with WCAG level AA standards, developed with French government input.
- Incremental CSV Imports - Import new data without duplication by matching records via unique keys, ideal for recurring data feeds like bank transactions or inventory updates.
- Widget Linking & Duplicate Views - Link widgets to filter data across views and duplicate widgets to rapidly prototype different data visualizations without rebuilding from scratch.
Common Use Cases
- Running a nonprofit CRM - A nonprofit uses Grist to manage donors, grants, and volunteer logs with custom access rules, forms for intake, and S3-backed attachments — all self-hosted for data privacy.
- Managing research lab inventories - A university lab builds a relational database of equipment, users, and usage logs with Python formulas for usage analytics and drag-and-drop dashboards for real-time monitoring.
- Streamlining legal case tracking - A law firm creates custom tables for cases, clients, and deadlines with conditional formatting for urgent matters, embedded forms for client submissions, and SAML-based team access.
- Building internal finance dashboards - A finance team replaces Excel reports with Grist, using summary tables, charts, and AI-assisted formulas to auto-generate monthly P&L summaries from bank CSV imports.
- Developing a construction project tracker - A construction company uses Grist to link materials, vendors, and timelines with attachments for blueprints and photos, accessible via secure team views and REST API for ERP sync.
- Creating a marketing campaign hub - A marketing team aggregates social metrics, ad spend, and lead data into one dashboard with linked charts, form submissions from landing pages, and Zapier automation for CRM updates.
Under The Hood
Architecture
- Clear separation of client and server layers with TypeScript interfaces enforcing strict contract boundaries
- Dependency injection via constructor-based patterns enables testability and substitution of core services
- Event-driven reactive system using observables and disposable patterns for automatic resource cleanup
- Modular monorepo structure isolates frontend, backend, and database concerns into distinct packages
- Action-based state mutations using typed tuples ensure immutability and traceable document changes
- Plugin system via stubs and ext directories allows runtime extensibility while preserving core isolation
Tech Stack
- Node.js 22 backend with custom routing and built-in RPC system for efficient client-server communication
- Vue.js and Next.js frontend with Handlebars for server-side rendering
- SQLite embedded database with Python integration via pyodide for server-side formulas and AI-assisted generation
- Webpack and Babel for comprehensive bundling and transpilation across multiple TypeScript configurations
- Mocha with Selenium/WebDriver for robust testing across client, server, and browser environments
- Docker-based multi-stage builds with sandboxed execution for secure and portable deployment
Code Quality
- Extensive test coverage spanning unit, integration, and end-to-end scenarios with clear environmental isolation
- Strong TypeScript typing throughout data models, permissions, and caching layers, minimizing runtime errors
- Comprehensive error handling with custom exceptions and structured logging for predictable failure modes
- Domain-driven organization with well-defined boundaries between UI, data processing, and infrastructure
- Consistent naming, test patterns, and helper utilities that enhance readability and test reliability
- Robust linting, cache invalidation, and environment snapshotting to ensure test reproducibility
What Makes It Unique
- Reactive data model (grainjs) enables real-time bidirectional sync without traditional state management libraries
- Dynamic HTML sanitization with configurable hooks allows safe embedding of rich content while blocking risks
- WebSocket routing to document-specific workers enables multi-tenancy without complex load balancing
- Composable disposable observers track unsaved changes with context awareness and no global state
- Ace Editor extensions bring code-like editing to formulas, blurring the line between spreadsheets and low-code
- Test state injection via window.testGrist enables realistic E2E testing without heavy mocking frameworks