selfhost.directory

The index of self-hostable projects — ranked, categorized and served with live updates.
Own your data and stop giving it to big tech.

GitHub
excalidraw-collaboration logo

Self-host excalidraw-collaboration

v0.18.1-fork-b3

Collaborative Excalidraw whiteboard stack for Docker Compose

BetaOpen SourceMIT
Updated9 hours ago
Setup difficultyModerate
Stars
633
Port
80 (Excalidraw frontend web app (host mapping 80:80))
Install with Docker Compose
Collaborative Excalidraw whiteboard session

What is excalidraw-collaboration?

Excalidraw Collaboration packages Excalidraw for running on your own hardware: an Excalidraw frontend image configured through runtime environment variables, an HTTP storage backend that keeps scenes and files, and a Go Socket.IO room service that powers live collaborative drawing. It ships two Compose examples — a basic one exposing the three services on separate local ports, and a production one that puts everything behind Nginx and TLS on a single domain, with MongoDB for scene persistence. Collaboration depends on browser cryptography APIs, so a public instance needs HTTPS (or localhost) to work. A verified Railway one-click template is published as an alternative to manual deployment. S3 storage, SSO and Helm charts are still open roadmap items.

Should you self-host excalidraw-collaboration?

excalidraw-collaboration scores 46/100 on selfhost.directory (how scoring works) and ranks #10 of 12 in Diagramming. It has 633 GitHub stars.

It shipped 3 stable releases in the past year. The latest, v0.18.1-fork-b3, came out on 8 August 2026. New versions land roughly every 6 weeks.

Setup is moderate: expect some configuration beyond a single command. It is MIT-licensed.

Its closest alternative on selfhost.directory is drawdb (80/100, 40 154 stars). It scores higher overall, so compare the two before you pick. See excalidraw-collaboration vs drawdb side by side.

Features

  • HTTPS reverse-proxy deployment example
  • Real-Time Collaboration
  • Runtime environment configuration
  • Scene and file storage backend

excalidraw-collaboration README

How to install excalidraw-collaboration

Install excalidraw-collaboration with Docker Compose

Docker Compose
Environment variables
VITE_APP_HTTP_STORAGE_BACKEND_URL, VITE_APP_WS_SERVER_URL
git clone https://github.com/alswl/excalidraw-collaboration.git
cd excalidraw-collaboration
docker-compose -f basic/docker-compose.yaml up -d

A basic example and an HTTPS/Nginx production example are provided.

How to configure excalidraw-collaboration

  • APP_HOSTPublic host name of the Excalidraw frontend in the Nginx example

    Public host name of the Excalidraw frontend in the Nginx example

  • DB_PASSMongoDB root password used by the storage backend

    MongoDB root password used by the storage backend

  • DB_USERMongoDB root username used by the storage backend

    MongoDB root username used by the storage backend

  • DB_VOLUME_PATHHost path mounted for MongoDB data

    Host path mounted for MongoDB data

  • PORTListen port of the storage backend container

    Listen port of the storage backend container

  • PUBLIC_URLPublic base URL of the app when served under a custom host

    Public base URL of the app when served under a custom host

  • ROOM_HOSTPublic host name of the Socket.IO room service

    Public host name of the Socket.IO room service

  • STORAGE_BACKEND_HOSTPublic host (plus /storage path) of the scene storage backend

    Public host (plus /storage path) of the scene storage backend

  • STORAGE_URIMongoDB connection URI for the storage backend

    MongoDB connection URI for the storage backend

  • VITE_APP_BACKEND_V2_GET_URLBase URL of the HTTP scene storage API (GET endpoint)

    Base URL of the HTTP scene storage API (GET endpoint)

  • VITE_APP_BACKEND_V2_POST_URLBase URL of the HTTP scene storage API (POST endpoint)

    Base URL of the HTTP scene storage API (POST endpoint)

  • VITE_APP_DISABLE_TRACKINGSet to true to disable usage tracking in the frontend

    Set to true to disable usage tracking in the frontend

  • VITE_APP_FIREBASE_CONFIGFirebase configuration, left empty ({} ) for self-hosted deployments

    Firebase configuration, left empty ({} ) for self-hosted deployments

  • VITE_APP_HTTP_STORAGE_BACKEND_URLURL of the HTTP storage backend API used by the Excalidraw fork

    URL of the HTTP storage backend API used by the Excalidraw fork

  • VITE_APP_STORAGE_BACKENDStorage backend type; the examples use http

    Storage backend type; the examples use http

  • VITE_APP_WS_SERVER_URLURL of the Socket.IO room server

    URL of the Socket.IO room server

excalidraw-collaboration releases & version history

FAQ

Why does collaboration fail with generateKey errors?

Excalidraw relies on browser cryptography APIs for collaboration, which are unavailable on plain HTTP; serve the site over HTTPS or use http://localhost while developing.

How do I deploy with separate public endpoints?

Point VITE_APP_HTTP_STORAGE_BACKEND_URL at the storage endpoint and VITE_APP_WS_SERVER_URL at the WebSocket endpoint, and give both endpoints their own TLS.

More in Diagramming

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…