Vue d'ensemble du Plugin SDK
Le Plugin SDK est l'API publique versionnée que les plugins utilisent pour étendre NeoTavern, couvrant à la fois l'interface côté navigateur et le backend côté serveur.
Ce Qu'est le Plugin SDK
Les plugins sont des packages ZIP (.stplugin) qui livrent un manifeste, des
points d'entrée frontend et backend facultatifs, et des ressources. Ils
étendent l'application uniquement via le package @neotavern/plugin-sdk — jamais en
important Fastify, React, Zustand, TanStack Query, la connexion SQLite ou des
composants internes directement. Ce sont des détails d'implémentation de
l'hôte qui changent sans préavis.
Le SDK est versionné (apiVersion dans le manifeste) pour que les plugins
continuent de fonctionner à travers les mises à jour de l'application.
L'hôte applique le contrat : tout ce que vous enregistrez via le SDK est
nettoyé quand votre plugin est désactivé, et tout ce dont vous auriez besoin
depuis les modules internes est délibérément non exposé.
Séparation Frontend et Backend
Un plugin a deux moitiés facultatives :
- Frontend — une entrée ESM navigateur qui reçoit
FrontendPluginApidans son appelactivate(). Elle enregistre des surfaces d'interface comme des actions de barre d'outils, des actions de message, des commandes slash et des panneaux de paramètres, et écoute les événements de l'application. - Backend — une entrée ESM Node.js qui reçoit
ServerPluginApi. Elle monte des routes sous/api/plugins/{pluginId}/, lit et écrit un stockage isolé, effectue des appels réseau vérifiés par permissions et enregistre des fournisseurs et des stratégies de décalage de contexte.
Les deux moitiés sont facultatives. Un plugin qui n'ajoute qu'un bouton de barre d'outils n'a pas besoin de backend ; un plugin qui ne sert qu'une API n'a pas besoin de frontend. Chaque enregistrement renvoie une fonction de nettoyage, et le runtime les collecte pour que la désactivation ne laisse rien derrière.
Écrire un Plugin
Importez definePlugin depuis @neotavern/plugin-sdk et exportez une définition
avec une fonction activate(api) :
import { definePlugin } from '@neotavern/plugin-sdk';
export default definePlugin({
activate(api) {
const unregister = api.ui.messageActions.register({
id: 'example.greet',
title: 'Greet',
run: ({ message }) => console.log(message.messageId),
});
api.events.on('chat.opened', ({ chatId }) => console.log(chatId));
},
});
La référence du Plugin SDK générée documente chaque type et fonction exportés avec leur signature exacte.
Étapes Suivantes
- Manifeste — structure du package et schéma
plugin.json. - Permissions — le modèle de permissions et le flux de consentement.
- API frontend — enregistrer des surfaces d'interface et des événements.
- API backend — routes, stockage et abstractions serveur.
- Cycle de vie — installation, activation, désactivation et garanties de nettoyage.
- Bac à sable — le modèle de sécurité pour le code non fiable.