In Drupal 11.3.x, the block_content module has dropped the automatic creation of the default Body field (field.storage.block_content.body.yml). This is part of an ongoing effort to reduce assumptions in core and give site builders more control over content architecture.
What Changed?
Previously, when you enabled the Custom Block module (block_content), every custom block automatically had a Body field. That field was defined in:
field.storage.block_content.body.yml
Starting from Drupal 11.3.x, that file is no longer included.
Any module, install profile, or recipe expecting this field to exist will now fail or produce empty blocks.
How to Check If Your Project Is Affected
Run through this quick checklist:
✅ 1. Do you use the "Basic block" or any block type that had a Body field?
Go to Structure → Block Layout → Custom block library → Add custom block
If "Body" is missing, you're affected.
✅ 2. Do you have custom code assuming $block->body->value exists?
Search your codebase for:
body
field_body
$block->get('body')
✅ 3. Do you import configuration that references:
field.storage.block_content.bodyfield.field.block_content.[TYPE].body
If so, config import will fail or skip those fields.
✅ 4. Are you using a custom install profile (e.g. corporate distro, recipe, or a starter kit)?
Open config/install/ in your profile and check if you assumed the field was already there.
If any of the above is true, you need to manually define the field or enable the compatibility module.
What Should Developers Do?
✅ Option 1: Temporary Compatibility Module (Deprecated in Drupal 13)
Enable:
block_content_storage_body_field This restores the legacy body field but will be removed before Drupal 13.
✅ Option 2 (Recommended): Ship Your Own Body Field Storage
Create:
config/install/field.storage.block_content.body.yml langcode: en
status: true
dependencies:
module:
- block_content
- text
id: block_content.body
field_name: body
entity_type: block_content
type: text_with_summary
settings: { }
module: text
locked: false
cardinality: 1
translatable: true
indexes: { }
persist_with_no_fields: true
custom_storage: false Then attach it to a block type:
config/install/field.field.block_content.basic.body.yml langcode: en
status: true
dependencies:
config:
- field.storage.block_content.body
- block_content.type.basic
id: block_content.basic.body
field_name: body
entity_type: block_content
bundle: basic
label: 'Body'
required: false
settings:
display_summary: true
field_type: text_with_summary Who Is Affected?
| Role | Impact |
|---|---|
| Site Builders / Administrators | New custom block types no longer include a Body field by default. |
| Editors | Expected block content fields may disappear after update. |
| Module / Profile Developers | Must now explicitly define body storage. |
Summary
| Before 11.3.x | After 11.3.x |
|---|---|
Enabling block_content auto-created a Body field. | No Body field — must be created manually or added via compatibility module. |
This change promotes flexibility and avoids forcing a Body field on every block — but older projects may break silently if not updated.
Comments