Block types

The core blocks that make up a document body, their fields, and their nesting rules

A document body is an ordered list of blocks. Each block is a JSON object with an id, a namespaced type (core/paragraph, core/heading, and so on), and a schema version v, plus the fields specific to its type. Text-shaped blocks store their text as Portable Text so the headless API hands consumers a structured shape. This page is the reference for each core block; the block editor guide covers how to add and arrange them.

Editor blocks

Nine block types are available in the editor's slash menu, in this order:

  • core/paragraph — body text. Portable Text, with the inline toolbar (bold, italic, strikethrough, underline, inline code, links) and an optional alignment.
  • core/heading — a section title with a level from 1 to 6. The document title renders separately, so body headings usually start at H2.
  • core/list — a bulleted or numbered list. Items hold Portable Text and can nest into sub-lists; numbered lists can set a starting number.
  • core/quote — a blockquote with an optional citation line and an optional callout kind (note, tip, warning, or danger) for admonitions. The kind is honoured by the renderer and used throughout these docs, but it is not yet settable from the editor UI in v1 — a plain quote is what the slash menu produces.
  • core/image — a picture from the Media library, referenced by media id, with alt text, an optional caption, and an alignment. Renders responsive variants when Image Transformations are enabled.
  • core/code — a verbatim code block. Whitespace is preserved exactly; an optional language hint drives highlighting and an optional filename renders as a caption.
  • core/button — a call-to-action link with a label, a destination href, an optional target, and a style of primary, secondary, or link.
  • core/columns — a side-by-side layout of two to four columns, each its own stack of blocks, with adjustable relative widths and gap.
  • core/separator — a horizontal divider between sections, with an optional style.

Nesting

Nesting is intentionally one level deep. A column in a columns block holds ordinary blocks, but it cannot hold another columns block — the slash menu hides the columns option inside a column so the rule cannot be broken by accident. This keeps every document a single flat pass to render and to diff between versions.

Reserved types

Two further types are defined in the block model but are not yet offered in the editor and render as a safe placeholder in v1: core/gallery (a grid of images) and core/embed (an oEmbed-resolved external object). They are reserved so that content created by a future release — or by a plugin — round-trips cleanly through today's data layer.

Roles and permissions reference