Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions docs/release-notes/6.5.0/changelog.ai.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
AI Context: 6.5.0 Changelog (changelog.mdx)

This file tracks manual edits made after the generation script ran.
The script reads the "Skipped PRs" section to avoid re-adding removed entries.

## Skipped PRs

## Manual Rewrites
124 changes: 124 additions & 0 deletions docs/release-notes/6.5.0/changelog.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
---
id: mfffzjjg
title: Webiny 6.5.0 Changelog
description: See what's new in Webiny version 6.5.0
---

import { GithubRelease } from "@/components/GithubRelease";
import { Alert } from "@/components/Alert";

<GithubRelease version={"6.5.0"} />

## Headless CMS

### AI-Powered Content Generation ([#5333](https://github.com/webiny/webiny-js/pull/5333))

You can now generate CMS entry content using AI directly from the entry editor. A new AI button in the editor header opens a prompt dialog — describe what you want, and the generated content populates your entry fields in real time via WebSocket. The system understands your model's schema including nested objects, dynamic zones, validation rules, and predefined values. Rich text fields receive proper Lexical editor state through an internal conversion pipeline.

### Configurable New Entry Wizard ([#5354](https://github.com/webiny/webiny-js/pull/5354))

You can now inject a custom wizard UI that appears before the entry form opens. This lets you gather initial values (e.g., from a template selector or AI prompt) and pre-fill the form with those values already marked as dirty.

```typescript
import { ContentEntryEditorConfig } from "webiny/admin/cms/entry/editor";

<ContentEntryEditorConfig>
<ContentEntryEditorConfig.NewEntryWizard
element={<YourWizardComponent />}
modelIds={["article", "blogPost"]}
/>
</ContentEntryEditorConfig>
```

### Redesigned Content Model Editor ([#5259](https://github.com/webiny/webiny-js/pull/5259), [#5289](https://github.com/webiny/webiny-js/pull/5289), [#5290](https://github.com/webiny/webiny-js/pull/5290))

The content model editor has been significantly redesigned. The Edit/Preview tabs now appear as a segmented control in the top bar. The fields sidebar collapses into an 80×80 icon grid with smooth animations. Field cards have been restyled with field-type icons and updated typography. Drag-and-drop uses a proper cursor overlay with label and icon instead of the previous orange circle, and drop zones have cleaner styling. The settings panel now opens in a drawer instead of a full-screen overlay. The preview tab shows a friendly empty state with an illustration and "Switch to edit mode" button when no fields exist.

### New Revision Button for Published and Unpublished Entries ([#5352](https://github.com/webiny/webiny-js/pull/5352), [#5353](https://github.com/webiny/webiny-js/pull/5353), [#5347](https://github.com/webiny/webiny-js/pull/5347))

When editing a published or unpublished entry, you now see a "New Revision" button alongside "Publish". Previously, if an entry was published and then unpublished, the UI didn't make it clear how to create a new revision. The "All Revisions" option is now always visible in the revisions dropdown, and saving a locked entry automatically creates a new revision instead of failing.

### Refactored CMS Architecture with Presenter/Feature Pattern ([#5323](https://github.com/webiny/webiny-js/pull/5323))

Content entries, content models, and related modules have been refactored to use a new presenter/feature architecture with dependency injection. Key improvements include:

- Folder creation no longer triggers a full `ListFolders` reload — the cache is populated from the create response
- Sorting by name now works correctly for both folders and entries
- The `app-headless-cms-common` package is now types-only, reducing bundle size

### AI-Powered Entry Creation Wizard ([#5356](https://github.com/webiny/webiny-js/pull/5356))

You can now enable AI-assisted content generation when creating new CMS entries. A new "Generate with AI" toggle in Model Settings (`settings.aiEntryWizard`) controls whether new entries open with an inline AI content generation form. When enabled, the wizard pre-fills the entry form with AI-generated content based on your prompt. A skip button lets you bypass the wizard and start with an empty form.

The wizard system now supports priority-based registration, so custom wizards can override the default AI wizard when needed.

## Website Builder

### Nuxt Starter Kit Configuration ([#5265](https://github.com/webiny/webiny-js/pull/5265))

