A distraction-free drawing surface for live screenshare calls (Zoom / Google Meet / Microsoft Teams / etc.).
It is the "open GIMP, make a blank canvas, find the pencil tool, fight with brush
settings, then close everything" workflow, replaced with a single blank white window that
launches in well under a second. Draw with the mouse while you talk, then hit Esc. Nothing
is ever saved.
Built with native egui / eframe (glow/OpenGL backend) — one small native binary, no webview, no Electron, no Node runtime. The release binary is ~7 MB and idles in tens of MB of RAM, which is the whole point: lean and fast to bring up on a call.
The UI is a blank canvas with six color swatches — there is no DOM worth a webview. A webview stack would add a WebKit/Chromium process and a Node build step just to draw lines. Native egui gives faster launch and a far smaller footprint for this exact use case.
- Blank white, borderless, maximized, resizable window (titlebar hidden)
- Freehand drawing with the mouse (drag to draw, click for a dot)
- Six colors: Red, Blue, Black, Green, Purple, Orange
- Infinite canvas with pan and zoom
- Paste a clipboard screenshot/image onto the canvas with
Ctrl+V(centered under the cursor) - Undo with
Ctrl+Z(removes the newest line or pasted image first) - Zero persistence — nothing touches disk
Escquits immediately, no "save changes?" prompt
| Action | Input |
|---|---|
| Draw | Left-drag |
| Dot | Left-click |
| Pick color | Click a swatch, or 1–6, or R B K G P O |
| Paste image | Ctrl + V (clipboard image, centered under the cursor) |
| Undo last item | Ctrl + Z (press repeatedly, newest line/image first) |
| Pan | Hold Space + move the mouse |
| Zoom | Ctrl + mouse wheel (zooms toward the cursor) |
| Hide / show the on-screen chrome | Tab |
| Quit | Esc |
Color keys map to the palette order: 1/R Red · 2/B Blue · 3/K Black ·
4/G Green · 5/P Purple · 6/O Orange.
Tab hides the palette and the hint line so you are left with a completely blank canvas.
Lines and pasted images live in one ordered stack, and paint order is "newest on top".
Ctrl+Z removes the most recently added item — a line or an image — working backwards
(newest → oldest). There is no separate history buffer; undo peels the single on-screen
stack, so it costs no extra memory and needs no 15–20 line threshold. For example: draw two
lines, paste an image, draw one more line → Ctrl+Z removes the last line, again removes
the image, again the second line, and once more leaves you with a blank canvas. There is
intentionally no redo and no save.
Copy a screenshot (e.g. Snipping Tool / GNOME Screenshot / flameshot / maim) and hit
Ctrl+V. The image lands with its center under the mouse cursor at its native pixel
size, then pans and zooms like everything else — so you can drop a screenshot on the board
and annotate it with arrows. Pasted images are undoable like any stroke (see above) and are
held on the GPU; undoing frees the texture.
Wayland note: clipboard image read goes through
arboard, which is X11-oriented, so under a fully native Wayland sessionCtrl+Vmay come up empty. Run under X11/XWayland (WAYLAND_DISPLAY= whiteboard) if pasting does nothing.
-
A recent stable Rust toolchain (edition 2024; developed on 1.98). Install via rustup if you don't have it.
-
Linux: an OpenGL-capable system plus X11/Wayland client libraries (the default
glow+x11+waylandfeature set). On a Debian/Ubuntu-based system:sudo apt install build-essential pkg-config libgl1-mesa-dev libegl1
Fedora:
sudo dnf install gcc pkgconf mesa-libGL-devel mesa-libEGL-devel. Arch:sudo pacman -S base-devel mesa libglvnd.macOS and Windows need no extra system packages (system OpenGL is used).
From the repository root:
# debug (fast to compile, for iterating)
cargo build
# optimized release (this is what you want to actually run)
cargo build --releaseThe finished binary lands at target/release/whiteboard.
Run it without installing:
cargo run --release
# or
./target/release/whiteboardThe simplest path is Cargo's installer, which drops the binary on your PATH
(~/.cargo/bin/whiteboard):
cargo install --path .Then launch it with:
whiteboardTo uninstall:
cargo uninstall whiteboardCopy the release binary anywhere on your PATH:
sudo install -Dm755 target/release/whiteboard /usr/local/bin/whiteboardDrop a .desktop entry so it shows up in your app launcher. Write
~/.local/share/applications/whiteboard.desktop:
[Desktop Entry]
Type=Application
Name=Whiteboard
Comment=Blank whiteboard for screenshare calls
Exec=whiteboard
Terminal=false
Categories=Utility;Exec should point at wherever the binary lives (whiteboard if it is on your PATH,
otherwise the absolute path).
- Blank / black window or GL init error — a graphics driver or missing OpenGL library.
Confirm
glxinfo/eglinforeport a working GL context and install the Mesa/dev packages from Prerequisites above. Ctrl+wheel does nothing — some desktop environments interceptCtrl+scroll for their own zoom; check mouse/accessibility shortcuts.- Wayland quirks — the app builds both
x11andwayland. If a Wayland session behaves oddly (window focus, maximization), try an X11/XWayland session.