Een relationele database vermomd als vertrouwde spreadsheets
Elke ontwikkelaar komt uiteindelijk in een situatie terecht waarin het bedrijf of het management een handige interface nodig heeft om met data te werken. Meestal zijn de opties beperkt. Of we implementeren een omslachtig admin-paneel zoals Django Admin of Forest Admin, of we geven alles over aan Google Sheets, waar binnen een week formules breken, datatypes door elkaar raken, en het koppelen van twee tabellen via een foreign key verandert in een nachtmerrie met VLOOKUP.
Een tijdje geleden kwam ik grist-core tegen — een open-source engine die twee totaal verschillende werelden probeert te overbruggen: relationele databases en flexibele spreadsheets.
https://github.com/user-attachments/assets/fe152f60-3d15-4b11-8cb2-05731a90d273
Onder de motorkap
Als we onder de motorkap kijken, lijkt Grist helemaal niet op standaard Excel-klonen. In klassieke spreadsheets leeft een cel op zichzelf: één rij in een kolom kan een getal bevatten, de volgende een string, en daaronder een formule. In Grist zijn kolommen strikt getypt en werken ze zoals velden in SQL-tabellen.
Tegelijkertijd is elk document gewoon een gewoon SQLite-bestand. Dit betekent dat je data niet opgesloten zit in proprietaire opslag. Elk hulpprogramma dat SQLite kan lezen, opent een geëxporteerd .grist bestand direct. Vanuit het perspectief van back-ups en portabiliteit tussen servers, vereenvoudigt deze aanpak de zaken aanzienlijk: pak het bestand — pak de hele database.
Interessant weetje: Franse overheidsinstanties (ANCT en DINUM) investeren actief in de codebase, dus het project ontvangt consistent commits gerelateerd aan toegankelijkheid, lokalisatie en enterprise-beveiliging.
Python in plaats van macro's en formule-dialecten
De belangrijkste killer feature voor iedereen die kan programmeren, is berekeningen in pure Python. Er is geen beperkte syntaxis of vreemde extensies. Celformules accepteren standaard Python-syntaxis samen met de standaardbibliotheek.
Bijvoorbeeld, je kunt vrijelijk list comprehensions, string slicing, reguliere expressies of de datetime module gebruiken. Als je gewend bent aan tabelfuncties zoals SUM of AVERAGE, deze zijn hier ook beschikbaar, maar wanneer logica complex wordt, schakelen naar Python bespaart een hoop zenuwen.
# Пример вычисления в колонке: вытаскиваем домен из email и форматируем
if $Email and "@" in $Email:
domain = $Email.split("@")[1].lower()
return f"Корпоративный: {domain}" if domain != "gmail.com" else "Личный"
return "Не указан"
Code wordt uitgevoerd in een geïsoleerde sandbox. Afhankelijk van de omgeving kun je isolatie configureren via gVisor op Linux, native sandbox-exec op macOS, of Pyodide via WebAssembly als je op Windows implementeert.
Als je geen formules handmatig wilt schrijven, is er een ingebouwde AI-assistent. Je kunt deze verbinden met OpenAI of elke andere model via OpenRouter configureren, inclusief Claude 3.7 Sonnet of lokale LLM's via LM Studio.
Datarelaties en visuele dashboards
In Airtable of Notion heb je vaak geen goede configuratie van gekoppelde weergaven op één scherm. In Grist is een werkruimte verdeeld in meerdere kaarten of widgets die aan elkaar gekoppeld kunnen worden door te klikken:
- Klanttabel links filtert de orderlijst rechts.
- Een order selecteren werkt direct de detailkaart bij met Markdown-beschrijving en bijgevoegde bestanden.
- Ingebouwde kalender-, grafiek- en samenvattingswidgetgroeperen metrieken zonder tussenliggende verborgen sheets te maken.
Bidirectionele referenties (two-way references) werken out-of-the-box: koppel een taak aan een sprint — de sprint krijgt automatisch de taak toegevoegd aan zijn gekoppelde takenlijst.
Granulaire toegangscontrole
Veel open-source no-code tools schieten tekort op het gebied van beveiliging, met toegang op een "alles-of-niets" basis. In grist-core worden toegangsregels gedefinieerd op het niveau van individuele tabellen, rijen en kolommen.
Toegangsvoorwaarden kunnen ook via formules worden ingesteld:
- Een manager ziet alleen deals waarbij hun e-mail overeenkomt met het
user.Emailveld. - De salaris kolom is alleen zichtbaar voor gebruikers met een specifiek SSO-attribuut.
- Blokkeer bewerken van gearchiveerde records als het
Status == 'Closed'veld is ingesteld.
Voor enterprise-installaties worden OIDC, SAML en forward-auth authenticatie via proxy (bijv. Traefik of Authentik) ondersteund, samen met gebruikersinrichting via SCIM.
Snelle start in Docker
Je kunt de engine lokaal in een paar minuten uitproberen met één commando:
docker run -p 8484:8484 -v $PWD/persist:/persist -it gristlabs/grist
Na opstarten open je http://localhost:8484 in je browser. De container zal een gegenereerde boot key naar de console uitvoeren voor de eerste administrator-configuratie. Als je de wizard wilt overslaan en een single instance wilt zonder extra vragen, geef dan gewoon de -e GRIST_IN_SERVICE=true environment variable door.
Integratie met externe systemen gaat via de standaard REST API en uitgaande webhooks. Bovendien zijn webhooks flexibel configureerbaar: je kunt events alleen triggeren wanneer specifieke kolommen veranderen of wanneer aan een bepaalde logische voorwaarde wordt voldaan.
Edities vergelijken en beperkingen
De grist-core repository wordt gedistribueerd onder de Apache 2.0 licentie. Het basis Docker-image gristlabs/grist bevat optionele proprietaire code voor Enterprise-functies, die standaard is uitgeschakeld. Als je strikt uitsluitend vrije software zonder derden-inclusies nodig hebt, bouwen de ontwikkelaars een apart image gristlabs/grist-oss.
Sommige functies zijn verplaatst uit de pure core grist-core naar de commerciële versie. Bijvoorbeeld streaming audit logs, ingebouwde e-mailautomatisatieketens en een native MCP-server voor AI-clients. Maar niets belet je om dezelfde Claude te verbinden via community adapters met de standaard REST API.
Interfacevertalingen worden beheerd via de Weblate-community:
Wie heeft baat bij dit project
Als je op zoek bent naar een zelf-gehoste vervanger voor Airtable zonder rijlimieten en per-gebruiker abonnementskosten, ziet Grist eruit als een geweldige kandidaat.
Het dekt perfect de behoeften voor interne CRM's, voorraadtrackers, financiële registers en eenvoudige back-office panelen. Je krijgt een volledig relationeel datamodel, de flexibiliteit van Python-scripts en volledige controle over SQLite-bestanden op je eigen server.
Broncode en documentatie zijn beschikbaar in de officiële repository gristlabs/grist-core.
Gerelateerde projecten