20 - Sep - 2026

I stopped forcing Excel to be a database after finding this open-source middle ground

For years, I’ve taken the lazy path to data management, saving everything in increasingly more complicated Excel sheets and pretending they were databases. Pivot tables stacked on pivot tables, VLOOKUPs chained together, all to just get the right data from what’s practically a labyrinth at this point.

But Excel isn’t meant to be used as a database, and it shows. The moment my data needed real relationships between records, actual data types, or more than one person needing to work with it, everything fell apart. That’s when I found Grist.

A spreadsheet with database delusions

Named columns, real types, zero VLOOKUP required

Grist calls itself a modern relational spreadsheet, but you really have to use it before you can actually understand what that means. The program is a hybrid between a spreadsheet and a database, attempting to give you the best of both worlds. Columns are named and typed as they would be in a real database schema, not just loosely formatted cells you hope stay consistent.

You still get spreadsheet-style formulas that update automatically when the data they reference changes. If you’ve used Airtable before, the mental model will feel familiar, except without the vendor lock-in and the subscription anxiety.

And that’s because Grist is fully open source under Apache 2.0, with a Docker image that gets you running in a couple of minutes. Just run docker pull gristlabs/gristfollowed by a run command with a mounted persistent directory, and you have a working instance on your hardware.

For someone like me who already runs a fleet of self-hosted services, this fits right into the stack, making it a perfect fit for homelabs and even smaller-scale professional environments. There’s no monthly fee, no trials, and the data lives in SQLite files, which means any tool that reads SQLite can pull your data out, no special exports needed.

Where it stops pretending to be a spreadsheet

Real Python, not the training-wheels version

Gris raw data table.
Screenshot by Yadullah Abidi | No Attribution Required.

Apart from the spreadsheet basics, Grist pushes really far into the database territory while staying approachable. Formulas can be written in full Python, including the standard library, not a crippled subset. There’s also an AI assistant baked in for formula generation, and if you don’t want to depend on OpenAI, the project has documented instructions for mounting any assistant of your choice through OpenRouter.

Grist also supports references and reference lists for linking records across tables the way foreign keys work in a real database, plus attachments, conditional formatting, and specialized editors for dates, currency, and toggles. The dashboard side is where it stops feeling like a spreadsheet entirely. You get drag-and-drop layouts, charts, card views, a calendar widget, and summary tables for grouping and counting, all linked together so filtering one widget updates the others without you writing a single macro.

Grist home dashboard.
Screenshot by Yadullah Abidi | No Attribution Required.

The only catch is that features like Azure-specific attachment storage, audit log streaming, advanced admin controls for large installations, and richer invite and comment notifications are gated behind the paid tier. For solo users or small teams, that isn’t a dealbreaker though. Most of what you’d actually use in daily application, including OIDC and SAML authentication, webhook integrations, and row and column-level access control, is present in the free core you can self-host.

One Docker pull between you and done

Or yarn install if you enjoy self-punishment

Running DOcker server on Lighwhale
Afam Onyimadu / MUO

As mentioned before, getting Grist running is a simple matter of pulling the Docker image and running the container with a persistent storage volume.

docker run -p 8484:8484 -v ~/grist:/persist -it gristlabs/grist

If you’d rather build from source, the process is standard for anyone who’s run a Node project before: yarn install, yarn run build:prod, yarn run install:python, and finally, yarn start. Formulas execute as real Python on your machine, and you can choose a sandboxing method depending on your OS, whether that’s gVisor on Linux, native sandbox-exec on macOS, or a WASM-based Pyodide sandbox that works everywhere, including Windows.

Excel’s replacement was hiding in plain sight

Free, open, and finally relational

Excel was never built to be a relational database, and pretending otherwise just means fighting the tool instead of using it. Grist doesn’t ask you to abandon the spreadsheet interface you already know and are familiar with; it massively upgrades what’s happening around it.

Between the SQLite portability, the open-source license, and the fact that you can run the whole thing on a Raspberry Pi if you wanted to, it’s easily one of the best recommendations for anyone whose Excel files are crumbling under their own weight. It might take a while for you to figure out everything, but that effort is well worth the time in the long run.

Leave a Reply

Your email address will not be published. Required fields are marked *