Saltar al contenido principal

Información general del Plugin SDK

El Plugin SDK es la API pública versionada que los plugins usan para ampliar NeoTavern, y cubre tanto la interfaz del lado del navegador como el backend del lado del servidor.

Qué Es el Plugin SDK

Los plugins son paquetes ZIP (.stplugin) que incluyen un manifiesto, puntos de entrada de frontend y backend opcionales, y recursos. Amplían la aplicación solo a través del paquete @neotavern/plugin-sdk — nunca importando Fastify, React, Zustand, TanStack Query, la conexión SQLite ni los componentes internos directamente. Esos son detalles de implementación del host y cambian sin previo aviso.

El SDK está versionado (apiVersion en el manifiesto) para que los plugins sigan funcionando entre actualizaciones de la aplicación. El host impone el contrato: todo lo que registres a través del SDK se limpia cuando tu plugin se deshabilita, y lo que necesitarías de los módulos internos está deliberadamente no expuesto.

División entre Frontend y Backend

Un plugin tiene dos mitades opcionales:

  • Frontend — una entrada ESM de navegador que recibe FrontendPluginApi en su llamada activate(). Registra superficies de interfaz como acciones de barra de herramientas, acciones de mensaje, comandos de barra y paneles de ajustes, y escucha los eventos de la aplicación.
  • Backend — una entrada ESM de Node.js que recibe ServerPluginApi. Monta rutas bajo /api/plugins/{pluginId}/, lee y escribe almacenamiento aislado, realiza llamadas de red verificadas por permisos y registra proveedores y estrategias de ajuste de contexto.

Ambas mitades son opcionales. Un plugin que solo agrega un botón de barra de herramientas no necesita backend; un plugin que solo sirve una API no necesita frontend. Cada registro devuelve una función de limpieza, y el runtime las recopila para que la desactivación no deje nada atrás.

Crear un Plugin

Importa definePlugin desde @neotavern/plugin-sdk y exporta una definición con una función 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 referencia del Plugin SDK generada documenta cada tipo y función exportados con su firma exacta.

Siguientes Pasos

  • Manifiesto — la estructura del paquete y el esquema de plugin.json.
  • Permisos — el modelo de permisos y el flujo de consentimiento.
  • API de frontend — registrar superficies de interfaz y eventos.
  • API de backend — rutas, almacenamiento y abstracciones del servidor.
  • Ciclo de vida — instalar, habilitar, deshabilitar y garantías de limpieza.
  • Sandbox — el modelo de seguridad para código no confiable.