Caddy
Modern web server and reverse proxy with automatic HTTPS. Caddy provisions and renews TLS certificates without any configuration. Simpler setup than Nginx for most use cases
Quick Start
docker run -p 80:80 -p 443:443 -v caddy_data:/data caddy caddy reverse-proxy --from your.domain.com --to localhost:8080 Overview
Caddy is a web server and reverse proxy written in Go. The defining feature is automatic HTTPS: point Caddy at a domain and it provisions a TLS certificate from Let’s Encrypt or ZeroSSL, serves the site over HTTPS, and renews the certificate before it expires, all without any extra configuration or Certbot setup.
The Caddyfile configuration format is designed to be readable. A reverse proxy entry with HTTPS typically takes two or three lines. The same configuration in Nginx would require a server block with SSL certificate paths, cipher lists, and protocol settings. For common homelab and small production patterns, Caddy is considerably less configuration to maintain.
Beyond reverse proxying, Caddy handles HTTP/3, automatic HTTP-to-HTTPS redirects, load balancing, static file serving, and request rewriting. A plugin system extends it for more specialised use cases.
The honest trade-off versus Nginx: Caddy is simpler and more opinionated. For teams with existing Nginx configurations or setups that need fine-grained control over every header and proxy parameter, migrating to Caddy may not justify the effort. For new projects or anyone starting from scratch, the automatic certificate management removes a consistent maintenance burden. With 72,900 GitHub stars, it is a mature and well-supported option.
Compared to Nginx Proxy Manager: Caddy is file-based configuration with no GUI; NPM is GUI-based with less flexibility. Choose based on whether you prefer code or clicks.
Use Cases
Specific ways to use Caddy for your workflow.
Deployment Strategy
Recommended ways to host Caddy in your own environment.