MIT licensed · Zero dependencies
The open‑source whiteboard SDK
A complete infinite-canvas whiteboard for React, React Native, and the plain web. Pressure ink, shapes, sticky notes, undo, real‑time‑ready sync — free for commercial use, forever.
Live board — go ahead, draw on it
A complete whiteboard, not a toolkit you assemble
Pressure ink
The pen's width follows stylus pressure — or velocity for mouse users — and strokes taper like a real pen.
Hand-drawn shapes
Rectangles, ellipses, triangles, diamonds, hexagons, stars — with a subtle sketched wobble, four fill styles, and editable labels.
Real-time sync
Every change emits a JSON-safe diff. Ship it over any transport; remote changes never pollute local undo.
Palm rejection
Once a stylus is seen, fingers steer the camera and the pen draws. Apple Pencil feels native.
Infinite canvas
Pan, wheel zoom, two-finger pinch, zoom-to-fit. Ruled or dotted grids that adapt to the zoom.
And the rest
Arrows with draggable bend, sticky notes, images, laser pointer, PNG export, per-gesture undo, light & dark themes, full keyboard map.
Install, render, done
npm install @quickdrawjs/react import { Quickdraw } from '@quickdrawjs/react'
import '@quickdrawjs/core/quickdraw.css'
export default function Board() {
return <Quickdraw theme="light" grid="dots" />
} npm install @quickdrawjs/core import { createQuickdraw } from '@quickdrawjs/core'
import '@quickdrawjs/core/quickdraw.css'
createQuickdraw({
container: document.getElementById('board'),
}) npm install @quickdrawjs/react-native react-native-webview import { Quickdraw } from '@quickdrawjs/react-native'
<Quickdraw
theme="dark"
onChange={(diff) => sync(diff)}
style={{ flex: 1 }}
/>
That's the whole integration. Persistence is one call —
store.getSnapshot() returns plain JSON.
Read the docs →
How it compares
tldraw and Excalidraw are both excellent. Quickdraw is for teams that want an MIT license, a framework-free core, and React Native support in the same package.
| Quickdraw | tldraw SDK | Excalidraw | |
|---|---|---|---|
| License | MIT | Custom | MIT |
| Free for commercial use, no paid tiers | paid business license tier | ||
| React component | |||
| Works without React | |||
| React Native package | |||
| Zero-dependency core | |||
| Pressure ink + palm rejection | pressure only | ||
| Diff-based sync primitive | via excalidraw-room |
Comparison reflects public docs as of August 2026 — see tldraw's license and Excalidraw's repo. Spot an error? Tell us and we'll fix it.
Questions people ask
Is Quickdraw really free for commercial use?
Yes. MIT means you can embed it in commercial products, modify it, and redistribute it — no license key, no fees, forever. The license can't be revoked for versions you already have.
Can I remove the Quickdraw mark in the corner?
Yes — pass watermark: false. It's on by default because it helps people find the project, but removing it is free. No license required.
How do I persist a board?
store.getSnapshot() returns plain JSON; store.loadSnapshot(snap) restores it. Save it to localStorage, your database, a file — it's just data.
Does it support real-time collaboration?
The data model was built for it: every change emits a JSON-safe diff, and store.applyDiff(diff, 'remote') applies peer changes without touching local undo history. Bring any transport.
Can I build my own toolbar?
Yes — pass hideUi and drive the headless API: editor.setTool(), editor.setStyle(), store.undo(), and friends.
How big is it?
The core package is ~46 kB unpacked with zero runtime dependencies — plain ESM that runs in any modern browser without a build step.