Un database relazionale travestito da fogli di calcolo familiari
Ogni sviluppatore prima o poi si trova ad affrontare una situazione in cui il business o la gestione richiede un'interfaccia comoda per lavorare con i dati. Di solito le opzioni sono limitate. O distribuiamo un pannello di amministrazione ingombrante come Django Admin o Forest Admin, oppure affidiamo tutto a Google Sheets, dove entro una settimana le formule si rompono, i tipi di dati si mescolano, e collegare due tabelle tramite una chiave esterna diventa un incubo con VLOOKUP.
Tempo fa mi sono imbattuto in grist-core — un motore open-source che cerca di colmare due mondi completamente diversi: i database relazionali ei fogli di calcolo flessibili.
https://github.com/user-attachments/assets/fe152f60-3d15-4b11-8cb2-05731a90d273
Sotto il cofano
Dando un'occhiata sotto il cofano, Grist non somiglia affatto ai classici cloni di Excel. Nei fogli di calcolo tradizionali, ogni cella è indipendente: una riga in una colonna potrebbe contenere un numero, la successiva una stringa, e quella sotto una formula. In Grist, le colonne sono rigorosamente tipizzate e funzionano come i campi nelle tabelle SQL.
Allo stesso tempo, ogni documento è semplicemente un file SQLite standard. Questo significa che i tuoi dati non sono bloccati in un formato proprietario. Qualsiasi utilità in grado di leggere SQLite aprirà direttamente un file .grist esportato. Dal punto di vista dei backup e della portabilità tra server, questo approccio semplifica notevolmente le cose: prendi il file — prendi l'intero database.
Curiosità: gli enti governativi francesi (ANCT e DINUM) investono attivamente nel codebase, quindi il progetto riceve costantemente commit relativi all'accessibilità, alla localizzazione e alla sicurezza enterprise.
Python al posto delle macro e dei dialetti delle formule
La funzionalità killer principale per chiunque sappia scrivere codice è la possibilità di eseguire calcoli in Python puro. Non c'è sintassi limitata o strane estensioni. Le formule delle celle accettano la sintassi Python standard insieme alla sua libreria standard.
Per esempio, puoi liberamente usare list comprehension, slicing delle stringhe, espressioni regolari, o il modulo datetime. Se sei abituato alle funzioni tabulari come SUM o AVERAGE, sono disponibili anche qui, ma quando la logica diventa complessa, passare a Python fa risparmiare molti nervi.
# Пример вычисления в колонке: вытаскиваем домен из email и форматируем
if $Email and "@" in $Email:
domain = $Email.split("@")[1].lower()
return f"Корпоративный: {domain}" if domain != "gmail.com" else "Личный"
return "Не указан"
Il codice viene eseguito in una sandbox isolata. A seconda dell'ambiente, puoi configurare l'isolamento tramite gVisor su Linux, sandbox-exec nativo su macOS, o Pyodide tramite WebAssembly se stai distribuendo su Windows.
Se non vuoi scrivere le formule manualmente, c'è un assistente AI integrato. Puoi connetterlo a OpenAI o configurare altri modelli attraverso OpenRouter, inclusi Claude 3.7 Sonnet o LLM locali tramite LM Studio.
Relazioni tra dati e dashboard visive
In Airtable o Notion, spesso manca una configurazione adeguata delle viste collegate su una singola schermata. In Grist, un workspace è diviso in più schede o widget che possono essere collegati tra loro con un clic:
- La tabella clienti a sinistra filtra la lista ordini a destra.
- Selezionare un ordine aggiorna istantaneamente la scheda dettaglio con descrizione Markdown e file allegati.
- I widget integrati per calendario, grafici e tabelle riepilogative raggruppano le metriche senza creare fogli nascosti intermedi.
I riferimenti bidirezionali (two-way references) funzionano out of the box: collega un task a uno sprint — lo sprint ottiene automaticamente il task aggiunto alla sua lista di task collegati.
Controllo granulare degli accessi
Molti strumenti no-code open-source sono carenti in termini di sicurezza, offrendo accesso su base "tutto o niente". In grist-core, le regole di accesso sono definite a livello di singole tabelle, righe e colonne.
Le condizioni di accesso possono anche essere impostate tramite formule:
- Un manager vede solo le trattative in cui la sua email corrisponde al campo
user.Email. - La colonna dello stipendio è visibile solo agli utenti con un attributo SSO specifico.
- Blocca la modifica dei record archiviati se il campo
Status == 'Closed'è impostato.
Per le installazioni enterprise, sono supportati l'autenticazione OIDC, SAML e forward-auth tramite proxy (es. Traefik o Authentik), insieme al provisioning utenti tramite SCIM.
Avvio rapido in Docker
Puoi provare il motore localmente in un paio di minuti con un singolo comando:
docker run -p 8484:8484 -v $PWD/persist:/persist -it gristlabs/grist
Dopo l'avvio, apri http://localhost:8484 nel tuo browser. Il container emetterà una chiave di boot generata sulla console per la configurazione iniziale dell'amministratore. Se vuoi saltare la procedura guidata e ottenere una singola istanza senza domande extra, basta passare la variabile d'ambiente -e GRIST_IN_SERVICE=true.
L'integrazione con sistemi esterni avviene attraverso l'API REST standard e i webhook in uscita. Inoltre, i webhook sono configurabili in modo flessibile: puoi attivare eventi solo quando colonne specifiche cambiano o quando viene soddisfatta una determinata condizione logica.
Confronto tra edizioni e limitazioni
Il repository grist-core è distribuito sotto la licenza Apache 2.0. L'immagine Docker base gristlabs/grist contiene codice proprietario opzionale per le funzionalità Enterprise, che è disabilitato per impostazione predefinita. Se hai bisogno esclusivamente di software libero senza inclusioni di terze parti, gli sviluppatori creano un'immagine separata gristlabs/grist-oss.
Alcune funzionalità sono spostate dal core puro grist-core alla versione commerciale. Per esempio, i log di audit in streaming, le catene di automazione email integrate e un server MCP nativo per i client AI. Tuttavia, nulla ti impedisce di connettere lo stesso Claude tramite adapter della comunità usando l'API REST standard.
Le traduzioni dell'interfaccia sono curate attraverso la comunità Weblate:
Chi trarrà beneficio da questo progetto
Se stai cercando una sostituzione auto-ospitata per Airtable senza limiti di righe e tariffe di abbonamento per utente, Grist sembra un'ottima scelta.
Copre perfettamente le esigenze di CRM interni, tracker di inventario, registri finanziari e semplici pannelli back-office. Ottieni un modello dati relazionale completo, la flessibilità degli script Python e il controllo completo sui file SQLite sul tuo server.
Il codice sorgente e la documentazione sono disponibili nel repository ufficiale gristlabs/grist-core.
Progetti correlati