caddyserver /caddy

Fast and extensible multi-platform HTTP/1-2-3 web server with automatic HTTPS

★ 78,943⑂ 5,252👁 867⑃ 3,361● 4,728▤ 140◈ 0
GoApache-2.0Created 2015-01-13caddyserver.com
78,943
stars
+30+286+1,943
5,252
forks
867
watchers
3,361
prs
4,728
issues
140
releases
0
discussions

README

a  project


Every site on HTTPS
Caddy is an extensible server platform that uses TLS by default.

	Releases ·
	Documentation ·
	Get Help


	
	 
	
	 
	
	 
	
	 
	
	
	
	 
	


	Powered by
	
	
		
			
			
			
		
	




	
	Special thanks to:
	
	
		
	

 Warp, built for coding with multiple AI agents
Available for MacOS, Linux, & Windows




 Menu

- Features
- Install
- Build from source
	- For development
	- With version information and/or plugins
- Quick start
- Overview
- Full documentation
- Getting help
- About


 Features

- Easy configuration with the Caddyfile
- Powerful configuration with its native JSON config
- Dynamic configuration with the JSON API
- Config adapters if you don't like JSON
- Automatic HTTPS by default
	- ZeroSSL and Let's Encrypt for public names
	- Fully-managed local CA for internal names & IPs
	- Can coordinate with other Caddy instances in a cluster
	- Multi-issuer fallback
	- Encrypted ClientHello (ECH) support
- Stays up when other servers go down due to TLS/OCSP/certificate-related issues
- Production-ready after serving trillions of requests and managing millions of TLS certificates
- Scales to hundreds of thousands of sites as proven in production
- HTTP/1.1, HTTP/2, and HTTP/3 all supported by default
- Highly extensible modular architecture lets Caddy do anything without bloat
- Runs anywhere with no external dependencies (not even libc)
- Written in Go, a language with higher memory safety guarantees than other servers
- Actually fun to use
- So much more to discover

 Install

The simplest, cross-platform way to get started is to download Caddy from GitHub Releases and place the executable file in your PATH.

See our online documentation for other install instructions.

 Build from source

Requirements:

- Go 1.26.0 or newer

 For development

_Note: These steps will not embed proper version information. For that, please follow the instructions in the next section._

bash
$ git clone "https://github.com/caddyserver/caddy.git"
$ cd caddy/cmd/caddy/
$ go build


When you run Caddy, it may try to bind to low ports unless otherwise specified in your config. If your OS requires elevated privileges for this, you will need to give your new binary permission to do so. On Linux, this can be done easily with: sudo setcap cap_net_bind_service=+ep ./caddy

If you prefer to use go run which only creates temporary binaries, you can still do this with the included setcap.sh like so:

bash
$ go run -exec ./setcap.sh main.go


If you don't want to type your password for setcap, use sudo visudo to edit your sudoers file and allow your user account to run that command without a password, for example:


username ALL=(ALL:ALL) NOPASSWD: /usr/sbin/setcap


replacing username with your actual username. Please be careful and only do this if you know what you are doing! We are only qualified to document how to use Caddy, not Go tooling or your computer, and we are providing these instructions for convenience only

Top issues

Latest release

v2.11.9 v2.11.9 2026-11-05
This is a quick follow-up on top of 2.11.8, to fix a regression it introduced and a few more security issues, mostly in FastCGI. It contains only fixes backported from master, plus a couple of small additions. If you're on 2.11.8 and serve PHP, we recommend upgrading.

Huge thank you to our sponsors for keeping the project alive with resources, and for our maintainers who triage and assist tirelessly in this relentless new age of AI.

 Highlights

- Fixed: PHP directory indexes (regression in 2.11.8). A request for a directory with a trailing slash, like /wp-admin/, was matched by the di

Snapshot: 2026-11-10T09:35:25Z · Data license Apache-2.0 · JSON