>_ DevTrendsit

Lingua

Home

Linguaggi

Sezioni

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embedded Sicurezza
TypeScript

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:

Translation status

Translation detail

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