Draw, pan, zoom, undo, rearrange and export — all from a single custom element. It works with React, Vue, Svelte or plain HTML, and it’s tiny.
npm i @ludovicm67/simple-whiteboard This is the real component, running right here. Draw on it.
A focused, dependency-light toolkit that stays out of your way and leaves the styling and the data in your hands.
Rectangle, circle, line, arrow, freehand pen, text, sticky notes and images — plus select, move and a real object eraser.
Pan with the mouse, middle-click or trackpad, and pinch-to-zoom that follows your cursor so it always feels natural.
A full history with Ctrl/Cmd+Z, a redo stack, and a history-changed event to drive your own buttons.
Bring items forward or send them backward, all the way to the front or the back — every change stays in sync.
Download the current view as a crisp PNG in a single call — with your own background color if you like.
First-class pointer and multi-touch support, so drawing and pinch-zoom feel right on a laptop, tablet or phone.
The entire UI is translated out of the box, with an optional built-in language picker you can hide with one attribute.
Restyle every surface with a handful of CSS custom properties. One line changes the accent across the whole UI.
Every change emits a structured event. The demo syncs two tabs live over a BroadcastChannel — swap in your own transport.
Redraws are coalesced per animation frame and off-screen items are culled, so it stays smooth even on a busy board.
Framework-agnostic and standards-based. No wrapper, no adapter — it’s a custom element that works everywhere.
A friendly, sketchy Rough.js look with an optional dotted grid that makes diagrams feel approachable, not corporate.
Install the package, import it once to register the custom elements, then drop the tag into your markup. The tool-defaults element wires up every tool for you.
<!-- 1. import once, anywhere in your JS --> import "@ludovicm67/simple-whiteboard"; <!-- 2. use the element in your markup --> <simple-whiteboard locale="en" dotted-background> <simple-whiteboard--tool-defaults slot="tools"> </simple-whiteboard--tool-defaults> </simple-whiteboard> // 3. react to changes from anywhere board.addEventListener("items-updated", (e) => { console.log(e.detail.type); // "add" | "remove" | … });
Open the full whiteboard and try every tool — no sign-up, nothing to install.