Follow us
Breaking
Web Hosting

The history of Caddy from Matt Holt’s Go experiment to 2026

Tracing Caddy's evolution from a 2015 university project to a high-performance server, this history highlights how Caddy 2.8 outperformed Nginx 1.26 by 22 percent in 1KB static file requests per second.

Share

A university project in Go

Matt Holt began Caddy in 2015 as a university project to match a nimble developer workflow. He used Go to build the server. He wanted higher level control than current popular web servers. Caddy 2.0 arrived in 2020 and introduced a JSON configuration API alongside a pluggable module system. Since the 2015 initial commit, 300 plus developers contributed 100,000 lines of code. Caddy provides a single static binary. This binary includes the Go runtime, the garbage collector, and the entire standard library. Go works. This single binary approach eliminates the need to manage external dependencies or libc in production. Caddy’s architecture uses goroutines to handle concurrency. These lightweight threads schedule across operating-system threads via the Go runtime. This design differs from the event-driven model used by C-based servers. Caddy’s configuration uses the Caddyfile, which converts to JSON. This Caddyfile provides a much simpler syntax than the nginx.conf used by Nginx.

Automatic TLS and shrinking lifetimes

Caddy automates HTTPS. It provisions TLS certificates for all sites and redirects HTTP to HTTPS. This automation solves problems because the CA/Browser Forum approved Ballot SC-081v3, which mandates a reduction in public TLS certificate validity periods that will eventually reach only 47 days by March 2029, which makes manual management an impossible burden for any sysadmin. Caddy uses Let’s Encrypt or ZeroSSL to communicate via the ACME protocol. For local hosts, Caddy generates its own CA using Smallstep libraries. On-demand TLS obtains a new certificate during the first TLS handshake. This feature allows businesses to scale TLS deployments for tens of thousands of sites without hard-coding domain names in a config. Caddy 2.10 includes Encrypted ClientHello to protect domain names in the ClientHello. It also supports the x25519mlkem768 cryptographic group for post-quantum key exchange. Caddy can use the HTTP challenge, the TLS-ALPN challenge, or the DNS challenge to validate domains. In 2017, Caddy released commercial licenses that added a "Caddy-Sponsors" header to responses. One user on Hacker News called this practice "obnoxious" because it felt like an advertisement for personal sites. This controversy led to a trademark dispute with a user who forked the project. You know how Nginx handles configuration.

The 2026 performance gap

Nginx leads.

Nginx, written in C, solves the C10K problem by using an event-driven model. It uses a master process and worker processes to handle requests efficiently. F5 acquired Nginx Inc. in 2019 for $670 million. Nginx still holds 32.8 percent of the market. Caddy holds about 1 percent. Caddy delivers high performance for small files. In April 2026, Caddy 2.8 delivered 142,000 requests per second for 1KB static files using 16-core ARM hardware. This beat Nginx 1.26, which reached 116,000 requests per second, by 22 percent. Nginx consumes only 2-3 MB of RAM at idle, while Caddy consumes 25-35 MB. For files larger than 1 MB, Nginx pulls 17 percent ahead. Nginx also uses 38 percent less memory during 1 GB+ streaming workloads. Caddy handles 4 GB/sec of HTTPS traffic on a Minisforum MS-01. Nginx announced its own ACME module in August 2025, but it still expects users to manage configuration more heavily than Caddy. Nginx also released version 1.31.5 in September 2026 with a new control API. Apache provides certificate management via mod_md, but it involves more human work. Caddy provides the easiest path for developers. The 2026 Web Server Showdown included tests from Vlaicu.io, dev.to, and Onidel. These tests showed that Nginx remains the choice for raw large-file streaming throughput.

Spec Caddy 2.11.2 Nginx 1.30.0
1KB Static Files (Req/s) 142,000 116,000
Idle RAM Usage 25-35 MB 2-3 MB
HTTP/3 Support Native/Default via ngx_http_v3_module
TLS Automation Automatic via ngx_http_acme_module

Caddy wins. Will Nginx close the performance gap?

Share

Technewsdaily

Senior tech writer covering AI, gadgets and cybersecurity. Breaking down the news that matters, every day.