Since Plate UI is not a component library, a changelog is maintained here.
Use the CLI to install the latest version of the components.
October 21 #26.9
suggestion-kit: RemoveBlockSuggestionuseSuggestionLineBreakinstead to fixes styles.use-chat: Fix AI comment hiding when finished.
October 17 #26.8
- Static Components: Updated all static component imports to use new 
platejs/staticpath*-node-staticcomponents: Updated imports from@platejs/core/reacttoplatejs/staticeditor-static: UpdatedPlateStaticimport pathexport-toolbar-button: Updated static utilities import pathimport-toolbar-button: Updated static utilities import pathslate-to-html/page: Updated static rendering importscomment-kit,suggestion-kit: Updated static types imports
 
October 6 #26.7
api/ai/command/route.ts: Fix poor AI generation quality when blockSelecting.
October 5 #26.6
ai-kit: Removed unusedapiparameter fromuseHooksdestructuringblock-selection-kit: Added keyboard shortcut handler to open AI menu withmod+jwhen blocks are selected
October 4 #26.5
api/ai/command/route.ts: fix #4669
September 2025 #26
September 28 #26.5
transforms: Fixed slash command duplicate block insertion - prevents creating duplicate blocks when selecting the same block type in empty blocks
September 20 #26.4
- AI Suggestions: Major improvements to AI suggestion system with better content handling and UI enhancements
ai-menu:- Added new 
AILoadingBarcomponent with animated spinner and stop functionality - Enhanced comment acceptance UI with Accept/Reject buttons
 - Improved context-aware menu states based on selection and operation mode
 - Better keyboard navigation with ESC to stop operations
 
- Added new 
 ai-toolbar-button: Streamlined implementationapi/ai/command/route.ts:- Added multi-tool support (generate, edit, comment) with automatic intent classification
 - Switched to Google Gemini model (
gemini-2.5-flash) - Enhanced prompt templates with placeholder support
 - Added MDX tag preservation
 
markdown-joiner-transform: Added smart buffering for smoother streaming of markdown contentuse-chat: Simplified implementation with better error handlingai-kit: Added markdown plugin to AI configurationmarkdown-kit: Added AI plugin integrationlink-node: Added AI-specific click handler functionalityblock-context-menu: Removed redundant AI options (now handled by ai-menu)block-discussion: Minor styling improvementsfixed-toolbar-buttons: Simplified AI button implementation
 
September 7 #26.3
block-context-menu: Fixed menu position sticking when triggered multiple times in different locations
September 5 #26.2
block-draggable: Fixed block selection to work with right-click events
September 4 #26.1
- AI Comments: Added AI-powered comment functionality for document review and feedback
use-chat: Enhanced chat hook with AI comment support and improved streaming capabilitiesai-menu: Updated AI menu with comment generation options and improved UIai-toolbar-button: Added support for AI comment actionsblock-context-menu: Integrated AI comment options into block context menufixed-toolbar-buttons: Added AI comment button to toolbarai-kit: remove all prompt templates, use directly inapi/ai/command/route.ts.api/ai/command/route.ts: Added comment functionality.
 
August 2025 #25
August 17 #25.2
block-discussion: RemoveduseFocusedLastcheck for showing discussion popover.
August 1 #25.1
- Floating toolbar improvements: Multiple components now use the new 
useFocusedLasthook to only show their floating toolbars when their editor is the last focused editor, preventing toolbar conflicts in multi-editor scenarios:ai-menublock-discussioncolumn-nodemedia-toolbartable-node
 block-draggable:- Select list children on handle click
 - Focus selected blocks on handle click
 
July 2025 #24
July 29 #24.11
block-draggable: Fixed table drag and drop preview display with horizontal scroll compensation. Drag preview elements now correctly display content even when the original element has horizontal scrollblock-draggable: AddedisAboutToDragstate to improve preview handling - tracks when drag is about to start (mousedown but not yet dragging) for better preview cleanup
July 27 #24.10
ai-kit: support custom node typeindent-kit: addKEYS.imgtoIndentPluginlist-kit: addKEYS.imgtoListPluginmarkdown-joiner-transform.ts: addmarkdownJoinerTransformto transform chunks like [,bold,] to [bold] make the md deserializer happy.api/ai/command/route.ts: usemarkdownJoinerTransformto transform chunks.
July 26 #24.9
list-classic-kit: AddedListPluginto restore List functionalities (indent with Tab / Shift+Tab, new item when pressing enter, ...).
July 25 #24.8
block-draggable: Added support for automatically selecting list item children when dragging. When dragging a list item, all nested items with bigger indent are now included in the drag operation
July 23 #24.7
block-draggable: Updated to use newaddOnContextMenuAPI from BlockSelectionPlugin for cleaner context menu handling
July 18 #24.6
block-context-menu: Fixed context menu not opening when right-clicking on block margin areasblock-draggable: Added wrapper div with context menu handler to ensure block selection on margin clicks
July 14 #24.5
block-draggable: Added support for dragging multiple blocks using editor's native selection (previously only block-selection was supported)
July 3 #24.4
slate-to-html: AddedEditorViewDemocomponent for static editor rendering usingcreateStaticEditor
July 4 #24.3
list-classic-node: Fix styling that affectsTaskListElementby force overriding list-style-type (set to none).
July 3 #24.2
- Task list support in list-classic: Added task list functionality with checkboxes to the list-classic plugin
list-classic-kit: AddedTaskListPluginwithTaskListElementcomponentlist-classic-node: AddedTaskListElementandTaskListItemElementcomponents with checkbox supporttransforms-classic: New file for classic list transformsinsert-toolbar-classic-button: New component for inserting classic list types (bulleted, numbered, task)turn-into-toolbar-classic-button: New component for converting blocks to classic list typesfloating-toolbar-classic-buttons: New component for floating toolbar with classic list supportfloating-toolbar-classic-kit: New kit that includes classic list toolbar buttons
 
