Build from source

Requirements:

  • Go 1.14 or newer

Clone the repository:

  1. git clone "https://github.com/caddyserver/caddy.git"

If you don’t have git, you can download the source code as a file archive from GitHub. Each release also has source snapshots.

Build:

  1. cd caddy/cmd/caddy/
  2. go build

Due to a bug in Go, these basic steps do not embed version information. If you want the version (caddy version), you need to compile Caddy as a dependency rather than as the main module. Instructions for this are in Caddy’s main.go file. Or, you can use xcaddy which automates this.

xcaddy

The xcaddy command is the easiest way to build Caddy with version information and/or plugins.

Requirements:

  • Go installed (see above)
  • Make sure xcaddy is in your PATH

You do not need to download the Caddy source code (it will do that for you).

Then building Caddy (with version information) is as easy as:

  1. xcaddy build

To build with plugins, use --with:

  1. xcaddy build \
  2. --with github.com/caddyserver/nginx-adapter
  3. --with github.com/caddyserver/ntlm-transport@v0.1.1

As you can see, you can customize the versions of plugins with @ syntax. Versions can be a tag name or commit SHA.

Cross-platform compilation with xcaddy works the same as with the go command (see below).

Cross-platform

Go programs are easy to compile for other platforms. Just set the GOOS, GOARCH, and/or GOARM environment variables that are different. (See the go documentation for details.)

For example, to compile Caddy for Windows when you’re not on Windows:

  1. GOOS=windows go build

Or similarly for Linux ARMv6 when you’re not on Linux or on ARMv6:

  1. GOOS=linux GOARCH=arm GOARM=6 go build

The same works for xcaddy. To cross-compile for macOS:

  1. GOOS=darwin xcaddy build