Install any skill in seconds. Free to start, no credit card required.
Get Started Free →webiny/webiny-page-settings-extensions
Extending the Website Builder page settings with custom settings groups and modifiers.
Passed 21 of 22 test cases with the skill, and 6 of 22 without it.
and 22 more in the full report
15 fixed6 passed either way1 still failing0 broke
Tokens, turns and time describe resource use, not a dollar price.
One of 15 test cases the skill fixed. Same model, same prompt, with and without the skill.
What React component from Webiny admin exports or renders a feature created with createFeature?
| Checked | Without skill | With skill |
|---|---|---|
| Wraps feature instance using RegisterFeature component. | Missed | Passed |
The instructions your model reads when the skill loads.
Page settings extensions let you add new tabs to the page settings drawer or inject fields into existing tabs. Create a class implementing PageSettingsGroup.Interface for a new tab, or PageSettingsGroupModifier.Interface to extend an existing one. Register both via createFeature() and <RegisterFeature>. Always store custom data in doc.extensions — never write to doc.properties, which is reserved for built-in system properties.
YOU MUST include the full file path with the .tsx extension in every src prop. For example, use src={"/extensions/myPageSettings/index.tsx"}, NOT src={"/extensions/myPageSettings/index"}. Omitting the file extension will cause a build failure.
For field types, renderers, layout, validation, and all other form builder APIs, refer to the webiny-form-model skill.
Use
doc.extensionsfor all custom data. Thedoc.propertiesobject holds built-in system properties (title, path, snippet, image, tags, seo, social). Writing custom fields intodoc.propertiesrisks naming collisions with future Webiny updates and can corrupt system behavior. Always namespace your data underdoc.extensions.<yourGroupName>.
// CORRECT — custom data in doc.extensions
mapFromForm(formData, doc) {
doc.extensions.mySettings = doc.extensions.mySettings ?? {};
doc.extensions.mySettings.myField = formData.myField;
}
// WRONG — never write custom data into doc.properties
mapFromForm(formData, doc) {
doc.properties.myField = formData.myField; // DON'T DO THIS
}
A new settings group appears as its own tab in the page settings drawer. Implement PageSettingsGroup.Interface with these members:
| Member | Type | Description |
|---|---|---|
name | string | Unique group identifier (used as form field namespace) |
label | string | Tab label shown in the UI |
description | string (optional) | Description shown below the tab label |
icon | { type: "icon", name: string } (optional) | FontAwesome icon for the tab (e.g., "fas/calendar-alt") |
buildForm(form) | method | Define fields and layout |
mapToForm(doc) | method | Read from document to populate the form |
mapFromForm(formData, doc) | method | Write form values back to the document |
test cases passed, vs 6 / 22 without
More skills from the same source and nearby in the registry, with their headline benchmark lift.