Skip to content

manifest.json

The manifest.json file is the first file that is read by the Caido application when a plugin is installed. It defines the plugin's structure and contains metadata used by the Caido installer.

json
{
  "id": "authmatrix",
  "name": "AuthMatrix",
  "version": "0.2.0",
  "description": "Grid-based authorization testing across multiple users and roles.",
  "author": {
    "name": "Caido Labs Inc.",
    "email": "dev@caido.io",
    "url": "https://github.com/caido-community/authmatrix"
  },
  "plugins": [
    {
      "kind": "frontend",
      "id": "authmatrix-frontend",
      "name": "Authmatrix Frontend",
      "entrypoint": "frontend/script.js",
      "style": "frontend/style.css",
      "backend": {
        "id": "authmatrix-backend"
      },
      "assets": "frontend/assets"
    },
    {
      "kind": "backend",
      "id": "authmatrix-backend",
      "name": "Authmatrix Backend",
      "runtime": "javascript",
      "entrypoint": "backend/script.js",
      "assets": "frontend/assets"
    },
    {
      "kind": "workflow",
      "id": "authmatrix-workflow",
      "name": "Authmatrix Workflow",
      "definition": "workflow/definition.json"
    }
  ]
}

Here's a summary of each field (required fields are marked with an asterisk *)

Main Fields

FieldRequiredDescription
idYesMust be unique and must only consist of lowercase letters, numbers, hyphens and underscores (_the order of which must satisfy the regex: ^[a-z][a-z0-9]+(?:[_-][a-z0-9]+)\*$_).
versionYesThe version of your plugin package. Follows the MAJOR.MINOR.PATCH syntax.
nameNoThe name of your plugin package. If not supplied, the id will be used as the name.
descriptionNoA description of the plugin package .
AuthorNoSee the author fields.
PluginsYesArray of plugins. See the plugin fields.

Author Fields

The author field is optional and may be used for crediting purposes.

FieldRequiredDescription
nameNoThe name of the author.
emailNoThe email address of the author.
urlNoA URL to the author's website.

Plugins Fields

The plugins field is required and must contain an array of plugins.

Plugins can be of type frontend, backend or workflow.

TIP

You can define multiple plugins of the same type. For example, you can define 3 different frontend plugins that will interact with the same backend plugin.

Frontend Plugins

FieldRequiredDescription
kindYesMust be of type frontend
idYesMust be unique and must only consist of lowercase letters, numbers, hyphens and underscores (_the order of which must satisfy the regex: ^[a-z][a-z0-9]+(?:[_-][a-z0-9]+)\*$).
entrypointYesSpecifies the location of the primary script to be executed when the plugin is launched.
nameNoThe cosmetic plugin package name displayed in the Plugins table. If not supplied, the id will be used as the name.
styleNoSpecifies the location of the CSS file to be used to stylize elements of your plugin.
backendNoThis object contains the id of the associated backend plugin. Specifying this field will allow the frontend plugin to communicate with the backend plugin via sdk.backend.
assetsNoExtra assets to be bundled with the plugin and loadable at runtime.

Backend Plugins

FieldRequiredDescription
kindYesMust be of type backend
idYesMust be unique and must only consist of lowercase letters, numbers, hyphens and underscores (_the order of which must satisfy the regex: ^[a-z][a-z0-9]+(?:[_-][a-z0-9]+)\*$).
entrypointYesSpecifies the location of the primary script to be executed when the plugin is launched.
runtimeYesSpecifies that JavaScript code will be executed.
nameNoThe name of your plugin. If not supplied, the id will be used as the name.
assetsNoExtra assets to be bundled with the plugin and loadable at runtime.

Workflow Plugins

FieldRequiredDescription
kindYesMust be of type workflow
idYesMust be unique and must only consist of lowercase letters, numbers, hyphens and underscores (_the order of which must satisfy the regex: ^[a-z][a-z0-9]+(?:[_-][a-z0-9]+)\*$).
definitionYesSpecifies the location of workflow json definition.
nameNoThe name of your plugin. If not supplied, the id will be used as the name.