Sign inSign up

maciekzygmunt/excaliself

By maciekzygmunt

•Updated 33 minutes ago

Self-hosted, open-source Excalidraw+ alternative for teams: accounts, SSO, folders, live collab, MCP

Image
0

345

maciekzygmunt/excaliself repository overview

⁠Excaliself

Your team's whiteboard, on your server. Excaliself is a self-hosted, open-source alternative to Excalidraw+: the full Excalidraw editor with accounts, single sign-on, folders, search, live collaboration, a shared team space, and an MCP server for AI clients. MIT licensed, multi-arch (amd64 and arm64).

Excaliself home screen: a sidebar with starred drawings and folders next to a grid of drawing previews

⁠Try it in 10 seconds

docker run --rm -p 127.0.0.1:3000:3000 -e PREVIEW_MODE=true maciekzygmunt/excaliself

Open http://localhost:3000/preview/login⁠ to sign in as the admin, with example drawings. Data lives in memory and is gone when the container stops.

⁠Quick start with Docker Compose

The app needs PostgreSQL. The compose file starts both.

mkdir excaliself && cd excaliself
curl -fsSLO https://raw.githubusercontent.com/maciekzygmunt/excaliself/main/docker-compose.yaml
curl -fsSL -o .env https://raw.githubusercontent.com/maciekzygmunt/excaliself/main/.env.example
# set POSTGRES_PASSWORD, BETTER_AUTH_SECRET, and BASE_URL in .env
docker compose up -d

Open BASE_URL (default http://localhost:3000⁠). The first visit takes you to /setup to create the admin account. Put a reverse proxy with HTTPS in front of port 3000 for anything public. See the Docker Compose docs⁠ for proxy setup, upgrades, and backups.

The compose file pulls the same image from ghcr.io/maciekzygmunt/excaliself. To pull from Docker Hub instead, change its image: line to maciekzygmunt/excaliself:${EXCALISELF_VERSION:-latest}.

⁠Tags

TagTracks
latestNewest release
1.2.3That exact release
1.2Newest 1.2.x patch
mainTip of main (unreleased, may break)

The app applies database migrations when it starts, so upgrading is pulling a newer image and restarting.

⁠Environment variables

VariableRequiredDescription
DATABASE_URLYesPostgreSQL connection URL. The compose file builds it from POSTGRES_*
BETTER_AUTH_SECRETYesSession signing secret, at least 32 characters (openssl rand -base64 32)
BASE_URLYes in productionPublic URL of the instance (default http://localhost:3000)
GOOGLE_*, MICROSOFT_*, OIDC_*, SSO_ALLOWED_DOMAINSNoSingle sign-on⁠
PREVIEW_MODENotrue runs a throwaway instance on an in-memory database, seeded with example drawings

The compose file also reads POSTGRES_PASSWORD, EXCALISELF_VERSION, and EXCALISELF_PORT from .env. See Environment variables⁠ for every setting.

GET /api/health returns 200 when the app is up and can reach Postgres. The image uses it as its container healthcheck.

Tag summary

Content type

Image

Digest

sha256:e9b5d6948…

Size

91.1 MB

Last updated

33 minutes ago

docker pull maciekzygmunt/excaliself