Retour aux outils
Bases de donnéesIntermédiaireOpen sourceAuto-hébergeablev1.7.15

Grist

**Le tableur relationnel open source** : la puissance des colonnes calculées, des références entre t

MAJ 2026-06-14
Grist
Site officiel Code source★ 11 147

Grist est un tableur relationnel : à mi-chemin entre Excel, Airtable et une vraie base de données. Là où Airtable permet d'avoir plusieurs "tables" liées, Grist pousse le concept jusqu'au bout : vraies foreign keys, vrais types de colonnes, vraies contraintes, le tout dans une UI de tableur familièr

Description

Grist est un tableur relationnel : à mi-chemin entre Excel, Airtable et une vraie base de données. Là où Airtable permet d'avoir plusieurs "tables" liées, Grist pousse le concept jusqu'au bout : vraies foreign keys, vrais types de colonnes, vraies contraintes, le tout dans une UI de tableur familière.

L'ingrédient magique de Grist ce sont ses formules Python-like : on peut écrire du code proche de Python directement dans une cellule, avec accès aux colonnes des autres tables, des fonctions de chaîne, des conditions, des boucles, et même des fonctions custom en Python. C'est ce qui fait la différence avec Airtable : on a la souplesse d'un tableur avec la rigueur d'une base de données.

🛠️ Cas d'usage typiques

  • ✅ Suivi de budget personnel / familial avec multi-devises et rolling forecasts
  • ✅ Inventaire avec relations (fournisseurs → produits → commandes)
  • ✅ CRM léger pour freelance (contacts → opportunités → factures)
  • ✅ Planification de projet avec dépendances et Gantt
  • ✅ Bases de connaissances structurées
  • ✅ Dashboards avec graphiques intégrés (bar, line, pie, scatter…)
  • ✅ ETL rapide : importer des CSV, les transformer via formules, exporter
  • ✅ Collaboration multi-utilisateurs avec ACL fines

🎯 Différenciateurs clés

  • ✅ Modèle relationnel natif : foreign keys, lookups, références entre tables
  • ✅ Formules Python-like : on peut littéralement écrire if x > 0: return y * 1.2 dans une colonne
  • ✅ Custom widgets : créer ses propres visualisations
  • ✅ API complète : REST + Python SDK
  • ✅ ACL par table, par ligne, par colonne (un vrai row-level security)
  • ✅ Import/Export : CSV, XLSX, JSON, SQLite dump
  • ✅ Self-hosted : Docker simple, ou natif Python
  • ✅ Versioning : chaque modification est versionnée, on peut rollback
  • ✅ Templating : partager un document comme template reproductible
  • ✅ Embeds : intégrer une vue Grist dans une page web (iframe ou widget JS)

Public cible : homelabs qui veulent remplacer Excel/Google Sheets, petites structures qui n'ont pas besoin d'un ERP complet, analystes qui veulent prototyper rapidement.

Installation

Option 1 : Docker Compose (recommandé)

# docker-compose.yml
version: '3.8'
services:
  grist:
    image: gristlabs/grist:latest
    container_name: grist
    restart: unless-stopped
    environment:
      GRIST_HOST: "0.0.0.0"
      GRIST_PORT: 8484
      GRIST_DOMAIN: "grist.example.com"
      GRIST_SINGLE_ORG: "homelab"
      GRIST_FORCE_LOGIN: "true"
      # Optionnel : authentification via OIDC/SAML
      # GRIST_OAUTH_ID: "..."
      # GRIST_OAUTH_SECRET: "..."
      # GRIST_OAUTH_HOST: "https://grist.example.com"
      # GRIST_OAUTH_IDP_ISSUER: "https://authentik.example.com/application/o/grist/"
      # Type de BDD : sqllite (par défaut) ou postgres
      TYPE: "sqllite"
      SQLITE_PATH: "/persist/home.sqlite"
    ports:
      - "8484:8484"
    volumes:
      - grist-data:/persist
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.grist.rule=Host(`grist.example.com`)"
      - "traefik.http.routers.grist.entrypoints=websecure"
      - "traefik.http.routers.grist.tls.certresolver=letsencrypt"
      - "traefik.http.services.grist.loadbalancer.server.port=8484"

