Since Plate UI is not a component library, a changelog is maintained here.
Use the CLI to install the latest version of the components.
March 2026 #29
March 16 #29.3
table-node: Hide browser text-selection fragments during multi-cell table selection by aligning the table selection data attribute with the selection-suppression CSS hook.
March 15 #29.2
table-node: Reduce large-table selection latency by syncing selected-cell highlights from the table root, caching repeated selection queries, indexing table cell DOM elements by id, reusing table grid lookups during selection range expansion, keeping the selection simulator on lightweight selected-cell ids, and deferring expanded selection toolbar mount until the selection settles.
March 11 #29.1
table-node: Improved large-table editing performance by applying column widths at the table level, row heights at the row level, and keeping editable resize handles aligned with the table control column.
January 2026 #28
January 20 #28.3
- AIChat: Fixed assistant input width not expanding when panel is expanded
January 19 #28.2
inline-combobox: Added keyboard navigation cycling at list boundaries- ArrowUp at first item cycles to last item
- ArrowDown at last item cycles to first item
- Prevents null activeId using capture-phase event handling
January 17 #28.1
- DOCX Import/Export: New
@platejs/docx-iopackage for Word document handlingimport-toolbar-button: Import DOCX files withimportDocxexport-toolbar-button: Export to DOCX withexportToDocxdocx-export-kit: DOCX-optimized components usingDocxExportPlugin.configure({ override: { components } })
- DOCX Static Components: Added to existing static files with
*Docxnaming pattern:callout-node-static:CalloutElementDocxcode-block-node-static:CodeBlockElementDocx,CodeLineElementDocx,CodeSyntaxLeafDocxcolumn-node-static:ColumnElementDocx,ColumnGroupElementDocxequation-node-static:EquationElementDocx,InlineEquationElementDocxtoc-node-static:TocElementDocx
December 2025 #27
December 23 #27.3
code-drawing-node: Added new code drawing component with inline editing support- Support for multiple diagram types: PlantUML, Graphviz, Flowchart, and Mermaid
- Inline code editing with real-time preview (no popup dialog)
- Multiple view modes: Both (code + preview), Code only, Image only
- Responsive layout: horizontal on desktop, vertical on mobile
- Floating toolbar with language selector, view mode selector, and download button
- Debounced rendering (500ms) for optimal performance
December 23 #27.2
- AI Prompt System Refactoring: Complete restructuring of AI command prompts for better maintainability
- Split monolithic
prompts.tsinto focused modules:getEditPrompt,getGeneratePrompt,getCommentPrompt,getEditTablePrompt,getChooseToolPrompt - Added new
common.tsfor shared prompt utilities - Enhanced table cell editing capabilities with specialized prompts
- Split monolithic
- AI Table Cell Handling: Improved support for editing single-cell tables
use-chat: Enhanced with parser options for better AI content processingcursor-overlay: Fixed overlay positioning and behavior- Added tests for complex table markdown generation
- API Routes: Updated AI command and copilot routes with improved prompt selection logic
December 16 #27.1
table-node: Fixed table row drag and drop - rows could be dragged but not dropped, and dropline wasn't showing. Added missingnodeRefto element ref composition.
November 30 #26.10
inline-combobox: Added Yjs collaboration support - combobox popover now only shows for the user who triggered it, preventing the popover from opening for all users in collaborative editing
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 @plate/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
March 2026 #29March 16 #29.3March 15 #29.2March 11 #29.1January 2026 #28January 20 #28.3January 19 #28.2January 17 #28.1December 2025 #27December 23 #27.3December 23 #27.2December 16 #27.1November 30 #26.10October 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