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 :
- Extrait le ZIP en mémoire (JSZip)
- Lit
manifest.json→ valide id, version, apiVersion - Si une version précédente du même id existe : pré-clean l'ancien dossier sur Flexweg
- Upload chaque fichier sous
/admin/plugins/<id>/sur Flexweg - Met à jour le registry externe en base (
settings/externalRegistryou la ligne SQLite équivalente) - Dynamic-import
bundle.js→ enregistre le default export - 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 :
idinvalide — doit matcher^[a-z0-9-]+$et ne pas être videapiVersionhors-range — doit être dans[FLEXWEG_API_MIN_VERSION, FLEXWEG_API_VERSION]. Sinon l'admin affiche un message clair.bundle.jsmanquant — 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 :
- Buildez :
npm run build→<id>.zip - Sur votre admin de staging, drag le ZIP via le bouton Install plugin
- L'admin l'installe, le charge, le reload
- 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
- Désinstallation — workflow inverse
- Construire un bundle plugin externe — côté auteur