releases.shpreview

React 19 experiment; Site Editor adapts to admin color scheme

v23.4

7 features6 enhancements2 fixesThis release7 featuresNew capabilities6 enhancementsImprovements to existing features2 fixesBug fixesAI-tallied from the release notes

“What’s new in Gutenberg…” posts (labeled with the #gutenberg-new tag) are posted following every Gutenberg release on a biweekly basis, showcasing new features included in each release. As a reminder, here’s an overview of different ways to keep up with Gutenberg and the Editor.

What’s new in
Gutenberg 23.4?

Gutenberg 23.4 has been released and is available for download!

Gutenberg 23.4 brings resilient media uploads, continued media editor refinements, visual updates for the Site Editor and experimental dashboard, new Grid transforms, and developer-facing improvements for DataViews and design-system foundations and a whole lot more. Thanks to everyone who contributed to the release.

Table of contents

  1. Preparing WordPress for React 19
  2. The Site Editor follows your admin color scheme
  3. Media
  4. Columns and Gallery blocks can transform into grid layouts
  5. Other notable highlights
  6. Changelog
  7. First-time contributors
  8. Contributors

Preparing WordPress for React 19

23.4 introduces a new experimental flag that can register version 19 of React runtime scripts: react, react-dom, and react-jsx-runtime. This gives developers a way to test plugins, themes, blocks, and editor integrations against the React 19 runtime before it becomes the default (#79077, #78685, #79142). To test, head to the experiments page /wp-admin/admin.php?page=experiments-wp-admin and activate the “React 19” experiment.

Registers React 19 as the bundled React version, replacing the default React 18 scripts.

Tips for testing: Although React 18 and 19 APIs are practically identical, there are some runtime incompatibilities that had to be resolved with an additional compatibility layer. When testing a plugin or theme with the React 19 experiment, developers should pay close attention to any warnings and console errors. Test all custom admin pages that your plugin registers and that use React. Test everything in the editor UI that uses refs, ref callbacks, portals, or third-party component libraries. Review your build pipeline to check that usages of react/jsx-runtime link to the externalized WordPress script instead of bundling it.

The Site Editor follows your admin color scheme

The Site Editor sidebar and page shell now follow the user’s WordPress admin color scheme instead of always using a fixed dark background. This brings the Site Editor chrome closer to the rest of the admin experience across color schemes (#78397).

Video

Media

The media editor modal received a round of usability and design improvements. Editable attachment fields appear at the top of the details panel (#78896, #78792). The mobile toolbar has been updated to include aspect ratio control, zoom uses plus and minus buttons (#78935, #78928, #79011, #79024).

Video

Client-side media processing introduced an upload progress snackbar to the Block Editor, including batch upload counts (#77249). The upload queue will pause while offline, resuming automatically when the connection returns (#76765).

Columns and Gallery blocks can transform into grid layouts

Block transforms can now target a specific variation of another block. In practice, this enables new transforms from Columns and Gallery blocks into a Grid variation, preserving content while changing the layout type (#78713).

Columns and Gallery blocks can transform into grid layouts

Other notable highlights

  • UltraHDR image support — UltraHDR JPEGs are detected during upload, originals are kept unmodified, and resized sub-sizes preserve the ISO 21496-1 gain map (#74873).
  • New Dashboard experience experiment — A new Events widget for upcoming WordPress community events was added (#78553), as well as a responsive grid columns with container breakpoints (#78732).
  • DataViews configuration becomes filterable — A new filterable API extracts entity view configuration out of the REST controller and into a reusable function (#78977).
  • Playlist block — Adds a visualization style selector for waveform styles, plus a track length setting (#76147, #78954).
  • Login/out block — This block can now be inserted inside the Navigation Submenu block (#75497).
  • Block transforms — For transforms, you can target a variation of another block (#78713).
  • Real time collaboration (RTC) reliability work — RTC shipped improvements including a separate document persistence endpoint, collaborator overlay rerenders, polling improvements, forbidden room handling, CRDT typing fixes, and undo manager fixes (#78891, #78636, #78811, #78748, #78756, #78864).

Changelog

Features

Post Editor
  • Show media upload progress in a snackbar. (77249)
Client Side Media
  • Revert client-side media processing plugin-only gate. (76751)

Enhancements

  • Tooltip migration: Boot consumers + shell-level Tooltip.Provider (5/5). (78692)
  • Tooltip migration: Fields + media-editor + media-fields + global-styles-ui (4/5). (78691)
  • Migrate the browserlintrc file to packages/postcss-plugins-preset. (78764)
Components
  • Combobox: Add primitives. (78399)
  • Compose: Support React 19 ref callback cleanups in useMergeRefs. (78685)
  • DataViewsPicker: Add a new pickerActivity layout. (78941)
  • Storybook: Enhance Theme Provider example with admin-ui Page. (78814)
  • Theme package: Add element size design tokens. (76545)
  • Theme: Drop density support from @wordpress/theme. (78741)
  • Theme: Increase stroke1 contrast target to 2.9. (77599)
  • Tooltip: Use md border radius for portaled popups. (78983)
  • UI: Update CSS cascade layers to use nesting. (78959)
  • UI: Update @base-ui/react to 1.5.0. (78448)
Block Library
  • Add playlist track length setting. (78954)
  • Blocks: Allow the Loginout block as an inner block in the Navigation Submenu block. (75497)
  • Hide paragraph Drop Cap and Fit Text controls when a state is selected. (78672)
  • Icons: Rename timeToRead to time. (78804)
  • Playlist Block: Add visualization style selector. (76147)
  • Try allowing transforms to a variation of another block. (78713)
Media
  • Media Editor Modal: Reorder details fields so the editable regular layout fields appear at the top. (78792)
  • Media Editor: Add aspect ratio control to mobile toolbar. (78935)
  • Media Editor: Refactor modal layout. (78896)
  • Media Editor: Replace the zoom slider with +/- buttons. (78928)
  • Media editor: Tweak paddings and margins. (79009)
Dashboard
  • Move layout settings to customize toolbar. (78738)
  • Opinionated grid columns with container breakpoints. (78732)
  • Promote WidgetRender into widget-primitives. (78821)
  • Replace grid row height controls with size presets. (78735)
  • Use Howdy greeting for page title. (78740)
Post Editor
  • UI: Tooltip.Provider — forward upstream closeDelay and timeout props. (78642)
  • Upload Media: Add retry with exponential backoff and network resilience. (76765)
  • Use search_columns=post_title for parent page selector REST API searches. (78683)
Data Layer
  • RTC: Add separate doc persistence endpoint. (78891)
  • RTC: Re-render collaborators overlay when the block tree changes. (78636)
Collaboration
  • RTC: Prevent slower polling filters. (78811)
  • RTC: Return forbidden rooms together. (78748)
Site Editor
  • Apply the user’s admin color scheme. (78397)
  • Post list: Remove close button from Quick Edit drawer. (78730)
Block Editor
  • Changed labels to consistently use Patterns in favor of Block patterns. (56880)
  • List View: Remove redundant visibilityLabel compoutation. (78640)
  • Add React 19 as an experimental flag. (79077)
Icons
  • Maintain absolute stroke-width regardless of icon-size. (78774)
Font Library
  • Fix Update button staying active when changes are reverted. (78567)
Client Side Media
  • Extract entity view configuration into a filterable API. (78977)

New APIs

Extensibility
  • Extract entity view configuration into a filterable API. (78977)

Bug Fixes

  • Build: Document the hooks generated by the wp-build page templates. (78826)
  • Scripts: Use require.resolve for SVG webpack loaders to fix pnpm compatibility. (78777)
  • [Content Types]: Fix extra Page padding causing vertical scrollbar. (78661)
  • env: Replace extract-zip with adm-zip to fix hang on Node 24.16. (78828)
  • wp-build: Fix black flash on wp-admin pages before hydration. (78493)
Block Library
  • Common CSS: Avoid false-positive border-style on custom properties. (77476)
  • Fix playlist metadata edits recreating player. (78876)
  • Fix type of $block_instance parameter in block_core_image_render_lightbox(). (78790)
  • Paragraph: Strip stale block-support classes from className during align attribute migration. (78731)
  • Prevent font-size propagation in Navigation items causing em compounding. (77419)
  • Shortcode block: Fix editor crash when selecting transform menu. (78770)
  • Writing flow: Delete at end of nested list item should merge into next block. (78742)
  • Image block: Don’t show crop icon while image is uploading. (79103)
Media
  • Media Editor: Fix media editor sidebar close button label. (78895)
  • Media Editor: Fix sidebar overflowing the modal between the small and medium breakpoints. (78931)
  • Media Editor: Keep crop handles operable on large images. (79011)
  • Media Editor: Remove lag when toggling the sidebar. (79024)
  • Media Editor: Small tweak to gutters. (79168)
Components
  • Button.Icon: Fix clipped icons. (78614)
  • Compose: Fix SSR crash in useMediaQuery and useViewportMatch. (78725)
  • ColorPalette: Don’t render when custom colors disabled and no colors passed. (72402)
  • ui/AlertDialog: Fix footer layout style override. (78953)
Global Styles
  • Elements: Align class name parsing with custom CSS implementation. (79023)
  • Elements: Guard against non-string className in render filter. (78841)
Block Editor
  • Inserter: Use forwardRef for refs. (79006)
  • Preserve nested list when deleting a selection across sibling list items. (78776)
Client Side Media
  • Media: Skip cross-origin isolation on the classic-theme site editor home route. (78404)
  • Upload Media: Gate very large images out of client-side processing. (78949)
Plugin
  • Fix Gutenberg plugin assuming its directory is named “gutenberg”. (78705)
  • Fix experiments page form layout with box-sizing and width. (78910)
Data Layer
  • RTC: Fix CRDT deferred updates resulting in jumbled typing. (78756)
  • RTC: Fix Yjs undo manager to update UI state when undo stack changes. (78864)
Post Editor
  • Editor: Fix keyboard activation of the template actions preview. (78641)
  • Notes: Show default avatar in the indicator when user avatars are disabled. (78849)
Connectors screen
  • Fix: Block auto-complete for AI API Keys in Connectors. (78946)
Icons
  • Revert “Icons: Maintain absolute stroke-width regardless of icon-size (#78774)”. (78854)
Dashboard
  • Fix Add widget error on non-secure HTTP origins. (78850)
Block API
  • Block Visibility: Keep hide-everywhere working after a block opts out of visibility support. (78780)

Accessibility

  • Boot navigation: Wrap items in a list role for valid listitem semantics. (78829)
Block Editor
  • Inserter: Fix error being thrown for spoken message when inserting default/direct block. (79004)
Block Library
  • Navigation Link: Fix duplicate block html attributes in editor. (78973)
Patterns
  • Fix focus loss when closing the Create pattern dialog from the block toolbar. (78957)
Font Library
  • Fix focus issue when navigating. (78671)

Performance

  • Add Events widget. (78553)

Experiments

Dashboard
  • Add Events widget. (78553)
  • Event widget iteration. (78815)
  • Hello Dolly. (78648)
  • Show ghost widgets visually & allow easy removal. (78502)

Documentation

  • Added Missing Global Documentation. (78997)
  • Build: Update changelog. (78807)
  • DataViews: Add DataViews components to components manifest. (78960)
  • Docs: Auto-generate per-block API reference pages from block.json. (77612)
  • Docs: Fix stale, incorrect, or missing documentation. (78686)
  • Docs: Remove stale mobile references from tooling and primitives documentation. (79041)
  • Fix wordpress/data README fragment links. (78866)
  • Remove orphaned README files for deleted native-only components. (79035)

Code Quality

  • Codemods: Remove one-shot Tooltip migration codemod. (78669)
  • Docs: Fix big_image_size_threshold xref typo. (76299)
  • Format Library: Migrate to recommended @wordpress/ui components. (79059)
  • Framework: Remove invalid stale nested npm package references. (79014)
  • Make @wordpress/nux a no-op compatibility package. (77773)
  • Remove migrated dependencies from root package.json. (78813)
  • Scripts: Remove obsolete bin/setup-local-env.sh. (78871)
  • Storybook: Declare workspace dependencies for theme example story. (78979)
  • Tools: Ban classnames via Syncpack. (79061)
  • Tools: Migrate docs/tool into tools/docs workspace. (78870)
Block Library
  • Fix sprintf format specifiers in post-date and read-more blocks. (78933)
  • Fix: Escape URLs in block render functions using esc_url(). (78912)
  • Refactor workspace configuration for Babel dependencies. (78974)
  • Revert navigation morph & playlist commits pushed directly to trunk. (78857)
  • RichText: Remove dead native-only prop filtering. (79037)
Data Layer
  • Compose: Fully deprecate the ‘pure’ HoC. (78674)
  • Media: Move client-side media compat file to wordpress-7.1 directory. (78852)
  • Packages: Declare missing @types/react dependency. (78882)
  • Refactor: Remove jest/test deps from root package.json. (78801)
  • Remove React Native implementation, framework, and dependencies. (78747)
Post Editor
  • Editor: Refactor ‘PostPublishButton’ into function component. (78737)
  • Editor: Remove dead native guard in block removal warnings. (79039)
  • Post Revisions: Upgrade diff from v4 to v8. (77992)
  • TypeScript: Migrate server-side-render package to TS. (71383)
Components
  • wordpress/theme: Deduplicate addFallbackToVar helper. (78666)
  • Navigable Container: Hoist getFocusableContext out of the component. (79029)
  • Remove dead native code branches from Platform usages. (79031)
  • refactor: Move React dependencies to workspace configuration and upda…. (78981)
Dashboard
  • Rename WidgetChrome to DashboardWidgetChrome. (78751)
  • Rename widget-types to widget-primitives and consolidate the widget contract. (78749)
  • Replace surface with host in widget contract documentation. (78778)
Block Editor
  • Refactor Inserter to a function component. (78766)
  • Rich text: Use subscribeDelegatedListener for element event listeners. (79047)
Site Editor
  • theme/ThemeProvider: Rename color.bg prop to color.background. (79007)

Tools

  • Add copilot-instructions.md file. (78584)
  • Remove orphaned mobile bug report issue template. (79038)
  • Update AGENTS.md to mention additional pitfalls. (78718)
  • Update CODEOWNERS for tooling directories. (78874)
Build Tooling
  • Build Scripts: Fix Windows path handling in dev script. (78939)
  • CI: Remove Validate Gradle Wrapper workflow. (79030)
  • CI: Skip plugin repo release when SVN tag already exists. (78476)
  • Lint dependency version consistency with Syncpack. (77950)
  • Release: Drop mobile-specific changelog omit rules. (79042)
  • Remove platform-docs Docusaurus site. (79034)
  • Skip including inactive or experimental routes when building for WordPress Core. (76715)
  • feat: Migrate performance results to tools release. (78761)
  • Add more React internals polyfills. (79142)
Testing
  • Abilities: Add validation tests pinning behavior for WP-specific schema keywords. (78783)
  • CI: Suppress lint:Js warnings on static checks. (79025)
  • Try omit-unchanged for compressed-size-action. (78976)
  • e2e-test-utils-playwright: Start transpiling again, but faster. (79026)
Data Layer
  • @apermo: Docs: Fix big_image_size_threshold xref typo. (76299)

First-time contributors

A call out and big welcome to first-time contributors, who merged the following PRs:

  • @apermo: Docs: Fix big_image_size_threshold xref typo. (76299)
  • @colinduwe: Changed labels to consistently use Patterns in favor of Block patterns. (56880)
  • @ekamran: Fix wordpress/data README fragment links. (78866)
  • @i-am-chitti: Tools: Migrate docs/tool into tools/docs workspace. (78870)
  • @Kgupta62: Common CSS: Avoid false-positive border-style on custom properties. (77476)
  • @macayu17: Button.Icon: Fix clipped icons. (78614)
  • @n8finch: ColorPalette: Don’t render when custom colors disabled and no colors passed. (72402)
  • @simondud: Fix: Block auto-complete for AI API Keys in Connectors. (78946)

Contributors

Gutenberg 23.4 was brought to you by the following contributors:

@aaronrobertshaw @adamsilverstein @aduth @alecgeatches @amitraj2203 @andrewserong @apermo @ciampo @colinduwe @desrosj @ekamran @elazzabi @ellatrix @fushar @gziolo @hbhalodia @hi0001234d @himanshupathak95 @i-am-chitti @im3dabasia @Infinite-Null @itzmekhokan @jameskoster @jasmussen @jsnajdr @juanfra @juanmaguitar @Kgupta62 @kushagra-goyal-14 @macayu17 @Mamaduka @manzoorwanijk @mikachan @mirka @Mustafabharmal @n8finch @ntsekouras @oandregal @paulopmt1 @ramonjd @retrofox @sarthaknagoshe2002 @scruffian @shail-mehta @shekharnwagh @simison @simondud @sirreal @t-hamano @talldan @tellthemachines @torounit @tyxla @USERSATOSHI @westonruter @xavier-lc @yogeshbhutkar

#block-editor #core-editor #gutenberg #gutenberg-new

Fetched June 17, 2026