|
|
%!s(int64=2) %!d(string=hai) anos | |
|---|---|---|
| core | %!s(int64=2) %!d(string=hai) anos | |
| excalidraw @ 37ad34c4c2 | %!s(int64=2) %!d(string=hai) anos | |
| frontend | %!s(int64=2) %!d(string=hai) anos | |
| handlers | %!s(int64=2) %!d(string=hai) anos | |
| stores | %!s(int64=2) %!d(string=hai) anos | |
| .gitignore | %!s(int64=2) %!d(string=hai) anos | |
| .gitmodules | %!s(int64=2) %!d(string=hai) anos | |
| .goreleaser.yaml | %!s(int64=2) %!d(string=hai) anos | |
| README.md | %!s(int64=2) %!d(string=hai) anos | |
| excalidraw-complete.Dockerfile | %!s(int64=2) %!d(string=hai) anos | |
| frontend.patch | %!s(int64=2) %!d(string=hai) anos | |
| go.mod | %!s(int64=2) %!d(string=hai) anos | |
| go.sum | %!s(int64=2) %!d(string=hai) anos | |
| main.go | %!s(int64=2) %!d(string=hai) anos | |
| ui-build.Dockerfile | %!s(int64=2) %!d(string=hai) anos |
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 project goal is to alleviate the setup complexities traditionally associated with self-hosting Excalidraw, especially in scenarios requiring data persistence and collaborative functionalities.
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.
Excalidraw Complete adapts to your preferences with customizable storage solutions, adjustable via the STORAGE_TYPE environment variable:
STORAGE_TYPE=filesystem and define LOCAL_STORAGE_PATH to use a local directory.STORAGE_TYPE=sqlite with DATA_SOURCE_NAME for local SQLite storage, including the option for :memory: for ephemeral data.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.
Interested in contributing or customizing? Build Excalidraw Complete from source with these steps:
# Clone and prepare the Excalidraw frontend
git clone https://github.com/PatWie/excalidraw-complete.git --recursive
cd ./excalidraw-complete/excalidraw
# git checkout tags/v0.17.3
# Fix docker build (fix already implemented upstream)
# git remote add jcobol https://github.com/jcobol/excalidraw
# git fetch jcobol
# git checkout 7582_fix_docker_build
# Adjust URLs inside of frontend.patch if you want to use a reverse proxy
git apply ../frontend.patch
cd ../
git checkout dev
docker build -t exalidraw-ui-build excalidraw -f ui-build.Dockerfile
docker run -v ${PWD}/:/pwd/ -it exalidraw-ui-build cp -r /frontend /pwd
(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
(Optional) Change ip:port of Go webserver at the end of main.go if you want to customize it
Compile the Go application:
go build -o excalidraw-complete main.go
Declare environment variables if you want any (see section above)
Example: STORAGE_TYPE=sqlite DATA_SOURCE_NAME=/tmp/excalidb.sqlite
Start the server:
./excalidraw-complete
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.