Plugins EmDash podem ser instalados de duas formas: do marketplace via o painel de administração, ou adicionados diretamente na sua configuração Astro. Plugins do marketplace sempre rodam em sandbox; plugins baseados em configuração rodam em sandbox ou in-process dependendo do array em que são declarados (sandboxed: [] vs plugins: []).
Do Marketplace
O painel de administração inclui um navegador de marketplace onde você pode pesquisar, instalar e gerenciar plugins.
Pré-requisitos
Para instalar plugins do marketplace, seu site precisa de:
-
Runner de sandbox configurado — Plugins do marketplace rodam em um runtime isolado, que requer o runner de sandbox. A seguinte configuração o 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", }), ], });No Cloudflare Workers, o sandboxing usa a API Dynamic Worker Loader (nenhuma configuração adicional necessária). No Node.js, instale o runner de sandbox workerd:
npm install @emdash-cms/sandbox-workerdEm seguida, passe o runner explicitamente:
emdash({ marketplace: "https://marketplace.emdashcms.com", sandboxRunner: "@emdash-cms/sandbox-workerd/sandbox", })Em desenvolvimento, instale
miniflarecomo dependência de desenvolvimento para inicialização mais rápida do sandbox:npm install -D miniflare -
Acesso de administrador — Apenas administradores podem instalar ou remover plugins.
Explorar e Instalar
- Abra o painel de administração e navegue até Plugins > Marketplace
- Explore ou pesquise um plugin
- Clique no cartão do plugin para ver sua página de detalhes — README, capturas de tela, capacidades e resultados de auditoria de segurança
- Clique em Instalar
- Revise o diálogo de consentimento de capacidades — isto mostra o que o plugin poderá acessar
- Confirme a instalação
O plugin será baixado, armazenado no bucket R2 do seu site e carregado no runner de sandbox. Está ativo imediatamente.
Consentimento de Capacidades
Antes da instalação, você verá um diálogo listando o que o plugin precisa acessar:
| Capacidade | O que significa |
|---|---|
content:read | Ler seu conteúdo |
content:write | Criar, atualizar e excluir conteúdo |
media:read | Acessar sua biblioteca de mídia |
media:write | Carregar e gerenciar mídia |
network:request | Fazer requisições de rede para hosts específicos |
Auditoria de Segurança
Cada versão de plugin no marketplace passou por uma auditoria de segurança automatizada. O veredito da auditoria aparece no cartão do plugin:
- Aprovado — Nenhum problema encontrado
- Aviso — Preocupações menores sinalizadas (revise as descobertas)
- Reprovado — Problemas de segurança significativos detectados
Você pode visualizar o relatório completo de auditoria na página de detalhes do plugin, incluindo descobertas individuais e sua severidade.
Atualizações
Quando uma versão mais recente de um plugin instalado está disponível:
- Vá para Plugins no painel de administração
- Plugins do marketplace mostram um badge Atualização disponível
- Clique em Atualizar para ver o changelog e quaisquer mudanças de capacidades
- Se a nova versão requer capacidades adicionais, você verá um diff e precisará aprovar
- Confirme para atualizar
Desinstalação
- Vá para Plugins no painel de administração
- Clique no plugin do marketplace que deseja remover
- Clique em Desinstalar
- Escolha se deseja manter ou excluir os dados armazenados do plugin
- Confirme
O código sandbox do plugin é removido do seu bucket R2 e para de executar imediatamente.
Da Configuração
Plugins nativos — seu próprio código, ou pacotes instalados via npm — são adicionados diretamente à configuração Astro. O exemplo a seguir registra o 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 }),
],
}),
],
});
Plugins nativos:
- Rodam in-process (não em sandbox)
- Têm acesso completo às APIs Node.js
- São carregados no momento do build e em cada inicialização do servidor
- Não podem ser instalados ou removidos da UI de administração
Marketplace vs. configuração — quando usar qual
| Marketplace (sandbox) | Configuração (nativo ou sandbox in-process) | |
|---|---|---|
| Método de instalação | Um clique na UI admin | Mudança de código + npm install + deploy |
| Execução | Runtime sandbox via o runner configurado | In-process (ou sandbox se listado em sandboxed: [] e um runner está disponível) |
| Capacidades | Aplicadas pela ponte sandbox — gating ctx.* mais isolamento runtime | Apenas gating ctx.* (plugins in-process podem contornar via fetch() direto, env, imports) |
| APIs Node.js | Não disponíveis | Acesso completo (apenas in-process) |
| Páginas admin React | Não (Block Kit em vez disso) | Sim (plugins nativos) |
| Componentes de renderização PT | Não | Sim (plugins nativos) |
| Atualizações | Um clique no admin | Bump de versão + deploy |
| Melhor para | A maioria dos plugins | Plugins que precisam de integração no build |