Fast, cross-platform HTTP/2 web server with automatic HTTPS
Go Other
Latest commit ecf852e Jan 18, 2017 @tw4452852 tw4452852 committed with proxy: fix TestReverseProxy failure on go tip (#1360)
Because of this commit(6e36811c37399d60cbce587b7c48e611009c5aec) on go tip,
it will probe the request's body to determine whether to use chunked transfer
encoding which trailers depend on it.
So we just offer a non empty body to make trailers work.

fix issue #1359

Signed-off-by: Tw <>
Failed to load latest commit information.
caddy Add StartupHooks to Plugins (#1330) Jan 14, 2017
caddyfile Remove dead code, do struct alignment, simplify code Oct 25, 2016
caddyhttp proxy: fix TestReverseProxy failure on go tip (#1360) Jan 18, 2017
caddytls Fix small misspellings Jan 10, 2017
dist Fix small misspellings Jan 10, 2017
startupshutdown Log Startup and Shutdown Commands Oct 24, 2016
.gitattributes Catch whitespace code style violations locally (#774) Apr 20, 2016
.gitignore Enable downloading of protected content. See issue #979 (#980) Aug 8, 2016
.travis.yml Add misspell to travis build Jan 10, 2017 Punctuation Oct 26, 2016
ISSUE_TEMPLATE More minor text fixes Aug 30, 2016
LICENSE.txt License is a text file Aug 1, 2015 Add sourcegraph link to readme Oct 28, 2016
appveyor.yml Update to Go 1.7.4 Dec 4, 2016
assets.go Rewrote Caddy from the ground up; initial commit of 0.9 branch Jun 4, 2016
assets_test.go Rewrote Caddy from the ground up; initial commit of 0.9 branch Jun 4, 2016
caddy.go Add a cli parameter to -validate a Caddyfile. Issue #1328 (#1344) Jan 14, 2017
caddy_test.go Increase code coverage Nov 27, 2016
commands.go Rewrote Caddy from the ground up; initial commit of 0.9 branch Jun 4, 2016
commands_test.go Fix misspellings Sep 5, 2016
controller.go OnFirstStartup and OnFinalShutdown callbacks added Jun 24, 2016
plugins.go Add StartupHooks to Plugins (#1330) Jan 14, 2017
rlimit_posix.go improve rlimit usage (#982) Aug 3, 2016
rlimit_windows.go improve rlimit usage (#982) Aug 3, 2016
sigtrap.go OnFirstStartup and OnFinalShutdown callbacks added Jun 24, 2016
sigtrap_posix.go Rewrote Caddy from the ground up; initial commit of 0.9 branch Jun 4, 2016
sigtrap_windows.go Rewrote Caddy from the ground up; initial commit of 0.9 branch Jun 4, 2016


community twitter Documentation Linux Build Status Windows Build Status Go Report Card

Caddy is a general-purpose web server for Windows, Mac, Linux, BSD, and Android. It is a capable but easier alternative to other popular web servers.

Releases · User Guide · Community

Try browsing the code on Sourcegraph!



  • Easy configuration with Caddyfile
  • Automatic HTTPS via Let's Encrypt; Caddy obtains and manages all cryptographic assets for you
  • HTTP/2 enabled by default (powered by Go standard library)
  • Virtual hosting for hundreds of sites per server instance, including TLS SNI
  • Experimental QUIC support for those that like speed
  • TLS session ticket key rotation for more secure connections
  • Brilliant extensibility so Caddy can be customized for your needs
  • Runs anywhere with no external dependencies (not even libc)

Quick Start

Caddy binaries have no dependencies and are available for every platform. Install Caddy any one of these ways:

Once caddy is in your PATH, you can cd to your website's folder and run caddy to serve it. By default, Caddy serves the current directory at localhost:2015.

To customize how your site is served, create a file named Caddyfile by your site and paste this into it:


websocket /echo cat
ext    .html
log    /var/log/access.log
proxy  /api
header /api Access-Control-Allow-Origin *

When you run caddy in that directory, it will automatically find and use that Caddyfile to configure itself.

This simple file enables compression, allows directory browsing (for folders without an index file), hosts a WebSocket echo server at /echo, serves clean URLs, logs requests to access.log, proxies all API requests to a backend on port 7005, and adds the coveted Access-Control-Allow-Origin: * header for all responses from the API.

Wow! Caddy can do a lot with just a few lines.

To host multiple sites and do more with the Caddyfile, please see the Caddyfile documentation.

Note that production sites are served over HTTPS by default.

Caddy has a command line interface. Run caddy -h to view basic help or see the CLI documentation for details.

Running as root: We advise against this. You can still listen on ports < 1024 using setcap like so: sudo setcap cap_net_bind_service=+ep ./caddy

Running from Source

Note: You will need Go 1.7 or newer.

  1. go get
  2. cd into your website's directory
  3. Run caddy (assuming $GOPATH/bin is in your $PATH)

Caddy's main() is in the caddy subfolder. To recompile Caddy, use build.bash found in that folder.

Running in Production

The Caddy project does not officially maintain any system-specific integrations, but your download file includes unofficial resources contributed by the community that you may find helpful for running Caddy in production.

How you choose to run Caddy is up to you. Many users are satisfied with nohup caddy &. Others use screen. Users who need Caddy to come back up after reboots either do so in the script that caused the reboot, add a command to an init script, or configure a service with their OS.


Join our community where you can chat with other Caddy users and developers!

Please see our contributing guidelines and check out the developer wiki.

We use GitHub issues and pull requests only for discussing bug reports and the development of specific changes. We welcome all other topics on the forum!

If you want to contribute to the documentation, please submit pull requests to caddyserver/

Thanks for making Caddy -- and the Web -- better!

Special thanks to DigitalOcean for hosting the Caddy project.

About the Project

Caddy was born out of the need for a "batteries-included" web server that runs anywhere and doesn't have to take its configuration with it. Caddy took inspiration from spark, nginx, lighttpd, Websocketd and Vagrant, which provides a pleasant mixture of features from each of them.

The name "Caddy": The name of the software is "Caddy", not "Caddy Server" or "CaddyServer". Please call it "Caddy" or, if you wish to clarify, "the Caddy web server". See brand guidelines.

Author on Twitter: @mholt6