
Deploy ExcaliDash
Self-hosted Excalidraw dashboard with storage, sharing and collaboration
Just deployed
/app/prisma
Just deployed
Deploy and Host ExcaliDash on Railway
ExcaliDash is a self-hosted dashboard for Excalidraw. Save drawings, organize collections, restore previous versions, and collaborate through scoped sharing links.
About Hosting ExcaliDash
This template deploys the upstream 0.6.0 frontend and backend images. The frontend provides the public HTTPS address and proxies API and collaboration traffic to a private backend. A persistent volume stores SQLite, drawings, embedded image data, and authentication state. Authentication is enabled before the first public request.
ExcaliDash is beta software. Back up your data before upgrading.
Common Use Cases
- Keep architecture sketches and diagrams in a private drawing library.
- Organize project drawings into searchable collections.
- Collaborate on drawings and share view or edit access.
- Retain and restore recent drawing versions.
Dependencies for ExcaliDash Hosting
Deployment Dependencies
- A Railway account with resources for two always-on services and one persistent volume.
- No external database, SMTP credentials, or S3 account required.
Implementation Details
First login: Open the frontend URL after both services become healthy. Read the one-time admin setup code from the backend deployment logs, marked [BOOTSTRAP SETUP], and use it to create your administrator account. There are no default credentials. Choose a password with at least 12 characters, including uppercase, lowercase, a number, and a symbol.
The setup code expires after 15 minutes. Restart the backend and use its newest code if yours expires. Logs are also available through railway logs --project PROJECT_ID --service backend --environment production.
Storage: The backend volume is mounted at /app/prisma. Keep one backend replica. Deleting that volume deletes your persistent data. Export drawings and configure Railway volume backups; retain independent backup copies. Scheduled application backups are not enabled by this template.
Security: JWT, CSRF, and API-key pepper secrets are generated for each deployment. Keep the backend private and authentication enabled. A guarded startup step enables auth only for an unconfigured database with no active users. It does not overwrite existing users or completed onboarding decisions. Outbound update checks are disabled.
Networking: The frontend handles both API and Socket.IO traffic. Its healthcheck verifies backend connectivity. Private DNS refreshes every 10 seconds, allowing backend IP changes without restarting the frontend. TLS terminates at Railway. If you add a custom domain, update the backend's FRONTEND_URL to its exact HTTPS origin.
Troubleshooting: First boot runs database migrations. A deploying frontend may be waiting for the backend. Private DNS refreshes every 10 seconds. In-flight requests can time out during backend redeploys; retry or reload once the backend is healthy. Zero-downtime redeploys are not guaranteed. For expired setup codes, restart the backend. For login or CSRF errors following a domain change, check FRONTEND_URL and reload. Upstream nginx limits request bodies to 50 MB.
Upgrades: Both images are pinned to 0.6.0. Back up first, then update both tags together after reviewing upstream migration notes. SQLite is single-instance storage, not a horizontally scalable database. OIDC, PostgreSQL, S3, custom domains, and scheduled backups are not verified template features.
Why Deploy ExcaliDash on Railway?
Railway provides the public HTTPS endpoint, private service networking, persistent storage, deployment logs, and generated secrets without requiring a separate server setup.
Upstream source: https://github.com/ZimengXiong/ExcaliDash
Template Content
