$ filed under: wordpress

open source · editorial infra

Gutenberg 23.9: Toolbar Insertion, Global Styles for Forms, and the Drift Detector

September 2, 2026 — Gutenberg 23.9 shipped September 2 with a set of quality-of-life changes that look minor in the changelog and add up to something bigger: an inserter that finally lives in the block toolbar,…

Editorial illustration for: Gutenberg 23.9: Toolbar Insertion, Global Styles for Forms, and the Drift Detector

September 2, 2026 — Gutenberg 23.9 shipped September 2 with a set of quality-of-life changes that look minor in the changelog and add up to something bigger: an inserter that finally lives in the block toolbar, a Global Styles panel that can point to every block an author styled off-spec, and a batch of theme.json controls — citations, form inputs, selects, labels — that moved into the editor UI. Where 23.7 made style inheritance visible and 23.8 pushed the review layer outside the editor, 23.9 keeps handing design-system control from developers to editors — and, for the first time, gives whoever owns that system a native way to see who ignored it.

Key Themes

  1. A new inserter lives in the block toolbar and parent selector, so adding a block to a group or an image to a gallery no longer means scrolling away and losing your place.
  2. Global Styles now marks every block carrying a custom style override with a dot indicator and can filter the tree to show only those blocks — the first native way to see where authors drifted from the design system.
  3. Citations, Inputs, Selects, and the <label> element became editable in the Global Styles UI, moving control that used to require a theme.json commit into a design lead’s hands.
  4. Group blocks in flex and grid layouts gained axial block gap — independent vertical and horizontal spacing — and custom duotone palettes can now be built in a new Duotone tab.
  5. Real-time collaboration gained a pluggable sync-storage filter and guardrails that switch it off for post types it cannot support.

Jump to:Insertion Comes to the Toolbar · 🔎 Global Styles Learns to Spot Off-Spec Blocks · 🎨 Forms, Citations, and Labels Reach the UI · 📐 Two Design Controls Worth Turning On · 🔄 Collaboration Gets Pluggable · 🔧 Smaller Updates · 💡 Takeaways


➕ Insertion Comes to the Toolbar

