Extensions
Les extensions sont des modules optionnels qui ajoutent de nouvelles fonctionnalités à votre CMS sans toucher au cœur du système. Conversion automatique des images en WebP, intégration d'outils tiers (SureFeedback, BugHerd…), connecteurs SEO, automatisations spécifiques à votre métier : tout passe par le système d'extensions, à la manière des plugins WordPress.
Vue d'ensemble du système
Le Labo du Yeti embarque un système d'extensions complet inspiré de WordPress, mais pensé pour rester sobre et sécurisé. Chaque extension est un dossier compressé (.zip) contenant son propre code, sa configuration et la liste exacte des permissions dont elle a besoin pour fonctionner. Avant l'installation, vous voyez précisément ce qu'elle compte faire (écrire dans le blog ? appeler l'IA ? écrire des fichiers ?) et vous validez ou refusez.
Trois principes guident le système :
- Transparence — Aucune extension ne peut accéder à des données sensibles (mots de passe, clés API, secrets JWT). Le contexte qui lui est fourni est filtré.
- Réversibilité — Désactiver une extension la débranche proprement (hooks supprimés, routes démontées) sans toucher à ses données. Réactiver remet tout en marche.
- Contrôle par rôle — Même une extension installée n'est exposée qu'aux rôles que vous autorisez, via la matrice des Permissions.
Accéder au module Extensions
Le module se trouve dans la sidebar, section Configuration → Extensions. Seuls les rôles Administrateur, Chef projet et Webmaster peuvent installer, activer ou désinstaller une extension. Les éditeurs (rôle Client) n'ont pas accès à cette zone : c'est volontaire, l'installation d'extensions est une tâche d'administration.
extensions est bien activée pour votre rôle dans Réglages → Permissions.
Installer une extension
L'installation se fait en quatre étapes simples. Préparez d'abord le fichier .zip de l'extension : il vous est fourni par l'éditeur de l'extension, ou téléchargé depuis votre outil de gestion d'extensions interne.
- Ouvrir le module — Sidebar → Configuration → Extensions. Vous arrivez sur la liste des extensions déjà installées (vide la première fois).
- Lancer l'installation — Cliquer sur le bouton orange « Installer une extension » en haut à droite. Une fenêtre de téléversement s'ouvre.
- Téléverser le fichier .zip — Glisser-déposer votre fichier dans la zone, ou cliquer pour parcourir vos dossiers. L'extension doit contenir un fichier
extension.jsonvalide (le manifeste) ainsi que le code de l'extension. Taille maximale : 10 Mo. - Valider les permissions — Un écran de confirmation affiche les permissions demandées par l'extension. Lisez-les attentivement avant de cliquer sur « Installer ».
L'écran de confirmation des permissions
C'est l'écran le plus important du processus. Avant tout déploiement, le CMS vous présente la liste exacte des capacités demandées par l'extension, traduites en français lisible. Par exemple :
| Permission technique | Signification concrète |
|---|---|
cms.blog.write | L'extension pourra créer ou modifier des articles de blog. |
cms.ai.use | L'extension pourra utiliser l'IA configurée (Claude, GPT…) en consommant votre quota. |
storage.write | L'extension pourra écrire des fichiers dans son propre dossier de stockage. |
cms.media.read | L'extension pourra lister vos médias (sans pouvoir les supprimer si la permission write n'est pas demandée). |
cms.pages.write | L'extension pourra créer ou modifier des pages. |
cms.blog.write alors qu'elle est censée juste convertir des images en WebP, c'est suspect. Refusez en cas de doute. Vous pouvez toujours réinstaller plus tard si l'éditeur corrige son manifeste.
Cliquez sur « Installer » pour valider, ou sur « Annuler » pour abandonner. Si vous validez, le CMS :
- Décompresse le fichier dans
extensions/installed/<id>/. - Exécute automatiquement
npm installsi l'extension a des dépendances (cette étape peut prendre quelques secondes). - Enregistre l'extension en base avec son statut, sa version et son manifeste.
- Active l'extension immédiatement : ses hooks sont branchés, ses routes deviennent disponibles.
La liste des extensions installées
Une fois installée, l'extension apparaît dans la liste principale du module. Chaque ligne affiche :
- Le nom et l'icône de l'extension (déclarés dans son manifeste).
- La version installée (ex : 1.2.0).
- Le statut — un badge coloré : Active (vert), Inactive (gris), ou Failed (rouge, en cas d'erreur au chargement).
- Une description courte indiquant à quoi sert l'extension.
- Les actions disponibles sur la droite de chaque ligne.
Actions disponibles sur une extension
| Action | Effet | Données conservées ? |
|---|---|---|
| Activer | Branche les hooks, ajoute les routes, injecte la sidebar dynamique. L'extension reprend son travail immédiatement. | Oui (tout). |
| Désactiver | Débranche les hooks, démonte les routes. L'extension est mise en veille, sans aucun effet sur le site. | Oui (fichiers et données préservés). |
| Réglages | Ouvre la page de configuration spécifique à l'extension (si elle en propose une). | — |
| Désinstaller | Supprime complètement l'extension : dossier, base de données, configuration. Action irréversible. | Non (tout est purgé via cascade). |
Configurer une extension
La plupart des extensions ont besoin d'un minimum de configuration : une clé API, un identifiant de compte tiers, un script à injecter, un seuil de compression… C'est ce que propose le bouton Réglages.
Selon l'extension, vous tomberez sur :
- Une modale de configuration auto-générée — Le CMS lit le schéma de l'extension (champs déclarés dans le manifeste) et affiche un formulaire propre, avec validation. C'est le cas le plus courant pour les extensions simples.
- Une page custom complète — Certaines extensions plus complexes fournissent leur propre page de réglages (par exemple
/admin/ext/<id>/settings). Elle s'affiche directement dans l'interface du CMS, comme n'importe quel autre module.
Toutes les valeurs que vous saisissez sont stockées dans une zone réservée à l'extension. Elles survivent à une désactivation/réactivation, mais sont effacées lors d'une désinstallation.
La sidebar dynamique
Une extension peut, si son manifeste le déclare, ajouter ses propres entrées dans la sidebar du CMS. Vous verrez alors apparaître une nouvelle section, généralement appelée « Extensions », juste après les sections natives (Contenu, Marketing, Configuration).
Par exemple, une extension Newsletter pourra ajouter une entrée « Abonnés » et une entrée « Campagnes », accessibles d'un clic depuis la sidebar. Une extension Statistiques pourra ajouter une entrée « Trafic ».
Contrôler qui peut utiliser quoi
Installer une extension ne signifie pas que tous vos utilisateurs y ont accès. Par défaut, les fonctionnalités d'une extension sont désactivées côté capabilities pour tous les rôles, sauf pour l'owner qui voit tout. C'est volontaire : c'est à vous de décider qui peut utiliser quoi.
Pour activer une fonctionnalité d'extension pour un rôle donné :
- Sidebar → Réglages → Permissions.
- Repérer la ligne correspondant à la feature ajoutée par l'extension (elle apparaît dans la liste avec un libellé clair).
- Cocher la case du ou des rôles autorisés (par exemple, donner accès à Chef projet et Webmaster, mais pas à Client).
- Enregistrer. L'effet est immédiat.
Comprendre les statuts d'extension
| Statut | Couleur | Ce qu'il signifie |
|---|---|---|
| Active | Vert | L'extension est chargée, ses hooks tournent, tout est opérationnel. |
| Inactive | Gris | L'extension est installée mais en pause. Vous pouvez l'activer à tout moment. |
| Failed | Rouge | Une erreur est survenue au chargement (manifeste invalide, dépendance manquante, code en panne). Un message d'erreur est consultable. |
En cas de statut Failed, ouvrez la fiche de l'extension : le message d'erreur précis y est affiché, ainsi que dans les logs (Outils → Logs). C'est généralement une dépendance npm absente ou un fichier de l'extension corrompu pendant le téléversement. Désinstallez puis réinstallez le .zip pour repartir sur une base propre.
Les extensions livrées avec le CMS
Le Labo du Yeti est livré avec quelques extensions de démonstration que vous pouvez activer pour découvrir le système :
- hello-world — Extension d'exemple. Expose un endpoint de test et incrémente un compteur à chaque build. Idéale pour vérifier que le système d'extensions tourne correctement.
- webp-auto-converter — Convertit automatiquement toutes les images uploadées dans la médiathèque au format WebP, pour des sites plus rapides sans rien changer à votre flux de travail.
- surefeedback-connector — Injecte automatiquement le snippet HTML de SureFeedback (ou d'un autre outil de feedback type BugHerd, Marker.io) juste avant la balise
</body>de chaque page publiée.
Cycle de vie complet d'une extension
Pour bien comprendre, voici le parcours type d'une extension dans le CMS :
- Téléversement du
.zipvia le bouton « Installer une extension ». - Validation des permissions par vous, sur l'écran de confirmation.
- Installation automatique : décompression,
npm installsi nécessaire, enregistrement en base. - Activation immédiate : hooks branchés, routes ajoutées, sidebar éventuellement modifiée.
- Configuration via le bouton Réglages si l'extension a des paramètres à définir.
- Autorisation par rôle dans la matrice des Permissions, pour exposer la feature aux bonnes personnes.
- Utilisation quotidienne : l'extension fait son travail, ajoute ses entrées, déclenche ses automatisations.
- Désactivation ponctuelle si vous voulez la mettre en pause (debug, test, conflit temporaire).
- Désinstallation finale si vous ne souhaitez plus du tout l'utiliser : tout est purgé proprement.
Bonnes pratiques
- Testez sur un environnement de staging avant d'installer une extension en production. Le Labo du Yeti est conçu pour qu'une extension ne casse rien, mais une mauvaise configuration peut perturber votre site.
- Lisez le manifeste et la documentation fournie par l'éditeur. Une extension sérieuse documente clairement ses permissions et son fonctionnement.
- Ne multipliez pas les extensions qui font la même chose. Une seule extension de feedback, une seule extension SEO, etc. Cela évite les conflits et garde votre admin lisible.
- Vérifiez les logs après l'installation d'une nouvelle extension. Un échec silencieux est rare mais possible.
- Désactivez avant de désinstaller si vous avez le moindre doute. La désinstallation est définitive.
- Mettez à jour régulièrement les extensions sensibles (sécurité, connecteurs tiers). Pour cela, réinstallez simplement la nouvelle version du
.zip: le CMS reconnaît l'ID et met à jour le code en place.
Sécurité du système d'extensions
Quelques garde-fous techniques à connaître pour rassurer vos utilisateurs (et vous-même) :
- Les champs sensibles (mots de passe, hash, tokens, clés API IA, SMTP, secret JWT) ne sont jamais exposés à une extension, quelle que soit sa permission.
- Les permissions sont déclaratives : une extension qui essaie d'accéder à quelque chose qu'elle n'a pas demandé sera bloquée.
- Les données d'une extension sont isolées dans des tables dédiées avec FK cascade : la désinstallation purge automatiquement tout, sans risque de fuite.
- Le fichier
.zipest validé avant installation : manifeste obligatoire, format vérifié, taille limitée.
Pour aller plus loin
Si vous (ou votre équipe technique) souhaitez développer vos propres extensions, consultez la documentation technique des extensions : architecture, hooks disponibles, helpers du contexte CMS, format du manifeste, exemples concrets.
Pour gérer finement les accès aux fonctionnalités ajoutées par vos extensions, voyez la page RBAC et capabilities.