Skip to content

Your team's whiteboard, on your server.

Excaliself is self-hosted Excalidraw: the full canvas, plus a shared Team space, live collaboration, folders, and search. Every drawing lives in your own Postgres.

Sketch: Mira, Tomasz and Priya each send a drawing through Excaliself into one database labeled your data. Excaliself and the database sit together inside a boundary labeled your server. your serveryour teamMiraTomaszPriyasaves asyou drawExcaliselfaccounts, folders, searchyour dataSignup flowService mapSprint retro

Everything around the canvas, nothing on top of it.

Excalidraw stays untouched. Excaliself adds the parts a team needs to keep drawings for years.

The Excaliself home screen: a sidebar with search, a Private and Team switch, starred drawings, folders and trash, next to a grid of recent drawing previews
The Excaliself sidebar: New drawing, search, a Private and Team switch, starred drawings, folders and trash
Notes on the screenshot:
  • press N for a new drawing
  • find anything from here, or press ⌘K
  • yours, or the team's
  • star the ones you open daily
  • folders nest as deep as you like
  • trash keeps deletes for 30 days
  • previews, so you spot a drawing by its shape

Features

The Excalidraw toolbar above a signup flowchart in the Excaliself editor
the official editor package, unchanged

The editor you already know

The full Excalidraw canvas. Every stroke saves on its own, and images you paste are stored with the drawing.

The Signup flow drawing with the cursors of Tomasz and Priya, a box that Tomasz has selected, and a new box that Priya just drew
Tomasz and Priya, editing right now

Draw together, live

Open the same drawing and see everyone's cursors and edits as they happen. Send a share link to someone outside the team, and they can draw with you without an account.

The Team space home: the sidebar switch set to Team with two people live, team folders, and drawing cards with their creators
shows up once you invite someone

A space the whole team shares

A Private | Team switch in the sidebar. Team folders and drawings belong to everyone, and a badge shows who is in each drawing right now. Move a private drawing over when it is ready.

The command palette filtering drawings and folders by the word retro
one word matches folders and drawings

Press ⌘K and jump anywhere

Fuzzy search over drawings, folders, and actions. Type a few letters, press enter, and keep your hands on the keyboard.

The members list in Settings with admin and member roles
no public signup page

Your team only

The first visitor becomes the admin. Everyone else joins through a single use invite link. Admins manage roles and password resets from Settings.

Excalidraw is the canvas. Excaliself gives every drawing a home on your server.

so they open on any laptop, for anyone on the team

Sketch: an Excalidraw window inside a larger frame labeled Excaliself, which adds a folder sidebar. Note: the canvas you know, untouched.ExcaliselfexcalidrawQ4 roadmapthe canvas you know, untouched

One compose file. That is the whole install.

It starts the prebuilt app image and a Postgres container, on amd64 and arm64. Migrations apply on start, so an update is a redeploy.

  1. 1.Download two files

    The compose file and an example env file, straight from the repository.

  2. 2.Set three variables

    A Postgres password, a session secret, and your public URL.

  3. 3.Start it and open the URL

    The first visit creates the admin account. Share invite links from Settings.

Full deployment guide, including Coolify
Terminal
$ 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

Questions before you deploy

Anything missing? Open an issue and it gets answered there.

Is this a fork of Excalidraw?

No. Excaliself embeds the official Excalidraw editor package unchanged and adds accounts, folders, search, and trash around it. Editor updates arrive with each release.

What do I need to run it?

A server with Docker. The compose file starts the app and a Postgres database together. The prebuilt image runs on amd64 and arm64 and needs no build step.

Where are my drawings stored?

In your own Postgres database, including pasted images. Back up the pgdata volume and you have everything. Nothing is sent to a third party.

How do updates work?

Pull the new image and start it again. Database migrations run when the app starts. Pin a release with EXCALISELF_VERSION or follow latest.

Can I use it on Coolify?

Yes. Add the repository as a Docker Compose resource, point it at docker-compose.coolify.yaml, and click Deploy. Coolify creates the database, the secrets, and a domain.

How do people join?

The first visitor creates the admin account. Admins send invite links from Settings and can manage members, roles, and password resets there.

Does it support live collaboration?

Yes. Everyone in a drawing sees the cursors and edits of the others as they happen. Team drawings are always live, and a share link lets people without an account join a drawing.

What does it cost?

Nothing. Excaliself is open source under the MIT license. You pay only for the server you run it on. If it saves your team time, you can sponsor it.

Help keep it free

Excaliself is MIT licensed and has no paid plan. Sponsorships on GitHub pay for the hours that go into fixes, updates, and new features like the Team space.

Sponsor on GitHub
Four empty sponsor logo slotsyour logoyour logoyour logoyour logo
these spots are waiting for the first sponsors

Nothing to sign up for. Nothing to export later.

No third party accounts, no telemetry, no lock in. Stop the container and your drawings are still in your Postgres.