Yuzhong Zhang 44414af085 Add thumbnail support to Canvas and storage backends
Introduces a 'thumbnail' field to the Canvas model and updates all storage backends (AWS S3, filesystem, memory, and SQLite) to handle storing and retrieving this field. Also updates the API handler to accept and save the thumbnail, and switches SQLite driver to modernc.org/sqlite for improved compatibility. Updates .gitignore to exclude .db files.
2025-07-06 15:02:58 +08:00
2025-07-06 13:05:20 +08:00
2025-07-06 14:28:05 +08:00
2024-03-29 09:55:57 +00:00
2024-03-29 09:55:57 +00:00
2024-05-24 09:24:13 +00:00
fix
2025-06-23 12:34:34 +08:00

Excalidraw Complete: A Self-Hosted Solution

Excalidraw Complete simplifies the deployment of Excalidraw, bringing an all-in-one solution to self-hosting this versatile virtual whiteboard. Designed for ease of setup and use, Excalidraw Complete integrates essential features into a single Go binary. This solution encompasses:

  • The intuitive Excalidraw frontend UI for seamless user experience.
  • An integrated data layer ensuring fast and efficient data handling based on different data providers.
  • A socket.io implementation to enable real-time collaboration among users.

The project goal is to alleviate the setup complexities traditionally associated with self-hosting Excalidraw, especially in scenarios requiring data persistence and collaborative functionalities.

Installation

To get started, download the latest release binary:

# Visit https://github.com/PatWie/excalidraw-complete/releases/ for the download URL
wget <binary-download-url>
chmod +x excalidraw-complete
./excalidraw-complete

Once launched, Excalidraw Complete is accessible at localhost:3002, ready for drawing and collaboration.

Configuration

Excalidraw Complete adapts to your preferences with customizable storage solutions, adjustable via the STORAGE_TYPE environment variable:

  • Filesystem: Opt for STORAGE_TYPE=filesystem and define LOCAL_STORAGE_PATH to use a local directory.
  • SQLite: Select STORAGE_TYPE=sqlite with DATA_SOURCE_NAME for local SQLite storage, including the option for :memory: for ephemeral data.
  • AWS S3: Choose STORAGE_TYPE=s3 and specify S3_BUCKET_NAME to leverage S3 bucket storage, ideal for cloud-based solutions.

These flexible configurations ensure Excalidraw Complete fits seamlessly into your existing setup, whether on-premise or in the cloud.

Building from Source

Interested in contributing or customizing? Build Excalidraw Complete from source with these steps:

# Clone the repository with submodules
git clone https://github.com/PatWie/excalidraw-complete.git --recursive
cd excalidraw-complete

# Build the Docker image (includes frontend and backend)
docker build -t excalidraw-complete -f excalidraw-complete.Dockerfile .

# Run the container
docker run -p 3002:3002 excalidraw-complete

Manual Build

# Clone and prepare the Excalidraw frontend
git clone https://github.com/PatWie/excalidraw-complete.git --recursive
cd ./excalidraw-complete/excalidraw

# Apply frontend patches
git apply ../frontend.patch

# Build frontend
npm install
cd excalidraw-app
npm run build:app:docker
cd ../../

# Copy frontend build to correct location
cp -r excalidraw/excalidraw-app/build frontend/

# Build Go application
go build -o excalidraw-complete main.go

(Optional) Replace localhost:3002 inside of main.go with your domain name if you want to use a reverse proxy (Optional) Replace "ssl=!0", "ssl=0" with "ssl=!0", "ssl=1" if you want to use HTTPS (Optional) Replace "ssl:!0", "ssl:0" with "ssl:!0", "ssl:1" if you want to use HTTPS

Declare environment variables if you want any (see section above) Example: STORAGE_TYPE=sqlite DATA_SOURCE_NAME=/tmp/excalidb.sqlite

Start the server:

go run main.go --listen=":3002"

STORAGE_TYPE=sqlite DATA_SOURCE_NAME=test.db go run main.go --loglevel debug --listen=":3002"
STORAGE_TYPE=filesystem LOCAL_STORAGE_PATH=/tmp/excalidraw/ go run main.go --loglevel debug --listen=":3002"

Excalidraw Complete is now running on your machine, ready to bring your collaborative whiteboard ideas to life.


Excalidraw is a fantastic tool, but self-hosting it can be tricky. I welcome your contributions to improve Excalidraw Complete — be it through adding new features, improving existing ones, or bug reports.

S
Description
No description provided
Readme
87 MiB
Languages
JavaScript 57.7%
HTML 28.9%
TypeScript 5.7%
Go 5.3%
SCSS 2%
Other 0.2%