Skip to content

Releases: puckeditor/puck

v0.23.0

Choose a tag to compare

@FedericoBonel FedericoBonel released this 07 Aug 09:47

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

Choose a tag to compare

@FedericoBonel FedericoBonel released this 29 Jul 07:33

Bug Fixes

  • use latest @puckeditor/plugin-ai and @puckeditor/cloud-client in recipes (fb9392d)

v0.22.3

Choose a tag to compare

@chrisvxd chrisvxd released this 28 Jul 09:04

Bug Fixes

  • respect plugin mobilePanelHeight on first load (daac70e)

v0.22.2

Choose a tag to compare

@chrisvxd chrisvxd released this 15 Jul 10:16

Bug Fixes

  • don't drop transformed fields on updates (df6b444)

v0.22.1

Choose a tag to compare

@chrisvxd chrisvxd released this 13 Jul 15:57

Bug Fixes

  • add engines field to core package.json (5f5b18a)
  • prevent unbounded cache growth in resolveAllData (d8d77eb)
  • run field transforms for fields without default props (1a601e7)

v0.22.0

Choose a tag to compare

@FedericoBonel FedericoBonel released this 25 Jun 09:00
5b38193

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 from resolveData.

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

  • capture first change in inline richtext field (208b221)
  • don't lazy load the rich text render on every re-render (497aedf)
  • show overlay portal outline only in edit mode (31c3d21)
  • use aria-expanded for accessible name in component category buttons (f949417)

v0.21.3

Choose a tag to compare

@chrisvxd chrisvxd released this 08 Jun 09:58

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

Choose a tag to compare

@chrisvxd chrisvxd released this 01 Apr 09:48

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 _experimentalVirtualization prop (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

Choose a tag to compare

@chrisvxd chrisvxd released this 23 Jan 12:50

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

Choose a tag to compare

@chrisvxd chrisvxd released this 14 Jan 10:58

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 @puckeditor scope 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 the Puck component 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

Read more