doory
★ 702A self-hosted alternative to Canva
otherOpen Source — No Paywall5 Containers — 5 containers — moderate hosting footprintDocker · SourceNeeds Postgres1 active committer (12mo)
About
Doory is a self-hostable, browser-based design editor positioned as a free open-source alternative to Canva. It is aimed at people who want to create marketing assets, social content, presentations,...
Community Ratings
No ratings yetNew this week
Read recap →Weekly Recap — Oct 2, 2026 – Oct 9, 2026Oct 9, 2026
Features
- Template-based and blank-canvas design
- Text, shapes, icons, emoji, illustrations, stickers, and QR codes
- Background removal in the browser
- Layers, groups, masks, filters, snapping, rulers, and multi-page layouts
- Animations, transitions, music, sound effects, and voiceover recording
- Export to PNG, JPG, SVG, PDF, MP4, WebM, and GIF
- Present mode with speaker notes and timing
- Sharing links with view/comment/edit access
- Version history and real-time co-editing
- Brand kits and custom fonts
Details
- Last Updated
- Oct 12, 2026
- Created
- Oct 10, 2026
- Install Methods
- dockersource
- Requirements
- Docker ComposePostgreSQLChromium (for server-side PDF export)Google client ID (optional for Google sign-in)Unsplash or Pexels API key (optional for stock photo search)S3-compatible storage (optional for uploads)
- Authentication
- oauth
- API
- RESTWEBSOCKET
- Backup & Export
- file-backupnative-export
- Privacy & Independence
- Cloud: Optional
- User Model
- Multi-User
- Deployment
Deployment: Docker Compose ✓5 Containers — moderate hosting footprintRuns as 5 containers
Run doory with Docker Compose
Compose file from the doory project repository.
5 services · database: postgres · infra: postgres, redis
≈2.0 GB RAM requested (from Docker memory limits)
needs persistent storage (4 volumes)
docker-compose.yml · @ 14f0f93 · scanned Oct 12, 2026
# Doory: PostgreSQL + API (gunicorn) + real-time server (uvicorn, WebSockets for co-editing) + web (nginx
# serving the SPA and proxying the API). Redis is optional (profile "redis").
#
# cp .env.example .env # then edit it
# docker compose up -d --build
#
# The site is published on http://localhost:${WEB_PORT:-8080} (set WEB_BIND=127.0.0.1 to keep it
# private to a reverse proxy running on the same host). Put a TLS-terminating reverse proxy in
# front of the `web` service for anything public.
name: doory
services:
db:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_DB: ${POSTGRES_DB:-doory}
POSTGRES_USER: ${POSTGRES_USER:-doory}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?Set POSTGRES_PASSWORD in .env}
volumes:
- pgdata:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
interval: 5s
timeout: 5s
retries: 12
api:
build:
context: ./backend
args:
INSTALL_CHROMIUM: ${INSTALL_CHROMIUM:-true}
restart: unless-stopped
init: true # reaps the Chromium child processes of the PDF export
depends_on:
db:
condition: service_healthy
env_file: .env
security_opt:
- no-new-privileges:true
environment:
DJANGO_SETTINGS_MODULE: doory.settings.prod
DJANGO_SECRET_KEY: ${DJANGO_SECRET_KEY:?Set DJANGO_SECRET_KEY in .env}
SITE_URL: ${SITE_URL:?Set SITE_URL in .env}
CSRF_TRUSTED_ORIGINS: ${SITE_URL}
DATABASE_URL: postgres://${POSTGRES_USER:-doory}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB:-doory}
CACHE_URL: dbcache://doory_cache
MEDIA_ROOT: /app/media
REDIS_URL: ${REDIS_URL:-}
volumes:
- media:/app/media
networks:
default:
# The name the web container's nginx uses; unique even on a network shared with other apps.
aliases: [doory-api]
healthcheck:
test: ["CMD", "python", "/app/healthcheck.py"]
interval: 15s
timeout: 5s
start_period: 90s
retries: 5
# Chromium (server-side PDF export) needs more shared memory than Docker's 64 MB default.
shm_size: "512m"
# Live editing: the same image as `api`, served by uvicorn so WebSockets work. Run more than one worker
# (REALTIME_WORKERS) or replica only together with Redis: `docker compose --profile redis up -d`.
realtime:
build:
context: ./backend
args:
INSTALL_CHROMIUM: ${INSTALL_CHROMIUM:-true}
restart: unless-stopped
init: true
# A hostile update can make the CRDT engine allocate a lot of memory; the limit makes the kernel stop this
# service (and `restart` bring it back) instead of starving the host.
mem_limit: ${REALTIME_MEM_LIMIT:-2g}
depends_on:
api:
condition: service_healthy
redis:
condition: service_healthy
required: false
env_file: .env
security_opt:
- no-new-privileges:true
environment:
DJANGO_SETTINGS_MODULE: doory.settings.prod
DJANGO_SECRET_KEY: ${DJANGO_SECRET_KEY:?Set DJANGO_SECRET_KEY in .env}
SITE_URL: ${SITE_URL:?Set SITE_URL in .env}
CSRF_TRUSTED_ORIGINS: ${SITE_URL}
DATABASE_URL: postgres://${POSTGRES_USER:-doory}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB:-doory}
CACHE_URL: dbcache://doory_cache
MEDIA_ROOT: /app/media
REDIS_URL: ${REDIS_URL:-}
HEALTH_PORT: "8001"
volumes:
- media:/app/media
networks:
default:
aliases: [doory-realtime]
command:
- uvicorn
- doory.asgi:application
- --host
- 0.0.0.0
- --port
- "8001"
- --workers
- ${REALTIME_WORKERS:-1}
- --ws
- auto
- --ws-max-size
- "2097152"
- --lifespan
- "off"
- --no-server-header
- --timeout-graceful-shutdown
- "20"
healthcheck:
test: ["CMD", "python", "/app/healthcheck.py"]
interval: 15s
timeout: 5s
start_period: 60s
retries: 5
# Optional: shares live rooms between several realtime workers or replicas. Nothing is stored in it.
redis:
image: redis:7.2-alpine
profiles: ["redis"]
restart: unless-stopped
command: ["redis-server", "--save", "", "--appendonly", "no"]
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 5s
timeout: 3s
retries: 12
web:
build:
context: ./frontend
restart: unless-stopped
security_opt:
- no-new-privileges:true
depends_on:
api:
condition: service_healthy
realtime:
condition: service_healthy
ports:
- "${WEB_BIND:-0.0.0.0}:${WEB_PORT:-8080}:8080"
volumes:
- media:/srv/media:ro
volumes:
pgdata:
media:
This file may be out of date. Check the doory website for current setup steps.
Track your self-hosted stack
Bookmark software to try, rate tools you've used, and keep your collection in one place.
Metadata extracted from README on Oct 12, 2026
Related Software
Uptime Kuma
92.3k
Uptime Kuma is an easy-to-use self-hosted monitoring tool for checking service and server uptime.
Status PagesNetwork UtilitiesAutomation Tools+3
Single ContainerFully FOSS
Lobe Chat
83.1k
LobeHub is a self-hostable AI agent platform for organizing, creating, and collaborating with multi-agent workflows.
Artificial IntelligenceAI InterfacesSelf Hosting Solutions+3
6 Containers
Huginn
50.0k
Huginn is a self-hosted automation system for building agents that monitor online events and perform actions on your behalf.
Automation ToolsPermissive LicenseAI Agents+3
4 Containers
AnythingLLM
67.0k
An all-in-one AI application for chatting with documents, building AI agents, and running local or cloud LLM workflows.
Artificial IntelligenceAutomation ToolsSelf Hosting Solutions+7
Single Container
Immich
116.0k
High performance self-hosted photo and video management solution.
Photo GalleriesCopyleft LicenseMedia Management+1
6 Containers
SillyTavern
34.3k
SillyTavern is a locally installed interface for interacting with text generation LLMs, image generation engines, and TTS voice models.
Artificial IntelligenceAI InterfacesCopyleft License+3
Single Container
Superset
75.1k
A modern, enterprise-ready business intelligence web application for data exploration and visualization.
Analytics ToolsPermissive LicenseDatabase Management+1
10 Containers
Memos
63.7k
Memos is an open-source, self-hosted note-taking tool for quick capture.
Note Taking AppsPermissive LicenseKnowledge Management+2
Single Container
Twenty
58.2k
An open-source CRM for managing customer data, permissions, workflows, emails, and related records.
CRM SystemsSelf Hosting SolutionsAutomation Tools+4
FOSS with Issues
wg-easy
27.1k
A web UI for installing and managing WireGuard on Linux hosts.
Self Hosting SolutionsNetwork UtilitiesRemote Access+1
Single Container
Langfuse
35.7k
Langfuse is an open source LLM engineering platform for teams to develop, monitor, evaluate, and debug AI applications.
IDE ToolsArtificial IntelligenceFOSS with Issues+5
6 ContainersFOSS with Issues
Jitsi Meet
30.1k
Jitsi Meet is an open source video conferencing platform for browser-based meetings with mobile apps and SDKs.
Video ConferencingPermissive LicenseSelf Hosting Solutions
Single Container







