Apariencia
plugin.json
Ficha del paquete. La valida el esquema PluginJson de api/src/plugins/package.ts al instalar; un campo mal formado rechaza el paquete con PLUGIN_INVALID.
json
{
"key": "notas",
"title": "Notas",
"version": "1.0.0",
"apiVersion": 2,
"description": "Notas internas del local con aviso al equipo.",
"category": "operacion",
"icon": "message",
"priceMonthly": 6,
"author": "Mi empresa"
}Campos
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
key | texto | sí | Clave estable en camelCase: /^[a-z][a-zA-Z0-9]{1,39}$/ (MODULE_KEY_RE). Es la de features[key], /modules/:key y feature en el panel. No se renombra nunca. Debe coincidir con manifest.key del ZModule. |
title | texto, 1 a 80 | sí | Nombre visible en el Marketplace. |
version | x.y.z | sí | Semver estricto de tres números. El instalador omite una versión ya instalada: sube la versión para actualizar. |
apiVersion | entero > 0 | sí | Versión del contrato con el host contra la que se compiló. Un valor mayor que el del host se rechaza. Usa la actual (2) para código nuevo. |
description | texto | no | Una frase en lenguaje llano para el escaparate. |
category | texto | no | operacion, cliente, finanzas, marketing, analisis o cumplimiento. |
icon | texto | no | Nombre de un icono del kit (catálogo). |
priceMonthly | número ≥ 0 | no | Precio de lista en EUR al mes sin IVA. Orientativo: no se cobra nada. Con PLUGINS_LICENSE=required, un valor mayor que 0 exige licencia. |
author | texto, 1 a 80 | no | Quién desarrolla el plugin; se muestra como «Por …». |
image | assets/<nombre>.png | no | Portada dentro del paquete (PNG 960x540). Ruta assets/ y extensión .png. |
requires | { clave: "x.y.z" } | no | Plugins de los que depende, con versión mínima. Ver dependencias. |
pack | booleano | no | Plugin sin código que solo reúne a otros. Exige requires no vacío y prohíbe api/index.mjs. |
adopts | /^[a-z_][a-z0-9_]*$/ | no | Nombre de una tabla cuya existencia indica que el historial de migraciones ya corrió (módulos que eran integrados). |
admin | { entry, css? } | lo escribe el compilador | Entrada ESM y hoja de estilos del panel, relativas a admin/. No lo escribas a mano: hury-plugin build lo añade al generar el paquete. |
Reglas que conviene recordar
- La clave que firmas es la del paquete, no la del plugin: no tienen relación. Ver Seguridad.
keyyversiondeterminan la carpeta de instalación<PLUGINS_DIR>/<clave>/<versión>/.- Un
.zipsinapi/index.mjssolo es válido sipackestrue. - El nombre del fichero del paquete es
<clave>-<versión>.zip.