Block insertion moved to where the cursor already is. A new inserter now sits in the block toolbar and parent selector, letting a writer add a block into a group or drop an image into a gallery without scrolling up to the top-level inserter and losing their place in the document (#81532). The release notes flag it as a first step with more toolbar-insertion work planned. Three supporting changes round out the writing flow: pressing Enter now selects the next block rather than leaving focus ambiguous (#63484), the in-between inserter sizes itself to the average width of its neighbors so it stops jumping around (#68074), and the inserter panel stays open when the inline quick inserter opens instead of fighting it (#76241).

Why this matters: The distance between “I want a block here” and “the block is here” is the tax authors pay hundreds of times a day. In a newsroom running the editor across a large author pool, that tax compounds — every trip to the top-of-canvas inserter is a lost cursor position and a small break in flow, and the people who feel it most are the ones assembling long, block-dense stories under deadline. Insertion at the toolbar is not a feature anyone will write a headline about; it is the kind of friction removal that decides whether writers trust the editor or reach for workarounds. The “more planned” note is the tell: the team is treating in-place insertion as an arc, not a one-off, which is worth tracking for anyone standardizing authoring on Gutenberg.


🔎 Global Styles Learns to Spot Off-Spec Blocks

Global Styles can now find design drift. Blocks that carry a custom style override display a dot indicator, and a new filter collapses the tree to show only those customized blocks — no more drilling through every block to discover where someone changed a color or a spacing value by hand (#81373). It is a small UI addition built on the visibility groundwork of the last two releases.

Why this matters: This is the governance arc taking its most useful step yet. 23.7 — the release this series called the Quiet Governance Release — made style inheritance visible, so an editor could finally see whether a block was pulling from the theme or from a local override. 23.9 answers the obvious follow-up question: where are all the overrides? For a publisher whose brand consistency lives or dies on a design system enforced across hundreds of authors, off-spec styling is the slow leak — a one-off color here, a hand-set margin there, none of it caught until a redesign surfaces the mess. Until now the only way to audit that was to click through the tree block by block, which meant nobody did it. A dot indicator plus a filter turns “audit our style drift” from a full-day archaeology project into a five-minute scan. It is the difference between a design system you publish and a design system you can actually hold the line on.


🎨 Forms, Citations, and Labels Reach the UI

A cluster of elements that were previously stylable only by editing theme.json became editable in the Global Styles interface. Citations, Inputs, and Selects now expose their typography and color controls in the UI (#80852), the <label> element was registered as a first-class Global Styles element (#81160), and label styling can now flow from theme.json as well.

Why this matters: Every element on that list maps to something a publisher ships constantly. Citations are attribution — the byline-adjacent, quote-source styling that a journalism brand cares about getting exactly right. Inputs, Selects, and labels are forms: newsletter signups, gated-content gates, search boxes, comment fields — the conversion surfaces where design consistency and accessibility both live. Until 23.9, styling any of them meant a developer editing theme.json, committing, and deploying, which put form and citation design behind an engineering queue. Moving those controls into Global Styles hands them to the design lead who owns the brand, and it does so through the same visual panel the rest of the system already uses. It continues the theme.json-to-UI democratization that responsive styles began earlier this cycle: the pattern is consistent — take control that lived in a config file behind a deploy, and put it in front of the person who actually makes the design decision. The label element reaching parity in both theme.json and the UI also matters for accessibility teams, who now have one governed place to enforce form-label styling instead of hoping every author gets it right.


📐 Two Design Controls Worth Turning On

  • Group blocks using flex or grid layouts gained axial block gap — vertical and horizontal spacing can now be set independently rather than sharing a single value (#81476). The control is scoped to flex and grid layouts, where independent-axis spacing is what those layouts are for.
  • Custom duotone palettes can now be created and edited in a new Duotone tab inside the Global Styles Colors section, going beyond the theme’s built-in duotone presets (#81605).

Why this matters: Both close gaps that used to send a designer to custom CSS. Axial gap is the difference between a card grid that breathes and one that looks cramped in one direction — a routine need for feature grids, related-content rails, and homepage modules, and one that a single shared gap value could never satisfy. Custom duotone matters to brand teams who use the effect as a signature treatment on hero and section imagery; being locked to the theme’s presets meant a developer had to register any new palette. Neither is essential, but both remove a “file a ticket with engineering” step from the design workflow — the same theme running through this whole release.


🔄 Collaboration Gets Pluggable

  • A new __unstable_wp_sync_storage filter lets developers swap in a pluggable backend for real-time sync storage (#81697) — contributed by a first-time contributor.
  • Real-time collaboration is now disabled for post types that lack custom-field support, rather than half-working on them (#81946), and it now supplies fallback identities when user profiles are unavailable (#81408) and fixes a hidden cursor inside the Details block (#81322).

Why this matters: The __unstable_ prefix says “not final,” but the filter is the first sign that real-time collaboration is being built to run on infrastructure other than the default — which is exactly the question an enterprise publisher asks before betting a newsroom on it. A media org with its own real-time transport, or strict requirements about where in-flight editorial content is stored, needs a seam to plug into; this is that seam appearing. The guardrails matter for a different reason: RTC quietly failing on unsupported post types is the kind of bug that erodes trust in a collaboration feature faster than any missing capability. Switching it off cleanly, and falling back to a usable identity when a profile is missing, is what makes the feature safe to leave on. The collaboration arc — notes in 23.6, sync in 23.7, email reach in 23.8 — is now working on the plumbing underneath.


🔧 Smaller Updates

Revisions kept improving. The revisions code diff — new in 23.8 — gained surrounding context so a reviewer sees more than the changed line in isolation (#81820), and the Global Styles revisions screen now closes on the first back click instead of two (#81897).

The Command Palette grew. A new “View post” command jumps straight to the front end (#66720, from a first-time contributor), and categories can now override their palette icon (#81787).

Performance hit the slow paths that scale badly. :has() selectors no longer force a full-document style recalculation (#81471), the hierarchical term selector sped up for large taxonomies (#81376) — the deep, sprawling category and section trees that big publishers actually run — and Global Styles output picked up caching (#81889).

URL handling got hardened. getQueryArgs stopped discarding content after a second = (#81066), and normalizePath stopped dropping the query after a second ? (#81612) and no longer throws on malformed percent sequences (#81086) — the kind of edge cases that break analytics parameters and campaign links.

Accessibility and access control. Publish-date changes are now announced to screen readers (#81629), and a 403 error non-admin users hit on /wp/v2/settings in the Post Editor was fixed (#81813) — relevant to any newsroom running least-privilege roles.

The new media editor advanced. The standalone media-editor route gained undo/redo and save/cancel in its header (#81563), existing edit links now point to it (#81559), and its toolbar button was renamed to the plainer “Edit image” (#81705). The release credits 50+ contributors, 6 of them first-timers. As always, confirm production is on a supported WordPress version before updating.


💡 Takeaways

  1. Audit your design system with the new override indicator. Open Global Styles, filter to customized blocks, and see how far your authors have drifted from spec — this is the first release that makes that a five-minute check instead of a manual crawl.
  2. Evaluate moving form and citation styling out of theme.json. Inputs, Selects, Citations, and labels are now editable in the UI; decide whether your design lead should own those surfaces directly instead of routing every change through an engineering deploy.
  3. Pilot toolbar insertion with your heaviest authors. Put the in-toolbar inserter in front of the people assembling long, block-dense stories and confirm it removes the friction it targets before you retrain the desk on it.
  4. Turn on axial gap and custom duotone for your brand team. Both replace a “file a ticket” step with an in-editor control — test whether they cover the spacing and image-treatment needs your team currently solves in custom CSS.
  5. Keep watching the collaboration plumbing. The __unstable_wp_sync_storage filter signals that real-time sync is being built to run on your own backend; track it if RTC is on your roadmap and your storage requirements are non-negotiable.

The full changelog is available on Make WordPress Core.