# The verifier

> What RPG Desk checks before installing a plugin: each problem, by code, with what it means and how to fix it.

Page: https://docs.rpgdesk.com/en/referencia/verificador/

Before installing, RPG Desk checks the plugin. **Errors** block the installation; **warnings** do not, but they point out what will not work inside RPG Desk. Each problem comes with the file and the line, and **Copy report** copies the whole list, ready to paste into a conversation with an AI.

> **Note**
>
> The verifier looks for the common mistakes with clear messages; it does not prove the code is right. Test the sheet in [test mode](https://docs.rpgdesk.com/en/fichas/desenvolvimento/#test-mode) too.

## The file and the manifest

| Code                       | Level   | What it means                                                                                                                               |
| -------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| `not-plugin`               | error   | the file is neither an `.html` nor a `.zip`                                                                                                 |
| `not-zip`                  | error   | the `.zip` is damaged                                                                                                                       |
| `rpk-unsupported`          | error   | the file is an `.rpk` package (SDK3), which RPG Desk doesn’t support; rebuild the sheet as a web plugin                                     |
| `package-unpacked`         | error   | the unpacked `.zip` is over 64 MB or 2000 files                                                                                             |
| `zip-folder`               | warning | the `.zip` has a folder around everything; RPG Desk used what is inside                                                                     |
| `manifest-missing`         | error   | there is no manifest: the `<script type="application/rpgdesk+json">` is missing from the `.html`, or `manifest.json` from the `.zip`’s root |
| `manifest-json`            | error   | the manifest is not valid JSON (an extra comma, single quotes, a comment)                                                                   |
| `manifest-field`           | error   | a required field is missing, or it is empty, too long or of the wrong type                                                                  |
| `manifest-version`         | error   | `"rpgdesk"` is not `1`                                                                                                                      |
| `manifest-id`              | error   | the `id` has characters that are not allowed                                                                                                |
| `manifest-semver`          | error   | the `version` is not major.minor.patch (`1.0.0`)                                                                                            |
| `manifest-sdk`             | error   | `"sdk"` is not `1`                                                                                                                          |
| `manifest-type`            | error   | the `type` has characters that are not allowed, or does not start with the `id` and a period                                                |
| `manifest-entry`           | error   | the `entry` is not an `.html` file                                                                                                          |
| `manifest-private`         | error   | a private part has an invalid path, or a level that is neither `gm` nor `owner`                                                             |
| `manifest-private-table`   | warning | `private` on a table: it does not apply; use `doc.restrict`                                                                                 |
| `manifest-empty`           | error   | the plugin declares no sheet and no table                                                                                                   |
| `manifest-single`          | error   | a single `.html` with more than one sheet or table                                                                                          |
| `manifest-types`           | error   | more than 20 sheets and tables                                                                                                              |
| `manifest-type-repeated`   | error   | the same `type` twice                                                                                                                       |
| `manifest-webhooks`        | error   | more than 20 webhooks                                                                                                                       |
| `manifest-webhook-name`    | error   | a webhook’s name is not allowed, or appears twice                                                                                           |
| `manifest-webhook-example` | error   | a webhook’s example is over 4 KB                                                                                                            |
| `manifest-icon`            | error   | the `icon` is neither `.png` nor `.svg`                                                                                                     |
| `manifest-unknown`         | warning | a field RPG Desk does not know (and ignores)                                                                                                |

## The package’s files

| Code            | Level | What it means                                                                                                     |
| --------------- | ----- | ----------------------------------------------------------------------------------------------------------------- |
| `package-size`  | error | the package is over 10 MB                                                                                         |
| `package-files` | error | the package is over 500 files                                                                                     |
| `path-invalid`  | error | a path starts with `/`, uses `\` or `..`                                                                          |
| `file-type`     | error | a file type RPG Desk does not accept (see [Packages](https://docs.rpgdesk.com/en/fichas/pacotes/#accepted-files)) |
| `entry-missing` | error | an `entry`’s HTML is not in the package                                                                           |
| `entry-case`    | error | the `entry` does not match the file’s upper and lower case                                                        |
| `icon-missing`  | error | the `icon` is not in the package                                                                                  |

## HTML, CSS and JavaScript

| Code                  | Level   | What it means                                                                                                  | How to fix                                                    |
| --------------------- | ------- | -------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------- |
| `sdk-missing`         | warning | the entry page does not load rpgdesk.js                                                                        | put the rpgdesk.js line in the `<head>`                       |
| `external-script`     | error   | a `<script src>` from outside the package                                                                      | download the file and put it in the package                   |
| `js-import-external`  | error   | an `import` from an outside address                                                                            | download the module and import it by a relative path          |
| `external-resource`   | warning | an image, stylesheet or font from outside (it does not load)                                                   | put the file in the package; fonts with `@font-face`          |
| `ref-missing`         | error   | a referenced file is not in the package                                                                        | include the file or fix the path                              |
| `ref-case`            | error   | the path does not match the file’s upper and lower case                                                        | write the exact name                                          |
| `ref-outside`         | error   | a path goes up past the package’s root (`../../`)                                                              | use paths inside the package                                  |
| `link-external`       | warning | a link to a site would take the page away from the sheet                                                       | use a button with `RPGDesk.ui.openLink(url)`                  |
| `link-page`           | warning | a link to another page of the package (the sheet would navigate)                                               | use tabs (`data-tabs`)                                        |
| `binding-path`        | error   | a `data-field`, `data-text`, `data-image`, `data-list` or `data-list-add` with an invalid path (accent, space) | unaccented letters, numbers and `_`                           |
| `binding-placeholder` | error   | an invalid `{path}` in `data-roll` or `data-label`                                                             | a field’s path, like `{str_mod}`                              |
| `html-form`           | warning | a `<form>` (submitting would reload the sheet)                                                                 | switch it to a `<div>`, or use `event.preventDefault()`       |
| `html-base`           | warning | a `<base>` (ignored in RPG Desk)                                                                               | remove the `<base>`                                           |
| `html-iframe`         | warning | an `<iframe>`                                                                                                  | remove the `<iframe>`                                         |
| `js-dialog`           | warning | `alert`, `confirm` or `prompt` (they do not work)                                                              | `RPGDesk.ui.toast`, `RPGDesk.ui.confirm`, `RPGDesk.ui.prompt` |
| `js-storage`          | warning | `localStorage`, `sessionStorage`, `indexedDB` or cookies (blocked)                                             | the document (`doc.set`) and `RPGDesk.storage`                |
| `js-network`          | warning | `fetch` to the internet, `XMLHttpRequest`, `WebSocket` (no internet)                                           | webhooks; `fetch` of the package’s own files works            |
| `js-window-open`      | warning | `window.open` (it opens nothing)                                                                               | `RPGDesk.ui.openLink(url)`                                    |
| `js-navigation`       | warning | `location = …` (the sheet would be closed)                                                                     | tabs, or `RPGDesk.ui.openLink(url)`                           |
| `js-webrtc`           | warning | WebRTC (sheets do not need it, and it sends data out)                                                          | remove the WebRTC                                             |

Comments (`//` and `/* */`) do not count for the JavaScript rules.

Library code gets no warnings: jQuery’s `$.ajax` mentions `XMLHttpRequest`, for example, without the sheet using the network. A file in a `vendor/` folder counts as a library, and so does code that starts with the `/*!` license comment, in a file or in a `<script>` of the HTML. Errors, such as `js-import-external`, still apply to it. See [Libraries](https://docs.rpgdesk.com/en/fichas/pacotes/#libraries).
