# tldraw changelog > tldraw release notes. - Vendor: tldraw - Category: AI - Official site: https://tldraw.dev/ - Tracked by: What's New (https://whatsnew.fyi/product/tldraw) - Harvested from: GitHub (tldraw/tldraw) - Entries below: 10 (newest first) What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. ## Releases ### v5.2.5 - Date: 2026-07-15 - Version: v5.2.5 - Original notes: https://github.com/tldraw/tldraw/releases/tag/v5.2.5 - Permalink: https://whatsnew.fyi/product/tldraw/releases/v5.2.5 Generated from commits between `v5.2.4` and `HEAD` ### v5.2.4 - Date: 2026-07-09 - Version: v5.2.4 - Original notes: https://github.com/tldraw/tldraw/releases/tag/v5.2.4 - Permalink: https://whatsnew.fyi/product/tldraw/releases/v5.2.4 - **fixed** — Don't close the stroke on unfilled closed draw shapes in solid, dashed, and dotted dash styles Generated from commits between `v5.2.3` and `HEAD` ##### Bug Fixes ###### fix(tldraw): don't close the stroke on unfilled closed draw shapes ([#9538](https://github.com/tldraw/tldraw/issues/9538)) - Fix unfilled closed draw shapes drawing a spurious closing segment in the solid, dashed, and dotted dash styles. ### v5.2.3 - Date: 2026-07-06 - Version: v5.2.3 - Original notes: https://github.com/tldraw/tldraw/releases/tag/v5.2.3 - Permalink: https://whatsnew.fyi/product/tldraw/releases/v5.2.3 - **fixed** — Defer arrow endpoint double-click toggle to prevent it from firing before a second click can become a drag Generated from commits between `v5.2.2` and `HEAD` ##### Bug Fixes ###### fix(arrows): defer handle double click toggle ([#9499](https://github.com/tldraw/tldraw/issues/9499)) - Fix arrow endpoint double-click toggles firing before a second click can become a drag. ### v5.2.2 - Date: 2026-07-02 - Version: v5.2.2 - Original notes: https://github.com/tldraw/tldraw/releases/tag/v5.2.2 - Permalink: https://whatsnew.fyi/product/tldraw/releases/v5.2.2 - **fixed** — Stop PNG and SVG exports from clipping the edges of italic, right-to-left, and cursive text glyphs Generated from commits between `v5.2.1` and `HEAD` ##### Bug Fixes ###### fix(tldraw): stop PNG/SVG exports clipping text glyph ink ([#9463](https://github.com/tldraw/tldraw/issues/9463)) - Fix exported PNG and SVG images clipping the edges of italic, right-to-left, and cursive text. ### v5.2.1 - Date: 2026-07-01 - Version: v5.2.1 - Original notes: https://github.com/tldraw/tldraw/releases/tag/v5.2.1 - Permalink: https://whatsnew.fyi/product/tldraw/releases/v5.2.1 Generated from commits between `v5.2.0` and `HEAD` ##### Documentation - Update docs for latest release (missed in last release) ### v5.2.0 - Date: 2026-07-01 - Version: v5.2.0 - Original notes: https://github.com/tldraw/tldraw/releases/tag/v5.2.0 - Permalink: https://whatsnew.fyi/product/tldraw/releases/v5.2.0 - **changed** — Rewrite the freehand ink algorithm to compute draw and highlighter strokes 2–3x faster and produce 57% smaller SVG path data - **added** — Add a Frame selection action that wraps selected shapes in a frame with cmd+shift+f - **removed** — Remove triple-click and quadruple-click event tracking from ClickManager, including triple_click and quadruple_click events and onTripleClick and onQuadrupleClick handlers - **removed** — Move ShapeIndicatorOverlayUtil and TLShapeIndicatorOverlay from @tldraw/editor to tldraw - **removed** — Drop support for Node 20, with minimum supported Node now >=22.12.0 - **changed** — Type collaborator user-id APIs as TLUserId instead of string in TLInstancePresence, TLInstance, Editor methods, and presence hooks - **removed** — Remove StrokePoint.vector and setStrokePointRadii from the freehand stroke pipeline - **removed** — Remove the obsolete selection-background slot from @tldraw/editor including DefaultSelectionBackground, TLSelectionBackgroundProps, TLEditorComponents.SelectionBackground, and useTransform helper - **added** — Add embedConfig option to EmbedShapeUtil for passing per-embed configuration such as API keys - **added** — Add allowVideoAutoplay option to TldrawOptions to control video shape autoplay behavior - **added** — Add ShapeUtil.getContentElement and ShapeUtil.onReleaseContentElement for app-owned content element lifecycle - **changed** — Open context menu with right-click from any tool and with touch long-press on select tool - **added** — Add shift+q shortcut to copy styles of hovered shape and apply them to next created shapes - **added** — Add double-tap-and-drag zoom gesture for touch devices - **changed** — Highlight shapes in frame tool as you drag out a frame to show which shapes it will enclose - **changed** — Show immediate loading placeholder with spinner for pasted bookmarks at paste location - **changed** — Make selection corner rotate handles easier to grab - **changed** — Reduce default indentation on rich-text lists so nested lists take up less horizontal space - **changed** — Load mermaid dependency in @tldraw/mermaid lazily so the package is requirable from CommonJS This release brings in performance improvements across tldraw. The freehand ink algorithm now computes strokes 2–3x faster, shape resizing is quicker, and editor load time is reduced. Multi-click handling was simplified to double-click only to support improved mobile gestures. Plus it's easier to add shapes to frames, and dozens of bugs were fixed. ##### What's new ###### Faster freehand ink ([#9154](https://github.com/tldraw/tldraw/pull/9154)) We rewrote the freehand ink algorithm. Draw and highlighter strokes now compute about 2x faster (up to 3x for long strokes) and produce 57% smaller SVG path data, with no visible change to how strokes look. The rewrite removes two rarely-used stroke APIs; see the breaking changes in [API changes](#api-changes). ###### Frame selection ([#8151](https://github.com/tldraw/tldraw/pull/8151)) A new "Frame selection" action wraps the selected shapes in a frame with `cmd+shift+f`. When a frame is selected, the same shortcut removes it. ##### API changes - 💥 Simplify multi-click handling to double-click only. `ClickManager` no longer tracks triple or quadruple clicks: the `triple_click` and `quadruple_click` events and the `onTripleClick` / `onQuadrupleClick` handlers have been removed, and `TLClickEventName` is now just `'double_click'`. ([#8897](https://github.com/tldraw/tldraw/pull/8897)) - 💥 Move `ShapeIndicatorOverlayUtil` and `TLShapeIndicatorOverlay` from `@tldraw/editor` to `tldraw`. Both are still exported from `tldraw`; update any imports of these symbols that came directly from `@tldraw/editor`. ([#9018](https://github.com/tldraw/tldraw/pull/9018)) - 💥 Drop support for the EOL Node 20. The minimum supported Node is now `>=22.12.0`, the first version with native `require()` of ES modules, so tldraw can depend on ESM-only packages. ([#9098](https://github.com/tldraw/tldraw/pull/9098)) - 💥 Type the collaborator user-id APIs as `TLUserId` instead of `string`. `TLInstancePresence.userId` / `followingUserId`, `TLInstance.followingUserId` / `highlightedUserIds`, `Editor.startFollowingUser()`, `Editor.zoomToUser()`, `usePresence()`, `usePeerIds()`, and the people-menu prop types now use `TLUserId`. Runtime behavior is unchanged: `TLUserId` is a branded string, so cast plain strings at the call site, for example `editor.startFollowingUser(userId as TLUserId)`. ([#9002](https://github.com/tldraw/tldraw/pull/9002)) - 💥 Remove `StrokePoint.vector` and `setStrokePointRadii` from the freehand stroke pipeline. The vector is derivable from consecutive points and radius/taper computation now happens inside `getStroke` and `svgInk`; nothing in the SDK consumed these outside the pipeline itself. ([#9154](https://github.com/tldraw/tldraw/pull/9154)) - 💥 Remove the obsolete selection-background slot from `@tldraw/editor`: `DefaultSelectionBackground`, `TLSelectionBackgroundProps`, `TLEditorComponents.SelectionBackground`, and the `useTransform` helper. These were unused and have no replacement; remove any references to them. ([#9362](https://github.com/tldraw/tldraw/pull/9362)) - Add an `embedConfig` option to `EmbedShapeUtil` for passing per-embed configuration such as API keys. The default Google Maps embed no longer reads `process.env.NEXT_PUBLIC_GC_API_KEY` — pass the key explicitly instead. ([#9068](https://github.com/tldraw/tldraw/pull/9068)) ```ts EmbedShapeUtil.configure({ embedConfig: { google_maps: { apiKey: '...' } }, }) ``` - Add an `allowVideoAutoplay` option to `TldrawOptions`. When set to `false`, no video shape autoplays regardless of its per-shape `autoplay` prop — including pasted and restored shapes. Defaults to `true`. ([#8943](https://github.com/tldraw/tldraw/pull/8943)) - Add `ShapeUtil.getContentElement` and `ShapeUtil.onReleaseContentElement`, an app-owned content element lifecycle that lets stateful shape content (such as cross-origin iframes) survive unmounting the editor. ([#9167](https://github.com/tldraw/tldraw/pull/9167)) _[Truncated at 4000 characters — full notes: https://github.com/tldraw/tldraw/releases/tag/v5.2.0]_ ### v5.1.1 - Date: 2026-06-12 - Version: v5.1.1 - Original notes: https://github.com/tldraw/tldraw/releases/tag/v5.1.1 - Permalink: https://whatsnew.fyi/product/tldraw/releases/v5.1.1 - **fixed** — Fixed a bug when user enters pen mode while a finger/hand is on the touch screen device by cancelling previous touches so the line starts where the pen first touched the screen Generated from commits between `v5.1.0` and `HEAD` ##### Bug Fixes ###### fix(editor): forgets previous touch interactions when entering pen mode ([#9162](https://github.com/tldraw/tldraw/issues/9162)) - Fixed a bug when user enter pen mode while a finger/hand is on the touch screen device. We cancel previous touches and the line starts where the pen first touched the screen. ### v5.1.0 - Date: 2026-06-03 - Version: v5.1.0 - Original notes: https://github.com/tldraw/tldraw/releases/tag/v5.1.0 - Permalink: https://whatsnew.fyi/product/tldraw/releases/v5.1.0 - **changed** — Redesign the page menu to support inline interactions, including dragging to reorder pages, double-clicking to rename inline, and adjusting list height with a resize handle that persists across sessions - **added** — Add a `selectLockedShapes` option to `TldrawOptions` that allows locked shapes to be selected by left click or brush/scribble selection while remaining protected from edits, moves, and deletes - **added** — Export `TldrawUiTranslationProvider`, `AssetUrlsProvider`, and `useAssetUrls` as public API - **added** — Add `FontManager.dispose()`, `OverlayManager.dispose()`, and `OverlayUtil.dispose()` for cleaning up manager state across editor lifecycles - **added** — Add a `q` shortcut that copies the styles of the hovered shape and applies them to the next shape you create - **changed** — Improve performance on busy canvases by skipping the sort step in `getRenderingShapes()` when only shape props, not the set of shape ids, have changed - **changed** — Improve drawing performance on pages with many shapes by skipping spatial index and culling recomputation when only shape props change - **fixed** — Fix a misleading "license expired" console warning for perpetual licenses on covered versions - **fixed** — Fix inconsistent tooltip behavior on the video toolbar by using `TldrawUiToolbarButton` for the replace and download buttons - **fixed** — Fix the missing open-state hint on the page menu and zoom menu triggers when rendered outside the main toolbar - **fixed** — Mark the tldraw UI layer with `role="document"` so toolbars, menus, and dialogs stay reachable to mobile screen readers - **fixed** — Fix selection edge resize handles overlapping corner handles, which made corners hard to grab on small shapes - **fixed** — Fix a bug where deleting a shape inside a group could move the group to a different z-index - **fixed** — Avoid console errors from calling `preventDefault` on non-cancelable events - **fixed** — Only log the missing-translation warning once per session instead of once per `useTranslation` consumer - **fixed** — Catch `image.decode()` rejections from the icon preload effect so they no longer surface as uncaught promise errors in the console This release redesigns the page menu around inline interaction, adds a keyboard shortcut to copy styles from a hovered shape, and adds a `selectLockedShapes` option for inspecting locked shapes, along with new public translation APIs, canvas performance improvements, and various rendering and UI bug fixes. ##### What's new ###### Page menu redesign ([#8836](https://github.com/tldraw/tldraw/pull/8836)) The page menu no longer has an explicit edit mode. Reorder pages by dragging a row directly, rename inline by double-clicking the label or pressing Enter, and drag the new resize handle at the bottom of the popover to adjust the list height — the height is persisted across sessions and a double-click on the handle resets it to the default. The current page is now indicated by a subtle background pill, the row submenu trigger reveals on hover, and the "Create new page" button is pinned to the footer of the popover. ##### API changes - Add a `selectLockedShapes` option to `TldrawOptions`. When enabled, locked shapes can be selected by left click or by brush/scribble selection while remaining protected from edits, moves, and deletes. ([#8860](https://github.com/tldraw/tldraw/pull/8860)) - Export `TldrawUiTranslationProvider`, `AssetUrlsProvider`, and `useAssetUrls` as public API so components like `TldrawSelectionForeground` can be rendered without the full `TldrawUiContextProvider`. ([#8909](https://github.com/tldraw/tldraw/pull/8909)) - Add `FontManager.dispose()`, `OverlayManager.dispose()`, and `OverlayUtil.dispose()` for cleaning up manager state across editor lifecycles. ([#8896](https://github.com/tldraw/tldraw/pull/8896)) ##### Improvements - Add a `q` shortcut that copies the styles of the hovered shape and applies them to the next shape you create. ([#8917](https://github.com/tldraw/tldraw/pull/8917)) (contributed by [@kaneel](https://github.com/kaneel)) - Improve performance on busy canvases — `getRenderingShapes()` now skips its sort step when only shape props, not the set of shape ids, have changed. ([#8784](https://github.com/tldraw/tldraw/pull/8784)) - Improve drawing performance on pages with many shapes by skipping spatial index and culling recomputation when only shape props change. ([#8799](https://github.com/tldraw/tldraw/pull/8799), [#8804](https://github.com/tldraw/tldraw/pull/8804)) ##### Bug fixes - Fix a misleading "license expired" console warning for perpetual licenses on covered versions. ([#8791](https://github.com/tldraw/tldraw/pull/8791)) - Fix inconsistent tooltip behavior on the video toolbar by using `TldrawUiToolbarButton` for the replace and download buttons. ([#8794](https://github.com/tldraw/tldraw/pull/8794)) - Fix the missing open-state hint on the page menu and zoom menu triggers when rendered outside the main toolbar. ([#8813](https://github.com/tldraw/tldraw/pull/8813)) - Mark the tldraw UI layer with `role="document"` so toolbars, menus, and dialogs stay reachable to mobile screen readers like VoiceOver and TalkBack, which do not announce the outer canvas `role="application"`. ([#8901](https://github.com/tldraw/tldraw/pull/8901)) - Fix selection edge resize handles overlapping corner handles, which made corners hard to grab on small shapes. ([#8926](https://github.com/tldraw/tldraw/pull/8926)) - Fix a bug where deleting a shape inside a group could move the group to a different z-index. ([#8925](https://github.com/tldraw/tldraw/pull/8925)) (contributed by [@kaneel](https://github.com/kaneel)) - Avoid console errors from calling `preventDefault` on non-cancelable events. ([#8910](https://github.com/tldraw/tldraw/pull/8910)) - Only log the missing-translation warning once per session instead of once per `useTranslation` consumer. ([#8909](https://github.com/tldraw/tldraw/pull/8909)) - Catch `image.decode()` rejections from the icon preload effect so they no longer surface as uncaught promise errors in the console. ([#8824](https://github.com/tldraw/tldr _[Truncated at 4000 characters — full notes: https://github.com/tldraw/tldraw/releases/tag/v5.1.0]_ ### v5.0.2 - Date: 2026-05-20 - Version: v5.0.2 - Original notes: https://github.com/tldraw/tldraw/releases/tag/v5.0.2 - Permalink: https://whatsnew.fyi/product/tldraw/releases/v5.0.2 - **fixed** — Fix pattern fill exports broken in dark mode when the editor was in light mode (and vice versa) Generated from commits between `v5.0.1` and `HEAD` ##### Bug Fixes ###### fix(tldraw): pattern fill exports broken in dark mode ([#8872](https://github.com/tldraw/tldraw/issues/8872)) - Fix pattern fill exports broken in dark mode when the editor was in light mode (and vice versa). ### v5.0.1 - Date: 2026-05-15 - Version: v5.0.1 - Original notes: https://github.com/tldraw/tldraw/releases/tag/v5.0.1 - Permalink: https://whatsnew.fyi/product/tldraw/releases/v5.0.1 - **added** — Add optional sideOffset prop to StylePanelDropdownPickerProps for tuning popover position when the trigger isn't at the panel's left edge - **fixed** — Fix sizing and offset for style panel dropdown buttons so fill pattern and vertical alignment popovers open left of the style panel Generated from commits between `v5.0.0` and `HEAD` ##### Bug Fixes ###### fix(tldraw): style panel dropdown sizing and offset ([#8850](https://github.com/tldraw/tldraw/issues/8850)) - Added optional `sideOffset` prop to `StylePanelDropdownPickerProps` for tuning popover position when the trigger isn't at the panel's left edge. - Fix sizing and offset for style panel dropdown buttons so fill pattern and vertical alignment popovers open left of the style panel.