settingsmeta.json¶
In a nutshell
This optional file describes a form for configuring your skill: labeled boxes, checkboxes, and drop-downs on a settings screen. A tool can then render a settings UI without you writing one. This is a legacy format and most OVOS skills do not ship it. It came from the old Mycroft backend, which OVOS does not run. Your skill's settings work fine without it (see Skill Settings). It only matters if you use a community tool that reads it. For term definitions, see the Glossary.
Legacy — specified but not used by OVOS itself
settingsmeta.json / .yaml is a legacy format inherited from the Mycroft backend
server, which presented a web form to edit skill settings. OVOS does not run that backend,
so nothing in OVOS core consumes this file, and it is optional and usually absent in modern
skills. Your skill reads and writes its settings perfectly well without it — see
Skill Settings.
It is still specified, and ovos-workshop can auto-generate a basic version from a skill's
settings. Some community tools still consume it to render a settings UI, most notably
ovos-skill-config-tool by
Oscillate Labs. Provide a settingsmeta file only if you specifically target such a tool. The
rest of this page documents the format for that case.
Define settings UI for a Skill¶
To define a Skill's settings UI you can provide a settingsmeta.json or settingsmeta.yaml file.
When present, it lives in the root directory of the Skill and follows the structure below.
A settingsmeta file does nothing on its own. It is only meaningful to a tool that reads it, such as a
community settings editor like the one above, which then presents the described fields to the user.
Example settingsmeta file¶
To see it in action, here is a simple example, similar to what a legacy date-and-time skill might ship. First using the JSON syntax as a settingsmeta.json file:
{
"skillMetadata": {
"sections": [
{
"name": "Display",
"fields": [
{
"name": "show_time",
"type": "checkbox",
"label": "Show digital clock when idle",
"value": "true"
}
]
}
]
}
}
Now, here is the same settings, as it would be defined with YAML in a settingsmeta.yaml file:
skillMetadata:
sections:
- name: Display
fields:
- name: show_time
type: checkbox
label: Show digital clock when idle
value: "true"
Notice that the checkbox's value, "true", is a quoted string rather than a bare YAML/JSON boolean. This is intentional. The format expects the literal string "true" or "false", not a real boolean.
Both of these files would result in the same settings block.
It is up to your personal preference which syntax you choose.
Structure of the settingsmeta file¶
The syntax differs, but the structure of these two file types is the same. It starts at the top level of the file with a skillMetadata object. This object must contain one or more sections elements.
Sections¶
Each section represents a group of settings that logically sit together. This lets the web interface display the settings more clearly for users.
The simple example above has just one section. A skill that needs more configuration might use several. For example, one section for account authentication and a separate section for playback preferences.
Each section must contain a name attribute that is used as the heading for that section, and an Array of fields.
Fields¶
Each section has one or more fields. Each field is a setting available to the user. Each field takes four common properties, plus one more (options) that only a select field uses:
-
name(String)The Skill uses the
nameof thefieldto get and set the value of thefield. It is not usually shown to the user, unless thelabelproperty is not set. -
type(Enum)The data type of this field. The supported types are:
-
text: any kind of text -
email: text validated as an email address -
checkbox: boolean, True or False -
number: text validated as a number -
password: text hidden from view by default -
select: a drop-down menu of options -
label: special field to display text for information purposes only. No name or value is required for alabelfield.
-
-
label(String)The text to be displayed above the setting field.
-
value(String)The initial value of the field.
-
options(String,selectfields only)Semicolon-separated
Label|valuepairs, e.g.Option 1|option_one;Option 2|option_two.
Examples for each type of field are provided in JSON and YAML at the end of this page.
SettingsMeta Examples¶
Label Field¶
skillMetadata:
sections:
- name: Label Field Example
fields:
- type: label
label: This is descriptive text.
Text Field¶
skillMetadata:
sections:
- name: Text Field Example
fields:
- name: my_string
type: text
label: Enter any text
value:
Email¶
skillMetadata:
sections:
- name: Email Field Example
fields:
- name: my_email_address
type: email
label: Enter your email address
value:
Checkbox¶
skillMetadata:
sections:
- name: Checkbox Field Example
fields:
- name: my_boolean
type: checkbox
label: This is an example checkbox. It creates a Boolean value.
value: "false"
Number¶
skillMetadata:
sections:
- name: Number Field Example
fields:
- name: my_number
type: number
label: Enter any number
value: 7
Password¶
skillMetadata:
sections:
- name: Password Field Example
fields:
- name: my_password
type: password
label: Enter your password
value:
Select¶
skillMetadata:
sections:
- name: Select Field Example
fields:
- name: my_selected_option
type: select
label: Select an option
options: Option 1|option_one;Option 2|option_two;Option 3|option_three
value: option_one
Source code: OpenVoiceOS/ovos-workshop.
Read next: Filesystem Access Related: Skill Settings · Skill Metadata File · Resource Files · Configuration Reference