Data and databases · Edition No. 45 · 9 Oct 2026

gristlabs/grist-core

A self-hosted spreadsheet with real column types, references between tables and Python formulas, stored as portable per-document files.

← Data and databasesRead the whole edition →

11,917 stars · Apache-2.0 (the repository) plus a proprietary licence on the optional ext/ extensions · v1.7.20 (2026-09-28) · Track this in Scout

A self-hosted spreadsheet with real column types, references between tables and Python formulas, stored as portable per-document files.

▶Repo detailsthe review · specs · pros & cons · install

What it is

Grist is a document-based spreadsheet and database hybrid. Each document is a portable file with its own schema, formulas and access rules, and the server is a Node.js application with a Python formula engine beside it.

What it is good for. Anyone whose important spreadsheet has grown to the point where a wrong type in one cell breaks a report. Typed columns, references between tables and real formulas fix that without moving to a database nobody on the team can read. If you want that and you also want the file to live on a machine you control, this is the main open-source answer.

Stars11,917
LicenceApache-2.0 (the repository) plus a proprietary licence on the optional ext/ extensions
Latestv1.7.20 (2026-09-28)
Good
  • The repository's own licence is plain Apache-2.0, read from LICENSE.txt, with a real copyright line: "Copyright 2014-2022 Grist Labs Inc." — no network clause, no field-of-use restriction, nothing added.
  • It publishes real hardware figures, which almost nothing else today does: 8 GB of memory, 2 processors and 20 GB of disk for "a variety of moderate workloads", and a measured 100 MB of memory on one sample document without sandboxing, 200 MB with it, and 1 processor.
  • The default listening address is localhost only. GRIST_HOST has to be set to 0.0.0.0 deliberately before it answers on other interfaces, which is the opposite of several other entries today.
Watch for
  • ⚠ yarn install downloads code that is not open source, by default. The README's own words: "By default, the build is the full edition: yarn install downloads optional extensions (into an ext directory)", and "Note that this will add non-OSS code to your build", and "This extra code is not under a free or open-source license, though by default is completely inert". The mechanism is a postinstall hook that clones gristlabs/grist-ee. Grist's own documentation describes that code as available "under a proprietary license that does not grant any automatic rights to use or redistribute the software", starting a thirty-day trial, after which "Activation keys are required to run the full edition". To avoid it entirely: yarn run set-community-edition, or set GRIST_EDITION=community, or set GRIST_SKIP_EXT_AUTOSETUP=1.
  • ⚠ Sign-in is effectively absent until you configure it. Grist runs in a limited anonymous mode until it knows who is editing, and a single default identity can be set with GRIST_DEFAULT_EMAIL, which skips sign-in altogether. Locking it down needs GRIST_ANON_PLAYGROUND=false or GRIST_FORCE_LOGIN.
  • 637 open issues against 101 open pull requests, formulas are Python so there is a language to learn, and the Node.js version is pinned in a dotfile (.nvmrc, v22.12.0) rather than stated in the README.
Similar repositories
  • nocodb/nocodb

    The same spreadsheet-database idea, but an interface over an existing SQL database, where Grist carries its own document engine.

    Track this in Scout
  • baserow/baserow

    The same no-code database in a grid, built on PostgreSQL and positioned as an application builder, with GitHub acting as a mirror of a GitLab-primary project.

    Track this in Scout
  • teableio/teable

    Also a self-hostable spreadsheet-database, backed by PostgreSQL with database-scale as its pitch, against Grist's portable per-document files.

    Track this in Scout
Install
mkdir -p ~/grist
docker run -d --name grist \
  -p 127.0.0.1:8484:8484 \
  -v ~/grist:/persist \
  -e GRIST_SESSION_SECRET=replace-this-with-a-long-random-string \
  -e GRIST_DEFAULT_EMAIL=your-email@example.com \
  gristlabs/grist
Screenshots
gristlabs/grist-core: GitHub preview cardgristlabs/grist-core: Screenshot 1

Get the next edition in your inbox

A dozen repositories, opened and checked. The licence read, the last release dated, and the ones that did not make it named with the reason. It is the half most lists leave out.

No tracking pixels. One click to leave. The archive stays free either way.

We use your address to send the edition and nothing else. Confirm by email, leave in one click. How we handle it.