For the full list of changes, check out the Webiny 6.4.12external link release on GitHub.

Website Builder
anchor

Fixed MissingversionandmetadataFields in Single-Page Queries (#5727external link)
anchor

{/ REVIEW-PENDING @Pavel910 — confirm this entry, then delete this line /}

The GET_PAGE_BY_ID and GET_PAGE_BY_PATH queries in the Website Builder SDK were missing the version and metadata fields from their selection sets. If you needed these fields, you had to patch the SDK manually. Both fields are now included by default.

Fixed Stale Page Revision Data After Mutations (#5757external link)
anchor

{/ REVIEW-PENDING @Pavel910 — confirm this entry, then delete this line /}

Creating, publishing, unpublishing, or deleting page revisions did not update the revisions cache, so the editor’s revisions drawer and top bar dropdown displayed stale data until a page reload. All revision mutations now properly update the cache, and both UI components are driven from a shared RevisionListPresenter instead of local state copies.

Added Delete Revision API Endpoint (#5757external link)
anchor

{/ REVIEW-PENDING @Pavel910 — confirm this entry, then delete this line /}

The admin app called websiteBuilder.deletePageRevision, but the mutation was never declared on the backend — the entire client feature was wired to a non-existent endpoint. The mutation now exists and delegates to the CMS DeleteEntryRevisionUseCase, which handles deleting the latest revision and cascading to a full entry delete when necessary.

Improved Revision List Actions and Confirmations (#5757external link)
anchor

{/ REVIEW-PENDING @Pavel910 — confirm this entry, then delete this line /}

Per-revision actions (create from, edit, publish, unpublish, delete) are now determined by the presenter rather than derived in the view. Destructive actions now require confirmation through a dialog and display a toast with the outcome. Previously, delete ran on the first click and failed silently on error.

Fixed Workflow Decorators Not Applying to Top Bar Actions (#5757external link)
anchor

{/ REVIEW-PENDING @Pavel910 — confirm this entry, then delete this line /}

The page editor config was not registered through Plugins, so workflow decorators were never applied to the top bar actions. Additionally, an approved review no longer counts as “under review”, so the editor becomes writable again and offers Publish instead of New Revision.

Development
anchor

Debug Logger Tool (#5734external link)
anchor

{/ REVIEW-PENDING @brunozoric — confirm this entry, then delete this line /}

A new opt-in, permission-gated debugger is now available for troubleshooting issues in environments where you cannot access AWS or the underlying code. When a user with the dev-tools.debug permission enables capture, debug payloads from instrumented call sites are returned in the GraphQL response under extensions.debug.

Key details:

  • Capture is requested per-request via the x-webiny-debug header (set to 1, or a glob pattern like cms.os.* with ! to exclude).
  • Debug sessions are buffered in memory (capped at 4 MB), and payloads never reach CloudWatch—only the permitted user sees them.
  • The first instrumented call site is cms.os.list, which captures OpenSearch query and response data around entry listing.

A new Dev Tools → Debugger panel in Admin lets you toggle capture, filter by namespace, and download a JSON report. Collected sessions are held in memory only and do not persist beyond the browser tab.

After deploying this release, you must redeploy your API infrastructure (yarn webiny deploy api) and invalidate your CloudFront distribution to ensure the new x-webiny-debug header is forwarded correctly. Without this, the feature silently captures nothing.

Admin
anchor

Fixed Keyboard Shortcut Leak on Component Unmount (#5757external link)
anchor

{/ REVIEW-PENDING @Pavel910 — confirm this entry, then delete this line /}

useHotkeys leaked registered shortcuts when a component unmounted while shortcuts were active. The cleanup effect closed over stale state, so a drawer that unmounted while open never released its esc binding, causing the next component to claim it to throw an error.