Keeper.sh
★ 1.4kA self-hosted alternative to Google Calendar
About
Community Ratings
No ratings yetNew this week
Read recap →Features
- Google Calendar integration
- Outlook integration
- iCloud integration
- Fastmail integration
- CalDAV integration
- ICS/iCal link ingestion
- Incremental syncing
- Privacy controls for event fields
- REST API with API tokens
- MCP server for AI agents
Details
- Last Updated
- Oct 29, 2026
- Created
- Dec 23, 2025
- Install Methods
- dockerdocker-composesource
- Requirements
- Bun v1.3.11+DockerDocker ComposePostgreSQLRedisCaddy reverse proxy
- Authentication
- oauth
- API
- REST
- Backup & Export
- database-dump
- Runtime / Stack
- Docker
- Privacy & Independence
- Cloud: Optional
- Deployment
Deployment: Docker Compose ✓3 Containers — light hosting footprintRuns as 3 containers
Run Keeper.sh yourself
Pick how much you want to manage.
HetznerBest match
Full control
A small server, then Docker Compose.
About 20 minutes with Docker
DigitalOcean
Full control
A small server, then Docker Compose.
About 20 minutes with Docker
OVHcloud
Full control
A small server, then Docker Compose.
About 20 minutes with Docker
Is this your project? Sponsor a listing
Run Keeper.sh with Docker Compose
Compose file from the Keeper.sh project repository.
3 services · database: postgres · infra: postgres, redis, caddy
no resource limits declared
needs persistent storage (6 volumes)
compose.yaml · @ b71321b · scanned Jun 13, 2026
name: keeper
services:
postgres:
image: postgres:17
container_name: keeper-postgres
environment:
POSTGRES_USER: ${DATABASE_USER:-postgres}
POSTGRES_PASSWORD: ${DATABASE_PASSWORD:-postgres}
POSTGRES_DB: ${DATABASE_NAME:-postgres}
ports:
- 5432:5432
volumes:
- keeper-postgres-data:/var/lib/postgresql/data
restart: unless-stopped
redis:
image: redis:7-alpine
container_name: keeper-redis
ports:
- 6379:6379
volumes:
- keeper-redis-data:/data
restart: unless-stopped
caddy:
image: caddy:2-alpine
container_name: keeper-caddy
ports:
- "443:443"
- "443:443/udp"
- "80:80"
extra_hosts:
- "host.docker.internal:host-gateway"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- ./.pki/root.crt:/data/caddy/pki/authorities/local/root.crt:ro
- ./.pki/root.key:/data/caddy/pki/authorities/local/root.key:ro
- keeper-caddy-config:/config
restart: unless-stopped
volumes:
keeper-postgres-data:
keeper-redis-data:
keeper-caddy-config:
This file may be out of date. Check the Keeper.sh 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.