HedgeDoc
Collaborative Markdown editor where several people edit one note together.
- Replaces
-
Paid collaborative document editing services, such as Google Docs.
All open-source alternatives to Google Docs
- Difficulty
-
Difficulty: Hard
4 services (1 database or broker: postgres), 5 volume mounts, 5 env values to set, no elevated host access. Heuristic score 7 of 11: hard. A source checkout is needed, so the rating is at least medium.
- Stack
TypeScript (language), PostgreSQL (database)
- Deployment
docker_compose
- Requirements
Not stated.
- License
-
AGPL-3.0(OSI-approved open source) - Business model
-
Unknown
The README at the pinned commit does not state a business model, so it stays unknown.
Source: github.com/hedgedoc/hedgedoc/blob/f98ea9c/README.md, read on .
- Repository
GitHub stats
- Stars
- 7,490
- Forks
- 609
- Open issues and pull requests
- 275
- Last push
- 2026-10-22
- Latest release
- 1.12.0
- Released
- 2026-08-21
From the GitHub API on . These numbers are a snapshot, not live. GitHub detected the license as AGPL-3.0.
Compose file
services:
backend:
image: ghcr.io/hedgedoc/hedgedoc/backend:2.0.0-alpha.3
volumes:
- $PWD/.env:/usr/src/app/backend/.env
- hedgedoc_uploads:/usr/src/app/backend/uploads
frontend:
image: ghcr.io/hedgedoc/hedgedoc/frontend:2.0.0-alpha.3
environment:
HD_BASE_URL: "${HD_BASE_URL}"
HD_INTERNAL_API_URL: http://backend:3000
HOSTNAME: "0.0.0.0"
db:
image: postgres:16
environment:
POSTGRES_USER: "${HD_DATABASE_USERNAME}"
POSTGRES_PASSWORD: "${HD_DATABASE_PASSWORD}"
POSTGRES_DB: "${HD_DATABASE_NAME}"
volumes:
- hedgedoc_postgres:/var/lib/postgresql/data
proxy:
image: caddy:latest
restart: unless-stopped
environment:
HD_BASE_URL: "${HD_BASE_URL}"
ports:
- "80:80"
- "443:443"
- "443:443/udp"
volumes:
- $PWD/Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data
volumes:
caddy_data:
hedgedoc_uploads:
hedgedoc_postgres:
From the app's own repository: github.com/hedgedoc/hedgedoc/blob/f98ea9c/docs/content/files/setup-docker/docker-compose.yml.
Compose file from hedgedoc/hedgedoc, used inside a checkout of that repository (documented setup B).
Install
- Docker with the Compose plugin and git (github.com/hedgedoc/hedgedoc/blob/f98ea9c/docs/content/tutorials/setup.md)
A host with Docker, the Docker Compose plugin and git. This entry needs a checkout of the project repository.
- Get the source at commit f98ea9c (github.com/hedgedoc/hedgedoc/blob/f98ea9c/docs/content/tutorials/setup.md)
git init hedgedoc cd hedgedoc git remote add origin https://github.com/hedgedoc/hedgedoc.git git sparse-checkout init --cone git sparse-checkout set docs/content/files/setup-docker git fetch --depth 1 --filter=blob:none origin f98ea9c4079dea39a54ed6d20e9521a3039dbff7 git checkout FETCH_HEAD - Go to the folder the docs use (github.com/hedgedoc/hedgedoc/blob/f98ea9c/docs/content/tutorials/setup.md)
cd docs/content/files/setup-docker - The compose file in the checkout: docs/content/files/setup-docker/docker-compose.yml (shown here for reading) (github.com/hedgedoc/hedgedoc/blob/f98ea9c/docs/content/files/setup-docker/docker-compose.yml)
Use the compose file shown above.
- Copy config.env to .env (github.com/hedgedoc/hedgedoc/blob/f98ea9c/docs/content/tutorials/setup.md)
cp config.env .env - What the compose file check ran with (github.com/hedgedoc/hedgedoc/blob/f98ea9c/docs/content/tutorials/setup.md)
The compose file check ran in a checkout of hedgedoc/hedgedoc at f98ea9c4079dea39a54ed6d20e9521a3039dbff7 (a sparse checkout: the top-level files and the folder docs/content/files/setup-docker), in the folder docs/content/files/setup-docker, after config.env was copied to .env. The setup tutorial tells the reader to download config.env as .env, the Caddyfile and docker-compose.yml from the docs site, edit .env and run docker compose up -d. The same files are in docs/content/files/setup-docker of the repository.
- Start it (github.com/hedgedoc/hedgedoc/blob/f98ea9c/docs/content/tutorials/setup.md)
docker compose up -d - Open the app (github.com/hedgedoc/hedgedoc/blob/f98ea9c/docs/content/tutorials/setup.md)
Open https://hedgedoc.localhost. The docs name this address. The compose file publishes host port 443 for the proxy service. The docs say this address is enough for a local test; the base URL is set in .env.
Compose file check: config_ok on 2026-10-22.
Gotchas and maintenance
Gotchas
- Some images use the latest tag or no tag. Images without a pinned version: proxy: caddy:latest. A later pull can get a different version. (github.com/hedgedoc/hedgedoc/blob/f98ea9c/docs/content/files/setup-docker/docker-compose.yml, checked 2026-10-22)
- The compose file publishes host ports. Host ports: 80 (proxy), 443 (proxy), 443/udp (proxy). A port without a host address listens on all host network interfaces. (github.com/hedgedoc/hedgedoc/blob/f98ea9c/docs/content/files/setup-docker/docker-compose.yml, checked 2026-10-22)
- The compose file mounts host folders. Host paths mounted into containers: $PWD/.env at /usr/src/app/backend/.env (backend), $PWD/Caddyfile at /etc/caddy/Caddyfile (proxy). (github.com/hedgedoc/hedgedoc/blob/f98ea9c/docs/content/files/setup-docker/docker-compose.yml, checked 2026-10-22)
Signals
- Open issues and pull requests: 275
- Last push: 2026-10-22 (0 days before this page was built)
- Latest release: 1.12.0 on 2026-08-21 (62 days before this page was built)