v3.10.0

This release introduces rich text as a first-class primitive within the Editor, alongside various performance improvements and bug fixes.

What's new

Rich text support

The SDK now offers rich text as a first-class primitive. The implementation utilizes TipTap with its StarterKit extension plus additional customizations. Developers can configure this functionality through a textOptions property to customize TipTap and modify extensions.

API changes

  • 💥 text property on most shapes replaced with richText. When setting values, use richText: toRichText('some string') instead of text: 'some string'. When retrieving values, use renderPlaintextFromRichText(props.text) rather than props.text.
  • Add asset rehydration for .tldr files containing embedded base64 data.
  • Add BrokenAssetIcon display on file upload failures.
  • Add public collaboration hooks (usePeerIds, usePresence).
  • Add userId parameter to collaboration components.

Bug fixes

  • Fix performance regression affecting document loading.
  • Fix Firefox export/style embedding for foreignObjects.
  • Fix shape reparenting order preservation.
  • Fix resize functionality.
  • Fix Safari file pasting issues.
  • Fix SSR environment compatibility (core-js import removal).
  • Fix IME text duplication in Chrome.

View release on GitHub


Patch releases

v3.10.1

  • Fix API reference links in state packages. (#5610)

View release on GitHub

v3.10.2

  • Add textOptions to <TldrawImage /> component. (#5650)

View release on GitHub

v3.10.3

  • Fix Inter font being embedded in exports. (#5676)
  • Reduce excessive styling in exported content. (#5676)

View release on GitHub

Prev
v3.1.0
Next
v3.11.0