Los plugins de EmDash pueden instalarse de dos formas: desde el marketplace a través del panel de administración, o agregados directamente en tu configuración de Astro. Los plugins del marketplace siempre se ejecutan en sandbox; los plugins basados en configuración se ejecutan en sandbox o en proceso dependiendo del array en el que se declaran (sandboxed: [] vs plugins: []).
Desde el Marketplace
El panel de administración incluye un navegador de marketplace donde puedes buscar, instalar y gestionar plugins.
Requisitos previos
Para instalar plugins del marketplace, tu sitio necesita:
-
Runner de sandbox configurado — Los plugins del marketplace se ejecutan en un runtime aislado, lo que requiere el runner de sandbox. La siguiente configuración lo habilita:
import { defineConfig } from "astro/config"; import emdash from "emdash/astro"; export default defineConfig({ integrations: [ emdash({ marketplace: "https://marketplace.emdashcms.com", sandboxRunner: "@emdash-cms/sandbox-cloudflare", }), ], });En Cloudflare Workers, el sandboxing usa la API Dynamic Worker Loader (no se necesita configuración adicional). En Node.js, instala el runner de sandbox workerd:
npm install @emdash-cms/sandbox-workerdLuego pasa el runner explícitamente:
emdash({ marketplace: "https://marketplace.emdashcms.com", sandboxRunner: "@emdash-cms/sandbox-workerd/sandbox", })En desarrollo, instala
miniflarecomo dependencia de desarrollo para un inicio más rápido del sandbox:npm install -D miniflare -
Acceso de administrador — Solo los administradores pueden instalar o eliminar plugins.
Explorar e Instalar
- Abre el panel de administración y navega a Plugins > Marketplace
- Explora o busca un plugin
- Haz clic en la tarjeta del plugin para ver su página de detalle — README, capturas de pantalla, capacidades y resultados de auditoría de seguridad
- Haz clic en Instalar
- Revisa el diálogo de consentimiento de capacidades — esto muestra a qué podrá acceder el plugin
- Confirma la instalación
El plugin se descargará, almacenará en el bucket R2 de tu sitio y se cargará en el runner de sandbox. Está activo inmediatamente.
Consentimiento de Capacidades
Antes de la instalación, verás un diálogo que lista a qué necesita acceso el plugin:
| Capacidad | Qué significa |
|---|---|
content:read | Leer tu contenido |
content:write | Crear, actualizar y eliminar contenido |
media:read | Acceder a tu biblioteca de medios |
media:write | Subir y gestionar medios |
network:request | Realizar peticiones de red a hosts específicos |
Auditoría de Seguridad
Cada versión de plugin en el marketplace ha pasado por una auditoría de seguridad automatizada. El veredicto de la auditoría aparece en la tarjeta del plugin:
- Aprobado — No se encontraron problemas
- Advertencia — Preocupaciones menores señaladas (revisa los hallazgos)
- Rechazado — Problemas de seguridad significativos detectados
Puedes ver el informe completo de auditoría en la página de detalle del plugin, incluyendo hallazgos individuales y su severidad.
Actualizaciones
Cuando una versión más nueva de un plugin instalado está disponible:
- Ve a Plugins en el panel de administración
- Los plugins del marketplace muestran una insignia Actualización disponible
- Haz clic en Actualizar para ver el changelog y cualquier cambio de capacidades
- Si la nueva versión requiere capacidades adicionales, verás un diff y necesitarás aprobar
- Confirma para actualizar
Desinstalación
- Ve a Plugins en el panel de administración
- Haz clic en el plugin del marketplace que quieres eliminar
- Haz clic en Desinstalar
- Elige si mantener o eliminar los datos almacenados del plugin
- Confirma
El código sandbox del plugin se elimina de tu bucket R2 y deja de ejecutarse inmediatamente.
Desde Configuración
Los plugins nativos — tu propio código, o paquetes instalados vía npm — se agregan directamente a la configuración de Astro. El siguiente ejemplo registra el plugin SEO:
import { defineConfig } from "astro/config";
import emdash from "emdash/astro";
import seoPlugin from "@emdash-cms/plugin-seo";
export default defineConfig({
integrations: [
emdash({
plugins: [
seoPlugin({ generateSitemap: true }),
],
}),
],
});
Los plugins nativos:
- Se ejecutan en proceso (no en sandbox)
- Tienen acceso completo a las APIs de Node.js
- Se cargan en tiempo de build y en cada inicio del servidor
- No pueden instalarse ni eliminarse desde la UI de administración
Marketplace vs. configuración — cuándo usar cuál
| Marketplace (sandbox) | Configuración (nativo o sandbox en proceso) | |
|---|---|---|
| Método de instalación | Un clic en la UI de admin | Cambio de código + npm install + deploy |
| Ejecución | Runtime sandbox vía el runner configurado | En proceso (o sandbox si se lista bajo sandboxed: [] y hay un runner disponible) |
| Capacidades | Aplicadas por el puente sandbox — gating ctx.* más aislamiento en runtime | Solo gating ctx.* (los plugins en proceso pueden evadir vía fetch() directo, env, imports) |
| APIs de Node.js | No disponibles | Acceso completo (solo en proceso) |
| Páginas admin React | No (Block Kit en su lugar) | Sí (plugins nativos) |
| Componentes de renderizado PT | No | Sí (plugins nativos) |
| Actualizaciones | Un clic en admin | Bump de versión + deploy |
| Mejor para | La mayoría de plugins | Plugins que necesitan integración en tiempo de build |