The "Configure Next.js" option has been renamed to "Configure Starter Kit" and now includes a Nuxt tab alongside Next.js. The Nuxt tab generates ready-to-use environment configuration for the [Webiny Nuxt starter kit](https://github.com/webiny/website-builder-nuxt), pulling real deployment values (API key, API host, tenant ID, admin host) that you can copy directly into your project's `.env` file.

### Editable Object and List Fields ([#5295](https://github.com/webiny/webiny-js/pull/5295))

Object fields now work in the page editor. Previously, declaring an `object` input on a component rendered nothing. Object fields now appear as clickable rows that open slide-out panels containing their child inputs. Lists of objects show as reorderable rows with add/remove/move controls and an empty state. Nested objects stack panels over each other with backdrop dimming, and all values persist correctly through the round-trip.

### Preview Domain Trailing Slash Fix ([#5332](https://github.com/webiny/webiny-js/pull/5332))

Adding a trailing slash to the preview domain (e.g., `http://localhost:3000/`) no longer produces broken preview links with double slashes. The domain is now normalized automatically.

### Always Show "All Revisions" in Page Revision Menu ([#5348](https://github.com/webiny/webiny-js/pull/5348))

The "All revisions" option in the revisions menu is now always visible when editing a page, regardless of how many revisions exist. Previously it could be hidden in certain states.

### Redirects List Rewritten with ListView Component ([#5261](https://github.com/webiny/webiny-js/pull/5261))

The redirects list has been rewritten using the new `ListPresenter` abstraction and `ListView` compound component. This fixes a bug where folders would not display correctly when a folder had subfolders but no redirect records.

## Admin

### Workflow State Folder Permissions ([#5331](https://github.com/webiny/webiny-js/pull/5331))

Workflow states now respect Folder Level Permissions. Users only see workflow states for records in folders they can access — restricted users no longer see states for entries or pages outside their allowed folders. As part of this change, moving entries or pages with active workflow states is now blocked to prevent permission inconsistencies.

### Real-Time AI Image Enrichment Notifications ([#5326](https://github.com/webiny/webiny-js/pull/5326))

When you upload an image and AI finishes generating its tags and description, you now receive an on-screen notification in real time. Only the person who uploaded the image is notified, not everyone signed in.

### Content Reviews Widget Loading States ([#5328](https://github.com/webiny/webiny-js/pull/5328))

The Content Reviews dashboard widgets now show skeleton placeholders while loading and a clear empty-state illustration when a tab has no items. The widget maintains a stable height across loading, populated, and empty states with no layout jump.

### Form Field Context and Navigation ([#5330](https://github.com/webiny/webiny-js/pull/5330))

Form field callbacks can now navigate the form tree to access sibling and parent fields via `IFieldScope` and `IFieldNavigator`. This enables computed, hidden, disabled, and required callbacks that depend on related field values. Dynamic zone copy/paste is also now supported.

### Destructive Dropdown Menu Variant ([#5310](https://github.com/webiny/webiny-js/pull/5310))

`DropdownMenu.Item` now exposes a `variant="destructive"` prop for delete-style actions, replacing the need to copy a long className string onto every red menu item.

```tsx
<DropdownMenu.Item variant="destructive" onClick={handleDelete}>
Delete
</DropdownMenu.Item>
```

### Upgraded tailwind-merge to v3 ([#5263](https://github.com/webiny/webiny-js/pull/5263))

The internal class-merging utility used for admin UI components was updated to version 3. This ensures correct conflict resolution behavior for Tailwind CSS v4 class names, including border widths, padding, and margin utilities.

## Development

### Custom GraphQL Playground Built from Scratch ([#5357](https://github.com/webiny/webiny-js/pull/5357))

The GraphQL Playground has been completely rewritten, replacing the old CDN-loaded `graphql-playground-react` with a custom implementation built on Monaco Editor. The new playground includes several improvements:

- **Schema Docs Explorer** — a right-side drawer for browsing the introspected schema with stack-based type navigation, search across type names, field names, arguments, and enum values, and clickable type references
- **Query History** — localStorage-backed execution history (capped at 100 entries) with search, restore-to-active-tab, open-in-new-tab, and individual delete
- **Tab-based architecture** — each tab has its own GraphQL client with independent auth and tenant headers. System tabs (Manage, Read, Preview APIs) have read-only endpoints; duplicate them to get an editable copy
- **Comment-preserving prettifier** — formats queries while keeping your comments intact

The playground uses a DI-based `PlaygroundTabRegistry`, allowing any package to contribute its own tabs. If you need custom client behavior, implement `PlaygroundClient.Interface` or use the provided factories with custom `getToken`/`getTenant` overrides.

### Dev Tools Permissions No Longer Duplicated Across Playground Apps ([#5338](https://github.com/webiny/webiny-js/pull/5338))

The GraphQL Playground and SDK Playground apps each used to register the other app's permissions as well as their own, which could show permissions for apps that weren't installed. Each app now contributes only its own permissions, and they're combined into a single "Dev Tools" group automatically.
61 changes: 61 additions & 0 deletions docs/release-notes/6.5.0/upgrade-guide.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
---
id: dopsvqwj
title: Upgrade from 6.4.x to 6.5.0
description: Learn how to upgrade Webiny from 6.4.x to 6.5.0.
---

import { Alert } from "@/components/Alert";
import { AdditionalNotes } from "@/components/upgrade/AdditionalNotes";

<Alert type="success" title="What you'll learn">

- how to upgrade Webiny from 6.4.x to 6.5.0

</Alert>

<Alert type="info">

Make sure to check out the [6.5.0 changelog](./changelog) to get familiar with the changes introduced in this release.

</Alert>

## Step-by-Step Guide

### 1. Upgrade Webiny Packages

Upgrade all Webiny packages by running the following command:

```bash
yarn webiny upgrade 6.5.0 --debug
```

Note that the command above will run upgrades for all available versions of Webiny up to 6.5.0. If there are upgrades for 6.4.1, 6.4.5, they will be ran.

You can omit the version to upgrade to the latest available:

```bash
yarn webiny upgrade --debug
```

Once the upgrade has finished, running the `yarn webiny --version` command in your terminal should return **6.5.0**.

<Alert type="info">

If the above command fails or is not available in your setup, you can run the upgrade script directly via `npx`:

```bash
npx https://github.com/webiny/webiny-upgrades-v6 6.5.0 --debug
```

</Alert>

### 2. Deploy Your Project

Proceed by redeploying your Webiny project:

```bash
# Execute in your project root.
yarn webiny deploy --env {environment}
```

<AdditionalNotes />