Install Excalidraw in 60 Seconds
Excalidraw is the hand-drawn virtual whiteboard for sketching diagrams, wireframes, and architecture drawings. Self-host your own instance on InstaPods and stop paying Miro for the privilege of drawing boxes and arrows.
The usual way to self-host Excalidraw
- Provision and harden a VPS, install Node and Yarn, then `git clone` the Excalidraw repo and run `yarn build:app` - which needs ~3GB of build memory (NODE_OPTIONS=--max-old-space-size=3072) and falls over on a 1GB box.
- Figure out that Excalidraw is a static client-side build, not a long-running server: you have to serve the compiled assets out of the build directory with nginx on port 3000 and keep that config alive across reboots.
- Wire up a reverse proxy with TLS - terminate HTTPS, point a domain at the box, renew the Let's Encrypt cert, and remember to redo it every 90 days or your whiteboard goes insecure.
- Track upstream releases by hand: re-clone, `git checkout` the latest tag, rebuild, swap the dist directory, and reload nginx every time you want the newest fixes - while hoping the build does not OOM mid-deploy.
- Realize your drawings live in browser localStorage, so 'self-hosting' alone does not give you a shared server-side store unless you also stand up the separate collaboration and storage backends.
That is a build pipeline, a web server, and a cert-renewal chore standing between you and a whiteboard you could have had in one command.
Or install it in one click
What you get
Recommended plan for Excalidraw
- 1 vCPU
- 512 MB RAM
- 10 GB storage
- HTTPS included
- Custom domain support
- SSH & web terminal access
Excalidraw requirements
Resource requirements
Excalidraw runs comfortably on the Launch plan. We ship it as a pre-baked image, so your pod boots the already-compiled static assets served by nginx on port 3000 - no live `yarn build:app` on your dime, no 3GB build spike on a small pod. Bump up a plan only if you expect heavy concurrent traffic.
Config and environment
There is nothing to configure. Excalidraw is a client-side single-page app with zero required environment variables - no API keys, no database URL, no WEBHOOK_URL. You add the card (with a $10 credit), it deploys, and the whiteboard works. HTTPS, the subdomain, and the nginx serving config are all handled for you.
Data persistence and custom domain
Out of the box Excalidraw stores each board in your browser's local storage, so your sketches persist per-device and never leave the client. Use the built-in export to .excalidraw / PNG / SVG for permanent copies or to move a board between machines. Point your own domain at the pod whenever you want to drop the *.instapods.app subdomain.
Excalidraw install FAQ
Do I need Docker or any build tooling to self-host Excalidraw here?
No. Excalidraw normally requires Node, Yarn, and a ~3GB-memory `yarn build:app` step to compile the static front end. We pre-build the app into a ready-to-run image, so you never touch Docker, Node, or a build pipeline. You run one command and the compiled whiteboard is served by nginx on your pod.
Are there any environment variables or API keys to set up?
None. Excalidraw is a client-side single-page app with no required environment variables - no secrets, no database connection string, no webhook URL. It deploys and works immediately, which is why it runs on our entry-level Launch plan.
Where are my drawings stored, and are they private?
By default each board is saved in your own browser's local storage, so your sketches stay on your device and are not uploaded anywhere. Because you control the whole pod, nothing is shared with a third-party SaaS. Use Excalidraw's export to .excalidraw, PNG, or SVG to keep permanent copies or move a board to another machine.
What plan do I need and how much does it cost?
Excalidraw runs on the Launch plan, our smallest tier. Add a card to deploy and you get a $10 credit to start, which covers your first stretch of hosting. Upgrade later only if you expect heavy concurrent use - for a personal or small-team whiteboard, Launch is plenty.
Can I use my own domain instead of the instapods.app subdomain?
Yes. Every pod gets a free https://your-name.instapods.app subdomain with automatic TLS, and you can point a custom domain at it whenever you like. We handle the certificate and the nginx serving config either way, so there is no cert renewal chore to remember.
Install Excalidraw in 60 seconds
One click. Real server. HTTPS included. No Docker, no nginx, no DevOps degree required.
Install Excalidraw