July 2 #24.1
editor: AddedEditorViewcomponent using the newPlateViewfrom@platejs/core/reactfor static editor rendering with copy functionality
June 2025 #23
June 29 #23.9
link-node: RemoveuseLinklink-node-static: missinggetLinkAttributesmedia-image-node:attributes.alttype casting
June 26 #23.7
inline-combobox: Fixed combobox not closing when clicking outside the editor
June 24 #23.6
transform.ts: addtoggleCodeBlocktosetBlockMap. Fix the structural error of the code_block created byturn-into-toolbar-button.tsx.
June 20 #23.5
- Drag and drop improvements
 block-draggable: Fixed drag and drop functionality with multiple selected blocks and resolved drop positioning issues on margins.block-selection-kit: It is now possible to select the entire table (table), but the rows (tr) will only be selected if your selection box is within the table.table-node: Add block selection styles to the table.
June 18 #23.4
table-node: Fix bug affecting cursor position and improve performance
June 16 #23.3
block-draggable: usegetPluginByTypeinstead ofgetContainerTypes
June 13 #23.2
editor: Fix placeholder positioning**:data-slate-placeholder:!top-1/2 **:data-slate-placeholder:-translate-y-1/2.block-placeholder-kit: Change placeholder color totext-muted-foreground/80to matcheditorone.
June 9 #23.1
Plate 49
Merging files, using a more consistent naming convention, and removing unused export statements.
Components:
- Now that basic nodes have a default HTML element, you can remove 
withProps(..., { as: '...' })plugin components. - To improve decoupling, plugins are not imported anymore only for their keys. Import 
KEYSfrom@udecode/plateinstead, as a unified source of keys.ParagraphPlugin.key->KEYS.pINDENT_LIST_KEYS.listStyleType->KEYS.listTypeListStyleType.Decimal->KEYS.olListStyleType.Disc->KEYS.ullist(classic) ->KEYS.listClassicol(classic) ->KEYS.olClassicul(classic) ->KEYS.ulClassicli(classic) ->KEYS.liClassicaction_item(classic) ->KEYS.listTodoClassic
 - Rename all 
*-element,*-leaffiles to*-node(and static versions) - Removed 
ai-anchor-element, merged intoai-node - Removed 
ai-loading-bar, merged intoai-menu - Removed 
ai-menu-items, merged intoai-menu - Renamed 
align-dropdown-menutoalign-toolbar-button,AlignDropdownMenutoAlignToolbarButton - Renamed 
api-aitoai-api - Renamed 
api-uploadthingtomedia-uploadthing-api BlockSelection: fix block selection for tables- Removed 
code-block-combobox, merged intocode-block-node - Removed 
code-line-element, merged intocode-block-node(and static version) - Removed 
code-syntax-leaf, merged intocode-block-node(and static version) - Rename 
color-toolbar-buttontofont-color-toolbar-button,ColorDropdownMenutoFontColorToolbarButton - Removed all 
color-*files, merged intofont-color-toolbar-button- Rename 
color-dropdown-menutofont-color-toolbar-button 
 - Rename 
 - Removed 
column-group-element, merged intocolumn-node(and static version) - Removed 
comment-create-form, merged intocomment - Renamed 
draggabletoblock-draggable,DraggableAboveNodestoBlockDraggable - Renamed 
emoji-input-elementtoemoji-node - Removed all 
emoji-*files (exceptemoji-input-node), merged intoemoji-toolbar-button- Rename 
EmojiToolbarDropdowntoEmojiPopover,EmojiDropdownMenutoEmojiToolbarButton EmojiPickericonsprop is now optional and defaulted toemojiCategoryIconsandemojiSearchIcons
 - Rename 
 - Renamed 
image-previewtomedia-preview-dialog,ImagePreviewtoMediaPreviewDialog - Renamed 
image-elementtomedia-image-node- Renamed 
MediaFileElementtoFileElement(and static version) - Renamed 
MediaAudioElementtoAudioElement(and static version) - Renamed 
MediaVideoElementtoVideoElement(and static version) 
 - Renamed 
 - Renamed 
indent-list-toolbar-buttontolist-toolbar-button- Renamed 
BulletedIndentListToolbarButtontoBulletedListToolbarButton - Renamed 
NumberedIndentListToolbarButtontoNumberedListToolbarButton 
 - Renamed 
 - Renamed 
