Take full programmatic control of your canvas with signals-based reactivity state system.
Lifecycle hooks
Query shapes, pages, and assets through a consistent API with automatic relationship management and referential integrity.
Reactive signals system
Track dependency automatically with fine-grained reactivity that only updates components when their specific data changes.
Computed properties
Derive new data from canvas state that updates automatically when dependencies change. Build dynamic UI panels, analytics dashboards, and custom views that stay in sync effortlessly.
Real-time synchronization
Enjoy a built-in support for collaborative editing with conflict resolution and state reconciliation across multiple users and devices.
Reactive by design
A signals-based core handles state complexity while keeping interactions silky smooth.
Production ready starter kit to build a canvas application with multiplayer. Building something different?
Solid engineering
Our team spent years to get all the details right, so you don’t have to.
Automatic state management
The state system is built on a signals architecture where all data is reactive and dependencies are tracked automatically. Components and computations update only when their dependencies change, ensuring high performance even in complex canvas applications. The system automatically tracks what data each component needs and prevents unnecessary updates, keeping your application responsive as it scales.
Normalized record storage with relationship management
All canvas data is stored in a normalized structure where shapes, pages, assets, and user preferences exist as separate record types with managed relationships. The system enforces referential integrity, applies cascading updates, and provides type-safe access to related data. This design ensures consistency, supports complex applications, and enables efficient queries.
Transaction system with intelligent batching
The transaction system groups multiple state changes into atomic operations that can be undone or redone as a single unit. Batching prevents costly intermediate computations and creates clear history boundaries. It also supports nested transactions, custom rollback logic, and efficient bulk operations for complex workflows.
Examples
See for yourself
Have a look at our examples on how to implement UI customization features.
Reactive state with signals
React to changes using tldraw's signal-based state system with automatic dependency tracking and performance optimization.
Store event monitoring
Listen to real-time changes from the canvas store and observe state updates across shapes, pages, and user interactions.
Derived data views
Create efficient incremental derivations to compute specific views of canvas data with automatic cache management.
State that stays fresh
Automatic updates, dependency tracking, and smooth collaboration built in.

