Free · open source · runs on a server you own
An infinite canvas that stays fast as it fills up.
Velm is a whiteboard written in Rust. It draws your board straight on the GPU and draws only what is on screen, so a hundred thousand things cost the same per frame as two hundred, as long as you are looking at two hundred of them. Open it on a Mac, or in a browser on whatever machine you are sitting at.
Sign in Download for macOS No account needed on the Mac.
An interactive demonstration board: a frame titled “Q3: what ships” holding three sticky notes, a rounded shape labelled “Release 1.3”, a connector between two of them and two hand-drawn pen strokes, with two more notes and an ellipse loose on the canvas beside it. It can be drawn on with a pointer. The buttons that follow choose a tool, recolour or delete whatever is selected, and change the zoom.
That board is drawn by this page's own 2D-canvas code, so you can put your hands on one before signing into anything. It is not the real renderer. The real one is Rust on WebGPU, and it is what every number below was taken from.
This page opens with a board you can draw on, which needs JavaScript. Everything below works without it.
Measured, not remembered
The whole point is the frame time.
Velm exists because a board that fills up should not get slower. None of these was recalled; every one is reproducible from the repository.
On a 100,000-item board with 233 items on screen: 9.96 ms a frame. And the same 9.96 ms with all 596 items of a real board drawn at once.
Installed, and it is one process. Not a browser in a costume.
Held with that 596-item board open and every item drawn. 110 MB on the 100,000-item one.
Cold start in a browser to a drawn frame, on a 1,306-item board. 9.4 ms steady-state median after that.
Miro on the same machine: 296 MB installed 14 processes 357 MB with a board open
One machine (an 8-core, 8 GB Apple Silicon MacBook, August 2026), from the
app's own HUD averaged over 45 seconds, and ps for the memory, summed
across all fourteen of Miro's processes because one PID badly undercounts Electron.
100 fps is that display's refresh rate: no dropped frames, not a
ceiling. The browser figures are Brave on an M2 from the client's own
?selftest=perf, where the fitted median over 119 frames was
10.9 ms. No frame-rate multiple over Miro is quoted anywhere, because there is no
honest way to measure Miro's from outside it.
What it is
Everything it does, and everything it does not.
A shorter list than Miro's, partly on purpose and partly because it is not done. Cheaper to read the right-hand column now than to find it out in a fortnight.
What it does
All of it on the Mac; nearly all of it in a browser tab, with the three exceptions at the bottom of this section.
-
Draw
A pen with smoothing, an eraser that rubs out strokes or whole objects, 41 shapes including the flowchart set, and connectors that stay attached and re-route when you move either end.
-
Write
Sticky notes, text boxes and titles, edited on the canvas with a real caret: click to place it, word motion, select a range, copy characters rather than objects. Text auto-fits its box.
-
Structure
Tables, kanban boards, mind maps that lay themselves out, and bar, line and pie charts. Double-click into any cell, card or node and type.
-
Keep track of them
As many boards as you like, several open at once in tabs, in folders, starred. Deleting one puts it in Recently deleted, where it stays until you say otherwise. Nothing here expires a board on a timer.
-
Work in both places
The Mac app and a browser tab on the same board. Changes appear without a reload, in either direction, and boards merge rather than overwrite.
-
Find something, and take it out
Search a word anywhere on the board you have open, including inside a table cell or on a mind-map node. Export SVG and CSV from a tab, PNG and PDF as well on the Mac, with text at the size it is actually drawn at.
What it does not
Some of this was cut deliberately and some is unfinished. Which is which is said each time, because they are not the same promise.
-
Being on a board with other people, live cut on purpose
No cursors, no presence, no comments, no voting. Not on the Mac either. Velm is a single-player tool. This is the biggest thing on the list and the first to check against how you actually work.
-
Templates unfinished
There is no gallery and no starter set. Every board begins empty.
-
Embeds that play on the board cut on purpose
A video link becomes a card with its poster and a ▶ that opens your browser. A live embed needs a whole browser engine per card, 60 to 150 MB idle for each one, and it could not zoom, be hidden by a frame, or export.
-
Drawing the pages of a PDF unfinished
A PDF's bytes are stored and kept safe. Nothing renders its pages yet.
-
A dark mode cut on purpose
Light only. The dark colours exist in the code and are tested; nothing selects them, including this page.
-
Windows, Intel Macs, and phones
Apple Silicon is the supported platform. Intel Macs and Windows can be built from source; neither has a published binary and neither is tested. There is no app in either phone store. On a tablet, the browser client is the answer, with real pinch and pan.
And three more, only in a browser tab
Things the medium cannot do, rather than things left undone.
-
Pictures export as placeholders
An SVG downloaded in a tab carries every item's geometry, style and words, but each picture comes out as an empty rectangle: a browser decodes an image straight to the graphics driver, so there are no bytes left to write. The download tells you how many. CSV is unaffected.
-
A
.rtbbackup cannot be attached hereMiro's clipboard carries references to pictures rather than the pixels, so a board pasted into a tab arrives complete apart from those and says how many are missing. The archive holding them is read by the Mac app.
-
Nothing here runs a program on your machine
A browser tab has no subprocesses. Anything that would drive another program on your computer belongs to the desktop app. That is structural, not unfinished.
Coming from Miro
Copy a board in Miro. Paste it on your boards page.
Nothing to export, no file to convert, no connector to authorise. These are the steps as they appear on the boards page, in that order.
-
Copy it in Miro
Open the board and press ⌘A, then ⌘C.
-
Paste it on your boards page
Under Bring a board from Miro, click the box and press ⌘V. Nothing is sent anywhere until you press the button.
-
Name it
Give it a name and press Bring it across. It arrives as a new board; nothing you already have is touched.
Miro's own API cannot give your pen strokes back.
On the 596-widget board all of this was measured against, 596 of 596
widgets came across and 532 of them losslessly, including all 219 pen
strokes. Ask Miro's own REST API for that board and it lists 577 items, of which
310 of them, 54%, come back with no content at all: a position, and
isSupported: false. That is every one of those 219 strokes and all 91
link cards, while the response still counts them and looks complete. The clipboard
carries them in full, which is why Velm reads the clipboard. The other 64 arrive
degraded, mostly embeds: a card with the title, the link and the provider.
None of this uses a private API: the clipboard payload is a format established by
measurement and written up in docs/02-miro-formats.md. Pictures are the
one exception to a clean paste, and the Mac app recovers the originals from a
.rtb backup.
Pricing
There isn't any.
Velm is free and open source under MIT or Apache-2.0, at your option. Licensed that way, rather than just for now. You run the server, so there is nobody in the middle to bill you and nobody else holding your boards.
Make as many accounts on your server as you like. Nothing counts them, and no feature is held back for a tier that does not exist.
Nothing expires, nothing degrades. A board is a SQLite file on a disk you own, beside a content-addressed store for its pictures.
There is no “us”. The only account is the one on the server you are reading this from, and on the Mac there is no account and no server at all.
Signing in exists because a server is shared: the first account made owns it, and
every board has one owner. Passwords are never stored. An Argon2id hash is. Nothing
in velmd phones home, and there is no telemetry in it.
The desktop app
Where Velm started, and where it is fastest.
No account, no sync service, no server. The Mac app keeps its boards in a
folder on your own machine. It is what reads a .rtb backup, exports
PNG and PDF, and carries a native menu bar.
macOS 11 or later, Apple Silicon. Every release is signed with an Apple Developer ID and notarized by Apple, so there is no Gatekeeper warning to get past. Releases before 1.2.0 were ad-hoc signed and will still ask.
velmd, the server, is meant for Linux and has so far only been run
on macOS. The browser client needs WebGPU and nothing else.
One board is enough to tell
Bring the first board across.
It takes about a minute, it does not touch the board in Miro, and you can stop after one. Nothing here deletes anything you already have.