indent-todo-markertoblock-list - Removed 
indent-fire-marker - Removed 
indent-todo-toolbar-button, merged intolist-toolbar-button - Renamed 
IndentTodoToolbarButtonintoTodoListToolbarButton - Removed 
inline-equation-elementandequation-popover, merged intoequation-node(and static version) - Removed 
inline-equation-toolbar-button, merged intoequation-toolbar-button - Renamed 
insert-dropdown-menutoinsert-toolbar-button,InsertDropdownMenutoInsertToolbarButton - Renamed 
line-height-dropdown-menutoline-height-toolbar-button,LineHeightDropdownMenutoLineHeightToolbarButton - Rename 
link-floating-toolbartolink-toolbar - Removed 
list-indent-toolbar-button, merged intolist-classic-toolbar-button - Renamed 
ListIndentToolbarButtontoIndentToolbarButton - Renamed 
list-nodetolist-classic-node - Renamed 
media-popovertomedia-toolbar,MediaPopovertoMediaToolbar - Renamed 
mode-dropdown-menutomode-toolbar-button,ModeDropdownMenutoModeToolbarButton - Renamed 
more-dropdown-menutomore-toolbar-button,MoreDropdownMenutoMoreToolbarButton - Removed 
outdent-toolbar-button, merged intoindent-toolbar-button table-icons: renameBorder*toBorder*Icon- Renamed 
slash-input-elementtoslash-input-node - Renamed 
SuggestionBelowNodestoSuggestionLineBreak - Removed 
table-cell-element, merged intotable-node(and static version) - Removed 
table-row-element, merged intotable-node(and static version) - Renamed 
table-dropdown-menutotable-toolbar-button,TableDropdownMenutoTableToolbarButton - Removed 
todo-list-node, merged intolist-classic-node - Renamed 
turn-into-dropdown-menutoturn-into-toolbar-button,TurnIntoDropdownMenutoTurnIntoToolbarButton export-toolbar-button,indent-list-plugins: remove fire fromlistStyleTypesuseCommentEditor:usePlateEditorinstead ofuseCreateEditor- Removed 
placeholder,withPlaceholder. Migration: useblock-placeholder-kit,BlockPlaceholderPlugininstead. line-height-toolbar-button: removeuseLineHeightDropdownMenuhook.font-color-toolbar-button: removeuseColorInputhook.
Plugins:
- 
Renamed all
*-plugin,*-pluginsfiles to-kit, and*Plugin,*Pluginsto*Kit. A plugin kit is a collection of configured plugins.- Renamed 
editor-pluginstoeditor-kit - Renamed 
equation-pluginstomath-kit,equationPluginstoMathKit - Renamed 
indent-list-pluginstolist-kit,indentListPluginstoListKit - Added 
BlockListcomponent toblock-list, used inlist-kit - Removed 
use-create-editor, useusePlateEditorinstead 
 - Renamed 
 - 
ai-kit: addshowshortcut. RemoveuseHotkeys('mod+j')fromai-menu - 
comment-kit: addsetDrafttransform, shortcut - 
basic-marks-kit,basic-blocks-kit: add shortcuts - 
transforms,block-draggable: removeSTRUCTURE_TYPES, those are now inferred fromplugin.node.isContainer. Use insteadeditor.meta.containerTypes. - 
Remove
structuralTypesfromuseSelectionFragmentPropusages. 
May 2025 #22
May 26 #22.7
- Fix combobox closing issue
 inline-combobox: fixinsertPointnot being updated when the combobox is closed.
May 15 #22.6
- Fix inline math keyboard behavior and style
 equation-popover: Focus back to the editor when the popover is closed.inline-equation-element: When selecting it should be highlighted.
May 11-12 #22.5
- Templates migration to Plate 48
 - Migration to shadcn v4:
- Plate had a forked version of shadcn/ui primitives that could conflict with your existing components. Our components now fully depend on the original shadcn/ui primitives, easing the integration of Plate into your existing shadcn/ui set of components.
 - All components updated to Tailwind v4.
 - See the updated installation guide.
 
 - Migration to React 19. If you're using React 18, you may need to use 
React.forwardRefin a few places. - Migration to shadcn CLI:
- Remove 
registriesfromcomponents.json - Use 
npx shadcninstead ofnpx shadcx 
 - Remove 
 - MCP support
 - Remove 
withReffrom all components - Import 
cnfrom@/lib/utilsinstead of@udecode/cnto stay consistent with shadcn/ui - Remove unused 
className,styleprops from all element and leaf components draggable:- Fix dnd in Firefox
 
media-placeholder-element: refactor to useuse-upload-filehook instead ofuploadthing- Migration: 
npx shadcn@latest add https://platejs.org/r/api-uploadthing 
- Migration: 
 
May 6 #22.3
ai-chat-editor: support none-standard markdown nodes.slash-input-element: add callout support.block-selection-plugins.tsx: fix block selection not working.
May 4 #22.2
ai/command: forked smoothStream fromaipackage now uses 30ms delay by default (only code blocks and tables use 100ms delay).
v48 migration:
PlateElement,PlateLeafandPlateTextHTML attributes are moved from top-level props toattributesprop.- Remove 
nodePropsprop fromPlateElement,PlateLeaf,PlateText. Useattributesprop instead. - Migrated components:
block-discussioncomment-leafdate-elementdraggableexcalidraw-elementhr-element+-staticimage-element+-staticlink-elementmedia-audio-elementmedia-file-elementmedia-placeholder-elementmedia-video-elementmention-elementplaceholdersuggestion-leaftable-cell-element+-statictable-elementtag-element
 
