Online Whiteboard
Sketch diagrams and wireframes in the browser. Saved in this browser only — no account, no sync, nothing uploaded.
What next?
How it works
What this tool is for
A quick diagram: boxes and arrows for a service layout, a wireframe of a screen, a sketch pasted into a pull request. The kind of drawing where opening a design tool, signing in and picking a template costs more than the drawing is worth.
The editor is Excalidraw 0.18.1 embedded directly in the page. Its hand-drawn look is not decoration — a sketch that looks provisional invites people to argue with it, which is usually what you want from an architecture diagram in week one.
Where the drawing lives
This is the part worth understanding before you rely on it.
Every change you make is saved to this browser's localStorage, under the key
anytools:whiteboard:v1, roughly half a second after you stop moving the mouse — shapes and text,
but also the canvas background colour, the grid, the zoom and where you had scrolled to. That is
the whole persistence story. There is no account, no server copy, and no sync:
- Reload the page, close the tab, restart the browser — the board comes back.
- Open the same URL in a different browser, a different profile, or on your phone — the board is not there. It never left the machine it was drawn on.
- Clear site data, use "delete cookies and site data", or close a private window — the board is gone, permanently.
The status line under the toolbar says "Saved in this browser" each time a save lands, so you can see the mechanism working rather than trust it.
There is one size limit: about 5 MB. That is a browser constraint, not ours — localStorage caps
each origin at roughly that. Shapes and text are tiny, so you will not approach it by drawing; you
will approach it by pasting photographs, which are stored as base64 inside the scene. Deleting a
pasted image gives its space back at the next save: only the images the board still shows are
written. If a board does pass the limit anyway, the tool stops autosaving and says so — including
that the copy still in the browser is now the older one — instead of failing silently on some
later, unrelated edit.
Exporting: three formats, three purposes
PNG is for pasting into a chat, a ticket or a document. It is a flat image at the canvas's current colours, with 16 px of padding around the content. It cannot be edited afterwards.
SVG is for anything that will be resized or printed — documentation sites, slides, a README. The export inlines the fonts it used, so the file renders identically on a machine that has never heard of Excalifont. That also makes SVG exports noticeably larger than you might expect.
.excalidraw is the only one that is still a drawing. It is JSON, written by Excalidraw's own
serializer, and it opens again here or on excalidraw.com with every shape still editable. If you
care about a board, this is the export that matters; PNG and SVG are pictures of it.
Each export produces a download link under the toolbar rather than starting a download immediately, so an accidental click does not fill your Downloads folder.
Moving a board to another machine
There is no sync, so the move is manual and takes three steps: export .excalidraw here, get the
file to the other machine however you normally move files, then use Open .excalidraw there.
The importer checks the envelope before loading anything — that it is JSON, that its type field
says excalidraw rather than excalidrawlib, that its version is one this build understands, and
that it is under the size cap — and tells you which of those failed rather than showing an empty
canvas.
Opening a file replaces whatever is on the board, so it asks first, the same way New board does — unless the canvas is empty, where there is nothing to ask about.
Imported scenes are run through Excalidraw's restore(), which upgrades elements written by older
versions and discards malformed ones. A 2021 scene opens fine. Embedded web content is the one
thing that does not survive the trip: see below.
Starting over
New board asks first, then erases both the canvas and the saved copy. There is no undo for it and no version history — the autosave keeps one state, the current one. Export before you erase if there is any doubt.
What is switched off, and why
Excalidraw ships several features that need a server. All of them are disabled here rather than left to chance:
- Web embeds — Excalidraw can place a live
<iframe>on the canvas holding a YouTube video, a Figma frame, a gist or a tweet. Left at its default the component allows its own list of those hosts, and three routes reach it without asking: the toolbar's Web Embed tool, pasting a link, and opening a.excalidrawfile that already contains one. All three are closed here — the toolbar entry is hidden, pasted links stay links, and embeds in an opened file are removed before it loads, with a count so you know your file was changed. - Live collaboration — never initialised, so no socket is opened.
- Wireframe-to-code — this posts the canvas to Excalidraw's AI endpoint. It is on by default in the component; it is explicitly off here.
- Shareable links and Excalidraw+ export — the export dialog saves to disk only.
- Browsing the public shape library — the link out is hidden; importing an
.excalidrawlibfile from your disk still works. - CDN fonts — the hand-drawn fonts are served from this domain, not from
esm.sh.
If you want real-time collaboration, excalidraw.com does it properly and for free. This page is for the case where you would rather nothing left the machine.
FAQ
Where is my drawing stored?
In this browser, in this profile, on this device, and nowhere else. The board is written to
localStorage under the key anytools:whiteboard:v1 about half a second after you stop drawing.
Nothing is uploaded, there is no account, and there is no sync between your phone and your laptop.
The practical consequence is worth stating plainly: clearing site data, running a "clean browsing
data" tool, or using a private window that you then close will erase the board with no way back.
If a drawing matters, export a .excalidraw file. That file is the copy you own.
What is saved is the board as it stands: shapes, text, the canvas background colour, the grid setting and where you had scrolled to. Images you pasted and then deleted are not part of that — each save keeps only the image data the board still shows, so removing a screenshot gives the space back rather than leaving it in storage for the life of the browser profile.
What is the editor?
Excalidraw, the MIT-licensed open-source editor, embedded as a React component. The version here is 0.18.1. It is the same editing surface as excalidraw.com, minus every feature that needs a server: no live collaboration, no shareable links, no "wireframe to code", no Excalidraw+ integration.
Are the hand-drawn fonts loaded from a CDN?
No. Excalidraw's default behaviour is to fetch Excalifont, Virgil, Cascadia Code, Nunito, Lilita
One, Comic Shanns, Liberation Sans and Xiaolai from esm.sh on demand. This build sets
EXCALIDRAW_ASSET_PATH to /third-party/excalidraw/ and serves all of them from this domain.
If you open your browser's network panel while typing, every .woff2 request goes to this site.
That includes the 12 MB Xiaolai family, which covers Chinese, Japanese and Korean text. It is only
requested when you actually type those characters — the font faces are split by Unicode range —
but it is hosted here rather than dropped, because a missing font is not a blank: Excalidraw lists
the CDN as a fallback source in the same @font-face rule, so removing it would send CJK users to
a third party without telling them.
Can I collaborate with someone in real time?
No. Collaboration needs a server to relay the session, and this site does not have one for
drawings. If you need that, excalidraw.com does it well and is free. What you can do here is
export a .excalidraw file and send it to someone, who can open it here or there.
Will a file exported here open on excalidraw.com?
Yes. .excalidraw is plain JSON with a documented envelope, and the export uses Excalidraw's own
serializer, so the file is byte-compatible with what excalidraw.com writes. The reverse works
too — a scene saved there opens here. Files above 5 MB are refused, which is a limit of browser
storage rather than of the format.
Can I embed a YouTube video or a Figma frame on the board?
No. Excalidraw has a "Web Embed" feature that puts a live <iframe> on the canvas — a video, a
Figma file, a gist, a tweet — and it is switched off here in full. The toolbar entry is hidden,
pasting a link gives you a link rather than a player, and if you open a .excalidraw file that
already contains embeds, they are removed before the file is loaded and the tool tells you how
many it removed.
The reason is the promise on the rest of this page. An embed is a third-party page running inside
this one: it fetches from that third party's servers, and it can see that you opened it. That is
the opposite of "nothing leaves your device", and a .excalidraw file is a plain JSON document
that anyone can mail you, so "only if you add one yourself" would not have been true either.
Everything else about a scene — shapes, text, images, arrows, frames — opens normally.
Why can I only import .excalidraw, not .excalidrawlib?
A .excalidrawlib file is a shape library, not a drawing, and it goes in through the library
panel in the editor rather than the "Open" button. Handing one to the Open button gets you a
message saying exactly that instead of a generic error.
Does it work on a phone?
It renders and it is usable with a finger or a stylus, but a 70%-of-viewport canvas on a small screen is cramped, and the toolbar collapses. This is a desktop-first tool. Drawings sync nowhere, so a board started on a phone stays on that phone.
Is there an undo limit or an autosave history?
Undo is Excalidraw's own, in-memory, and resets when you reload the page. There is no version history — the autosave keeps exactly one state, the latest. "New board" erases it after asking.
More design tools
- Color Converter & Contrast Checker — HEX ↔ RGB ↔ HSL color converter with WCAG AA/AAA contrast checker.
- Color Palette Generator — Generate harmonized palettes: analogous, complementary, triadic, monochromatic.
- WCAG Contrast Checker — Check color contrast against WCAG 2.
- CSS Gradient Generator — Build linear, radial and conic gradients with as many colour stops as you need.
- Box Shadow Generator — Stack as many shadow layers as you need — offset, blur, spread, colour, inset — and see them on a light and a dark card at once.
- CSS Clip Path Generator — Drag the vertices of a polygon, or set up a circle, ellipse or inset, and copy the clip-path declaration.