Skip to content

manifest.json reference

This content is not available in your language yet.

This page details the attributes of a Castopod Plugin’s manifest, which must be a JSON file.

name (required)

The plugin name, including ‘vendor-name/’ prefix. Examples:

  • acme/hello-world
  • adaures/click

The name must be lowercase and consist of words separated by -, . or _. The complete name should match ^[a-z0-9]([_.-]?[a-z0-9]+)*\/[a-z0-9]([_.-]?[a-z0-9]+)*$.

version (required)

The plugin’s semantic version (eg. 1.0.0) - see https://semver.org/

description

The plugin’s description. This helps people discover your plugin when listed in repositories.

authors

Array one or more persons having authored the plugin. A person is an object with a required “name” field and optional “email” and “url” fields:

{
"name": "Jean Deau",
"email": "jean.deau@example.com",
"url": "https://example.com/"
}

Or you can shorten the object into a single string:

"Jean Deau <jean.deau@example.com> (https://example.com/)"

homepage

The URL to the project homepage.

license

Specify a license for your plugin so that people know how they are permitted to use it, and any restrictions you’re placing on it.

private

Whether or not to publish the plugin in public directories. If set to true, directories should refuse to publish the plugin.

keywords

Array of strings to help your plugin get discovered when listed in repositories.

minCastopodVersion

The minimal version of Castopod with which the plugin is compatible.

hooks

List of hooks used by the plugin. If the hook is not specified, Castopod will not run it.

settings

Declare settings forms for persisting user data. The plugin’s settings forms can be declared at three levels: general, podcast, and episode.

Each level accepts one or more fields, identified by a key.

{
"settings": {
"general": { // general settings form
"field-key": {
"type": "text", // default field type: a text input
"label": "Enter a text"
},
},
"podcast": {}, // settings form for each podcast
"episode": {}, // settings form for each episode
}
}

The general, podcast, and episode settings are of Fields object with each property being a field key and the value being a Field object.

Field object

A field is a form element:

PropertyTypeNote
typecheckbox, datetime, email, group, html, markdown, number, radio-group, rss, select-multiple, select, text, textarea, toggler, urlDefault is text
label (required)stringCan be translated (see i18n)
hintstringCan be translated (see i18n)
helperstringCan be translated (see i18n)
defaultValuestringYou can specify multiple comma separated values for select-multiple
validationRulesstring | arraySee available validation rules
optionalbooleanDefault is false
optionsOptionsRequired for radio-group, select-multiple, and select types.
multiplebooleanDefault is false
fieldsArray<string, Field>Required for group type

Options object

The Options object properties are option keys and the value is an Option.

Option object
PropertyTypeNote
label (required)stringCan be translated (see i18n)
descriptionstringCan be translated (see i18n)

files

Array of file patterns that describes the entries to be included when your plugin is installed.

repository

Repository where the plugin’s code lives. Helpful for people who want to contribute.

Available validation rules

The following rules are a subset of CodeIgniter4’s validation rules.

RuleParameterDescriptionExample
alphaNoFails if field has anything other than alphabetic characters in ASCII.
alpha_dashNoFails if field contains anything other than alphanumeric characters, underscores or dashes in ASCII.
alpha_numericNoFails if field contains anything other than alphanumeric characters in ASCII.
alpha_numeric_punctNoFails if field contains anything other than alphanumeric, space, or this limited set of punctuation characters: ~ (tilde), ! (exclamation), # (number), $ (dollar), % (percent), & (ampersand), * (asterisk), - (dash), _ (underscore), + (plus), = (equals), | (vertical bar),:(colon),. (period).
alpha_numeric_spaceNoFails if field contains anything other than alphanumeric or space characters in ASCII.
alpha_spaceNoFails if field contains anything other than alphabetic characters or spaces in ASCII.
decimalNoFails if field contains anything other than a decimal number. Also accepts a + or - sign for the number.
differsYesFails if field does not differ from the one in the parameter.differs[field_name]
exact_lengthYesFails if field length is not exactly the parameter value. One or more comma-separated values are possible.exact_length[5] or exact_length[5,8,12]
greater_thanYesFails if field is less than or equal to the parameter value or not numeric.greater_than[8]
greater_than_equal_toYesFails if field is less than the parameter value, or not numeric.greater_than_equal_to[5]
hexNoFails if field contains anything other than hexadecimal characters.
in_listYesFails if field is not within a predetermined list.in_list[red,blue,green]
integerNoFails if field contains anything other than an integer.
is_naturalNoFails if field contains anything other than a natural number: 0, 1, 2, 3, etc.
is_natural_no_zeroNoFails if field contains anything other than a natural number, except zero: 1, 2, 3, etc.
less_thanYesFails if field is greater than or equal to the parameter value or not numeric.less_than[8]
less_than_equal_toYesFails if field is greater than the parameter value or not numeric.less_than_equal_to[8]
max_lengthYesFails if field is longer than the parameter value.max_length[8]
min_lengthYesFails if field is shorter than the parameter value.min_length[3]
not_in_listYesFails if field is within a predetermined list.not_in_list[red,blue,green]
regex_matchYesFails if field does not match the regular expression.regex_match[/regex/]
valid_base64NoFails if field contains anything other than valid Base64 characters.
valid_dateYesFails if field does not contain a valid date. Any string that strtotime() accepts is valid if you don’t specify an optional parameter that matches a date format.valid_date[d/m/Y]