May 2 #22.1
use-chat: add_abortFakeStream.ai-menu: Fix menu items are displayed incorrectly.ai-loading-bar: Move esc keydown handler toai-menu.ai/command: add chunking delay to 100ms (Temporary workaround with performance issue).
April 2025 #21
April 30 #21.3
autoformat-plugin: allow starting a new indent list with numbers other than 1
April 29 #21.2
ai-leaf: addaiIndicatorVariantsto display loading state.cursor-overlay: hide when ai is streaming.api/ai/command: fix chunking issue.
Add discussion-plugin:
- add 
discussionPlugintoeditor-plugins, removeconfigurefromsuggestionPlugin - refactor 
block-suggestion,commentto usediscussionPlugin - fix 
comment-create-formto create discussion when none exists - style changes in 
suggestion-leaf - fix 
link-floating-toolbarto support internal links, and placement top when suggestion or comment is active 
April 19 #21.1
ai-anchor-element: addai-anchor-elementcomponent that is inserted before streaming, removed after streaming, and used for positioning the ai-menuai-loading-bar: addai-loading-barcomponent that is used to display the loading progress of the insert mode streamingai-menu: migrate to latestaipackageai-menu-items: addgenerateMarkdownSampleai-plugins: Remove the single-paragraph limit from promptseditor: introducePlateContainercomponent
April 2 #21.1
export-toolbar-button: fix pdf export issue withhtml2canvas-proimport-toolbar-button: fix sometimes unable to select the file
March 2025 #20
March 12 2025 #20.4
ai-toolbar-button: add missing@udecode/plate-aidependency.comment-toolbar-button: add missingcomments-pluginregistry dependency.font-size-toolbar-button: add missingpopoverregistry dependency.tooltip: add missingbuttonregistry dependency.
March 10 #20.3
block-context-menu: Prevent opening context menu in read-only mode
March 2 #20.2
block-suggestion: fix stylessuggestion-leaf-static: add static versions
March 1 #20.1
Plate 46 - new code block
- Migrated from Prism.js to lowlight for syntax highlighting
code-block-element-static,code-block-element,code-block-combobox: Updated to use lowlight classes. Default to github theme.code-syntax-leaf-static,code-syntax-leaf: Updated to use lowlight token classes- Removed 
prismjsdependency and related styles - Use 
lowlightplugin option instead ofprismoption code-block-combobox: addAutolanguage option, change language values to match lowlight
 autoformat-plugin: prevent autoformat on code blocks
import { all, createLowlight } from 'lowlight';
 
const lowlight = createLowlight(all);
 
CodeBlockPlugin.configure({
  options: {
    lowlight,
  },
});Feburary 21 #19.3
image-preview: prevent block menu on image preivew maskmedia-popover: hide media popover when image preivew is open
February 18 #19.2
Plate 45 - new comments & suggestions UI
- NEW 
block-discussionas the main container, used inplate-element - NEW 
commentfor individual comment display - NEW 
comment-create-formwith minimal Plate editor for input - Removed legacy components:
comments-popovercomment-avatarcomment-reply-itemscomment-valuecomment-resolve-button
 - NEW 
block-suggestion - NEW 
suggestion-leaf - NEW 
suggestion-line-break - Remove 
plate-element, importPlateElementfrom@udecode/plate/reactinstead. Add inblock-selection-plugins: 
render: {
  belowRootNodes: (props) => {
    if (!props.className?.includes('slate-selectable')) return null;
 
    return <BlockSelection />;
  },
},February 3 #19.1
- React 19
 - TailwindCSS 4
 - Plate 45
 - Jotai 2
 - Zustand 6
 comment-more-dropdown: removeuseCommentEditButtonState,useCommentDeleteButtonStateimage-element,media-embed-element,media-video-element,mode-dropdown-menu- use 
const width = useResizableValue('width') 
- use 
 image-preview: removeuseScaleInputState,useImagePreviewStatefloating-toolbar:- replace 
useEventEditorSelectorswithuseEventEditorValue 
- replace 
 media-popover:- replace 
floatingMediaActionswithFloatingMediaStore.set, - replace 
useFloatingMediaSelectorswithuseFloatingMediaValue 
- replace 
 
January 2025 #18
January 23 #18.8
table-element: fix styles, show table border controls when collapsedtable-row-element: refactortable-cell-element: selection bg-brand
January 21 #18.7
table-element,table-row-element: support row dnd and selectionplate-element: addblockSelectionClassNamepropeditor: z-50 for selection areadraggable:- Replace 
editor.api.blockSelection.replaceSelectedIdswitheditor.api.blockSelection.clear - Use 
TooltipButtonfor drag handle - Block select on drag handle click
 - Hide drag handle in table cells
 
- Replace 
 column-element,table-cell-element: addisSelectionAreaVisiblecheckblock-selection: hide if dragging- Replace 
editor.api.blockSelection.addSelectedRowwitheditor.api.blockSelection.set:ai-menuequation-popover
 align-dropdown-menu: deprecate
January 18 #18.6
inline-equation-elementandequation-popover: Fix: When selecting an inline equation, the popover should not open, as it causes the selection to be lost.
January 17 #18.5
emoji-picker-search-bar: addautoFocus
January 16 #18.4
import-toolbar-buttonandexport-toolbar-button: addmarkdownsupport
January 14 #18.3
fixed-toolbar-buttons: addimport-toolbar-buttonindent-fire-marker.tsxAdddata-plate-prevent-deserializationto prevent deserialization of the fire marker. Change thespantag toli.indent-todo-marker.tsxchange thespantag toli.image-element-static.tsxandhr-element-static.tsx: FixnodePropsnot being passed toSlateElement.ai-chat-editor:
const aiEditor = usePlateEditor({ plugins });
useAIChatEditor(aiEditor, content);January 12 #18.2
ai-plugins: removecreateAIEditor, it's now created inai-chat-editorai-chat-editor: just useuseAIChatEditor(v42.1)ai-menu: avoid collisions, removeaiEditorRefcommand: addfocus-visible:outline-noneeditor-static: updateaiChatpaddingtransforms: fixinsertBlockused by slash commands: it should insert a new block if the newly inserted block is of the same type as the command.block-selection-plugins: updateBlockSelectionPlugin
BlockSelectionPlugin.configure(({ editor }) => ({
  options: {
    enableContextMenu: true,
    isSelectable: (element, path) => {
      return (
        !['code_line', 'column', 'td'].includes(element.type) &&
        !editor.api.block({ above: true, at: path, match: { type: 'tr' } })
      );
    },
  },
}))January 8 #18.1
- v42 migration
 table-element,table-element-static- Move icons to 
