fancy-whiteboard
@particle-academy/fancy-whiteboard
Transport-agnostic collaborative board — sticky notes, freeform pen, connectors, presence cursors.
$
npm install @particle-academy/fancy-whiteboardAuthoring surface
Humans compose it
Controlled value + onChange, JSON-friendly props, terse defaults — so people (and agents) build it fast.
Inhabited surface
Agents drive it over MCP
A bridge in @particle-academy/agent-integrations exposes typed tools — agents read and mutate state through stable handles, never DOM scraping.
whiteboard_paintwhiteboard_add_notewhiteboard_move
Why
Most whiteboarding libraries force opinionated realtime transports, lock you into their collaboration layer, or demand heavyweight React dependencies. Building a team tool that agents can read and write (sticky notes, shapes, strokes) without DOM scraping requires stable item IDs and controlled state throughout—not buried in component closures. fancy-whiteboard fills that gap: a canvas-agnostic primitives library that pairs human authoring ergonomics with agent-bridgeable surfaces.
What
Export six headline components:
Board (pan/zoom viewport), StickyNote (draggable, resizable colored notes), Drawing (freeform stroke layer), Connector (SVG edges between world-space points), Shape (rect, ellipse, diamond, arrow, text, etc.), and Cursor / CursorLayer (remote-user presence pointers). Every stateful component is controlled via item + onChange; Board itself supports both controlled and uncontrolled viewport modes. Item types—StickyNoteItem, ShapeItem, ConnectorItem—are JSON-friendly objects with stable id, world coordinates (x, y, z), and optional authorId for presence; the Drawing layer accepts a controlled stroke list. Requires peer @particle-academy/react-fancy (v3.4.0+) since StickyNote delegates styling to that shared primitive.How
Install via
npm install @particle-academy/fancy-whiteboard @particle-academy/react-fancy, then import both stylesheets and use Board as the root container: import { Board, StickyNote, CursorLayer } from '@particle-academy/fancy-whiteboard'; import '@particle-academy/fancy-whiteboard/styles.css'; import '@particle-academy/react-fancy/styles.css'; Wire state via useState and pass item + onChange to each note; feed your realtime transport (Echo, Yjs, raw WebSocket) through onChange to broadcast mutations and reload state from peers.Components
6 components · click any tile for a full demo, source, and install snippet.
