Releases: puckeditor/puck
Release list
v0.23.0
Puck 0.23 improves drag-and-drop to reduce layout shift, adds a draggable outline for reordering components, and introduces a Dictionary API for translating the editor UI.
Puck-023.webm
This is a summary of the main new features and full changelog.
Read the full release post on our blog.
Summary
- New canvas drag-and-drop: visualize the drop destination using fluid movement or an insertion line.
- New outline: reorder, duplicate, and delete components directly from the outline.
- Dictionary API: translate or reword every string in the editor UI and switch languages at runtime.
Full changelog
Features
- add dictionary (65790c8)
- add draggable outline and streamline UI (db035ce)
- allow the user to specify drag-and-drop behavior (d204aa9)
- introduce static drag-and-drop for reduced layout shift (835ab3e)
Bug Fixes
- default page data in next recipes (66de27c)
- don't call generate-id at module import time (1ab086c)
- don't drop last fields when updating config (4bf6887)
- don't drop transformed fields on updates (9bf3e00)
- don't mutate nested values in setDeep (cd238ee)
- don't prevent root prop title type changes (666fb74)
- don't remount root slots when props change (1960be2)
- don't reset caret position in custom and overriden fields (c37bed9)
- type data as user data before sending it to action in react router ai recipe (026f030)
- use the latest component position in inline fields (e83767b)
v0.22.4
Bug Fixes
- use latest @puckeditor/plugin-ai and @puckeditor/cloud-client in recipes (fb9392d)
v0.22.3
v0.22.2
v0.22.1
v0.22.0
Puck 0.22 introduces theming, automatic CSS loading, iframe style sync controls, and more.
Puck.0.22.0.webm
This is a summary of the main new features and full changelog.
Read the full release post on our blog.
Summary
- Theming: customize the default editor UI using CSS custom properties.
- Automatic CSS loading: Puck now injects its stylesheet on demand.
iframe.syncHostStyles: control whether Puck syncs host styles into the preview iframe.- Root data in
resolveData: access root data fromresolveData.
Full changelog
Features
- add iframe.syncHostStyles prop for controlling style sync (1496ae3)
- add theming support with CSS variables (d4c8bcf)
- expose root to resolveData API (caeacf9)
- load CSS dynamically if missing (3c1f5e4)
- remove remix recipe from create-puck-app (d2c2761)
Bug Fixes
v0.21.3
Bug Fixes
- don't crash if tiptap is destroyed (4d9aaa2)
- don't crash richtext field when string is empty (e35c030)
- don't select parent on quick drag (64479ab)
- ignore next-env.d.ts in Next.js recipes (95c7d25)
- prevent canvas loader from blocking pointer events when hidden (7f423c5)
- record history when moving a component to a different position (c66507a)
- render empty string instead of literal when contentEditable fields receive nullish values (737caf4)
- stop action bar from flashing in bottom on insertion (0f13f4b)
- unwrap propName in walkFields for nested slots (f83fd09)
- use aria-label for accessible name in IconButton (71238a6)
- use stable ID when rendering RichText on server (29d13dd)
Contributors
v0.21.2
This patch release focuses on performance improvements, with a 99% reduction in load times when testing large payloads.
Experimental virtualization was added via the _experimentalVirtualization prop to further improve performance by only rendering visible components in the root.
Performance Improvements
- add experimental virtualization via
_experimentalVirtualizationprop (ec7bb66) - don't block render when resolving on load (a830187)
- improve render performance of outline with deep trees (20f62dd)
- improve render performance of components (3a2fc72)
- virtualize outline for improved sibling rendering (b50325f)
Bug Fixes
- add missing UiState prop to custom field onChange type (8c1905e)
- don't de-select on second click unless using _experimentalFullScreenCanvas (20ba367)
- don't duplicate empty array items on click in custom fields (72cdad9)
- don't override ui.viewport.current on editor render (4cf3027)
- don't trigger load resolvers twice (328d4b8)
- don't trigger undo when entering polish
ΕΌletter (6788882), closes #1277 - keep no-external.css free of external font import (edc8192)
- prevent unintended history entries on move and deselect (39a4e15)
- provide latest value to AutoField onChange prop (a5295ab)
- render richtext output correctly in server components (433c5e1)
- respect readOnly in root fields (1463703)
- run resolveData when component moves between parents (d839a39)
- stop iframe from hanging if stylesheets change during load (6429156)
- update overlay position when bounding box changes (a429a2e)
Contributors
v0.21.1
Bug Fixes
- don't throw when disabling listItem rich text extension (4ca0a46)
- enforce disabled styles for rich text menu with no options (3d56139)
- ensure consistent plugin ordering in Firefox (274c5f6)
- ensure nested richtext fields render in (501a164)
- prevent array item expansion when empty (1a6682a)
- prevent block deletion on backspace in rich text in Firefox (71c8664)
- replace missed fast-deep-equals with fast-equals (ffa5171)
Contributors
Full Changelog: v0.21.0...v0.21.1
v0.21.0
Puck 0.21 introduces AI page generation, rich text editing, a new interface for Plugins, and more.
Puck.0.21.Rich.Text.Example.mp4
This is a summary of the main new features and full changelog.
Read the full release post on our blog.
Summary
- Puck has moved: All packages have moved to the
@puckeditorscope on npm. See the upgrade guide for step-by-step migration instructions. - AI page generation: generate pages from your existing Puck config using Puck AI, now in open beta.
- Rich text editing: add a WYSIWYG editor that can be edited inline in the canvas or in the sidebar.
- Plugin Rail: a new left-side navigation bar that plugins can use to render dedicated UI in the sidebar.
Puck.Layout: use thePuckcomponent as a context provider for the internal Puck API while keeping the default editor UI.
Full changelog
Features
- add "as" API to change slot element type (1cec93c)
- add "richtext" field (301595f)
- add ActionBar.Separator component (410819e)
- add active API to IconButton (8116c86)
- add cache control to external fields (a5160e5)
- add delete hotkeys for removing components (20aafb6)
- add disabled option to ActionBar.Action (32d0666)
- add experimental full-screen canvas support (c15c4f8)
- add full-width viewport to fit to container (7373a6b)
- add getParentById for getting the parent data for a child id (38e79ba)
- add key parameter to force custom field remounting (ace4c8b)
- add parent to resolveData APIs and trigger resolveData on move (7c2f928)
- add Plugin Rail, a menu for plugins (86526e7)
- add puck ai option to create-puck-app (d1f05aa)
- add resolveDataById utility to Puck API (12f0a21)
- add resolveDataBySelector utility to Puck API (4f0b390)
- de-select component on second click (ccff0d8)
- enable modification of Puck height (538f7bf)
- export ConfigParams and ComponentConfigParams for convenience (0f9606c)
- expose default layout via Puck.Layout (4a8e38f)
- extend Plugin API with support for Plugin Rail (d68edca)
- improve mobile interface (3daa05e)
- provide metadata to resolveFields (6dae6cb)
- provide parent data to resolvePermissions API (1b69a8f)
- rename package to @puckeditor/core (d1c0d6a)
- support CSS units for minEmptyHeight in slots (79a2684)
- support dynamic props for default array items via function (6c44fdb)
- support extending all field types via declaration merging (26fd286)
- support extending ComponentConfig via declaration merging (3c46c44)
- support overrides for custom fields (89038d0)
- support React nodes in getItemSummary for array fields (73b98fb)
- support typing metadata via declaration merging (66c5aa3)
- use dashed outline for overlay portals (f79baa9)
- use next@^16.0.8 in create-puck-app (313bbb5)
Bug Fixes
- account for drags during slow resolveData on insert (dfecd01)
- account for drags during slow resolveData on update (304940a)
- add missing ref prop to Slot render types (ac9eba2)
- automatically set IDs for slots in root defaultProps (f5820ce)
- check the user provides a name in create-puck-app (b1de8bf)
- don't unmount sidebars on hide (ceebd0f)
- handle exits gracefully from create-puck-app (abfa3c3)
- memoize initialHistoryIndex and check the index provided by the user is not out of bounds (ec77dd9)
- mitigate CVE-2025-57822 in Next.js recipe (74d9a16)
- prevent empty objects from causing parent re-render (a4bfae4)
- prevent frame overflowing on small viewports when embedded (5c9515c)
- prevent valueOf errors due to fast-deep-equals (16a3eee)
- prioritize disableDrag in overlay portals (1df9dde)
- reset keystrokes when window is blurred (5333fc7)
- respect custom root label in breadcrumb navigation (de0baf3)
- respect ui changes in replace action (af2d5ac)
- restore valid type for renderDropZone prop (29ef713)
- retain overlay if dragRef changes (e310a17)
- run resolve permissions in slots (cf074bc)
- show title instead of undefined in React Router recipe (68f8542)
- use latest reference for onChange callback (b818cb1)
Performance Improvements
- don't remount slot when parent changes (a7a6599)
- eliminate unnecessary re-renders in fields (b633e3b)
- prevent re-rendering of user components on hover (a62292f)
Contributors
- asterixcapri
- DamianKocjan
- eyueldk
- fero46
- ffffranklin
- LengYXin
- [matthewlynch-wise](https://github.com/matthewly...