table-icons - Remove 
colgroup, col width is now set intable-cell-element 
- Move icons to 
 table-row-element: removehideBorderproptable-cell-element,table-cell-element-static:- column hover/resizing state is now using Tailwind instead of JS
 - Major performance improvement: all table cells were re-rendering on a single cell change. This is now fixed.
 - React.memo
 
table-dropdown-menu:- dynamic table insert
 - merge/split cells
 - insert row/col before
 
tooltip: addTooltipButtonindent-list-toolbar-button: RemoveIndentListToolbarButtonuseNumberedIndentListToolbarButtonandBulletedIndentListToolbarButtoninstead.table-dropdown-menu: new insert table interface.column-group-element: fixColumnFloatingToolbaronColumnChange
December 2024 #17
December 28 #17.8
export-toolbar-button: addkatexsupportplate-element: removerelativeclassName- All components using the 
PlateElementhave had redundantrelativeclass names removed. 
December 27 #17.7
fixed-toolbar-buttons: addfont-size-toolbar-buttonfloating-toolbar: addinline-equation-toolbar-buttonturn-into-dropdown-menu: Fix: after turn into other block, the editor should regain focus.insert-dropdown-menu: addinline equationandequation& fix the focus issueslash-input-element: addequationandinline equation
December 23 #17.5
table-element: fix selection- before: 
isSelectingCell && '[&_*::selection]:bg-none' - after: 
isSelectingCell && '[&_*::selection]:!bg-transparent' 
December 21 #17.4
Update tailwind.config.cjs for better font support in the HTML export:
fontFamily: {
  heading: [
    'var(--font-heading)',
    'ui-sans-serif',
    '-apple-system',
    'BlinkMacSystemFont',
    'Segoe UI Variable Display',
    'Segoe UI',
    'Helvetica',
    'Apple Color Emoji',
    'Arial',
    'sans-serif',
    'Segoe UI Emoji',
    'Segoe UI Symbol',
    'Noto Color Emoji',
  ],
  mono: ['var(--font-mono)', ...fontFamily.mono],
  sans: [
    'var(--font-sans)',
    'ui-sans-serif',
    '-apple-system',
    'BlinkMacSystemFont',
    'Segoe UI Variable Display',
    'Segoe UI',
    'Helvetica',
    'Apple Color Emoji',
    'Arial',
    'sans-serif',
    'Segoe UI Emoji',
    'Segoe UI Symbol',
    'Noto Color Emoji',
  ],December 20 #17.3
insertColumnGroup,toggleColumnGroup: usecolumnsoption instead oflayout- Remove 
with-draggables. AddDraggableAboveNodestodraggable. Add toDndPluginconfig: 
DndPlugin.configure({ render: { aboveNodes: DraggableAboveNodes } }),column-element,image-element,media-video-element: RemoveuseDraggableState. Useconst { isDragging, previewRef, handleRef } = useDraggablecolumn-group-element: RemoveuseColumnState. Use instead:
const columnGroupElement = useElement<TColumnGroupElement>(ColumnPlugin.key);
 
const onColumnChange = (widths: string[]) => {
  setColumns(editor, {
    at: findNodePath(editor, columnGroupElement),
    widths,
  });
};export-toolbar-button: addexportToHtml
December 19 #17.2
Plate 41
- New RSC components for element and leaf components, filename ending with 
-static.tsx. Those are now added along with the default client components. editor: addselect-texttoeditorVariantsdate-element: remove popover when read-onlyindent-todo-marker: useSlateRenderElementPropstype instead ofPlateRenderElementPropshr-element,media-audio-element,media-embed-element,mention-element: improve cursor stylingmedia-file-element: use<a>instead ofdiv+onClick- all element and leaf components: 
classNameprop is now placed before inline prop. 
December 16 #17.1
- 
column-element:- Add drag and drop support for columns
 - Add drag handle with tooltip
 - Fix column spacing and padding
 
 - 
column-group-element:- Remove gap between columns
 - Remove margin top
 
 - 
draggable:- Remove 
DraggableProviderHOC - Remove 
DropLinechildren prop 
 - Remove 
 
November 2024 #16
November 26 #16.9
https://github.com/udecode/plate/pull/3809/files
- Add 
select-editor,tag-element,label,form - Replace 
cmdkdependency with@udecode/cmdk. It's a controllable version ofcmdk. command: add variantseditor: addselectvariantpopover: addanimatevariant
https://github.com/udecode/plate/pull/3807/files
toc-element: remove<nav>tag using<div>instead to fix html2canvas issueeditor: removerole="button"to fix html2canvas issue
November 21 #16.8
Shadcn sync:
input: addtext-base md:text-smtextarea: addtext-base md:text-smeditor(ai,aiChatvariants): addtext-base md:text-sm
November 14 #16.7
toolbar: AddToolbarSplitButton,ToolbarSplitButtonPrimary,ToolbarSplitButtonSecondarymedia-toolbar-button: useToolbarSplitButton
November 13 #16.6
resizable: hideResizeHandlewhen read-only
November 8 #16.5
- Add this to your tailwind config:
 
// plugins
require("tailwind-scrollbar-hide")
 
// theme.extend.screens
screens: {
  /**
   * Matches devices where the primary pointing device is capable of
   * hovering conveniently. Usage: main-hover:group-hover:bg-red-500 See:
   * https://developer.mozilla.org/en-US/docs/Web/CSS/@media/hover
   *
   * On iOS devices, buttons inside a .group element that contains
   * descendent elements with `group-hover:` CSS rules require two taps to
   * click. As a workaround, we disable these rules on devices that cannot
   * conveniently hover using `main-hover:`.
   */
  'main-hover': {
    raw: '(hover: hover)',
  },
},editor:EditorContainer: removeref, useuseEditorContainerRefinstead- add 
caret-primary selection:bg-brand/25 - add 
id={editor.uid}toEditorContainerso you can removescroll_containeror any id you may have defined. 
draggable:- fix a critical mobile ux issue: focusing the editor required two taps because of the group hover styles. Fixed with 
main-hover:group-hover:opacity-100. - for xs media, show only if selected
 
- fix a critical mobile ux issue: focusing the editor required two taps because of the group hover styles. Fixed with 
 table-element: fix widthtable-row-element,table-cell-element: support row selection- Add 
draggableprop todate-element,mention-element - Add 
data-plate-focusattribute tolink-toolbar-button,link-floating-toolbar,ai-menuinput cursor-overlay:- support collapsed selection
 - remove 
DragOverCursorPlugin,SelectionOverlayPlugin. Use@udecode/plate-selectioninstead. 
ghost-text: hide for xs media, addpointer-events-nonefloating-toolbar: addoverflow-x-auto scrollbar-hideto allow horizontal scrolling (mobile)fixed-toolbar: addscrollbar-hideemoji-picker-content: add emoji fontcolumn-element: addw-fullas default- New hook: 
use-is-touch-device block-context-menu: disable on touch deviceai-toolbar-button: addonMouseDownai-menu-items: add undefined checkblock-selection-plugins: add
inject: {
  excludeBelowPlugins: ['tr'],
  excludePlugins: ['table', 'code_line', 'column_group', 'column'],
},- Add 
floating-toolbar-plugin,fixed-toolbar-plugin - misc: 
hr-element,plate-element,transforms 
November 7 #16.4
block-context-menu: prevent unselect when clicking on the context menublock-selection: Addeditor.getApi(BlockSelectionPlugin).blockSelection.focus()in onCloseAutoFocus.
November 6 #16.3
editor: addoverflow-x-hiddento prevent horizontal scrollingtable-element: addoverflow-x-autoto allow horizontal scrolling
November 5 #16.2
- Fixed color-picker clear button's styles
 - Replace toggle-element button with css transitions
 
November 1 #16.1
editor: styles +<EditorContainer />
October 2024 #15
October 31 #15.6
- Added 
lib/transforms.ts. Contains useful transforms for common operations. - Removed 
Iconsfile dependency. All icons are now imported fromlucide-react. - Fixed and modified some styles in emoji and color picker.
 - Group styling:
dropdown-menucontext-menuinline-combobox
 - Added groups and items to 
slash-input-element - Spacing and sizing update:
ai-menu-itemsalign-dropdown-menublock-context-menubuttoncode-block-comboboxcolor-dropdown-menu-itemscolor-pickercolumn-group-elementcommandcomment-more-dropdowncontext-menudropdown-menuemoji-dropdown-menuemoji-input-elementimage-previewinline-comboboxinputinsert-dropdown-menuline-height-dropdown-menulink-floating-toolbarmedia-popovermention-input-elementmode-dropdown-menumore-dropdown-menupopoverslash-input-elementtable-dropdown-menutable-elementtoggle-elementtoggle-toolbar-button
 
October 26 #15.5
- Rename 
indent-todo-marker-componenttoindent-todo-marker. 
October 25 #15.4
slash-input-element: add AI command & addfocusEditoroption
October 24 #15.3
- Add 
ai-menu,ai-menu-items,ai-toolbar-button,ai-chat-editor,block-context-menu,context-menu,ghost-text,toc-element command: addInputCommandtoolbarnew styleeditordemo variantheading-element: removeisFirstBlockprop- misc: 
fixed-toolbar,fixed-toolbar-buttons,floating-toolbar,floating-toolbar-buttons,mode-dropdown-menu,turn-into-dropdown-menu,button,cursor-overlay,excalidraw-element,inline-combobox,slash-input-element 
October 14 #15.3
- New cli: 
shadcx. See CLI and components.json. 
October 10 #15.3
dropdown-menu(DropdownMenuContent): prevent default ononCloseAutoFocusfloating-toolbar(FloatingToolbar): remove portal, hide on click outside, hide when floating link openturn-into-dropdown-menu(TurnIntoDropdownMenu): add indent list itemstable-dropdown-menu(TableDropdownMenu): select ininsertTable
October 4 #15.2
- feat 
emoji-picker: adjust ui emoji picker 
October 1 #15.1
- New 
block-selectioncomponent for visual selection feedback - New 
plate-elementcomponent for rendering the plate element withBlockSelection - Updated 
paragraph-elementand all block elements to useplate-element draggable:- Refactored to use new hooks: 
useDraggableGutteranduseDropLine - Removed 
classNamesprop in favor of a singleclassName - Added 
DraggableProviderwrapper - Introduced 
GutterandDropLineas separate components 
- Refactored to use new hooks: 
 with-draggables:- Updated to use new className format for draggable props
 
- fix 
mention-element: prevent IME input interruption on MacOS 
Use --highlight color for the following components:
comment-leafhighlight-leaf
Use --brand color for the following components:
block-selectiondraggable
September 2024 #14
September 29 #14.3
- fix 
heading-element: if the heading is the first block, it should not have a top margin 
September 13 #14.2
- fix 
code-block-combobox: filter based on label or value 
September 10 #14.1
- fix 
floating-toolbar: show toolbar when readOnly 
August 2024 #13
August 27 #13.3
- Migrate to Plate 37
 
August 26 #13.2
- feat 
emoji-picker: adapt shadcn themes & styles 
August 12 #13.1
- add mermaid to list of supported languages in preparation for Excalidraw improvements.
 
July 2024 #12
July 14 #12.2
- fix 
cursor: Show selection rect/caret if cursor data is undefined. 
July 12 #12.1
fixed-toolbar:top-0
June 2024 #11
June 23 #11.3
- breaking change: move list of supported prismjs languages to 
code-block-combobox 
June 13 #11.2
- fix 
caption: update UI when elementcaptionproperty changes 
June 6 #11.1
- replace 
comboboxwithinline-combobox - remove 
mention-combobox,emoji-comboboxandslash-combobox - add 
emoji-input-element - update 
mention-input-elementandslash-input-elementto use the new combobox - feat 
draggable: add the data-key attribute to facilitate adding selection after the drag-and-drop operation is completed - breaking change: Open the caption by using 
CaptionButtonor pass the media element's ID throughcaptionActions.showCaptionId" - add 
portalElementprop tofloating-toolbar 
May 2024 #10
May 30 #10.2
- fix 
draggable: add portal to fix clipping, button type to stop form submission - fix 
editor: increase x padding to improve drag handle visibility 
May 24 #10.1
- fix 
site-header: change zIndex to 60 - fix 
fixed-toolbar: change zIndex to 60 
April 2024 #9
April 30 #9.3
- fix 
indent-todo-marker-component: clicking the checkbox removing the focus 
April 17 #9.2
- add 
column-element,column-group-element 
April 6 #9.1
- fix 
combobox: undo was crashing the editor 
February 2024 #8
February 6 #8.2
- fix 
list-element: variant styles were missing 
February 5 #8.1
- fix 
mention-element: Mention input removed when clicking mention combobox scrollbar (#2919) 
January 2024 #7
January 31 #7.5
- add 
toggle-element - add 
toggle-toolbar-button 
January 11 #7.4
- add support for custom ui dir in 
components.json - add support for 
plate-components.jsonto avoid conflict with shadcn'scomponents.json 
January 9 #7.3
toolbarToolbar: replaceitems-stretchwithitems-center- use 
toolbarButtonVariantsinstead oftoggleVariants - fix 
valueprop type bug - uses now 
withTooltip, so replace[data-state=on]witharia-checkedto avoid conflicts 
toggle: removed as unusedtooltip: addwithTooltip, which is used byToolbarButton
January 8 #7.2
table-element- TableProvider must now be rendered above TableElement
// Before
export const TableElement = withRef<typeof PlateElement>(
  ({ className, children, ...props }, ref) => {
    // ...
  }
);
 
// After
export const TableElement = withHOC(
  TableProvider,
  withRef<typeof PlateElement>(({ className, children, ...props }, ref) => {
    // ...
  })
);January 2 #7.1
dropdown-menu- fix: do not excludeclassNameinDropdownMenuContent
December 2023 #6
December 27 #6.3
- 
remove
clsxfrom dependency:class-variance-utilityalready exports it ascx - 
new dependency:
@udecode/cn - 
remove
@/lib/utils.tsin favor ofcnfrom@udecode/cn. Replace all imports from@/lib/utilswith@udecode/cn - 
import
withPropsfrom@udecode/cninstead of `@udecode/plate`
 - 
all components using
forwardRefare now usingwithRef.withProps,withCnandwithVariantsare also used to reduce boilerplate. - 
add
withCnto ESLintsettings.tailwindcss.calleesandclassAttributesin your IDE settings 
// before
const Avatar = React.forwardRef<
  React.ElementRef<typeof AvatarPrimitive.Root>,
  React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>
>(({ className, ...props }, ref) => (
  <AvatarPrimitive.Root
    ref={ref}
    className={cn(
      'relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full',
      className
    )}
    {...props}
  />
));
Avatar.displayName = AvatarPrimitive.Root.displayName;
 
export { Avatar };
 
// after
export const Avatar = withCn(
  AvatarPrimitive.Root,
  'relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full'
);December 25 #6.2
- dialog
 - Plate 28, includes a few optimizations: changes
comboboxinsert-dropdown-menumedia-popovermode-dropdown-menumore-dropdown-menutable-dropdown-menutable-elementturn-into-dropdown-menu
 
December 10 #6.1
image-element: wrap the component withwithHOC(ResizableProvide, ...)media-embed-element: wrap the component withwithHOC(ResizableProvide, ...)
November 2023 #5
28 Nov #5.1
table-element- feat: merging support (plate 26)
 
table-cell-element- feat: merging support (plate 26)
 
comments-popovertoolbar- fix: pressed state
 
September 2023 #4
18 Sept #4.4
editor: New component 🎉 See Editorfixed-toolbar-buttons,floating-toolbar-buttons,mode-dropdown-menu:- plate 24: rename 
usePlateReadOnlytouseEditorReadOnly 
- plate 24: rename 
 code-block-element: changes incode-block-element.css
15 Sept #4.3
table-element- fix: typing in a table should keep the floating toolbar opened
 
floating-toolbar:- fix: import
 
comment-leaf,link-element- feat: use primary color
 
- block selection:
- add this class to 
body:'[&_.slate-selected]:!bg-primary/20 [&_.slate-selection-area]:border [&_.slate-selection-area]:border-primary [&_.slate-selection-area]:bg-primary/10' 
 - add this class to 
 
12 Sept #4.2
button: addwhitespace-nowrappopover: hidden when printingcaption: hidden placeholder when printinghighlight-leaf: highlight color is now based on the primary color
2 Sept #4.1
link-floating-toolbar- fix: props type
 
media-embed-element- fix: use 
alignoption 
- fix: use 
 caption- fix: 
styleprop 
- fix: 
 
August 2023 #3
19 August #3.4
floating-toolbar- changes:- feat: 
refsupport - refactor: using 
useFloatingToolbarState, controlfloatingOptionsdefault value - fix: added 
fallbackPlacementsto keep the floating in the viewport - br: remove the following props: 
portalElement,floatingOptions,ignoreReadOnly,hideToolbar - feat: 
stateprop 
- feat: 
 link-floating-toolbar- changes:- refactor: control 
floatingOptionsdefault value - fix: added 
fallbackPlacementsto keep the floating in the viewport 
- refactor: control 
 
9 August #3.3
mention-element- feat: support bold, italic, underline
3 August #3.2
table-cell-element- feat: support table cell backround styles
2 August #3.1
image-element: refactor: usemediaResizeHandleVariantsmedia-embed-element: refactor: usemediaResizeHandleVariantsresizable- changes:- refactor
 - feat: 
mediaResizeHandleVariants 
table-cell-element:
July 2023 #2
27 July #2.2
caption- new componentimage-element:- refactor: state
 - new registry deps: 
caption,resizable 
media-embed-elementis now fully headless:- new deps: 
react-lite-youtube-embed,react-tweetto decrease the bundle size - new registry deps: 
caption,resizable 
- new deps: 
 media-popover- fix: popover closingresizable- new componenttable-element- fix: popover closing
17 July #2.1
comments-popover- fix: popover not opening on new commentcomment-toolbar-button- feat: hide whenmyUserIdis nullexcalidraw-element- fix: typo
Launch #1
Plate headless components are now available:
On This Page
October 21 #26.9October 17 #26.8October 6 #26.7October 5 #26.6October 4 #26.5September 2025 #26September 28 #26.5September 20 #26.4September 7 #26.3September 5 #26.2September 4 #26.1August 2025 #25August 17 #25.2August 1 #25.1July 2025 #24July 29 #24.11July 27 #24.10July 26 #24.9July 25 #24.8July 23 #24.7July 18 #24.6July 14 #24.5July 3 #24.4July 4 #24.3July 3 #24.2July 2 #24.1June 2025 #23June 29 #23.9June 26 #23.7June 24 #23.6June 20 #23.5June 18 #23.4June 16 #23.3June 13 #23.2June 9 #23.1May 2025 #22May 26 #22.7May 15 #22.6May 11-12 #22.5May 6 #22.3May 4 #22.2May 2 #22.1April 2025 #21April 30 #21.3April 29 #21.2April 19 #21.1April 2 #21.1March 2025 #20March 12 2025 #20.4March 10 #20.3March 2 #20.2March 1 #20.1Feburary 21 #19.3February 18 #19.2February 3 #19.1January 2025 #18January 23 #18.8January 21 #18.7January 18 #18.6January 17 #18.5January 16 #18.4January 14 #18.3January 12 #18.2January 8 #18.1December 2024 #17December 28 #17.8December 27 #17.7December 23 #17.5December 21 #17.4December 20 #17.3December 19 #17.2December 16 #17.1November 2024 #16November 26 #16.9November 21 #16.8November 14 #16.7November 13 #16.6November 8 #16.5November 7 #16.4November 6 #16.3November 5 #16.2November 1 #16.1October 2024 #15October 31 #15.6October 26 #15.5October 25 #15.4October 24 #15.3October 14 #15.3October 10 #15.3October 4 #15.2October 1 #15.1September 2024 #14September 29 #14.3September 13 #14.2September 10 #14.1August 2024 #13August 27 #13.3August 26 #13.2August 12 #13.1July 2024 #12July 14 #12.2July 12 #12.1June 2024 #11June 23 #11.3June 13 #11.2June 6 #11.1May 2024 #10May 30 #10.2May 24 #10.1April 2024 #9April 30 #9.3April 17 #9.2April 6 #9.1February 2024 #8February 6 #8.2February 5 #8.1January 2024 #7January 31 #7.5January 11 #7.4January 9 #7.3January 8 #7.2January 2 #7.1December 2023 #6December 27 #6.3December 25 #6.2December 10 #6.1November 2023 #528 Nov #5.1September 2023 #418 Sept #4.415 Sept #4.312 Sept #4.22 Sept #4.1August 2023 #319 August #3.49 August #3.33 August #3.22 August #3.1July 2023 #227 July #2.217 July #2.1Launch #1