# O manifesto

> Cada campo do manifesto de um plugin do RPG Desk, o que aceita e o que o verificador confere.

Página: https://docs.rpgdesk.com/referencia/manifesto/

O manifesto diz ao RPG Desk o que o plugin é. Ele vai:

- **num arquivo `.html` único**, dentro do `<head>`: `<script type="application/rpgdesk+json" id="rpgdesk-manifest">{ … }</script>`;
- **num pacote `.zip`**, no arquivo `manifest.json`, na raiz.

Ele é JSON: aspas duplas, sem comentários e sem vírgula depois do último item. O JSON Schema, para o editor ajudar, está em `https://docs.rpgdesk.com/_sdk/1/manifest.schema.json` (use em `"$schema"`).

## Exemplo

```json
{
  "rpgdesk": 1,
  "id": "com.seunome.sistema",
  "name": { "pt": "Meu Sistema", "en": "My System" },
  "version": "1.2.0",
  "author": "Seu nome",
  "description": "Ficha e tabela de NPCs do Meu Sistema.",
  "sdk": 1,
  "icon": "icone.svg",
  "sheets": [
    { "type": "com.seunome.sistema.ficha", "title": "Personagem", "entry": "ficha.html", "private": { "mestre": "gm" } }
  ],
  "tables": [
    { "type": "com.seunome.sistema.npcs", "title": "NPCs", "entry": "npcs.html" }
  ],
  "webhooks": [
    { "name": "rolagens", "description": "Cada rolagem da ficha", "example": { "total": 17 } }
  ]
}
```

## Os campos

| Campo         | Obrigatório | O que é                                                                                                                                                  |
| ------------- | ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `rpgdesk`     | sim         | a versão do formato do manifesto: `1`                                                                                                                    |
| `id`          | sim         | o identificador do plugin: minúsculas, números, `.`, `-` e `_`, começando por letra ou número (até 120). Use um domínio invertido: `com.seunome.sistema` |
| `name`        | sim         | o nome do plugin (até 120), num texto ou por língua (veja abaixo)                                                                                        |
| `version`     | sim         | maior.menor.correção, como `1.0.0`. Suba a cada mudança                                                                                                  |
| `sdk`         | sim         | a versão maior do rpgdesk.js: `1`                                                                                                                        |
| `author`      | não         | quem fez (até 120)                                                                                                                                       |
| `description` | não         | o que o plugin traz (até 1000). Aparece na instalação e na lista de plugins                                                                              |
| `sheets`      | um dos dois | as fichas (veja abaixo)                                                                                                                                  |
| `tables`      | um dos dois | as tabelas da sala (veja abaixo)                                                                                                                         |
| `webhooks`    | não         | os webhooks que o plugin usa (veja abaixo)                                                                                                               |
| `icon`        | não         | um `.png` ou `.svg` do pacote                                                                                                                            |
| `$schema`     | não         | o endereço do JSON Schema, para o editor                                                                                                                 |

Um campo que o RPG Desk não conhece gera um aviso, e é ignorado.

## Fichas e tabelas

`sheets` e `tables` são listas. Cada item:

| Campo     | O que é                                                                                                                                                                          |
| --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `type`    | o tipo de dado da ficha ou tabela: começa com o `id` do plugin e um ponto (`com.seunome.sistema.ficha`), com os mesmos caracteres do `id` (até 120). Não mude depois de publicar |
| `title`   | o nome que aparece em **Nova ficha…** ou na aba da tabela (até 120), num texto ou por língua                                                                                     |
| `entry`   | **só no pacote:** o HTML da ficha ou tabela, dentro do pacote (`ficha.html`). No arquivo único, a entrada é o próprio arquivo                                                    |
| `private` | **só nas fichas:** as partes privadas, `{ "caminho": "gm" \| "owner" }`. Veja [Partes privadas](https://docs.rpgdesk.com/fichas/partes-privadas/)                                |

- O plugin precisa de pelo menos uma ficha ou tabela, e tem no máximo 20.
- Um arquivo `.html` único traz **uma** ficha ou **uma** tabela.
- Cada `type` aparece uma vez.

## Webhooks

`webhooks` é uma lista (até 20). Cada item:

| Campo         | O que é                                                                                                  |
| ------------- | -------------------------------------------------------------------------------------------------------- |
| `name`        | o nome que a página usa em `RPGDesk.webhooks.send(nome, dados)`: minúsculas, números, `-` e `_` (até 40) |
| `description` | o que o webhook manda, para o mestre (até 300)                                                           |
| `example`     | opcional: um exemplo dos dados, até 4 KB em JSON                                                         |

Veja [Webhooks na ficha](https://docs.rpgdesk.com/fichas/webhooks/).

## Textos em duas línguas

`name` e `title` aceitam um texto por língua:

```json
"name": { "pt": "Ficha Básica do RPG Desk", "en": "RPG Desk Basic Sheet" }
```

Cada pessoa vê o da língua do RPG Desk dela; sem o dela, vale o português, depois o inglês, depois o primeiro. As chaves são códigos de língua: `pt`, `en`, `pt-BR`.

> **Nota**
>
> A `description` e os textos da página não têm versão por língua no manifesto: para traduzir a página, use o `language` do contexto. Veja [JavaScript na ficha](https://docs.rpgdesk.com/fichas/javascript/#uma-ficha-em-duas-l%C3%ADnguas).
