# 04 · Adicionar um plugin

Adicionar uma capacidade ao app é uma linha de JSON. Você liga um plugin do catálogo no manifesto e a navegação e as telas crescem sozinhas — você não escreve rotas, o core deriva do plugin.

## Ligue o plugin no manifesto

Os pacotes de plugin já vêm nas dependências do app gerado — `@fayz-ai/plugin-crm`, `plugin-tasks`, `plugin-agenda`, `plugin-financial`, `plugin-inventory` e outros já estão no `package.json`. Ligar um é adicionar seu `id` à lista `plugins` da surface.

Abra o `app.manifest.json` e adicione `crm` (e, de brinde, `tasks`) ao lado do `dashboard`:

```json
{
  "surfaces": {
    "admin": {
      "scaffold": "admin",
      "plugins": [
        { "id": "dashboard" },
        { "id": "crm" },
        { "id": "tasks" }
      ]
    }
  }
}
```

Salve. Você **não** precisa mexer no `src/plugins.generated.ts` por enquanto — a pré-visualização local valida a fiação pelo manifesto; as telas completas vêm do runtime que consome essa mesma lista.

## Confirme com o doctor

```bash
npx @fayz-ai/cli doctor
```

```
⚠ manifest references plugin(s) [dashboard, crm, tasks] — each id must resolve to an installed @fayz-ai/plugin-* factory wired in src/plugins.generated.ts or src/config/app.tsx

0 error(s), 1 warning(s)
```

Repare que a lista do aviso cresceu: `dashboard, crm, tasks`. O doctor está lendo o manifesto e lembrando que cada id precisa corresponder a um pacote `@fayz-ai/plugin-*` instalado — que já veio nas dependências do app gerado.

{% callout type="tip" %}
✓ Você deve ver: os três ids — `dashboard, crm, tasks` — no aviso do doctor, com `0 error(s)`. Se você digitar um id que não existe no catálogo, é aqui que o erro aparece.
{% /callout %}

## O que acontece na navegação

Cada plugin declara sua própria navegação e rotas no manifesto do plugin. Quando você o liga na surface, o runtime da plataforma injeta o item de menu e as telas correspondentes — o CRM adiciona a seção de contatos, o Tasks adiciona o quadro de tarefas. É por isso que você nunca edita um roteador: a navegação é derivada da lista de plugins.

{% callout type="info" %}
Onde a mudança aparece: as telas e o menu dos plugins são renderizados pelo runtime completo da plataforma Fayz, que consome esta mesma lista. A pré-visualização local de hoje é uma tela-âncora, então o passo se valida pelo `doctor` (a capacidade está corretamente ligada). Para navegar pelo catálogo completo de plugins disponíveis, veja a seção [Plugins](/pt-BR/docs/plugins).
{% /callout %}

Antes de seguir, deixe só `dashboard` na lista se quiser um app enxuto para o próximo passo — ou mantenha os três; qualquer um funciona com o Supabase.

---

[← Anterior: 03 · Tema e marca](/pt-BR/docs/tutorial/03-tema-e-marca) · [Próximo: 05 · Dados reais com Supabase →](/pt-BR/docs/tutorial/05-dados-reais-com-supabase)
