ExpertiseConnaissances (EN)OutilsField Guide (EN)BlogÀ propos
← Retour à R&D

Sardine CMS

Un framework de CMS multilingue et static-first.

Python · Apache-2.0

Le moteur derrière ce site, extrait en un framework réutilisable. Sardine construit des sites multilingues et static-first : contenu structuré, séparé de la présentation, validation forte avant toute publication, et un build déterministe qui exporte directement vers un hébergement statique.

Ce que c'est

Le contenu vit en JSON et en Markdown, avec une langue source configurable. Sept packs de langue sont fournis aujourd'hui : anglais, portugais européen, espagnol, français et allemand, plus italien et indonésien, ces deux derniers contribués par la communauté avec le catalogue complet du panneau d'administration. Les briques reposent sur les mêmes contrats déjà éprouvés sur ce site :

  • contenu structuré en JSON et Markdown, séparé de la présentation ;
  • validation forte avant publication : parité des langues, structure, règles éditoriales ;
  • un build déterministe avec export statique, prêt pour Azure Static Web Apps ;
  • SEO multilingue dès l'origine : canonical, hreflang, Open Graph, JSON-LD, sitemap et RSS ;
  • une administration authentifiée dans le navigateur, couvrant tout le cycle éditorial.

Le contenu est portable par conception : JSON et Markdown, sans verrouillage par la base de données. Il y a quatre moteurs de stockage : SQLite par défaut, avec PostgreSQL, MySQL et SQL Server en options. Le front-end respecte le WCAG 2.2 AA. Les cibles de déploiement incluent Azure Static Web Apps, nginx, un serveur générique, et un scaffold de projet Astro qui consomme la Content API.

Le panneau d'administration de Sardine CMS : l'écran des Thèmes, avec les thèmes installés, leur verdict de compatibilité et le thème de référence actif

Le panneau d'administration

Celui qui édite travaille dans un vrai panneau dans le navigateur, pas dans un fichier de configuration. Il porte le SEO par entrée, des formulaires appuyés sur un endpoint officiel, et des liens de prévisualisation externes signés, pour montrer un brouillon à quelqu'un sans compte.

Les thèmes et les extensions se gèrent depuis le panneau, de façon déclarative. Il découvre ce qui est installé et affiche les métadonnées, une capture et un verdict de compatibilité sans exécuter le moindre code pendant la découverte. L'activation est transactionnelle : un build de test doit passer avant que la configuration ne change, si bien qu'une extension en panne est un état visible et réversible, jamais un panneau mort. Les extensions portent un schéma de réglages versionné et un health-check optionnel, les réglages sont validés avant d'être enregistrés, les valeurs secrètes nomment une variable d'environnement au lieu d'être stockées, et un thème est un contrat vérifiable de quinze vérifications de conformité nommées.

Migrer des blogs existants

Un chemin complet, de bout en bout, pour les exports WXR de WordPress, dans le CLI et dans le panneau sur le même pipeline. Rien n'est écrit avant d'avoir vu ce qui va se passer : un rapport dry-run indique un pourcentage de fidélité explicite et liste une ligne par élément non migrable, pour que rien ne soit écarté en silence. La réimportation est idempotente, les auteurs, catégories et étiquettes sont mappés, la media référencée est téléchargée, et les redirections des anciennes URLs sont générées automatiquement.

Installation

Requiert Python 3.12 ou plus récent. La commande cms vient d'un seul paquet :

bash
pip install sardine-cms-cli

Cela installe le cœur, le validateur et le constructeur. Le thème de référence et l'administration dans le navigateur sont des paquets séparés, optionnels. Les moteurs de base de données au-delà de SQLite sont des extras optionnels du cœur :

bash
pip install "sardine-cms-core[postgres]"   # ou [mysql], [mssql]

Quickstart

Une commande va de rien à un site consultable en sept langues :

bash
pip install sardine-cms-cli sardine-cms-theme-ph7x-reference
cms demo

Il y a aussi une voie Docker : docker compose up lance le panneau avec un site pré-rempli et sans préparer Python, en affichant un mot de passe d'administration généré au premier démarrage. Pour démarrer plutôt un vrai projet, cms init my-site --theme ph7x-reference, puis cms seed, cms build et cms preview.

Comment c'est organisé

L'espace de travail est un ensemble de paquets ciblés : cms-core pour le modèle de contenu et les états de traduction, cms-validation pour les règles, cms-build pour le générateur déterministe et les thèmes, et cms-cli pour la commande cms, plus un thème de référence et l'administration dans le navigateur. Le design vit au niveau du thème : apportez le vôtre.

Comment contribuer

Le dépôt est ouvert aux contributions. Lisez le CONTRIBUTING.md et le CODE_OF_CONDUCT.md, choisissez une issue marquée good first issue, et ouvrez une pull request. Les rapports de bugs et les corrections de documentation sont aussi bienvenus que le code. Les questions de sécurité suivent le SECURITY.md, en privé.

Vous pouvez le voir tourner sur le demo, une entreprise aérospatiale fictive en sept langues, reconstruite et déployée à chaque merge.