>_ DevTrendsfr

Langue

Accueil

Langages

Sections

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embarqué Sécurité
TypeScript

Une base de données relationnelle déguisée en tableurs familiers

Chaque développeur finit par se retrouver face à une situation où les besoins métier ou de gestion exigent une interface pratique pour manipuler des données. En général, les options sont limitées. Soit on déploie un panneau d'administration lourd comme Django Admin ou Forest Admin, soit on confie tout à Google Sheets, où en une semaine les formules cassent, les types de données se mélangent, et lier deux tables via une clé étrangère devient un cauchemar avec VLOOKUP.

Il y a quelque temps, je suis tombé sur grist-core — un moteur open-source qui tente de faire le pont entre deux mondes complètement différents : les bases de données relationnelles et les tableurs flexibles.

https://github.com/user-attachments/assets/fe152f60-3d15-4b11-8cb2-05731a90d273

Sous le capot

En regardant sous le capot, Grist ne ressemble pas du tout aux clones standard d'Excel. Dans les tableurs classiques, une cellule vit de manière isolée : une ligne d'une colonne peut contenir un nombre, la suivante une chaîne, et en dessous une formule. Dans Grist, les colonnes sont strictement typées et fonctionnent comme des champs dans des tables SQL.

Dans le même temps, chaque document n'est qu'un simple fichier SQLite. Cela signifie que vos données ne sont pas enfermées dans un stockage propriétaire. N'importe quel utilitaire capable de lire du SQLite ouvrira directement un fichier .grist exporté. Du point de vue des sauvegardes et de la portabilité entre serveurs, cette approche simplifie considérablement les choses : vous prenez le fichier — vous prenez la base de données entière.

Fait intéressant : les organismes gouvernementaux français (ANCT et DINUM) investissent activement dans la base de code, donc le projet reçoit régulièrement des contributions liées à l'accessibilité, la localisation et la sécurité d'entreprise.

Python au lieu des macros et des dialectes de formules

La principale fonctionnalité killer pour quiconque sait coder, c'est les calculs en Python pur. Il n'y a pas de syntaxe restreinte ni d'extensions étranges. Les formules de cellules acceptent la syntaxe Python standard ainsi que sa bibliothèque standard.

Par exemple, vous pouvez librement utiliser les compréhensions de listes, le découpage de chaînes, les expressions régulières ou le module datetime. Si vous êtes habitué aux fonctions tabulaires comme SUM ou AVERAGE, elles sont également disponibles ici, mais quand la logique devient complexe, passer à Python fait gagner beaucoup de nerfs.

# Пример вычисления в колонке: вытаскиваем домен из email и форматируем
if $Email and "@" in $Email:
    domain = $Email.split("@")[1].lower()
    return f"Корпоративный: {domain}" if domain != "gmail.com" else "Личный"
return "Не указан"

Le code s'exécute dans un bac à sable isolé. Selon l'environnement, vous pouvez configurer l'isolation via gVisor sur Linux, le bac à sable natif sandbox-exec sur macOS, ou Pyodide via WebAssembly si vous déployez sur Windows.

Si vous ne souhaitez pas écrire les formules manuellement, il y a un assistant IA intégré. Vous pouvez le connecter à OpenAI ou configurer tout autre modèle via OpenRouter, y compris Claude 3.7 Sonnet ou des LLM locaux via LM Studio.

Relations entre les données et tableaux de bord visuels

Dans Airtable ou Notion, vous manquez souvent de configuration appropriée des vues liées sur un seul écran. Dans Grist, un espace de travail est divisé en plusieurs cartes ou widgets qui peuvent être liés entre eux en un clic :

  • La table des clients à gauche filtre la liste des commandes à droite.
  • Sélectionner une commande met instantanément à jour la carte de détail avec la description Markdown et les fichiers joints.
  • Les widgets intégrés de calendrier, graphique et tableau de synthèse regroupent les métriques sans créer de feuilles intermédiaires cachées.

Les références bidirectionnelles (two-way references) fonctionnent out of the box : liez une tâche à un sprint — le sprint obtient automatiquement la tâche ajoutée à sa liste de tâches liées.

Contrôle d'accès granulaire

De nombreux outils no-code open-source sont insuffisants en matière de sécurité, offrant un accès sur la base du « tout ou rien ». Dans grist-core, les règles d'accès sont définies au niveau des tables, lignes et colonnes individuelles.

Les conditions d'accès peuvent également être définies via des formules :

  • Un responsable ne voit que les offres où son email correspond au champ user.Email.
  • La colonne salaire n'est visible que pour les utilisateurs ayant un attribut SSO spécifique.
  • Bloquer l'édition des enregistrements archivés si le champ Status == 'Closed' est défini.

Pour les installations d'entreprise, l'authentification OIDC, SAML et l'authentification forward via proxy (par exemple Traefik ou Authentik) sont prises en charge, ainsi que le provisionnement des utilisateurs via SCIM.

Démarrage rapide dans Docker

Vous pouvez essayer le moteur localement en quelques minutes avec une seule commande :

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

Après le démarrage, ouvrez http://localhost:8484 dans votre navigateur. Le conteneur affichera une clé de démarrage générée dans la console pour la configuration initiale de l'administrateur. Si vous souhaitez passer l'assistant et obtenir une instance unique sans questions supplémentaires, passez simplement la variable d'environnement -e GRIST_IN_SERVICE=true.

L'intégration avec les systèmes externes se fait via l'API REST standard et les webhooks sortants. De plus, les webhooks sont flexiblement configurables : vous pouvez déclencher des événements uniquement quand des colonnes spécifiques changent ou quand une condition logique donnée est remplie.

Comparaison des éditions et limitations

Le dépôt grist-core est distribué sous licence Apache 2.0. L'image Docker de base gristlabs/grist contient du code propriétaire optionnel pour les fonctionnalités Enterprise, désactivé par défaut. Si vous avez strictement besoin de logiciels exclusivement libres sans inclusions tierces, les développeurs construisent une image séparée gristlabs/grist-oss.

Certaines fonctionnalités sont déplacées du core pur grist-core vers la version commerciale. Par exemple, les logs d'audit en streaming, les chaînes d'automatisation email intégrées et un serveur MCP natif pour les clients IA. Cependant, rien ne vous empêche de connecter le même Claude via des adaptateurs communautaires en utilisant l'API REST standard.

Les traductions de l'interface sont gérées par la communauté Weblate :

Translation status

Translation detail

À qui ce projet sera utile

Si vous cherchez un remplacement auto-hébergé pour Airtable sans limites de lignes et sans frais d'abonnement par utilisateur, Grist ressemble à un excellent candidat.

Il couvre parfaitement les besoins pour les CRM internes, les trackers d'inventaire, les registres financiers et les panneaux back-office simples. Vous obtenez un modèle de données relationnel complet, la flexibilité des scripts Python et un contrôle total sur les fichiers SQLite sur votre propre serveur.

Le code source et la documentation sont disponibles dans le dépôt officiel gristlabs/grist-core.

Projets similaires