marimo expliqué : des notebooks Python réactifs sous forme de scripts testables
Analyse du graphe de dépendances, des fichiers Python, du SQL, des composants d’interface, du déploiement d’applications et de WebAssembly, avec leurs limites pratiques.
Positionnement et signal actuel
marimo est un notebook Python réactif enregistré dans un fichier `.py` ordinaire, où définitions et références relient les cellules. Lors de la collecte, le dépôt comptait 21 925 stars, environ 171 commits sur 30 jours et la version 0.23.14. Son objectif est de réduire l’état caché, les résultats périmés dus à un ordre manuel et les différences JSON difficiles à relire.
Usages et fonctions principales
Le projet couvre l’exploration de données, les requêtes SQL, les essais de modèles, les cours, les rapports interactifs et les outils internes. Des contrôles transmettent à Python les valeurs de curseurs, tableaux et formulaires ; les cellules SQL produisent des dataframes. Un même fichier peut être édité, exécuté comme script ou servi comme application en lecture seule. L’assistance par IA reste facultative.
Fonctionnement du modèle réactif
marimo examine statiquement les noms définis et lus par chaque cellule, puis construit un graphe orienté sans cycle. Quand une variable change, seules les cellules dépendantes sont exécutées dans l’ordre topologique ; supprimer une cellule retire ses définitions. Une variable ne peut pas être définie dans plusieurs cellules. Le calcul différé aide pour les tâches coûteuses, mais une mutation interne d’objet peut échapper à l’analyse des noms.
Pile technique et modèle de fichier
Le moteur et les notebooks utilisent surtout Python, tandis que l’interface du navigateur repose sur TypeScript et React. Le fichier est un programme Python importable, testable et lisible dans Git. En mode application, les valeurs de l’interface déclenchent les calculs du serveur. La version WebAssembly utilise Pyodide dans le navigateur ; utile sans serveur, elle limite les paquets, les ressources, le réseau et le stockage durable.