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