Online Whiteboard

Sketch diagrams and wireframes in the browser. Saved in this browser only — no account, no sync, nothing uploaded.

design

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 .excalidraw file 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 .excalidrawlib file 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