Architecture

Stockage JSON : l'architecture flat-file

QuietCMS repose sur une architecture dite flat-file : l'intégralité du contenu est sérialisée en JSON et stockée dans des fichiers texte sur le système de fichiers du serveur. Aucun serveur de base de données n'est nécessaire — ni MySQL, ni PostgreSQL, ni SQLite.

Organisation des fichiers

Le contenu est réparti en quatre répertoires bien distincts sous cms/content/ :

  • content/pages/<slug>.json — pages statiques (accueil, mentions légales, contact…)
  • content/posts/<slug>.json — articles de blog
  • content/categories/<slug>.json — catégories associées aux articles
  • content/settings.json — configuration globale du site (titre, SMTP, thème actif…)

Chaque entité est un fichier JSON autonome. Un article contient son titre, son slug, sa méta-description, son contenu HTML, sa catégorie et ses métadonnées en un seul objet :

{
    "title": "Mon premier article",
    "slug": "mon-premier-article",
    "h1": "Mon premier article",
    "meta_description": "Description courte pour les moteurs de recherche.",
    "category": "actualites",
    "status": "published",
    "date": "2026-05-20T09:00:00+00:00",
    "content": "<p>Contenu HTML complet de l'article.</p>",
    "head_extra": "",
    "footer_extra": ""
}

Lecture et écriture

Les lectures sont triviales : un file_get_contents() suivi d'un json_decode(). Sur un hébergement mutualisé standard, lire un fichier JSON de quelques kilo-octets prend moins d'une milliseconde. Aucun pool de connexions, aucun overhead réseau, aucun parsing de requête SQL.

Les écritures utilisent json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) combiné à file_put_contents($path, $json, LOCK_EX). Le flag LOCK_EX pose un verrou exclusif au niveau du système de fichiers pendant la durée de l'écriture, ce qui protège contre les écritures simultanées dans la majorité des cas d'usage.

Avantages du flat-file

  • Portabilité instantanée : déplacer le site revient à copier un répertoire. Aucune exportation de base de données.
  • Versionnement Git natif : les fichiers JSON sont lisibles par diff et committables directement. L'historique éditorial est dans Git.
  • Zéro dépendance externe : fonctionne sur tout hébergement PHP sans MySQL ni extension PDO.
  • Lisibilité humaine : un développeur peut ouvrir n'importe quel fichier JSON dans un éditeur de texte et comprendre immédiatement la structure.
  • Latence faible : sur des sites de petite et moyenne taille, les lectures fichier sont plus rapides que des requêtes SQL non optimisées.

Limites connues

Le flat-file n'est pas sans contrepartie. LOCK_EX ne garantit pas l'atomicité en cas d'écritures concurrentes très fréquentes sur certains systèmes de fichiers distribués (NFS, certains montages cloud). Par ailleurs, il n'existe pas d'équivalent à une transaction SQL : si le processus est interrompu pendant une écriture, le fichier peut se retrouver dans un état corrompu. QuietCMS atténue ce risque en écrivant d'abord dans un fichier temporaire puis en effectuant un rename atomique.

La recherche plein texte est également limitée : sans index inversé, filtrer des milliers d'articles nécessite de lire tous les fichiers en mémoire.

Quand utiliser QuietCMS

Le flat-file est parfaitement adapté aux sites personnels, aux portfolios, aux sites d'agences et aux sites de contenu recevant jusqu'à environ 10 000 visites quotidiennes. Au-delà, ou si le site nécessite des recherches complexes, des relations multiples ou des transactions ACID, un CMS adossé à une base de données relationnelle sera plus pertinent.

Articles similaires