September 30, 2026 — Gutenberg 24.1 shipped September 30 with a release that reads less like a feature drop and more like a cleanup crew: roughly 140 of its pull requests are aimed at a single goal the team calls design-tool consistency, pushing background images, gradients, shadows, borders, typography, and column controls into dozens of blocks that never had them. Alongside it, text-shadow support finally graduates from a 23.5 experiment into a first-class Global Styles control, and the Cover and Media & Text blocks adopt the same in-inspector media picker the Image block has used for years. Where 24.0 extended the accountability and governance arcs, 24.1 spends its energy on a quieter debt — the years-long gap where a block either had a design control or it didn’t, and the difference decided whether an editor could ship a layout or had to file a ticket.
Key Themes
- Design tools reached almost every core block — Accordion, Tabs, Comments, Post blocks and more gained background, gradient, shadow, and border controls, with column support added to Group, Post Author Biography, and Terms List.
- Text-shadow support graduated to a full feature with its own Global Styles panel and theme.json integration, available on Paragraph and Heading and rolling out to 30-plus blocks.
- Cover and Media & Text now select media through the block inspector, matching the Image and Site Logo blocks instead of forcing a different flow.
- The component library kept in-housing, shipping accessible CheckboxGroup, RadioGroup, and Switch primitives plus their paired controls.
- The design-system rebuild closed a chapter — the final 238 admin icons were converted to strokes, completing the redraw 24.0 started, and the test suite finished its move from Jest to Vitest.
Jump to: 🎨 Design Tools Reach Every Block · ✨ Text Shadows Graduate · 🖼️ The Media Picker Moves Into the Inspector · 🧩 The Component Library Keeps In-Housing · 🗂️ Patterns, Templates, and Per-Viewport Position · 🔧 Smaller Updates · 💡 Takeaways
🎨 Design Tools Reach Every Block
The headline of 24.1 is breadth, not novelty. About 140 pull requests were spent bringing the same design controls — background image, size, and gradient; shadow; borders; typography — to blocks that had gone without them. Accordion, Tabs, Comments, and the Post blocks picked up background and gradient support; the Group block (#83425), Post Author Biography (#83424), and Terms List (#83432) gained column layout support; Tabs (#83431) and Tab Panel (#83428) gained typography controls; and shadow support landed on Code, Details, Home Link, Latest Comments and more than forty others. Individual block PRs stack up in the dozens — Accordion Item gradients (#83197), Buttons (#83203) — and each wires the control back to theme.json rather than inventing a one-off.
Why this matters: This is the responsive-styles arc reaching its logical end state. 23.2 and 23.3 introduced per-block, per-breakpoint spacing and typography; 24.0 handed the Gallery a responsive grid; 24.1 stops treating design controls as a per-block privilege and makes them close to universal. For a publisher, the payoff is the retirement of the bespoke-block tax — the pattern where a section front needed a gradient on a Comments module, or a shadow on an author bio, and the only path was a custom block or a CSS override behind a deploy. When the control ships natively and reads from theme.json, that layout decision moves to the editor and the visual stays inside the design system’s tokens. The double edge is real and worth naming: more controls on more blocks is more surface area for an author to drift off-brand, so the theme.json that defines and constrains those tokens is now doing more governance work than ever. This release makes the case that the constraint layer, not the control layer, is where a large newsroom should spend its design-system effort.
✨ Text Shadows Graduate
Text-shadow arrived as an experiment in 23.5 (#73320) and sat there. In 24.1 it becomes a real feature: a dedicated Text Shadow panel in Global Styles, full theme.json integration, and availability on the Paragraph and Heading blocks (#79584), with the control rolling out to more than thirty blocks from Post Title (#83195) to Verse (#83057). It follows the same graduation path the series has watched other controls take — ship quietly, prove out, then wire into Global Styles and theme.json so it can be set once and inherited everywhere.
Why this matters: Text shadow sounds cosmetic until you remember where publishers actually need it: text laid over a hero image. Every immersive feature, every full-bleed Cover with a headline on top, every photo-led package lives or dies on whether the type stays legible against a busy photograph — and until now the reliable fix was a custom CSS shadow maintained outside the editor. Making it a theme.json-backed Global Style means a design team can define the house treatment for overlay text once, apply it across Post Title and Heading, and let editors build feature layouts without hand-tuning legibility per story. It is a small control with a specific, recurring newsroom use, and it now lives where the rest of the design tokens do.
🖼️ The Media Picker Moves Into the Inspector
The Cover block (#82751) and the Media & Text block (#82593) now expose media selection through the block inspector, using the same UI the Image and Site Logo blocks already use. Replacing or setting the media no longer means a different interaction for each of these blocks — the picker is consistent, and it sits in the settings panel where an author is already adjusting the block.
Why this matters: Cover and Media & Text are the workhorses of a media site — the article hero, the split feature module, the section-front promo. They are also two of the blocks a non-technical author touches most, and the fact that each handled media selection its own way was exactly the kind of inconsistency that generates support tickets and slows a fast-moving desk. Unifying the picker across four of the most-used image-bearing blocks is friction removal at the layer that matters: it makes the editor behave predictably, which is the single trait that decides whether writers trust it. It is a small change with outsized reach because of which blocks it touches.
🧩 The Component Library Keeps In-Housing
- New form primitives landed: CheckboxGroup (#82556), RadioGroup (#83038), and a Switch (#83039), each with a paired higher-level control — RadioGroupControl (#83143) and SwitchControl (#83146).
- The Interface package finished its TypeScript conversion (#82753), and the ESLint plugin was upgraded to version 64.
Why this matters: This continues the in-housing arc — the same move 24.0 made when it dropped the third-party cmdk library for a native Autocomplete. For any publisher whose team builds custom blocks or plugins — subscription forms, newsletter capture, gated-content toggles, editorial settings panels — a set of accessible, WordPress-native form primitives is a direct reduction in what you build and maintain yourself. Rolling your own checkbox group or switch that actually meets WCAG is more work than it looks, and outsourcing that to the platform means your custom UI inherits the accessibility and design-system behavior instead of drifting from it. The TypeScript conversion is the less visible half of the same story: a more typed core is a more predictable extension target for the teams building on top of it.
🗂️ Patterns, Templates, and Per-Viewport Position
- The start-page patterns modal gained category filtering and search (#81396), and the Add Template modal now shows template descriptions (#83064), so a builder can tell templates apart before choosing one.
- Position settings can now be configured per viewport (#83094), with a custom-controls API added for viewport states (#82741), and unavailable wide and full alignments now render as visibly unavailable rather than silently disappearing (#82600).
Why this matters: Pattern libraries are how a large newsroom scales its house style — the sanctioned modules that keep fifty authors producing on-brand layouts. That system only works if editors can find the right pattern and understand a template before committing to it, and search, filtering, and descriptions are exactly the findability fixes that turn a pattern library from a dumping ground into a usable kit. Per-viewport position control extends the responsive-styles pattern into layout itself, and surfacing unavailable alignments instead of hiding them removes a small mystery — “why can’t I make this full-width” — that quietly wastes author time.
🔧 Smaller Updates
The icon redraw is finally done. The final 238 admin icons were converted to strokes (#82540, #82754), completing the visual-language rebuild 24.0 pushed forward — the admin now speaks in a single stroke-based icon set end to end.
Performance targeted the render hot paths. Store listeners were optimized (#82842), async-mode useSelect notifications now defer to idle time (#82821), a per-inserter-item store subscription was eliminated (#83434), and the hidden drag preview rendered for every draggable was removed (#83423) — all changes that pay off most in the large, block-dense posts a publisher actually edits.
Bug fixes hit real editing pain. The Cover block’s aspect-ratio content cutoff in Safari was fixed (#70152), the Gallery’s gap style now generates for themes without layout support (#81633), the Image block stopped leaking the global link color into borders (#79401), Navigation submenu detection no longer leaks between blocks (#82366), and rich-text selection on mobile improved (#83041).
Accessibility kept its cadence. Forced-colors mode got a highlighted-item indicator fix (#82772), the widgets customizer’s Undo/Redo focus style was restored (#82412), and the Welcome Guide’s preference speak message was corrected (#82395).
The toolchain finished a migration. The test suite completed its move from Jest to Vitest with expanded Browser Mode coverage, and the minimum WordPress version was bumped to 7.0 (#82404). The release credits 60-plus contributors, 7 of them first-timers. As always, confirm production is on a supported WordPress version before updating.
💡 Takeaways
- Audit your theme.json before your authors find the new controls. Design tools now reach almost every block, which means the constraint layer matters more than ever — lock your tokens, palettes, and shadow presets so universal controls produce on-brand output instead of drift.
- Retire the bespoke blocks you built for missing controls. Inventory the custom blocks and CSS overrides created only to add a gradient, shadow, or column layout to a core block, and evaluate which can be replaced now that the native control ships.
- Define a house text-shadow treatment for overlay layouts. Set the Global Styles text shadow once for Post Title and Heading so your feature and hero layouts stay legible over imagery without per-story CSS.
- Adopt the native form primitives in custom UI. If your team builds blocks or plugins with checkboxes, radios, or switches, pilot CheckboxGroup, RadioGroup, and Switch to shed self-maintained, accessibility-fragile components.
- Plan for the WordPress 7.0 floor. The minimum is now 7.0 — confirm your production and staging environments are on a supported version before you take this release into your update path.
The full changelog is available on Make WordPress Core.
