Download Latest Version v4.0.4 source code.tar.gz (76.6 MB)
Email in envelope

Get an email when there's a new version of tldraw

Home / v4.0.3
Name Modified Size InfoDownloads / Week
Parent folder
README.md 2025-10-02 52.2 kB
v4.0.3 source code.tar.gz 2025-10-02 76.6 MB
v4.0.3 source code.zip 2025-10-02 78.3 MB
Totals: 3 Items   154.9 MB 18

Release Notes

Make sure templates don't use internal functions (#6871)

  • Removed imports of internal functions from the agent and workflow starters.

a11y: rename Enable UI labels → Enhanced accessibilty mode (#6797)

  • a11y: rename Enable UI labels → Enhanced accessibilty mode

Allow users to set a trackpad/mouse preference to control wheel behaviour (#6755)

  • Added preferences to set wheel behaviour for pointer peripherals

Use un-nested clip path when checking overlapping shapes (#6792)

  • Fixed a bug with how overlapping shapes are calculated

style panel: followup to fix labels for long translations (#6790)

  • style panel: followup to fix labels for long translations

Use pointingPreciseTimeout in DraggingHandle (#6787)

  • Fixed a bug where the Arrow tool's pointingPreciseTimeout option was not being respected.

style panel: fix certain labels on mobile (#6783)

  • style panel: fix certain labels on mobile

Add keyboard shortcut to toggle lock tooltip description (#6757)

  • Add Q to the tooltip description for the toggle lock icon

a11y: enable hoverable tooltips for accessible mode (#6762)

  • a11y: enable hoverable tooltips for accessible mode

a11y: more followup work to [#6750] (#6760)

a11y: many more little fixes (#6750)

  • a11y: many more fixes, including: accessible contextual toolbars, fixing missing labels in various places, more contrast for placeholder text, and adding lang for our language menu

a11y: add "selected" to style panel/sidebar for clarity (#6734)

  • a11y: add "selected" to style panel/sidebar for clarity

a11y: make menus scrollable when zoomed in (#6740)

  • a11y: make menus scrollable when zoomed in

Add maximum file size in description of the file too big toast (#6745)

  • Added maximum file size to the description of the file too big toast, when uploading a file.

remove AI module & template (#6748)

replace stopEventPropagation with markEventAsHandled and kill e.isKilled (#6733)

Fix .png pHYs's unit field being parsed incorrectly (#6735)

  • Fixed a bug where our parsing of the pHYs's unit field was inconsistent with the png specification Screenshot 2025-09-12 at 16 43 30

license: have NATIVE_LICENSE use a regex (#6732)

  • license: have NATIVE_LICENSE use a regex

license: add new NATIVE_LICENSE type (#6726)

  • license: add new NATIVE_LICENSE type

shape ordering: use jittered-fractional-indexing package (#6646)

  • shape ordering: use jittered-fractional-indexing package

Agent starter template (#6678)

  • Added agent starter template.

Fix arrow export for arrows with labels (#6637)

  • Fixed a bug where arrow labels were being cut off in exported images

a11y: followup on minor issues (#6721)

  • a11y: fix various aria-label issues
  • a11y: show tooltips immediately when showUiLabels is on

prioritised topological sort for migrations (#6702)

  • Migrations with explicit dependsOn constraints will now be scheduled as close as possible to the things they depend on

automatically pull license from env var (#6711)

  • tldraw will automatically find your license key in an environment variable if it's passed through by your bundler. We check TLDRAW_LICENSE_KEY, NEXT_PUBLIC_TLDRAW_LICENSE_KEY, REACT_APP_TLDRAW_LICENSE_KEY, GATSBY_TLDRAW_LICENSE_KEY, VITE_TLDRAW_LICENSE_KEY, and PUBLIC_TLDRAW_LICENSE_KEY.

Update licensing logic (#6576)

  • tldraw editor now requires a license to be used in production. This could be a regular paid license, or an evaluation license.

Fix over-measuring arrow labels, alt take (#6673)

  • Fix over-measuring arrow labels, alt take

Fix arrow shape when dragged out of toolbar (#6686)

  • Fixed shape of arrow when dragging out of toolbar

events: allow passthrough mouse events only when focused (#6661)

  • events: allow passthrough mouse events only when focused

More customizable style panel (#6672)

remove unused deprecated APIs for 4.0 (#6670)

Export doesGeometryOverlapPolygon (#6679)

  • Added the overlapsPolygon method to the Geometry2D class.

a11y: add tooltip for opacity slider and image/text toolbars (#6663)

  • a11y: add tooltip for opacity slider and image/text toolbars

Fix internal license logic. (#6665)

  • Fix a bug with expired internal license check.

Save and reinstate documentClock properly (#6666)

  • Fixes a bug where the documentClock would advance even if no document changes had occurred when loading a new snapshot.

Allow custom shapes to clip their children (#6649)

  • Add the ability for custom shapes to clip their children just like the frame shape.

Track which url was opened. (#6654)

  • Breaking change: url param of the open-url event was renamed to destinationUrl.

Add translation key for rhombus (#6653)

  • Added missing translation key for rhombus 2.

a11y: add tooltip for opacity slider (#6647)

  • a11y: add tooltip for opacity slider

kbd shortcuts: fix up some badly formatted ones on win/linux (#6638)

  • kbd shortcuts: fix up some badly formatted ones on win/linux

Skip padding on image exports (#6636)

  • When exporting an annotated image, we no longer add padding unless the annotations stray over the bounds of the image.

Fix mobile touch handling inside editing shape (#6628)

  • Fixed a bug that prevented certain pointer events from firing in editable shapes on mobile.

Fix misaligned InFrontOfCanvas ui when canvas is inset (#6626)

  • On canvas UI renders in the correct place when the canvas is inset from the tldraw container.

Support sending custom server messages to connected clients (#6614)

  • Added support for sending custom messages from TLSocketRoom to connected clients

Allow passthrough wheel events when not focused (#6640)

  • Items marked with usePassThroughWheelEvents no longer block wheel events when the editor is not focused.

make tooltip delays work without editor context (#6623)

  • Fix tooltip delays when TldrawUiTooltip is used outside of an editor context

Skip font loading when maxFontsToLoadBeforeRender is 0 (#6622)

  • Tldraw now completely skips font loading when maxFontsToLoadBeforeRender is 0

Revert "Restore DPR constrained width/height on shapes." (#6611)

Fix embeds being positioned incorrectly on chrome when zoom isn't 100%

Memoize asset urls merging (#6605)

  • Fixed a bug where the editor would remount in a loop if given custom assetUrls.

fix: Use KeyboardShortcutsDialog override when available, fix TipTap "Header" shortcut label (#6571)

  • KeyboardShortcutsDialog override is now respected in more places
  • Fix an incorrectly listed keyboard shortcut

increase drag threshold for mobile toolbar (#6596)

  • Prevent drag-from-toolbar being triggered accidentally on mobiles

Workflow builder starter kit (#6412)

Accel key to only erase the top shape (#6554)

  • Feature: hold command or control while erasing to erase only the first shape that you began erasing. Useful for erasing overlapping shapes!

namespace css variables (#6568)

  • BREAKING: all of tldraw's css variables now start with --tl. e.g. --color-background is now --tl-color-background, --space-4 is now --tl-space-4, etc. Names which already started with --tl- remain the same.

Vertical toolbar example (#6532)

Highlight rectangle selection with custom color (#6545)

  • Added a new example demonstrating how to dynamically change the selection color based on selected shape types.

<picture> Open in Cursor </picture> <picture> Open in Web </picture>

Drag out of toolbar (again) (#6563)

  • Adds the ability to drag shapes from the toolbar onto the canvas.

Rework toolbar classnames (#6526)

Unsaved changes examples (#6533)

  • Add an option to squashRecordDiffs to allow mutating the first diff instead of creating a new diff.

a11y: add preference to show labels/tooltips (#6444)

  • a11y: add preference to show labels/tooltips

Fix edge hitting on arrows (#6525)

  • Fixed a bug where hollow shapes could not be bound-to by arrows when overlapping a filled shape.

Fix: change handlers not passed to new room instance (#6549)

  • TBD

Add solo sync mode (#6524)

  • useSync now only sends presence updates, like mouse and camera positions, when there are more than one unique user in a room.

add EditorAtom helper (#6531)

Permit drag out of toolbar (#4793)

  • Adds the ability to drag shapes from the toolbar onto the canvas.

Adds a data-state attribute with the current state-tree path to tl-container (#6515)

  • There's now a data-state attribute on .tl-container which contains the current state tree path. This makes it easier to write styles based on the current interaction state.

add custom shape wrapper component (#6514)

a11y: add rotate kbd shortcut (#6447)

  • a11y: add rotate kbd shortcut

arrows: add rich text (#6325)

  • Add rich text for arrow labels.

feat: export additional components and methods (#6513)

  • Added public exports for TldrawCropHandles, ToggleToolLockedButton, getHitShapeOnCanvasPointerDown, getAssetInfo, useUnlockedSelectedShapesCount, and LockGroup to support external customization use cases.

add Editor.updatePointer method (#6494)

Delete page shapes before deleting the page itself (#6333)

  • Fixed a bug when deleting pages that prevented the shapes on that page from being garbage collected.

TLSyncRoom optimization (#6488)

  • Improve server-side performance when dealing with large rooms in tldraw sync

add isCreatingShape to ShapeUtil handle drag callbacks (#6493)

More shapeutil callbacks (#6489)


🐛 Bug Fix

⚠️ Pushed to v4.0.x

  • Deploy from hotfix (c0efe5b9a76eff179c313c703d7cc6348a7f0fc7) at 2025-09-08T12:41:48Z (@web-flow)
  • Deploy from hotfix (b924a019eece17276c1343533c1992bff82d6509) at 2025-09-08T10:56:27Z (@web-flow)
  • Deploy from hotfix (ff9b529e84a7f67c82e575b227ff286232caca94) at 2025-09-08T07:46:47Z (@web-flow)
  • Deploy from hotfix (0b76ee7687242b46f401b69fa7343bee992169a1) at 2025-08-08T12:17:56Z (@web-flow)
  • Deploy from hotfix (8c7a47d3d46c18ecd1cfb521425b7a2a1f47b34d) at 2025-07-30T14:56:43Z (@web-flow)
  • Deploy from hotfix (5f24c66fed6421debfd81ac9bbaca67e011701f8) at 2025-07-30T14:01:08Z (@web-flow)
  • @tldraw/assets, create-tldraw, @tldraw/editor, @tldraw/tldraw, @tldraw/state-react, @tldraw/state, @tldraw/store, @tldraw/sync-core, @tldraw/sync, tldraw, @tldraw/tlschema, @tldraw/utils, @tldraw/validate
  • v4.0.0 (@huppy-bot[bot])
  • Deploy from main (eb9a487b3293ada6808a0dca5924d3640aae3bbf) at 2025-09-03T14:45:33Z (huppy+steveruizok@tldraw.com)
  • Deploy from main (800e55564c4a59f28b583eeba69d864c245851b3) at 2025-07-30T09:48:00Z (huppy+mimecuvalo@tldraw.com)
  • create-tldraw, @tldraw/dotcom-shared, @tldraw/editor, @tldraw/store, tldraw, @tldraw/tlschema, @tldraw/utils, @tldraw/validate, @tldraw/worker-shared
  • Deploy from main (31c6f67b492ad8ab811977d0280061b06a697900) at 2025-09-18T14:17:37Z (huppy+SomeHats@tldraw.com)
  • tldraw
  • Deploy from hotfix (11c14a37777fb8bf623131c46b0bd060b3c4601a) at 2025-08-27T13:41:52Z (@web-flow)
  • @tldraw/assets, create-tldraw, @tldraw/editor, @tldraw/tldraw, @tldraw/state-react, @tldraw/state, @tldraw/store, @tldraw/sync-core, @tldraw/sync, tldraw, @tldraw/tlschema, @tldraw/utils, @tldraw/validate, @tldraw/worker-shared
  • Deploy from main (d8ae9a640492b56a2d344ba65fa2605b5522de52) at 2025-08-27T11:20:51Z (huppy+mimecuvalo@tldraw.com)
  • @tldraw/assets, create-tldraw, @tldraw/dotcom-shared, @tldraw/editor, @tldraw/tldraw, @tldraw/state-react, @tldraw/state, @tldraw/store, @tldraw/sync-core, @tldraw/sync, tldraw, @tldraw/tlschema, @tldraw/utils, @tldraw/validate, @tldraw/worker-shared
  • Deploy from main (dbaaa1b0049c11c242d26fe16f5c82d6e2922b3a) at 2025-08-20T10:13:25Z (huppy+AniKrisn@tldraw.com)
  • Deploy from main (1b74ce1c7283a8480debcc6718b9dba2c8fc4e7a) at 2025-08-14T10:06:23Z (huppy+TodePond@tldraw.com)
  • @tldraw/editor, tldraw
  • Deploy from hotfix (c06a9901cfc27a9decdcc8a50f30c7969c70ed75) at 2025-08-15T10:31:52Z (@web-flow)
  • @tldraw/assets, create-tldraw, @tldraw/dotcom-shared, @tldraw/editor, @tldraw/tldraw, @tldraw/state-react, @tldraw/state, @tldraw/store, @tldraw/sync-core, @tldraw/sync, tldraw, @tldraw/tlschema, @tldraw/utils, @tldraw/validate
  • Deploy from main (a03de714c746d6425679de4bb36376594d670b51) at 2025-08-06T14:17:12Z (huppy+ds300@tldraw.com)
  • @tldraw/sync-core
  • Deploy from hotfix (0733849b4f4a3a24c9396e2bb7fa91302ce37267) at 2025-08-06T08:37:04Z (@web-flow)

🐛 Bug Fixes

💄 Product Improvements

🎉 New Features

🛠️ API Changes

🏠 Internal

Authors: 23

Source: README.md, updated 2025-10-02