volumes:
  grist-data:

💡 Grist peut aussi tourner en mode multi-org (plusieurs équipes séparées) en supprimant GRIST_SINGLE_ORG.

Option 2 : Binaire natif (développement)

git clone https://github.com/gristlabs/grist-core.git
cd grist-core
npm install
GRIST_HOST=0.0.0.0 npm run build && npm start

Option 3 : Postgres backend (production)

services:
  grist:
    environment:
      TYPE: "postgres"
      PGHOST: grist-db
      PGPORT: 5432
      PGUSER: grist
      PGPASSWORD: changez_moi
      PGDATABASE: grist
  grist-db:
    image: postgres:16-alpine
    environment:
      POSTGRES_DB: grist
      POSTGRES_USER: grist
      POSTGRES_PASSWORD: changez_moi
    volumes:
      - grist-pg:/var/lib/postgresql/data

Configuration

  1. Premier accès : https://grist.example.com → créer le premier utilisateur (devient admin via GRIST_SINGLE_ORG)
  2. Activer OIDC (recommandé) : configurer les variables GRIST_OAUTH_* et pointer vers Authentik/Authelia
  3. Créer un document : + New Document → importer un CSV, XLSX, ou partir de zéro
  4. Créer une deuxième table : + Add new table → définir les types de colonnes
  5. Créer une relation : dans une table, ajouter une colonne de type "Reference" pointant vers l'autre table
  6. Ajouter une formule : sur une colonne → click droit → "Formula" → len($name.upper()) par exemple

Alternatives

Open Source

  • NocoDB — Plus Airtable-like, plus de connecteurs
  • Baserow — Plus simple, plus jeune
  • Teable — Plus moderne, basé sur Postgres
  • Mathesar — Plus brut, plus orienté data team
  • AirTable clone in Grist — 😄
  • LibreOffice Calc — Tableur classique, sans modèle relationnel
  • EtherCalc — Multi-utilisateurs mais très basique

Propriétaires

  • Airtable — Standard du marché, freemium
  • Google Sheets — Tableur classique collaboratif, sans relations fortes
  • Microsoft Excel — Roi historique, mais client lourd
  • Coda — Tableur + documents, approche originale
  • Smartsheet — Project management + tables
  • Notion — Bases de données, plus wiki
  • Retool Tables — Plus dev-oriented

Comparaison

CritèreGristAirtableNocoDBGoogle Sheets
LicenceApache-2.0PropriétaireAGPL-3.0Propriétaire
Modèle relationnel✅ Vrai✅ Limité✅ Vrai❌
FormulesPython-likePropreLimitéePropre
ACL par ligne✅✅ (Pro)❌✅
APIREST + PythonRESTREST/GraphQLSheets API
Auto-hébergeable✅❌✅❌
Visualisations intégrées✅✅Limité✅
Versioning✅ AutoPro only❌✅
PrixGratuitFreemiumGratuitFreemium

Verdict : Grist est le meilleur choix open source pour un homelab qui veut un vrai tableur relationnel avec ACL fines. Il bat Airtable sur la rigueur des données, le pricing et la portabilité. Pour un usage plus "no-code Airtable-like", NocoDB ou Teable sont mieux.

Sécurité

  • Authentification : email/password par défaut, OIDC / OAuth / SAML via config (recommandé)
  • HTTPS obligatoire via [[app-traefik]] — Grist expose aussi une API
  • ACL fines : par table, par colonne, par ligne
  • Secrets : si OIDC, stocker GRIST_OAUTH_SECRET hors de l'image
  • Backups : [[app-backup]] (restic) sur le volume grist-data (contient home.sqlite) — indispensable, c'est toute votre data
  • Si Postgres backend : sauvegarder la BDD via pg_dump

Ressources