design-whiteboard
Miro logo

Should I self-host Miro?

KINDAworth it if…

Excalidraw covers the sketching that most Miro seats actually do, in one tiny container. Worth it if solo or link-sharing files; live multi-cursor rooms need the extra room server and that's where the weekend goes.

The math (nothing hidden, including your time)

Miro (Starter, per seat)$8.00/mo
VPS share + storage−$0.30/mo
Your maintenance: 5 min/mo at $20/h−$1.67/mo
Net saving$6.03/mo
Setup: 20 min measured (one-time)$6.67
Break-even1.1 months
Markup Index (price ÷ real self-host cost)4.1×

Price: source, checked 2026-08-05. Inputs are stored in git; every number above is derived, never hand-written.

What you lose

  • Persistent boards with access control — vanilla Excalidraw saves .excalidraw files, not a board library
  • Miro's template/facilitation ecosystem

What you're paying Miro for

  • whiteboard sketching
  • diagrams
  • real-time multi-user boards
  • board library/templates
Excalidraw running from the boot-verified compose file
Excalidraw, running from the compose file on this page — screenshot from our verified instance, not marketing material.

Ranked alternatives

A hand-drawn-style whiteboard that runs as one static container and keeps every drawing in the browser that drew it.

excalidraw/excalidraw · ★ 129,294 · last commit 0d ago · MIT

Hardware

Runs comfortably on Raspberry Pi.

The tested compose file (our evidence, CI-booted)

# Excalidraw — the whiteboard (tested against Miro's job list). This runs the drawing app;
# real-time rooms and persistence need excalidraw-room + a storage backend, which is where
# the KINDA comes from.
services:
  excalidraw:
    image: excalidraw/excalidraw:latest
    container_name: excalidraw
    restart: unless-stopped
    ports:
      - "8087:80"
    healthcheck:
      test: ["CMD-SHELL", "curl -sf http://localhost:80 >/dev/null || exit 1"]
      interval: 5s
      timeout: 5s
      retries: 24
      start_period: 15s

Want a guided install instead? caniselfhostit.com/miro has AI-agent prompts that assume a bare machine — that's their half of the stool, and it's good.

Verification

Protocol v1 · verified by zernonia on 2026-08-10 · setup measured at 20 min · AI assistant: claude-code (allowed & stated)

What broke

  • None for the drawing app; know that collab rooms are a second project (excalidraw-room + storage)
Full timed log
# Timed setup log: Miro → excalidraw

**Protocol:** v1 · **Verified by:** zernonia · **Date:** 2026-08-10
**Assistant:** claude-code · **Environment:** containerized runner, 2 vCPU class, Docker 29.3 / Compose v5.1

## Timeline

| Step | Time |
|---|---|
| Read upstream docs, draft compose with healthcheck | ~6 min |
| **Boot: all services healthy in 12 s (measured, `compose up --wait`)** | — |
| Endpoint-level workflow check (login/health/API serve) + re-run from clean volumes | ~6 min |
| **Total: ~20 min** | |

Boot and endpoint checks are machine-verified; `setup_min` is the wall-clock total for this
session including authoring, diagnosis and re-runs. Endpoint-level ≠ full human UI workflow —
dispute anything that doesn't reproduce (CONTRIBUTING.md).

## What broke

- None for the drawing app; know that collab rooms are a second project (excalidraw-room + storage)

## Verdict-relevant notes

- Fastest boot in the index.

Verdict history

  • 2026-08-10: unscored → KINDA — Initial verdict: Excalidraw covers the sketching that most Miro seats actually do, in one tiny container. Worth it if solo or link-sharing files; live multi-cursor rooms need the extra room server and that's where the weekend goes.