Installer des plugins externes

Au-delà des plugins intégrés et must-use livrés avec l'admin, vous pouvez installer des plugins tiers packagés en fichiers ZIP. Ils sont chargés au runtime via dynamic — pas de rebuild de l'admin

Au-delà des plugins intégrés et must-use livrés avec l'admin, vous pouvez installer des plugins tiers packagés en fichiers ZIP. Ils sont chargés au runtime via dynamic import() — pas de rebuild de l'admin requis.

À quoi ressemble un plugin externe

Un ZIP de plugin contient :

my-plugin.zip
├── manifest.json    — métadonnées (id, version, apiVersion, chemin d'entry)
├── bundle.js        — module ESM pré-compilé qui default-exporte le PluginManifest
└── (autre chose)    — assets que le bundle référence

Les guides côté auteur pour les développeurs de plugins :

Comment installer

Plugins dans la sidebar → bouton Install plugin → drag le ZIP dans la zone de drop.

L'admin :

  1. Extrait le ZIP en mémoire (JSZip)
  2. Lit manifest.json → valide id, version, apiVersion
  3. Si une version précédente du même id existe : pré-clean l'ancien dossier sur Flexweg
  4. Upload chaque fichier sous /admin/plugins/<id>/ sur Flexweg
  5. Met à jour le registry externe en base (settings/externalRegistry ou la ligne SQLite équivalente)
  6. Dynamic-import bundle.js → enregistre le default export
  7. Reload la page de l'admin

À la fin, le plugin apparaît dans la liste avec un toast de succès. Activé par défaut — vous pouvez le désactiver sans uninstaller.

Upgrade in-place

Si une version précédente du même id existe à l'install, l'admin fait un upgrade in-place :

  • Pré-clean le dossier /admin/plugins/<id>/ sur Flexweg (efface l'ancien bundle.js + assets)
  • Upload le nouveau
  • Replace l'entrée registry (au lieu d'ajouter une nouvelle)
  • Toast affiche v1.0.0 → v1.1.0

Le config persisté est conservé entre versions. Donc l'utilisateur peut faire un upgrade sans perdre ses réglages.

Validation au moment de l'install

L'admin refuse l'install si :

  • id invalide — doit matcher ^[a-z0-9-]+$ et ne pas être vide
  • apiVersion hors-range — doit être dans [FLEXWEG_API_MIN_VERSION, FLEXWEG_API_VERSION]. Sinon l'admin affiche un message clair.
  • bundle.js manquant — le ZIP doit contenir le fichier d'entry
  • Erreur d'upload Flexweg — quota dépassé, permissions insuffisantes, etc.

Si la validation passe mais le dynamic-import crashe (Invalid hook call, etc.), l'admin :

  • Affiche un toast d'erreur
  • Loggue l'erreur en console
  • Garde l'entrée registry (donc le plugin réapparaît au prochain boot et essaie de re-charger)

Pour récupérer : désinstallez l'ancienne version cassée, puis ré-uploadez la version corrigée.

Plugins externes recommandés

  • flexweg-multilang — site multilingue (traductions de posts/pages/catégories, hreflang, sitemaps + RSS par langue, onglets de langue dans l'éditeur)

D'autres plugins externes peuvent être distribués par les développeurs de votre choix. Aucun marketplace centralisé — vérifiez la provenance et lisez le code source avant d'installer.

Tester un plugin localement

Si vous développez un plugin :

  1. Buildez : npm run build<id>.zip
  2. Sur votre admin de staging, drag le ZIP via le bouton Install plugin
  3. L'admin l'installe, le charge, le reload
  4. Vérifiez que les hooks tournent comme attendu

Pour itérer rapidement, modifiez le code → re-buildez → re-uploadez. L'upgrade in-place est fait à chaque fois.

Storage utilisé

Chaque plugin externe consomme typiquement 50-500 Ko sur Flexweg (le bundle ESM minifié). Le plugin flexweg-multilang v1.6.2 par exemple : ~45 Ko gzippé.

Donc même avec 50 plugins installés, ~10-20 Mo total — négligeable face au quota Flexweg.

Sécurité

Un plugin externe peut faire tout ce que l'admin peut faire. Il a accès :

  • Aux données en base (lecture + écriture via le runtime)
  • À l'API Files de Flexweg (upload, suppression, etc.)
  • Au contexte React de l'admin (peut potentiellement injecter de l'UI malveillante)

Donc n'installez QUE des plugins provenant de sources fiables. Lisez le code source si vous avez un doute.

Voir aussi