What version of @strapi/sdk-plugin are you using?
- Npm version: 10.8.2
- Node.js version: 20.18.3
- React version: 18.3.1
- Strapi version: 5.23.3
- @strapi/sdk-plugin version: 5.3.2
- Browser: Chrome
What's Wrong?
When using a custom field from any plugin in a content type schema, if the field is defined as:
"myCustomField": {
"type": "customField",
"customField": "plugin::<plugin-name>.<custom-field-name>"
}
Strapi does not save the data unless the field type is changed to "json":
"myCustomField": {
"type": "json",
"customField": "plugin::<plugin-name>.<custom-field-name>"
}
This is not documented and causes confusion, since the admin panel recognizes the custom field, but the data is not persisted unless the type is set to json.
To Reproduce
-
Create a content type with a custom field using a local plugin built with the Strapi SDK (e.g. <plugin-name>), where the custom field is registered as type json in the plugin registration.
-
Add the custom field from the Content-Type Builder to any collection type.
-
In the schema, define the field as:
"myCustomField": {
"type": "customField",
"customField": "plugin::<plugin-name>.<custom-field-name>"
}
-
Go to the admin panel and try to save data using the custom field.
-
Observe that the data is not saved/persisted.
-
Change the field type to "json":
"myCustomField": {
"type": "json",
"customField": "plugin::<plugin-name>.<custom-field-name>"
}
-
Now, data is saved correctly.
Expected Behaviour
Actual Behaviour
- The admin panel recognizes the custom field and allows input, but Strapi does not persist the data unless the type is set to
json.
- This behaviour is not documented in the official docs, which show examples using
type: "customField".
Expected Behaviour
- Strapi should either:
- Handle custom fields that store arrays/objects without requiring manual change to
"json", or
- Document this requirement clearly for custom field plugin authors and users.
Technical Comparison with Official Documentation
"color": {
"type": "customField",
"customField": "plugin::color-picker.color",
"options": {
"format": "hex"
}
}
- In practice, for custom fields that store complex data (arrays/objects), the type must be set to
json for persistence:
"customFieldExample": {
"type": "json",
"customField": "plugin::<plugin-name>.<custom-field-name>"
}
- If
type: "customField" is used, the data is not saved.
Custom Field Registration
File: <plugin-path>/admin/src/index.js
app.customFields.register({
name: '<custom-field-name>',
pluginId: '<plugin-name>',
type: 'json', // Required for metadata persistence
intlLabel: {
id: '<plugin-name>.<custom-field-name>.label',
defaultMessage: '<custom-field-name>',
},
intlDescription: {
id: '<plugin-name>.<custom-field-name>.description',
defaultMessage: 'Select any asset',
},
components: {
Input: async () =>
import('./components/Input/Input').then((module) => ({
default: module.Input,
})),
},
options: {
// declare options here
},
});
- The custom field must use
type: 'json' for Strapi to persist complex data (arrays/objects).
- If
type: 'customField' is used, data is not saved.
What version of
@strapi/sdk-pluginare you using?What's Wrong?
When using a custom field from any plugin in a content type schema, if the field is defined as:
Strapi does not save the data unless the field type is changed to
"json":This is not documented and causes confusion, since the admin panel recognizes the custom field, but the data is not persisted unless the type is set to
json.To Reproduce
Create a content type with a custom field using a local plugin built with the Strapi SDK (e.g.
<plugin-name>), where the custom field is registered as typejsonin the plugin registration.Add the custom field from the Content-Type Builder to any collection type.
In the schema, define the field as:
Go to the admin panel and try to save data using the custom field.
Observe that the data is not saved/persisted.
Change the field type to
"json":Now, data is saved correctly.
Expected Behaviour
Actual Behaviour
json.type: "customField".Expected Behaviour
"json", orTechnical Comparison with Official Documentation
jsonfor persistence:type: "customField"is used, the data is not saved.Custom Field Registration
File:
<plugin-path>/admin/src/index.jstype: 'json'for Strapi to persist complex data (arrays/objects).type: 'customField'is used, data is not saved.