tldraw SDK 4.3

Jan 19, 2026

Steve Ruiz

Hey, this is Steve from tldraw.

We just shipped version 4.3 of the tldraw SDK.

This version improves our tldraw-sync engine for multiplayer collaboration, boosts performance in large files, and provides new ways of subscribing to the editor's state.

You can read the full release notes here, or keep scrolling for the highlights.

SQLite-backed sync storage

Our tldraw sync library now supports pluggable storage. We use SQLite, available in later Node versions or on Cloudflare's Durable Objects, for tldraw.com and our examples; but any synchronous database would work. This change is designed to make persistence more reliable under load, during restarts, and other places where our previous, in-memory implementation could struggle.

We’ve added:

  • A SQLite sync storage implementation

  • Wrappers for Cloudflare Durable Objects and Node.js

  • Updated starter templates and docs

  • Follow-up fixes for migrations, blobs, and edge cases

See the sync documentation for usage examples and migration guides.

Smaller, faster draw data

We've made the SDK's draw and highlight shapes more data-efficient. Previously, draw shapes were stored in JSON as an array of points. On large documents, especially ones with many hand-drawn shapes, this inefficient storage choice would lead to large file sizes. In this version, the information is compressed: first as fixed-sized floats, then using Base64.

The encoded data is used at runtime, too; reducing memory usage and message sizes. We've included helpers for the encoding and decoding. If you've been accessing this data directly, then you'll need to update the way you do that.

Snappy validation

As a holiday experiment, we sent an agent crawling through our validation library to look for speedups and improvements. The experiment was a success, giving this release new fast paths for common validators, better error reports, and a few fixed docs. Our validation was already too fast to notice, but you might see a small improvement when loading large documents, changing pages, or editing many shapes at once.

Validator

Main

Optimized

Speedup

T.number

4.21M

670M

159x

T.positiveNumber

2.55M

27.8M

10.9x

T.nonZeroNumber

2.53M

28.0M

11.1x

T.integer

2.58M

34.2M

13.3x

T.positiveInteger

1.88M

23.9M

12.7x

React 19 compatibility

The SDK is now updated to better support React 19. We've updated our types to better follow React’s definitions, and our examples all now use the latest versions. If you’re upgrading your app too, this should make that path smoother.

Better types for custom shapes

This release includes new work to support global types for custom shapes. Previously, our methods like updateShape knew nothing about the shapes themselves, leading to easy mistakes about the properties of custom shapes. Thanks to work by Mateusz Burzyński, you can now declare your custom shape types globally.

const CIRCLE_CLIP_TYPE = 'circle-clip'

declare module 'tldraw' {
	export interface TLGlobalShapePropsMap {
		[CIRCLE_CLIP_TYPE]: {
			w: number
			h: number
		}
	}
}

export type CircleClipShape = TLShape<typeof CIRCLE_CLIP_TYPE

Check out the change for more information.

And more

We've also shipped 35 more improvements and bug fixes. See the release notes for the full story.

Thanks to everyone who contributed issues, fixes, or thoughtful feedback throughout this release. That feedback genuinely shapes where the SDK goes next.

Want to dig deeper into any of these changes? Connect with the team on Discord or Twitter to ask questions, share ideas, or chat about what you've been building.

© 2026 tldraw

© 2026 tldraw

© 2026 tldraw