← All templates · Productivity
Deploy Excalidraw in one click
A whiteboard for hand-drawn diagrams and sketches, with live collaboration
A self-hosted alternative to Miro, FigJam, and Lucidchart.
What is Excalidraw?
Excalidraw is an open-source virtual whiteboard whose shapes, arrows and text look drawn by hand. People sketch architecture diagrams, flowcharts and wireframes on it, in meetings or for docs, where others would open Miro or Lucidchart. It has an infinite canvas, frames, images, a laser pointer and a dark mode. Mermaid to Excalidraw turns Mermaid code into shapes you can edit, and a drawing exports as a PNG or SVG image or saves as a .excalidraw file to open again. Public libraries of ready-made shapes, from cloud icons to UI kits, are added with a click.
This template runs Excalidraw’s own image together with its collaboration server, so several people can draw on one canvas at once. Share, then Start session, gives a link that holds the session’s key, and the browsers encrypt every change before it reaches the server. There are no accounts and the server stores no drawings: each person’s canvas stays in their browser, and the app keeps working offline once it has loaded. The template also leaves out the Simple Analytics script that the image’s page loads.
The catches: anyone who has the address can use it. Read-only links (Export to Link) and the AI tools, Text to diagram and Wireframe to code, work only on excalidraw.com, whose servers refuse other sites. A session’s scene and images are also saved, encrypted, in excalidraw.com’s Firebase, which is how its link opens it again later, and the pages load their fonts from Excalidraw’s CDN.
Hosting Excalidraw on Pethost
- You sign in to Pethost with a passkey, GitHub or Google. No machine yet? You pick a plan, and the link waits until it is ready.
- New project opens at Excalidraw, and you click Create project.
- In a minute or two Excalidraw is live at its own address with HTTPS. Its secrets are made at random, and its data is in the nightly backup.
- It is a project like any other: you or your agent can change it, roll it back or restore it.
Questions about Excalidraw
Is Excalidraw free and open source?
Yes. Excalidraw is under the MIT license, with its code on GitHub. Excalidraw+, from the same team, is a hosted version at $6 per user a month that adds cloud storage, unlimited scenes and folders, access rights, presentations and comments.
Where does Excalidraw save my drawings?
In your browser. Excalidraw saves the canvas as you draw, in the browser’s local storage, and nothing reaches the server. Another browser or device starts empty, and clearing the site’s data deletes the drawing, so keep what matters with Save to... → Save to file: Open loads the .excalidraw file again.
Can several people draw together on a self-hosted Excalidraw?
Yes, with this template. Press Share, then Start session, and send the link: everyone who opens it draws on the same canvas and sees the others’ pointers. The session is end-to-end encrypted, its key in the part of the link after #, which a browser never sends to a server. Excalidraw’s Docker image cannot do it alone, so the template adds Excalidraw’s collaboration server and points the pages to it.
Why does Export to Link fail on a self-hosted Excalidraw?
Read-only links are stored by excalidraw.com’s server, which takes them only from excalidraw.com, so here the button shows an error. Share a live session or the .excalidraw file instead.
Can Excalidraw turn Mermaid code into a diagram?
Yes. More tools → Mermaid to Excalidraw takes Mermaid code and inserts it as shapes and arrows you can edit. Flowcharts, sequence, class and entity-relationship diagrams convert; other kinds come in as an image. It runs in the browser, unlike Text to diagram, the AI tool, which works only on excalidraw.com.
Does Excalidraw work offline?
Yes. Once the page has loaded, its service worker keeps the app, so it opens and draws with no connection, and Chrome or Edge can install it as an app. A live session needs the connection.
How much memory and disk does Excalidraw need?
Excalidraw is very light: about 40 MB of memory with its collaboration server, and it stores nothing, since the drawings are kept in the browsers. On Pethost the Starter plan is enough for it, with room for other apps beside it.
Excalidraw Docker Compose file
The template is this compose.yaml and the variables written into the project’s .env as it is created. Pethost runs the file as it is written.
Containers: excalidraw (excalidraw/excalidraw@sha256:f7ee194addd607bf831d2af0f0a34463dd4225e426cf35199ef0b12a803398e9), room (excalidraw/excalidraw-room:sha-03ff435).
services:
excalidraw:
# Excalidraw publishes its image only as latest, built from its release branch, so the digest
# pins one build of it: that of 2026-05-06. The app is pages for the browser, which keeps the
# drawings: nothing of them is stored here.
image: excalidraw/excalidraw@sha256:f7ee194addd607bf831d2af0f0a34463dd4225e426cf35199ef0b12a803398e9
restart: unless-stopped
# The pages are built to collaborate through excalidraw.com's server, which refuses any other
# site's visitors: they are pointed at this address instead, whose /socket.io/ is the room.
# Excalidraw's docs say the image has no analytics, though its page loads Simple Analytics'
# script: the script is given no address.
entrypoint:
- sh
- -c
- |
cd /usr/share/nginx/html
sed -i 's#"https://oss-collab.excalidraw.com"#location.origin#g' assets/index-*.js
sed -i 's#https://scripts.simpleanalyticscdn.com/latest.js##' index.html
exec /docker-entrypoint.sh nginx -g 'daemon off;'
configs:
- source: nginx
target: /etc/nginx/conf.d/default.conf
# The image's own check asks localhost, which is ::1 first, where nginx listens only with the
# file it was packaged with.
healthcheck:
test: ["CMD", "wget", "-q", "-O", "/dev/null", "http://127.0.0.1"]
depends_on:
- room
# Excalidraw's collaboration server: it relays a session's changes, encrypted in the browsers
# with the key in the link's #, which never reaches it, and keeps nothing.
room:
image: excalidraw/excalidraw-room:sha-03ff435
restart: unless-stopped
configs:
nginx:
content: |
server {
listen 80;
root /usr/share/nginx/html;
location /socket.io/ {
proxy_pass http://room;
proxy_http_version 1.1;
proxy_set_header Upgrade $$http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $$host;
proxy_read_timeout 1h;
}
}
More in Productivity
- MealieA recipe manager and meal planner
- RyotA tracker for films, shows, books, games and workouts
- VikunjaTo-do lists and projects, with kanban and Gantt views
- NocoDBA no-code database: tables as spreadsheets, forms, kanban boards and calendars, with an API
- OdooBusiness apps in one: CRM, sales, invoicing, inventory, website, projects and more
- PLANKAKanban boards for projects and teams, updated for everyone in real time