@marcel91200 / caddy Mirror · read-only
Fork 0

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

Mirrored from https://github.com/Slazee/caddy.git

Synced Nov 11, 02:15 UTC

master
html 1,351 lines 70.9 KB
Raw
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <title>Caddy - The Ultimate Server with Automatic HTTPS</title>
5
6
7 <meta charset="utf-8">
8 <meta name="viewport" content="width=device-width, initial-scale=1.0">
9
10 <link rel="icon" href="/resources/images/favicon.png?v=378d6d0">
11
12 <link rel="preconnect" href="https://fonts.googleapis.com">
13 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
14 <link href="https://fonts.googleapis.com/css2?family=Gantari:wght@400..800&family=Figtree:wght@300..900&&family=JetBrains+Mono:wght@400..600&family=Inter:wght@400..600&family=Poppins:wght@400;500;600;700;800&family=Albert+Sans:wght@400..600&display=swap" rel="stylesheet">
15
16 <!-- Algolia DocSearch -->
17 <link rel="preconnect" href="https://BH4D9OD16A-dsn.algolia.net" crossorigin />
18 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@docsearch/css@3">
19
20 <link rel="stylesheet" href="/resources/css/common.css?v=378d6d0">
21 <link rel="stylesheet" href="/resources/css/chroma.css?v=378d6d0">
22
23 <script src="/resources/js/lib.js?v=378d6d0"></script>
24 <script src="/resources/js/common.js?v=378d6d0"></script>
25
26 <!-- General metatags -->
27 <meta name="author" content="Caddy Web Server">
28 <meta name="description" content="Caddy is a powerful, enterprise-ready, open source web server with automatic HTTPS written in Go">
29 <meta name="theme-color" content="#1b3143">
30
31 <!-- Open Graph tags -->
32 <meta property="og:type" content="website">
33 <meta property="og:title" content="Caddy - The Ultimate Server with Automatic HTTPS">
34 <meta property="og:site_name" content="Caddy Web Server">
35 <meta property="og:url" content="https://caddyserver.com/">
36 <meta property="og:description" content="Caddy is a powerful, enterprise-ready, open source web server with automatic HTTPS written in Go">
37 <meta property="og:image" content="https://caddyserver.com/resources/images/open-graph-square.png?v=378d6d0">
38
39 <!-- Global site tag (gtag.js) - Google Analytics (ZeroSSL) -->
40 <script async src="https://www.googletagmanager.com/gtag/js?id=G-2DLB04LK4P"></script>
41 <script>
42 window.dataLayer = window.dataLayer || [];
43 function gtag(){dataLayer.push(arguments);}
44 gtag('js', new Date());
45 gtag('config', 'G-2DLB04LK4P');
46 </script>
47
48 <link rel="stylesheet" href="/resources/css/vendor/asciinema-player-3.6.1.css?v=378d6d0">
49 <script src="/resources/js/vendor/asciinema-player-3.6.1.min.js?v=378d6d0"></script>
50 <script src="/resources/js/home.js?v=378d6d0"></script>
51
52 <link rel="stylesheet" href="/resources/css/marketing.css?v=378d6d0">
53 <link rel="stylesheet" href="/resources/css/home.css?v=378d6d0">
54
55 <!-- <meta property="og:title" content="Caddy 2 - The Ultimate Server with Automatic HTTPS">
56 <meta name="twitter:title" value="Caddy 2 - The Ultimate Server with Automatic HTTPS"> -->
57 </head>
58 <body>
59 <div class="hero">
60 <header class="dark-header">
61 <div class="topbar">
62 <div class="wrapper">
63 <a href="https://zerossl.com" id="zerossl-link">
64 A <img src="/old/resources/images/zerossl-logo.svg" alt="ZeroSSL" id="zerossl-logo"> Project
65 </a>
66 <a href="https://store.caddyserver.com">
67 <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-building-store" width="24"
68 height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none"
69 stroke-linecap="round" stroke-linejoin="round">
70 <path stroke="none" d="M0 0h24v24H0z" fill="none" />
71 <path d="M3 21l18 0" />
72 <path d="M3 7v1a3 3 0 0 0 6 0v-1m0 1a3 3 0 0 0 6 0v-1m0 1a3 3 0 0 0 6 0v-1h-18l2 -4h14l2 4" />
73 <path d="M5 21l0 -10.15" />
74 <path d="M19 21l0 -10.15" />
75 <path d="M9 21v-4a2 2 0 0 1 2 -2h2a2 2 0 0 1 2 2v4" />
76 </svg>
77 Store
78 </a>
79 <a href="https://caddy.community">
80 <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-messages" width="24"
81 height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none"
82 stroke-linecap="round" stroke-linejoin="round">
83 <path stroke="none" d="M0 0h24v24H0z" fill="none" />
84 <path d="M21 14l-3 -3h-7a1 1 0 0 1 -1 -1v-6a1 1 0 0 1 1 -1h9a1 1 0 0 1 1 1v10" />
85 <path d="M14 15v2a1 1 0 0 1 -1 1h-7l-3 3v-10a1 1 0 0 1 1 -1h2" />
86 </svg>
87 Forum
88 </a>
89 <a href="https://github.com/caddyserver/caddy">
90 <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-brand-github" width="24"
91 height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none"
92 stroke-linecap="round" stroke-linejoin="round">
93 <path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
94 <path
95 d="M9 19c-4.3 1.4 -4.3 -2.5 -6 -3m12 5v-3.5c0 -1 .1 -1.4 -.5 -2c2.8 -.3 5.5 -1.4 5.5 -6a4.6 4.6 0 0 0 -1.3 -3.2a4.2 4.2 0 0 0 -.1 -3.2s-1.1 -.3 -3.5 1.3a12.3 12.3 0 0 0 -6.2 0c-2.4 -1.6 -3.5 -1.3 -3.5 -1.3a4.2 4.2 0 0 0 -.1 3.2a4.6 4.6 0 0 0 -1.3 3.2c0 4.6 2.7 5.7 5.5 6c-.6 .6 -.6 1.2 -.5 2v3.5">
96 </path>
97 </svg>
98 GitHub
99 </a>
100 <a href="javascript:nextTheme();">
101 <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-brightness-half" width="24"
102 height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none"
103 stroke-linecap="round" stroke-linejoin="round">
104 <path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
105 <path d="M12 9a3 3 0 0 0 0 6v-6z"></path>
106 <path
107 d="M6 6h3.5l2.5 -2.5l2.5 2.5h3.5v3.5l2.5 2.5l-2.5 2.5v3.5h-3.5l-2.5 2.5l-2.5 -2.5h-3.5v-3.5l-2.5 -2.5l2.5 -2.5z">
108 </path>
109 </svg>
110 <span>Theme: <span id="current-theme">System</span></span>
111 </a>
112 </div>
113 </div>
114 <div class="navbar wrapper">
115 <a href="/" class="logo-link">
116 <img src="/resources/images/logo-light.svg" class="logo" id="logo-light" alt="Caddy web server">
117 <img src="/resources/images/logo-dark.svg" class="logo" id="logo-dark" alt="Caddy web server">
118 </a>
119
120
121 <nav role="navigation">
122 <ul>
123 <li class="dropdown-trigger">
124 <a href="/docs/">Documentation</a>
125 <div class="dropdown">
126 <div class="row flatlinks">
127 <a href="/docs/install">
128 <b>
129 <svg xmlns="http://www.w3.org/2000/svg"
130 class="icon icon-tabler icon-tabler-server-bolt" width="24" height="24"
131 viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none"
132 stroke-linecap="round" stroke-linejoin="round">
133 <path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
134 <path
135 d="M3 4m0 3a3 3 0 0 1 3 -3h12a3 3 0 0 1 3 3v2a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3z">
136 </path>
137 <path d="M15 20h-9a3 3 0 0 1 -3 -3v-2a3 3 0 0 1 3 -3h12"></path>
138 <path d="M7 8v.01"></path>
139 <path d="M7 16v.01"></path>
140 <path d="M20 15l-2 3h3l-2 3"></path>
141 </svg>
142 Install
143 </b>
144 How to install Caddy on your computer or server
145 </a>
146 <a href="/docs/caddyfile">
147 <b>
148 <svg xmlns="http://www.w3.org/2000/svg"
149 class="icon icon-tabler icon-tabler-file-text" width="24" height="24"
150 viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none"
151 stroke-linecap="round" stroke-linejoin="round">
152 <path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
153 <path d="M14 3v4a1 1 0 0 0 1 1h4"></path>
154 <path
155 d="M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2z">
156 </path>
157 <path d="M9 9l1 0"></path>
158 <path d="M9 13l6 0"></path>
159 <path d="M9 17l6 0"></path>
160 </svg>
161 Caddyfile
162 </b>
163 A simplified, human-friendly configuration format
164 </a>
165 <a href="/docs/json">
166 <b>
167 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"
168 fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
169 stroke-linejoin="round"
170 class="icon icon-tabler icons-tabler-outline icon-tabler-braces">
171 <path stroke="none" d="M0 0h24v24H0z" fill="none" />
172 <path d="M7 4a2 2 0 0 0 -2 2v3a2 3 0 0 1 -2 3a2 3 0 0 1 2 3v3a2 2 0 0 0 2 2" />
173 <path d="M17 4a2 2 0 0 1 2 2v3a2 3 0 0 0 2 3a2 3 0 0 0 -2 3v3a2 2 0 0 1 -2 2" />
174 </svg>
175 JSON
176 </b>
177 Powerful and programmable native config format
178 </a>
179 </div>
180 <div class="row">
181 <div class="linkbox">
182 <div class="col">
183 <div class="links-header">Tutorials</div>
184 <a href="/docs/getting-started">Caddy basics</a>
185 <a href="/docs/quick-starts/static-files">Static files</a>
186 <a href="/docs/quick-starts/reverse-proxy">Reverse proxy</a>
187 <a href="/docs/troubleshooting">Troubleshooting</a>
188 </div>
189 <div class="col">
190 <div class="links-header">Reference</div>
191 <a href="/docs/command-line">Command line</a>
192 <a href="/docs/caddyfile">Caddyfile</a>
193 <a href="/docs/api">API</a>
194 <a href="/docs/json">JSON Config</a>
195 <a href="/docs/automatic-https">Auto HTTPS</a>
196 </div>
197 <!-- <div class="col">
198 <div class="links-header">Caddyfile</div>
199 <a href="/docs/">Directives</a>
200 <a href="/docs/">Request matchers</a>
201 <a href="/docs/">Global options</a>
202 </div> -->
203 <div class="col">
204 <div class="links-header">Develop</div>
205 <a href="/docs/architecture">Architecture</a>
206 <a href="https://github.com/caddyserver/caddy/pulls">Contribute</a>
207 <a href="/docs/extending-caddy">Write a module</a>
208 </div>
209 <div class="col">
210 <div class="links-header">Articles</div>
211 <a href="/docs/logging">Logging</a>
212 <a href="/docs/metrics">Monitoring</a>
213 <a href="/docs/running">Run as service</a>
214 <a href="/docs/profiling">Profiling</a>
215 <!-- <a href="/docs/security">Security</a>
216 <a href="/docs/">Custom domains</a> -->
217 <a href="/docs/">All articles...</a>
218 </div>
219 </div>
220 <!-- Make a new linkbox div for a separate section. -->
221 </div>
222 <div class="row featured">
223 <a href="/docs/examples">
224 <b>
225 <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-atom-2"
226 width="24" height="24" viewBox="0 0 24 24" stroke-width="2"
227 stroke="currentColor" fill="none" stroke-linecap="round"
228 stroke-linejoin="round">
229 <path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
230 <path d="M12 12m-3 0a3 3 0 1 0 6 0a3 3 0 1 0 -6 0"></path>
231 <path d="M12 21l0 .01"></path>
232 <path d="M3 9l0 .01"></path>
233 <path d="M21 9l0 .01"></path>
234 <path d="M8 20.1a9 9 0 0 1 -5 -7.1"></path>
235 <path d="M16 20.1a9 9 0 0 0 5 -7.1"></path>
236 <path d="M6.2 5a9 9 0 0 1 11.4 0"></path>
237 </svg>
238 Examples
239 </b>
240 Learn from examples contributed by the community
241 </a>
242 <a href="/docs/faq">
243 <b>
244 <svg xmlns="http://www.w3.org/2000/svg"
245 class="icon icon-tabler icon-tabler-message-circle-question" width="24"
246 height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor"
247 fill="none" stroke-linecap="round" stroke-linejoin="round">
248 <path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
249 <path
250 d="M15.02 19.52c-2.341 .736 -5 .606 -7.32 -.52l-4.7 1l1.3 -3.9c-2.324 -3.437 -1.426 -7.872 2.1 -10.374c3.526 -2.501 8.59 -2.296 11.845 .48c1.649 1.407 2.575 3.253 2.742 5.152">
251 </path>
252 <path d="M19 22v.01"></path>
253 <path d="M19 19a2.003 2.003 0 0 0 .914 -3.782a1.98 1.98 0 0 0 -2.414 .483">
254 </path>
255 </svg>
256 <!-- <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-help-hexagon" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
257 <path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
258 <path d="M19.875 6.27c.7 .398 1.13 1.143 1.125 1.948v7.284c0 .809 -.443 1.555 -1.158 1.948l-6.75 4.27a2.269 2.269 0 0 1 -2.184 0l-6.75 -4.27a2.225 2.225 0 0 1 -1.158 -1.948v-7.285c0 -.809 .443 -1.554 1.158 -1.947l6.75 -3.98a2.33 2.33 0 0 1 2.25 0l6.75 3.98h-.033z"></path>
259 <path d="M12 16v.01"></path>
260 <path d="M12 13a2 2 0 0 0 .914 -3.782a1.98 1.98 0 0 0 -2.414 .483"></path>
261 </svg> -->
262 FAQ
263 </b>
264 Get fast answers to common questions
265 </a>
266 <a href="/docs/modules">
267 <b>
268 <svg xmlns="http://www.w3.org/2000/svg"
269 class="icon icon-tabler icon-tabler-hexagons" width="24" height="24"
270 viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none"
271 stroke-linecap="round" stroke-linejoin="round">
272 <path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
273 <path d="M4 18v-5l4 -2l4 2v5l-4 2z"></path>
274 <path d="M8 11v-5l4 -2l4 2v5"></path>
275 <path d="M12 13l4 -2l4 2v5l-4 2l-4 -2"></path>
276 </svg>
277 Modules
278 </b>
279 The official list of registered Caddy plugins
280 </a>
281 </div>
282 <div class="row">
283 <div class="plainbox">
284 <a href="/docs/">Documentation index</a>
285 <a href="https://caddy.community/c/wiki/13">Community wiki</a>
286 <a href="https://github.com/caddyserver/website">Contribute to docs</a>
287 </div>
288 </div>
289 </div>
290 </li>
291 <li>
292 <a href="/features">Features</a>
293 </li>
294 <li>
295 <a href="/account">Account</a>
296 </li>
297 <li>
298 <a href="/support">Support</a>
299 </li>
300 </ul>
301 </nav>
302
303 <div class="actions">
304 <div id="search"></div>
305
306 <a href="/download" class="button primary">
307 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"
308 stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"
309 class="icon icon-tabler icons-tabler-outline icon-tabler-download">
310 <path stroke="none" d="M0 0h24v24H0z" fill="none" />
311 <path d="M4 17v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2 -2v-2" />
312 <path d="M7 11l5 5l5 -5" />
313 <path d="M12 4l0 12" />
314 </svg>
315 Download
316 </a>
317 <a href="/sponsor" class="button purple">
318 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"
319 stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"
320 class="icon icon-tabler icons-tabler-outline icon-tabler-heart-handshake">
321 <path stroke="none" d="M0 0h24v24H0z" fill="none" />
322 <path d="M19.5 12.572l-7.5 7.428l-7.5 -7.428a5 5 0 1 1 7.5 -6.566a5 5 0 1 1 7.5 6.572" />
323 <path
324 d="M12 6l-3.293 3.293a1 1 0 0 0 0 1.414l.543 .543c.69 .69 1.81 .69 2.5 0l1 -1a3.182 3.182 0 0 1 4.5 0l2.25 2.25" />
325 <path d="M12.5 15.5l2 2" />
326 <path d="M15 13l2 2" />
327 </svg>
328 Sponsor
329 </a>
330 </div>
331 </div>
332 </header>
333
334 <div class="wrapper">
335 <div class="hero-content">
336 <div class="asides">
337 <div>
338 <h1>
339 <div class="color-dodge">
340 <div class="the">The</div>
341 Ultimate Server
342 </div>
343 <div class="subheading">
344 makes your sites more <b>secure</b>, more <b>reliable</b>, and more <b>scalable</b> than any other solution.
345 </div>
346 </h1>
347
348 <div class="action-buttons">
349 <a href="/download" class="button primary">Download</a>
350 <a href="/docs/" class="button cool">Docs<sh></sh></a>
351 <iframe src="https://ghbtns.com/github-btn.html?user=caddyserver&amp;repo=caddy&amp;type=star&amp;count=true&amp;size=large" frameborder="0" scrolling="0" width="160px" height="30px" class="github-stars"></iframe>
352 </div>
353 </div>
354 <div>
355 <div class="display right">
356 <div class="caption">
357 <div id="video-demo"></div>
358 Watch in real-time as Caddy serves HTTPS in &lt; 1 minute.
359 </div>
360 </div>
361 </div>
362 </div>
363
364 <div class="sponsors-leaders">
365 <!-- <h3>Trusted, used, and sponsored by <b>leaders</b></h3> -->
366 <h3>Sponsored by <b>leaders</b></h3>
367
368 <!--
369 Images are not in any particular order except the top row is featured (higher-tier) sponsors.
370 Images are individually adjusted to appear roughly equally sized and weighted along their row.
371 -->
372
373 <div class="sponsor-logos">
374 <a href="https://zerossl.com" target="_blank">
375 <img src="/resources/images/sponsors/zerossl.svg" alt="ZeroSSL" title="ZeroSSL" height="55">
376 </a>
377 <a href="https://stripe.com" target="_blank">
378 <img src="/resources/images/sponsors/stripe.svg" alt="Stripe" title="Stripe" class="featured" height="52">
379 </a>
380 <a href="https://railway.com/?utm_medium=sponsor&utm_source=oss&utm_campaign=caddy" target="_blank">
381 <img src="/resources/images/sponsors/railway.svg" alt="Railway" title="Railway" class="featured" height="75" style="margin-left: -15px;">
382 </a>
383 </div>
384 <div class="sponsors-divider"></div>
385 <div class="sponsor-logos">
386 <!-- <a href="https://opensource.mercedes-benz.com/" target="_blank">
387 <img src="/resources/images/sponsors/mercedes-benz.svg" alt="Mercedes-Benz" title="Mercedes-Benz" height="38">
388 </a> -->
389 <a href="https://tailscale.com" target="_blank">
390 <img src="/resources/images/sponsors/tailscale.svg" alt="Tailscale" title="Tailscale" height="22">
391 </a>
392 <a href="https://framer.com" target="_blank">
393 <img src="/resources/images/sponsors/framer.svg" alt="Framer" title="Framer" height="32">
394 </a>
395 <a href="https://bytebase.com" target="_blank">
396 <img src="/resources/images/sponsors/bytebase.svg" alt="Bytebase" title="Bytebase" height="28">
397 </a>
398 <a href="https://les-tilleuls.coop/" target="_blank">
399 <img src="/resources/images/sponsors/les-tilleuls-white.svg" alt="Les-Tilleuls" title="Les-Tilleuls" height="25">
400 </a>
401 <a href="https://hopetv.org/" target="_blank">
402 <img src="/resources/images/sponsors/hopetv.png" alt="Hope Channel" title="Hope Channel" height="42">
403 </a>
404 <a href="https://sourcegraph.com/" target="_blank">
405 <img src="/resources/images/sponsors/sourcegraph.png" alt="Sourcegraph" title="Sourcegraph" height="23">
406 </a>
407 <a href="https://fusionauth.com" target="_blank">
408 <img src="/resources/images/sponsors/fusionauth.svg" alt="FusionAuth" title="FusionAuth" height="35">
409 </a>
410 <a href="https://www.aryeo.com" target="_blank">
411 <img src="/resources/images/sponsors/aryeo.svg" alt="Aryeo" title="Aryeo" height="26">
412 </a>
413 <a href="https://checklyhq.com" target="_blank">
414 <img src="/resources/images/sponsors/checkly.svg" alt="Checkly" title="Checkly" height="24" style="position: relative; top: 3px;">
415 </a>
416 <a href="https://appcove.com/" target="_blank">
417 <img src="/resources/images/sponsors/appcove.png" alt="AppCove" title="AppCove" height="24">
418 </a>
419 <a href="https://cubepath.com/" target="_blank">
420 <img src="/resources/images/sponsors/cubepath.svg" alt="CubePath" title="CubePath" height="25">
421 </a>
422 <a href="https://transistor.fm" target="_blank">
423 <img src="/resources/images/sponsors/transistorfm.svg" alt="Transistor" title="Transistor" height="32">
424 </a>
425 <a href="https://bestkru.com" target="_blank">
426 <img src="/resources/images/sponsors/bestkru.svg" alt="BestKru" title="BestKru" height="26">
427 </a>
428 <a href="https://photostructure.com/" target="_blank">
429 <img src="/resources/images/sponsors/photostructure.svg" alt="PhotoStructure" title="PhotoStructure" height="30">
430 </a>
431 <!-- <a href="https://gitea.com/" target="_blank">
432 <img src="/resources/images/sponsors/gitea.svg" alt="Gitea" title="Gitea" height="25">
433 </a> -->
434 <a href="https://boot.dev/" target="_blank">
435 <img src="/resources/images/sponsors/bootdev.png" alt="Boot.dev" title="Boot.dev" height="25">
436 </a>
437 <a href="https://saascustomdomains.com/" target="_blank">
438 <img src="/resources/images/sponsors/saascustomdomains.svg" alt="SaaS Custom Domains" title="SaaS Custom Domains" height="25">
439 </a>
440 <a href="https://redirect.pizza/?utm_campaign=caddyserver.com&utm_medium=logo&utm_source=sponsor" target="_blank">
441 <img src="/resources/images/sponsors/redirect-pizza.svg" alt="Redirect.pizza" title="Redirect.pizza" height="26">
442 </a>
443 <a href="https://approximated.app/" target="_blank">
444 <img src="/resources/images/sponsors/approximated.svg" alt="Approximated" title="Approximated" height="18">
445 </a>
446 <a href="https://aniftyco.com/" target="_blank">
447 <img src="/resources/images/sponsors/niftyco.svg" alt="Niftyco" title="Niftyco" height="23">
448 </a>
449 <a href="https://iqm.com/" target="_blank">
450 <img src="/resources/images/sponsors/iqm.svg" alt="IQM" title="IQM" height="22">
451 </a>
452 <a href="/sponsor" class="button purple">
453 <svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-new-section" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
454 <path stroke="none" d="M0 0h24v24H0z" fill="none"></path>
455 <path d="M9 12l6 0"></path>
456 <path d="M12 9l0 6"></path>
457 <path d="M4 6v-1a1 1 0 0 1 1 -1h1m5 0h2m5 0h1a1 1 0 0 1 1 1v1m0 5v2m0 5v1a1 1 0 0 1 -1 1h-1m-5 0h-2m-5 0h-1a1 1 0 0 1 -1 -1v-1m0 -5v-2m0 -5"></path>
458 </svg>
459 Join the ranks
460 </a>
461 </div>
462 <!-- <a href="#">Why a sponsorship</a> -->
463 <!-- <a href="/sponsor" class="button purple">Sponsorship info</a> -->
464 </div>
465 </div>
466 </div>
467 </div>
468
469
470 <main>
471
472 <div class="wavy-top">
473 <div class="bgtext">
474 Every<br>
475 <span class="site-on">site on</span><br>
476 HTTPS
477 </div>
478 <h2 id="every-site-https">
479 <b>By default, </b>Caddy <b>automatically obtains</b> and <b>renews</b> TLS certificates for <b>all your sites.</b>
480 </h2>
481
482 <div class="wrapper feature cols">
483 <div class="col">
484 <h3 class="purple">HTTPS/TLS for custom domains</h3>
485 <p>
486 The secret sauce of almost every white-label SaaS is Caddy's original On-Demand TLS feature. Grow your SaaS business by orders of magnitude with ease!
487 </p>
488 </div>
489 <div class="col">
490 <h3 class="green">Dynamically provision certificates</h3>
491 <p>
492 With On-Demand TLS, only Caddy obtains, renews, and maintains certificates on-the-fly during TLS handshakes. Perfect for customer-owned domains.
493 </p>
494 </div>
495 <div class="col">
496 <h3 class="blue">Massively scale your TLS</h3>
497 <p>
498 Other web servers and scripted certificate tools fall over with hundreds of thousands of sites or thousands of instances. Caddy is designed to manage certificates reliably at this scale.
499 </p>
500 </div>
501 </div>
502
503 <div class="wrapper">
504 <div class="cols">
505 <div class="col">
506 <div class="sponsorship-primer">
507 <h3>sponsored by <b>users like you</b></h3>
508 <p>
509 Caddy is free software and relies on sponsorships to survive. Not just donations: sponsorships ensure ongoing development and provide your business with tangible benefits.
510 </p>
511 <a href="/sponsor" class="button purple">See sponsorships</a>
512 </div>
513 </div>
514 <div class="col">
515 <div class="sponsor-experience hopetv">
516 <img src="/resources/images/sponsors/hopetv.png" class="experience-logo">
517 <div class="experience-content">
518 <div class="experience-quote">
519 "Caddy's powerful technology has enabled Hope Channel International to deliver hope to millions, reaching people in every corner of the world."
520 </div>
521 </div>
522 </div>
523 </div>
524 </div>
525 </div>
526 </div>
527
528 <section class="light">
529 <div class="section-upset">
530 <div class="wrapper">
531 <h2 id="most-advanced">The <b>most advanced</b> HTTPS server <b>in the world</b></h2>
532 </div>
533 </div>
534 <div class="wrapper">
535
536 <div class="feature cols">
537 <div class="col">
538 <h3 class="green">All you need for TLS and PKI 🔐</h3>
539 <p>
540 Caddy securely serves all sites with TLS by default. It can also manage your internal PKI for you across a fleet of servers and clients.
541 </p>
542 </div>
543 <div class="col">
544 <h3 class="purple">On-line config API ⚡️</h3>
545 <p>
546 Caddy's native configuration is a JSON document that you can export and manipulate with a RESTful config API.
547 </p>
548 </div>
549 <div class="col">
550 <h3 class="blue">PCI, HIPAA, and NIST compliant ✅</h3>
551 <p>
552 Caddy's TLS defaults are secure and pass PCI, HIPAA, and NIST compliance requirements. Yes, defaults: no hassle required.
553 </p>
554 </div>
555 <div class="col">
556 <h3 class="purple">HTTPS for localhost 🏠</h3>
557 <p>
558 We mean it when we say Caddy serves every site on HTTPS. Even localhost and internal IPs are served with TLS using the intermediate of a fully-automated, self-managed CA that is automatically installed into most local trust stores.
559 </p>
560 </div>
561 <div class="col">
562 <h3 class="blue">Cluster coordination 🌐</h3>
563 <p>
564 Simply configure multiple Caddy instances with the same storage, and they will automatically coordinate certificate management as a fleet and share resources such as keys and OCSP staples!
565 </p>
566 </div>
567 <div class="col">
568 <h3 class="green">Fewer moving parts ⚙️</h3>
569 <p>
570 Simplify your infrastructure! Caddy saves money, increases developer productivity, and reduces problems in production.
571 </p>
572 </div>
573 </div>
574
575 <div class="demobox">
576 <h2 id="on-demand-demo" lang="de">Experience it</h2>
577 <p>
578 <b>Discover Caddy's automagic HTTPS features with our hosted demo.</b>
579 </p>
580 <p>
581 Point DNS records for any subdomain named <b><code>caddydemo</code></b> to either:
582 </p>
583 <p class="demo-ips">
584 <code>
585 <span class="record-type">CNAME</span>
586 <span class="demo-ip">demo.caddyserver.com</span>
587 </code>
588 </p>
589 <p class="or">
590 or:
591 </p>
592 <p class="demo-ips">
593 <code>
594 <span class="record-type">A</span>
595 <span class="demo-ip">138.68.4.62</span>
596 </code>
597 <code>
598 <span class="record-type">AAAA</span>
599 <span class="demo-ip">2604:a880:2:d0::9dd:9001</span>
600 </code>
601 </p>
602 <p>
603 Then <b>visit it</b> in your browser.
604 </p>
605 <p>
606 You'll notice how Caddy <b>provisions a certificate</b> for your domain <b>automatically.</b>
607 </p>
608 <div class="demo-help">
609 <p>
610 <b>Not working?</b> Make sure to use a direct subdomain of a registered domain, not a "sub-subdomain."
611 Verify you have created the public DNS records shown above with the correct values.
612 You may have to allow time for propagation. Consult your DNS provider's documentation or support for assistance.
613 Your browser/client must set the TLS ServerName indication (most do).
614 </p>
615 <p>
616 <b>Example subdomains that could work:</b> <code>caddydemo.example.net</code>, <code>caddydemo.example.com.au</code>
617 </p>
618 <p>
619 Caddy is capable of serving TLS for any domains and IPs. This demo is intentionally restricted.
620 </p>
621 </div>
622 </div>
623 </div>
624 </section>
625
626 <section class="diagonal up light gray feature">
627 <div class="wrapper">
628
629 <h2 id="your-own-pki">Deploy your own PKI with Caddy</h2>
630 <p>
631 Not only is Caddy the industry leader in certificate automation, it also sports a fully-featured PKI suite for your own fully-automated internal PKI and private CAs.
632 </p>
633 <!-- <p>
634 Caddy will serve your localhost and internal sites over HTTPS using its own CA. And you can create your own CA to issue certs across your infrastructure. It has a built-in ACME server, powered by Smallstep, to automate your private PKI reliably at scale.
635 </p> -->
636 <p>
637 Powered by open source <a href="https://smallstep.com/certificates/">Smallstep libraries</a>, Caddy becomes a self-managing certificate authority.
638 </p>
639
640
641 <div class="asides">
642 <div>
643 <div class="display left">
644 <div class="ex-local-https">
645 <pre class="chroma"><code><span class="line"><span class="cl"><span class="gh">localhost</span> <span class="p">{</span>
646 </span></span><span class="line"><span class="cl"> <span class="k">respond</span> <span class="s2">&#34;Hello from HTTPS!&#34;</span>
647 </span></span><span class="line"><span class="cl"><span class="p">}</span>
648 </span></span><span class="line"><span class="cl">
649 </span></span><span class="line"><span class="cl"><span class="gh">192.168.1.10</span> <span class="p">{</span>
650 </span></span><span class="line"><span class="cl"> <span class="k">respond</span> <span class="s2">&#34;Also HTTPS!&#34;</span>
651 </span></span><span class="line"><span class="cl"><span class="p">}</span>
652 </span></span><span class="line"><span class="cl">
653 </span></span><span class="line"><span class="cl"><span class="gh">http://localhost</span> <span class="p">{</span>
654 </span></span><span class="line"><span class="cl"> <span class="k">respond</span> <span class="s2">&#34;Plain HTTP&#34;</span>
655 </span></span><span class="line"><span class="cl"><span class="p">}</span>
656 </span></span></code></pre></div>
657 <script>
658 window.$_('.ex-local-https code').classList.add('light');
659 </script>
660 </div>
661 </div>
662 <div>
663 <h3 class="purple">Internal and localhost certificates</h3>
664 <p>
665 If you configure sites with local or internal addresses, Caddy will serve them over HTTPS using a locally-trusted certificate authority with short-lived, auto-renewing certificates. It even offers to install your unique root into your local trust stores for you.
666 </p>
667 <a href="https://smallstep.com" title="Powered by Smallstep"><img src="/resources/images/sponsors/smallstep.svg" alt="Smallstep" class="smallstep"></a>
668 </div>
669 </div>
670
671 <div class="asides">
672 <div>
673 <h3 class="blue">Make and use your own CAs</h3>
674 <p>
675 Caddy lets you define as many CAs as you need. Root and intermediate keys are generated automatically, and intermediates are renewed before they expire.
676 </p>
677 <p>
678 Deploy an instance to act as an ACME server. Then other Caddy instances can use it for their certificates.
679 </p>
680 </div>
681 <div>
682 <div class="display right">
683 <div class="ex-custom-ca">
684 <pre class="chroma"><code><span class="line"><span class="cl"><span class="p">{</span>
685 </span></span><span class="line"><span class="cl"> <span class="k">pki</span> <span class="p">{</span>
686 </span></span><span class="line"><span class="cl"> <span class="k">ca</span> <span class="s">corporate</span> <span class="p">{</span>
687 </span></span><span class="line"><span class="cl"> <span class="k">name</span> <span class="s2">&#34;Our Corporation Authority&#34;</span>
688 </span></span><span class="line"><span class="cl"> <span class="p">}</span>
689 </span></span><span class="line"><span class="cl"> <span class="p">}</span>
690 </span></span><span class="line"><span class="cl"><span class="p">}</span>
691 </span></span><span class="line"><span class="cl">
692 </span></span><span class="line"><span class="cl"><span class="gh">internal.example.com</span> <span class="p">{</span><span class="c1">
693 </span></span></span><span class="line"><span class="cl"><span class="c1"> # ACME endpoint: /acme/corporate/directory
694 </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="k">acme_server</span> <span class="p">{</span>
695 </span></span><span class="line"><span class="cl"> <span class="k">ca</span> <span class="s">corporate</span>
696 </span></span><span class="line"><span class="cl"> <span class="p">}</span>
697 </span></span><span class="line"><span class="cl"><span class="p">}</span>
698 </span></span></code></pre></div>
699 <script>
700 window.$_('.ex-custom-ca code').classList.add('light');
701 </script>
702 </div>
703 </div>
704 </div>
705
706 <div class="asides">
707 <div>
708 <div class="display left">
709 <div class="ex-json-automate-certs">
710 <pre class="chroma"><code><span class="line"><span class="cl"><span class="p">{</span>
711 </span></span><span class="line"><span class="cl"> <span class="nt">&#34;apps&#34;</span><span class="p">:</span> <span class="p">{</span>
712 </span></span><span class="line"><span class="cl"> <span class="nt">&#34;tls&#34;</span><span class="p">:</span> <span class="p">{</span>
713 </span></span><span class="line"><span class="cl"> <span class="nt">&#34;certificates&#34;</span><span class="p">:</span> <span class="p">{</span>
714 </span></span><span class="line"><span class="cl"> <span class="nt">&#34;automate&#34;</span><span class="p">:</span> <span class="p">[</span>
715 </span></span><span class="line"><span class="cl"> <span class="s2">&#34;example.com&#34;</span><span class="p">,</span>
716 </span></span><span class="line"><span class="cl"> <span class="s2">&#34;sub.example.com&#34;</span><span class="p">,</span>
717 </span></span><span class="line"><span class="cl"> <span class="s2">&#34;example.net&#34;</span>
718 </span></span><span class="line"><span class="cl"> <span class="p">]</span>
719 </span></span><span class="line"><span class="cl"> <span class="p">}</span>
720 </span></span><span class="line"><span class="cl"> <span class="p">}</span>
721 </span></span><span class="line"><span class="cl"> <span class="p">}</span>
722 </span></span><span class="line"><span class="cl"><span class="p">}</span>
723 </span></span></code></pre></div>
724 <script>
725 window.$_('.ex-json-automate-certs code').classList.add('light');
726 </script>
727
728 </div>
729 </div>
730 <div>
731 <h3 class="green">Keep certificates renewed</h3>
732 <p>
733 Caddy is more than just a web server. For example, this config is all it takes to obtain and renew certificates for a set of domain names.
734 </p>
735 <p>
736 Additional config can be written to wire up certificate maintenance events, which can then be used to integrate with external scripts and tooling.
737 </p>
738 <!-- <p>
739 Caddy 2 is a <a href="/docs/extending-caddy">highly extensible</a>, self-hosted platform on which you can build, configure, and deploy long-running services ("apps").
740 </p>
741 <p>
742 Caddy ships with apps for an <a href="/docs/modules/http">HTTPS server</a> (static files, reverse proxying, load balancing, etc.), <a href="/docs/modules/tls">TLS certificate manager</a>, and <a href="/docs/modules/pki">fully-managed internal PKI</a>. Caddy apps collaborate to make complex infrastructure just work with fewer moving parts.
743 </p>
744 <p>
745 <b>For example, the config shown here keeps your TLS certificates renewed for other programs to use;</b> no external tools or HTTP daemon required!
746 </p>
747 <p>
748 Providing a unified configuration, on-line <a href="/docs/api">config API</a>, and <a href="/docs/json">automatic documentation</a> for all apps, Caddy is nearly infinitely extensible. Thanks to its unique <a href="/docs/architecture">modular architecture</a>, we can offer unlimited features without bloating the code base.
749 </p> -->
750 </div>
751 </div>
752
753 <!-- <div class="action-buttons">
754 <a href="/download" class="button primary">Download</a>
755 <a href="/docs/" class="button secondary">Docs<sh></sh></a>
756 </div> -->
757
758
759 </div>
760 </section>
761
762 <section class="light feature">
763 <div class="wrapper">
764 <h2 id="experts-recommend">Recommended by experts</h2>
765 <p>
766 Academic and industry experts recommend Caddy, which has been cited in peer-reviewed journals for its security defaults, best practices, and its uniquely advanced feature set.
767 </p>
768 <div class="cols experts">
769 <div class="col">
770 <a href="https://doi.org/10.1145/3319535.3363192"><img src="/resources/images/cites/aas.png" class="cite"></a>
771 <p>
772 "Servers running Caddy exhibit nearly ubiquitous HTTPS deployment and use modern TLS configurations. ... We hope to see other popular server software follow Caddy's lead."
773 </p>
774 <p class="cite">
775 &mdash;<b>Josh Aas, Richard Barnes, Benton Case, Zakir Durumeric, Peter Eckersley, Alan Flores-López, J. Alex Halderman, Jacob Hoffman-Andrews, James Kasten, Eric Rescorla, Seth Schoen, and Brad Warren.</b> 2019. <i>Let's Encrypt: An Automated Certificate Authority to Encrypt the Entire Web.</i> In Proceedings of the 2019 ACM SIGSAC Conference on Computer and Communications Security (CCS '19). Association for Computing Machinery, New York, NY, USA, 2473–2487. <a href="https://doi.org/10.1145/3319535.3363192">https://doi.org/10.1145/3319535.3363192</a>
776 </p>
777 </div>
778 <div class="col">
779 <a href="https://www.usenix.org/conference/usenixsecurity17/technical-sessions/presentation/krombholz"><img src="/resources/images/cites/krombholz.png" class="cite"></a>
780 <p>
781 "TLS must be enabled by default ... and the Caddy web server is a good and usable example."
782 </p>
783 <p class="cite">
784 &mdash;<b>Katharina Krombholz, Wilfried Mayer, Martin Schmiedecker, and Edgar Weippl.</b> 2017. <i>"I Have No Idea What I'm Doing" - On the Usability of Deploying HTTPS.</i> In 26th USENIX Security Symposium (USENIX Security 17), USENIX Association, Vancouver, BC, 1339-1356. Retrieved from <a href="https://www.usenix.org/conference/usenixsecurity17/technical-sessions/presentation/krombholz">https://www.usenix.org/conference/usenixsecurity17/technical-sessions/presentation/krombholz</a>
785 </p>
786 </div>
787 <div class="col">
788 <a href="https://doi.org/10.1145/2987443.2987480"><img src="/resources/images/cites/springall.png" class="cite"></a>
789 <p>
790 "No popular server software does [session ticket key rotation], with the exception of Caddy."
791 </p>
792 <p class="cite">
793 &mdash;<b>Drew Springall, Zakir Durumeric, and J. Alex Halderman.</b> 2016. <i>Measuring the Security Harm of TLS Crypto Shortcuts.</i> In Proceedings of the 2016 Internet Measurement Conference (IMC '16), Association for Computing Machinery, Santa Monica, California, USA, 33-47. <a href="https://doi.org/10.1145/2987443.2987480">https://doi.org/10.1145/2987443.2987480</a>
794 </p>
795 </div>
796 </div>
797 </div>
798 </section>
799
800 <section class="diagonal down dark feature">
801 <div class="wrapper">
802 <h2 id="reverse-proxy">A forward-thinking reverse proxy</h2>
803 <p>
804 Caddy's proxy was designed to be as forward-compatible as possible and has major batteries included: load balancing, active and passive health checks, dynamic upstreams, retries, pluggable transports, and of course, best-in-class TLS security.
805 </p>
806
807
808 <div class="asides asides-40-60">
809 <div class="spacing">
810 <div class="rollover" data-rollover="rollover-php">
811 <h3 class="green">Proxy HTTP, FastCGI, WebSockets, and more</h3>
812 <p>
813 Capable of proxying HTTP and HTTPS, but also WebSockets, gRPC, FastCGI (usually PHP), and more! The underlying transport module is extensible for any custom way to generate an HTTP response.
814 </p>
815 </div>
816 <div class="rollover" data-rollover="rollover-dynamic-backends">
817 <h3 class="purple">Dynamic backends</h3>
818 <p>
819 Provide Caddy with a static list of backends or enable a module to retrieve backends dynamically during each request: ideal for rapidly changing environments. Caddy flows with your infrastructure!
820 </p>
821 </div>
822 <div class="rollover" data-rollover="rollover-ha">
823 <h3 class="blue">High availability</h3>
824 <p>
825 Caddy comes with a whole suite of high availability (HA) features: advanced health checking, graceful (hitless) config changes, circuit breaking, load limiting, on-line retries, and more. The best part? It's all free. No enterprise-level paywalls.
826 </p>
827 </div>
828 </div>
829 <div>
830 <div class="display right dark">
831 <script>
832 ready(() => {
833 let startElement, endElement;
834
835 startElement = findWithContent('.ex-proxy pre.chroma code span', 'php_fastcgi');
836 endElement = findNextText(startElement, '9000');
837 wrapRangeWithSpan(startElement, endElement, 'rollover-php rollover-green');
838
839 startElement = findWithContent('.ex-proxy pre.chroma code span.line', 'reverse_proxy /api/* {');
840 endElement = findNextText(startElement, '}');
841 wrapRangeWithSpan(startElement, endElement, 'rollover-dynamic-backends rollover-purple');
842
843 startElement = findWithContent('.ex-proxy pre.chroma code span.line', 'reverse_proxy /service/* {');
844 endElement = findNextText(startElement, '}');
845 wrapRangeWithSpan(startElement, endElement, 'rollover-ha rollover-blue');
846
847 window.$_('.ex-proxy code').classList.add('dark');
848 });
849 </script>
850 <div class="ex-proxy">
851 <pre class="chroma"><code><span class="line"><span class="cl"><span class="gh">example.com</span><span class="p">
852 </span></span></span><span class="line"><span class="cl"><span class="p"></span><span class="c1">
853 </span></span></span><span class="line"><span class="cl"><span class="c1"># Serve PHP sites
854 </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="k">handle</span> <span class="nd">/blog/*</span> <span class="p">{</span>
855 </span></span><span class="line"><span class="cl"> <span class="k">root</span> <span class="nd">/var/www/wordpress</span>
856 </span></span><span class="line"><span class="cl"> <span class="k">php_fastcgi</span> <span class="n">localhost</span><span class="p">:</span><span class="mi">9000</span>
857 </span></span><span class="line"><span class="cl"> <span class="k">file_server</span>
858 </span></span><span class="line"><span class="cl"><span class="p">}</span><span class="c1">
859 </span></span></span><span class="line"><span class="cl"><span class="c1">
860 </span></span></span><span class="line"><span class="cl"><span class="c1"># Proxy an autoscaling API with dynamic backends
861 </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="k">reverse_proxy</span> <span class="nd">/api/*</span> <span class="p">{</span>
862 </span></span><span class="line"><span class="cl"> <span class="k">dynamic</span> <span class="s">srv</span> <span class="s">_api._tcp.example.com</span>
863 </span></span><span class="line"><span class="cl"><span class="p">}</span><span class="c1">
864 </span></span></span><span class="line"><span class="cl"><span class="c1">
865 </span></span></span><span class="line"><span class="cl"><span class="c1"># Proxy a compute-heavy distributed service
866 </span></span></span><span class="line"><span class="cl"><span class="c1"># with load balancing and health checks
867 </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="k">reverse_proxy</span> <span class="nd">/service/*</span> <span class="p">{</span>
868 </span></span><span class="line"><span class="cl"> <span class="k">to</span> <span class="n">10.0.1.1</span><span class="p">:</span><span class="mi">80</span> <span class="n">10.0.1.2</span><span class="p">:</span><span class="mi">80</span> <span class="n">10.0.1.3</span><span class="p">:</span><span class="mi">80</span>
869 </span></span><span class="line"><span class="cl"> <span class="k">lb_policy</span> <span class="s">least_conn</span>
870 </span></span><span class="line"><span class="cl"> <span class="k">lb_try_duration</span> <span class="mi">10s</span>
871 </span></span><span class="line"><span class="cl"> <span class="k">fail_duration</span> <span class="mi">5s</span>
872 </span></span><span class="line"><span class="cl"><span class="p">}</span><span class="c1">
873 </span></span></span><span class="line"><span class="cl"><span class="c1">
874 </span></span></span><span class="line"><span class="cl"><span class="c1"># Proxy everything else to an HTTPS upstream
875 </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="k">reverse_proxy</span> <span class="s">https://service.example.com</span>
876 </span></span></code></pre></div>
877
878 </div>
879 </div>
880 </div>
881
882 <div class="cols">
883 <div class="col">
884 <div class="sponsorship-primer">
885 <h3>software <b>assurance</b></h3>
886 <p>
887 Without sponsorships, Caddy could stop being developed at any time.
888 With sponsorships, you gain peace of mind knowing that the project will continue to be developed, along with tangible benefits like private support and training.
889 </p>
890 <a href="/sponsor" class="button purple">See sponsorships</a>
891 </div>
892 </div>
893 <div class="col">
894 <div class="sponsor-experience stripe">
895 <img src="/resources/images/sponsors/stripe.svg" class="experience-logo">
896 <div class="experience-content">
897 <div class="experience-quote">
898 "With its extensible architecture and on-line config API, Caddy powers many of Stripe's internal systems."
899 </div>
900 <!-- <div class="experience-credit">
901 <img src="https://preview.tabler.io/static/avatars/002m.jpg" class="experience-picture">
902 <cite>
903 <b>Sean Lin</b>
904 Example product manager
905 </cite>
906 </div> -->
907 </div>
908 </div>
909 </div>
910 </div>
911
912
913 <h2 id="file-server">Production-grade static file server</h2>
914 <p>
915 Serving static files is a tried-and-true method of delivering sites to numerous clients efficiently. Caddy has a robust file server that can be combined with other middleware features for the ultimate effortless website.
916 </p>
917
918
919 <div class="asides asides-40-60">
920 <div class="spacing">
921 <div class="rollover" data-rollover="rollover-compress">
922 <h3 class="blue">Compression</h3>
923 <p>
924 Caddy can compress files on-the-fly or serve precompressed files for extra performance. Caddy is also the first web server to support Zstandard encoding.
925 </p>
926 </div>
927 <div class="rollover" data-rollover="rollover-vfs">
928 <h3 class="green">Virtual file systems</h3>
929 <p>
930 Serve your static site from anything: the local file system, remote cloud storage, a database, or even embedded in the server binary!
931 </p>
932 </div>
933 <div class="rollover" data-rollover="rollover-range">
934 <h3 class="yellow">Range requests, Etags, and more</h3>
935 <p>
936 Unlike many ad-hoc file servers intended for temporary local development, Caddy fully supports Range requests, Etags, and a full production feature set.
937 </p>
938 </div>
939 <div class="rollover" data-rollover="rollover-browse">
940 <h3 class="purple">Directory file browser</h3>
941 <p>
942 If a directory without an index file is requested, Caddy can show an elegant file browser with breadcrumb nav, file size visualizations, filetype icons, and a grid view.
943 </p>
944 </div>
945 </div>
946 <div>
947 <div class="display right light">
948 <script>
949 ready(() => {
950 let startElement, endElement;
951
952 startElement = findWithContent('.ex-fs pre.chroma code span.line', 'file_server /downloads/* {');
953 endElement = findNextText(startElement, '}');
954 wrapRangeWithSpan(startElement, endElement, 'rollover-compress rollover-blue');
955
956 startElement = findWithContent('.ex-fs pre.chroma code span', 'encode');
957 endElement = findNextText(startElement, 'gzip');
958 wrapRangeWithSpan(startElement, endElement, 'rollover-compress rollover-blue');
959
960 startElement = findWithContent('.ex-fs pre.chroma code span.line', 'file_server /database/* {');
961 endElement = findNextText(startElement, '}');
962 wrapRangeWithSpan(startElement, endElement, 'rollover-vfs rollover-green');
963
964 startElement = findWithContent('.ex-fs pre.chroma code span.line', 'file_server /embedded/* {');
965 endElement = findNextText(startElement, '}');
966 wrapRangeWithSpan(startElement, endElement, 'rollover-vfs rollover-green');
967
968 startElement = findWithContent('.ex-fs pre.chroma code span', '# (Range/Etag/etc. all work without extra config)');
969 wrapRangeWithSpan(startElement, startElement, 'rollover-range rollover-yellow');
970
971 startElement = findWithContent('.ex-fs pre.chroma code span', 'file_server');
972 endElement = findNextText(startElement, 'browse');
973 wrapRangeWithSpan(startElement, endElement, 'rollover-browse rollover-purple');
974
975 window.$_('.ex-fs code').classList.add('light');
976 });
977 </script>
978 <div class="ex-fs">
979 <pre class="chroma"><code><span class="line"><span class="cl"><span class="gh">example.com</span><span class="p">
980 </span></span></span><span class="line"><span class="cl"><span class="p"></span>
981 </span></span><span class="line"><span class="cl"><span class="k">root</span> <span class="nd">/var/www</span><span class="c1">
982 </span></span></span><span class="line"><span class="cl"><span class="c1">
983 </span></span></span><span class="line"><span class="cl"><span class="c1"># Serve precompressed files if present
984 </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="k">file_server</span> <span class="nd">/downloads/*</span> <span class="p">{</span>
985 </span></span><span class="line"><span class="cl"> <span class="k">precompressed</span>
986 </span></span><span class="line"><span class="cl"><span class="p">}</span><span class="c1">
987 </span></span></span><span class="line"><span class="cl"><span class="c1">
988 </span></span></span><span class="line"><span class="cl"><span class="c1"># Compress everything else that would benefit
989 </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="k">encode</span> <span class="s">zstd</span> <span class="s">gzip</span><span class="c1">
990 </span></span></span><span class="line"><span class="cl"><span class="c1">
991 </span></span></span><span class="line"><span class="cl"><span class="c1"># Static site using database as file system
992 </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="k">file_server</span> <span class="nd">/database/*</span> <span class="p">{</span>
993 </span></span><span class="line"><span class="cl"> <span class="k">fs</span> <span class="s">sqlite</span> <span class="s">data.sql</span>
994 </span></span><span class="line"><span class="cl"><span class="p">}</span><span class="c1">
995 </span></span></span><span class="line"><span class="cl"><span class="c1">
996 </span></span></span><span class="line"><span class="cl"><span class="c1"># Static site embedded within the Caddy binary
997 </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="k">file_server</span> <span class="nd">/embedded/*</span> <span class="p">{</span>
998 </span></span><span class="line"><span class="cl"> <span class="k">fs</span> <span class="s">embedded</span>
999 </span></span><span class="line"><span class="cl"><span class="p">}</span><span class="c1">
1000 </span></span></span><span class="line"><span class="cl"><span class="c1">
1001 </span></span></span><span class="line"><span class="cl"><span class="c1"># (Range/Etag/etc. all work without extra config)
1002 </span></span></span><span class="line"><span class="cl"><span class="c1">
1003 </span></span></span><span class="line"><span class="cl"><span class="c1"># Serve static site with directory listings
1004 </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="k">file_server</span> <span class="s">browse</span>
1005 </span></span></code></pre></div>
1006
1007 </div>
1008 </div>
1009 </div>
1010
1011 <div class="cols rollover" data-rollover="rollover-browse">
1012 <div class="col">
1013 <img src="/resources/images/file-browser/browse-themes.png" class="gallery">
1014 </div>
1015 <div class="col">
1016 <img src="/resources/images/file-browser/browse-gallery-light.png" class="gallery">
1017 </div>
1018 </div>
1019 </div>
1020 </section>
1021
1022 <section class="light feature">
1023 <div class="wrapper">
1024 <h2 id="flexible-config">Flexible configuration compatible with any workflow</h2>
1025 <p>
1026 Configure your server your way. Caddy's native configuration format is JSON, and with Caddy's config adapters, you can use any config format you prefer. All configuration is posted through a RESTful admin API, and Caddy's CLI helps you work with config files easily.
1027 </p>
1028
1029
1030 <div class="asides">
1031 <div>
1032 <div class="display left">
1033 <code class="dark">$ caddy start --config caddy.json
1034
1035 $ curl localhost:2019/id/my_handler \
1036 -X PATCH \
1037 -H "Content-Type: application/json" \
1038 -d '{
1039 "handler": "static_response",
1040 "body": "Work smarter, not harder."
1041 }'
1042
1043 $ curl localhost:2019/config/ | jq<div class="blinking"></div></code>
1044 </div>
1045 </div>
1046 <div>
1047 <h3>JSON config API</h3>
1048 <p>
1049 Caddy's native config format is JSON, giving you incredible power and flexibility for automated, large-scale deployments.
1050 <p>
1051 Make dynamic config changes through an <a href="/docs/api">intuitive, programmable REST API</a> that offers ACID guarantees. It is also <b>safely scoped</b>, meaning that the URI path restricts changes, making it impossible to accidentally alter other parts of your config.
1052 </p>
1053 <!-- <ul>
1054 <li><b>Atomic:</b> Multiple changes in a single request are treated as a single unit; any failed change aborts all the other changes.</li>
1055 <li><b>Consistent:</b> No invalid configurations can be loaded; your server will never break if a problem is detected at config load.</li>
1056 <li><b>Isolated:</b> No config changes rely on another. (It helps that HTTP is a stateless protocol!)</li>
1057 <li><b>Durable:</b> Caddy automatically persists the current, valid configuration to disk and can safely resume it after a power cycle if the <code>--resume</code> flag is used.</li>
1058 </ul> -->
1059 <!-- <a href="/docs/api-tutorial" class="cyan button">API <b>tutorial</b></a>
1060 &nbsp;
1061 <a href="/docs/api" class="gray button">API <b>reference</b></a> -->
1062 </div>
1063 </div>
1064
1065
1066 <div class="asides">
1067 <div>
1068 <h3>Caddyfile</h3>
1069 <p>
1070 Although JSON offers ultimate control, most people prefer to use a <a href="/docs/caddyfile">Caddyfile</a> because it lets you get a production-ready site up and running in just a few hand-written lines. It's not uncommon for Caddyfiles to be <a href="https://twitter.com/bwesterb/status/1708903488426512668">just ~15-25% the size of a less-capable nginx config</a>.
1071 </p>
1072 </div>
1073 <div>
1074 <div class="display right light">
1075 <div class="ex-website-caddyfile">
1076 <pre class="chroma"><code><span class="line"><span class="cl"><span class="gh">caddyserver.com</span><span class="p">
1077 </span></span></span><span class="line"><span class="cl"><span class="p"></span>
1078 </span></span><span class="line"><span class="cl"><span class="k">root</span> <span class="s">src</span>
1079 </span></span><span class="line"><span class="cl">
1080 </span></span><span class="line"><span class="cl"><span class="k">file_server</span>
1081 </span></span><span class="line"><span class="cl"><span class="k">templates</span><span class="c1"> # markdown &amp; syntax highlighting!
1082 </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="k">encode</span> <span class="s">zstd</span> <span class="s">gzip</span>
1083 </span></span><span class="line"><span class="cl">
1084 </span></span><span class="line"><span class="cl"><span class="k">redir</span> <span class="nd">/docs/json</span> <span class="s">/docs/json/</span>
1085 </span></span><span class="line"><span class="cl"><span class="k">rewrite</span> <span class="nd">/docs/json/*</span> <span class="s">/docs/json/index.html</span>
1086 </span></span><span class="line"><span class="cl"><span class="k">rewrite</span> <span class="nd">/docs/*</span> <span class="s">/docs/index.html</span>
1087 </span></span><span class="line"><span class="cl">
1088 </span></span><span class="line"><span class="cl"><span class="k">reverse_proxy</span> <span class="nd">/api/*</span> <span class="n">localhost</span><span class="p">:</span><span class="mi">9002</span>
1089 </span></span></code></pre></div>
1090 <script>
1091 window.$_('.ex-website-caddyfile code').classList.add('light');
1092 </script>
1093
1094 <div class="caption">Actual config used by this site.</div>
1095 </div>
1096 </div>
1097 </div>
1098
1099
1100 <div class="asides">
1101 <div>
1102 <div class="display left">
1103 <code class="dark">$ caddy run \
1104 --config nginx.conf \
1105 --adapter nginx<div class="blinking"></div></code>
1106 </div>
1107 </div>
1108 <div>
1109 <h3>Config adapters</h3>
1110 <p>
1111 Power Caddy with anything, even NGINX config files!
1112 </p>
1113 <p>
1114 With first-class support for <a href="/docs/config-adapters">config adaptation</a>, you can configure your web server with your favorite format: YAML, TOML, CUE, NGINX, HCL, Dhall, JSON with comments, or even a MySQL database... or anything else. The Caddyfile is a built-in config adapter.
1115 </p>
1116 <!-- <p>
1117 Fewer moving parts means fewer failures, lower costs, and less sunk time.
1118 </p> -->
1119 <!-- <a href="/docs/config-adapters" class="gray button">Config adapters</a> -->
1120 </div>
1121 </div>
1122 </div>
1123 </section>
1124
1125
1126
1127 <section class="diagonal up light gray feature">
1128 <div class="wrapper">
1129 <h2 id="extensibility">Unparalleled extensibility</h2>
1130 <p>
1131 Caddy is the only server in the world with its novel, modular architecture. At its core, Caddy is a configuration manager that runs apps like an HTTP server, internal certificate authority, TLS certificate manager, process supervisor, and more.
1132 </p>
1133 <p>
1134 And because of its unique design, we can offer unlimited features without bloating the code base. Only compile in what you need.
1135 </p>
1136 <div class="cols">
1137 <div class="col">
1138 <h3 class="green"><a href="https://i.giphy.com/media/xUA7ba9aksCuKR9dgA/giphy.webp" target="_blank" title="Important visualization">Unlimited power</a></h3>
1139 <p>
1140 Nearly every part of the config that "does something" is pluggable. Caddy offers unlimited capabilities in such a lean package.
1141 </p>
1142 </div>
1143 <div class="col">
1144 <h3 class="purple">Native CPU performance</h3>
1145 <p>
1146 No RPC calls or flimsy dependency management. Plugins are compiled into the static binary, making successful deployments certain and runtimes blazing fast.
1147 </p>
1148 </div>
1149 <div class="col">
1150 <h3 class="blue">Easy to develop</h3>
1151 <p>
1152 Writing Caddy plugins is as easy as writing a Go package. It's a comfortable and familiar process for any Go programmer.
1153 </p>
1154 </div>
1155 </div>
1156 </div>
1157 </section>
1158
1159
1160 <section class="frankenphp dark feature">
1161 <div class="wrapper">
1162 <div class="asides">
1163 <div>
1164 <div class="left">
1165 <h2 id="extensibility">4x faster PHP apps</h2>
1166 <p>
1167 With <a href="https://frankenphp.dev">FrankenPHP</a>, Caddy acts as a PHP application server that delivers PHP pages about <a href="https://blog.laravel.com/octane-frankenphp">4x faster</a> than Swoole or RoadRunner: no need for php-fpm (FastCGI).
1168 </p>
1169 <p>
1170 Deploy your PHP application as a single static binary without needing to install PHP and php-fpm separately. Caddy with FrankenPHP is all you need for high-performing PHP apps!
1171 </p>
1172 <a href="https://frankenphp.dev" title="FrankenPHP"><img src="/resources/images/frankenphp-logo.svg" alt="FrankenPHP - Modern PHP app server" class="franken-logo"></a>
1173 <p class="endnote">
1174 Benchmarks compare total response times using worker mode with Octane. FrankenPHP runs in-process with the server, so it's generally faster than FPM/mod_php in most cases. PHP execution is not accelerated.
1175 </p>
1176 </div>
1177 </div>
1178 <img src="/resources/images/frankenphp-dab.svg" class="franken-mascot">
1179 </div>
1180
1181 <div class="asides">
1182 <div>
1183 <div class="display left">
1184 <div class="ex-frankenphp">
1185 <pre class="chroma"><code><span class="line"><span class="cl"><span class="p">{</span><span class="c1">
1186 </span></span></span><span class="line"><span class="cl"><span class="c1"> # Enable FrankenPHP
1187 </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="k">frankenphp</span>
1188 </span></span><span class="line"><span class="cl"><span class="p">}</span>
1189 </span></span><span class="line"><span class="cl">
1190 </span></span><span class="line"><span class="cl"><span class="gh">example.com</span> <span class="p">{</span><span class="c1">
1191 </span></span></span><span class="line"><span class="cl"><span class="c1"> # Serve PHP app from current directory
1192 </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="k">php_server</span>
1193 </span></span><span class="line"><span class="cl"><span class="p">}</span>
1194 </span></span></code></pre></div>
1195 <script>
1196 window.$_('.ex-frankenphp code').classList.add('dark');
1197 </script>
1198
1199 </div>
1200 </div>
1201 <div>
1202 <p>
1203 Serving your PHP app is as simple as this Caddyfile. The PHP interpreter is completely embedded within the Caddy binary and your application files will be served from the current working directory. No need for php-fpm or separate PHP installs!
1204 </p>
1205 <p>
1206 <a href="https://frankenphp.dev" class="franken button">Learn more</a>
1207 </p>
1208 </div>
1209 </div>
1210 </div>
1211 </section>
1212
1213
1214 <section class="diagonal down light feature">
1215 <div class="wrapper">
1216 <h2 id="gold-standard">The <span class="gold">gold standard</span> web server</h2>
1217 <p>
1218 Caddy has the most robust TLS stack on the market. With stronger memory safety guarantees than OpenSSL (Apache &amp; NGINX) and more advanced certificate automation logic than any other server or utility, Caddy keeps your sites online through problems when other servers... won't.
1219 </p>
1220 <p>
1221 Caddy was the first server to fully automate public certificate management&mdash;so we've been doing this longer than anyone. With more than 50 million certificates under management, Caddy has set the gold standard for other servers to live up to.
1222 </p>
1223 <div class="cols">
1224 <div class="col">
1225 <h3 class="green">OCSP stapling saves the day</h3>
1226 <p>
1227 Caddy automatically staples OCSP responses and caches them to weather outages. In 2018, many popular sites went down for users of mainstream browsers because crucial OCSP infrastructure had an extended outage. Only Caddy staples and caches OCSP responses by default, so all Caddy sites were unaffected.
1228 </p>
1229 </div>
1230 <div class="col">
1231 <h3 class="purple">On guard against revocation</h3>
1232 <p>
1233 In 2020, a mass certificate revocation event left many sysadmins scrambling to renew their certificates ahead of schedule. Caddy automatically renews certificates that get revoked, and all Caddy sites were unaffected. (This was before ARI existed.)
1234 </p>
1235 </div>
1236 <div class="col">
1237 <h3 class="blue">Stands tall during audits</h3>
1238 <p>
1239 Companies have deployed Caddy in front of their site just hours before important audits&mdash;potentially saving their compliance status&mdash;because of Caddy's safe defaults and "batteries included" approach.
1240 </p>
1241 </div>
1242 </div>
1243 </div>
1244 </section>
1245
1246 <section class="light gray feature">
1247 <div class="wrapper">
1248 <h2>Take everyone's word for it</h2>
1249 <p>
1250 We're biased. But Caddy is widely relied upon and praised by a diverse global user base because of its ease of use, secure defaults, powerful feature set, and business-changing cost reductions.
1251 </p>
1252 <div class="testimonials-container">
1253 <div class="testimonials">
1254 <div class="testimonial-col"></div>
1255 <div class="testimonial-col"></div>
1256 <div class="testimonial-col"></div>
1257 </div>
1258 </div>
1259 </div>
1260 </section>
1261
1262 </main>
1263
1264
1265 <footer>
1266 <div class="wrapper">
1267 <div class="logo-area">
1268 <img src="/resources/images/logo-dark.svg" class="logo" alt="Caddy web server">
1269 <p>
1270 A free <a href="https://github.com/caddyserver/caddy">open source</a> project
1271 that relies on <a href="/sponsor">sponsors</a>.
1272 </p>
1273 <p>
1274 <a href="https://usefathom.com/ref/AUKNWU">Privacy-respecting analytics</a> by Fathom
1275 </p>
1276 <br>
1277 <p>
1278 &copy; 2026 ZeroSSL. All rights reserved.
1279 </p>
1280 </div>
1281 <div class="link-col">
1282 <div class="col-header">Project</div>
1283 <a href="/features">Features</a>
1284 <a href="/download">Download</a>
1285 <a href="/docs">Documentation</a>
1286 </div>
1287 <div class="link-col">
1288 <div class="col-header">Business services</div>
1289 <a href="/support">Support</a>
1290 <a href="/sponsor">Sponsorships</a>
1291 </div>
1292 <div class="link-col">
1293 <div class="col-header">Community</div>
1294 <a href="https://caddy.community">Forum</a>
1295 <a href="https://github.com/caddyserver">GitHub</a>
1296 <a href="https://twitter.com/caddyserver">Twitter / X</a>
1297 <a href="https://scholar.google.com/scholar?q=caddy+web+server">Research</a>
1298 </div>
1299 </div>
1300 <div class="wrapper nostalgia">
1301 <p>Caddy supports an open Web that promotes privacy, preserves data ownership, fosters innovation, freely allows varieties of client software, and safeguards human sanctity.</p>
1302 <div class="nostalgia-badges">
1303 <img src="/resources/images/nostalgia/get.gif" title="Honoring early Web clients">
1304 <img src="/resources/images/nostalgia/microsoft-ie.gif" title="Honoring early Web clients">
1305 <img src="/resources/images/nostalgia/now_anim.gif" title="Honoring early Web clients">
1306 <img src="/resources/images/nostalgia/caddy.png" title="Powered by Caddy!">
1307 <div class="w3c">
1308 <img src="/resources/images/nostalgia/valid_html5_yellow.png" title="This site uses HTML 5">
1309 <img src="/resources/images/nostalgia/valid_css3_blue.png" title="This site uses CSS 3">
1310 </div>
1311 <div title="Don't forget to sign our guestbook!"><img alt="0" title="Hit counter" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAVCAIAAADAXPmFAAABf2lDQ1BzUkdCIElFQzYxOTY2LTIuMQAAKJF1kc8rRFEUxz8GESPKjywsJg2rIUZNbJSZhJI0RhlsZp55M2rezOu9kWSrbKcosfFrwV/AVlkrRaRky5rYoOdco0Yy93bv+dzvPed07rngiqQ1w67oASOTs8IjQc9MdNZT9UitzGZa8Mc02xyanByn5Hi7oUzZqy6Vq7Tfv6N2IWFrUFYtPKiZVk54VHh8OWcq3hRu0lKxBeFjYZ8lBQpfKz1e4CfFyQJ/KLYi4RC4GoQ9yV8c/8VayjKE5eV4jfSS9lOPeok7kZmeEtsuqw2bMCME8TDGMCEC9DIge4Au/HTLiRLxPd/xE2QlVpPdZAWLRZKkyOETdUmyJ8TqoidkpllR/f/bV1vv8xeyu4NQ+eA4Lx1QtQGfecd533eczwMov4ezTDE+uwf9r6Lni5p3F+rX4OS8qMW34HQdWu/MmBX7lspluXQdno+gLgqNl1AzV+jZzz2HtxBZla+6gO0d6BT/+vkvdv5n7QE3vncAAAAJcEhZcwAADsQAAA7EAZUrDhsAAABpSURBVDiN1VNJEsAgCAtOP9iX8kQ8dKxA7Hbg0JyEJGZkEKiGzKO9EraplistIMCejDYqzhHHAlvgljnxikb8A+oN8Q1uGqFpoXJg9QFlwzk49uhoKhsokqk/jPVml3LCUo28YJ//Qz067YITxllUaOsAAAAASUVORK5CYII="><img alt="1" title="Hit counter" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAVCAIAAADAXPmFAAABf2lDQ1BzUkdCIElFQzYxOTY2LTIuMQAAKJF1kc8rRFEUxz8GESPKjywsJg2rIUZNbJSZhJI0RhlsZp55M2rezOu9kWSrbKcosfFrwV/AVlkrRaRky5rYoOdco0Yy93bv+dzvPed07rngiqQ1w67oASOTs8IjQc9MdNZT9UitzGZa8Mc02xyanByn5Hi7oUzZqy6Vq7Tfv6N2IWFrUFYtPKiZVk54VHh8OWcq3hRu0lKxBeFjYZ8lBQpfKz1e4CfFyQJ/KLYi4RC4GoQ9yV8c/8VayjKE5eV4jfSS9lOPeok7kZmeEtsuqw2bMCME8TDGMCEC9DIge4Au/HTLiRLxPd/xE2QlVpPdZAWLRZKkyOETdUmyJ8TqoidkpllR/f/bV1vv8xeyu4NQ+eA4Lx1QtQGfecd533eczwMov4ezTDE+uwf9r6Lni5p3F+rX4OS8qMW34HQdWu/MmBX7lspluXQdno+gLgqNl1AzV+jZzz2HtxBZla+6gO0d6BT/+vkvdv5n7QE3vncAAAAJcEhZcwAADsQAAA7EAZUrDhsAAABlSURBVDiN5ZPBDsAgCEMfZj/Il/KJ7rJNmaLZgdN6QdM2SImQDWlHXQrtqqWpLdKCQX0ZFp5ODRyOm3qqu5WB3yDf4GewWbjixhDHRavokrgNGnd4YpXxST+JtWzUgLrwP/+HfJw/VBTTE/WQ8gAAAABJRU5ErkJggg=="><img alt="0" title="Hit counter" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAVCAIAAADAXPmFAAABf2lDQ1BzUkdCIElFQzYxOTY2LTIuMQAAKJF1kc8rRFEUxz8GESPKjywsJg2rIUZNbJSZhJI0RhlsZp55M2rezOu9kWSrbKcosfFrwV/AVlkrRaRky5rYoOdco0Yy93bv+dzvPed07rngiqQ1w67oASOTs8IjQc9MdNZT9UitzGZa8Mc02xyanByn5Hi7oUzZqy6Vq7Tfv6N2IWFrUFYtPKiZVk54VHh8OWcq3hRu0lKxBeFjYZ8lBQpfKz1e4CfFyQJ/KLYi4RC4GoQ9yV8c/8VayjKE5eV4jfSS9lOPeok7kZmeEtsuqw2bMCME8TDGMCEC9DIge4Au/HTLiRLxPd/xE2QlVpPdZAWLRZKkyOETdUmyJ8TqoidkpllR/f/bV1vv8xeyu4NQ+eA4Lx1QtQGfecd533eczwMov4ezTDE+uwf9r6Lni5p3F+rX4OS8qMW34HQdWu/MmBX7lspluXQdno+gLgqNl1AzV+jZzz2HtxBZla+6gO0d6BT/+vkvdv5n7QE3vncAAAAJcEhZcwAADsQAAA7EAZUrDhsAAABpSURBVDiN1VNJEsAgCAtOP9iX8kQ8dKxA7Hbg0JyEJGZkEKiGzKO9EraplistIMCejDYqzhHHAlvgljnxikb8A+oN8Q1uGqFpoXJg9QFlwzk49uhoKhsokqk/jPVml3LCUo28YJ//Qz067YITxllUaOsAAAAASUVORK5CYII="><img alt="2" title="Hit counter" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAVCAIAAADAXPmFAAABf2lDQ1BzUkdCIElFQzYxOTY2LTIuMQAAKJF1kc8rRFEUxz8GESPKjywsJg2rIUZNbJSZhJI0RhlsZp55M2rezOu9kWSrbKcosfFrwV/AVlkrRaRky5rYoOdco0Yy93bv+dzvPed07rngiqQ1w67oASOTs8IjQc9MdNZT9UitzGZa8Mc02xyanByn5Hi7oUzZqy6Vq7Tfv6N2IWFrUFYtPKiZVk54VHh8OWcq3hRu0lKxBeFjYZ8lBQpfKz1e4CfFyQJ/KLYi4RC4GoQ9yV8c/8VayjKE5eV4jfSS9lOPeok7kZmeEtsuqw2bMCME8TDGMCEC9DIge4Au/HTLiRLxPd/xE2QlVpPdZAWLRZKkyOETdUmyJ8TqoidkpllR/f/bV1vv8xeyu4NQ+eA4Lx1QtQGfecd533eczwMov4ezTDE+uwf9r6Lni5p3F+rX4OS8qMW34HQdWu/MmBX7lspluXQdno+gLgqNl1AzV+jZzz2HtxBZla+6gO0d6BT/+vkvdv5n7QE3vncAAAAJcEhZcwAADsQAAA7EAZUrDhsAAABuSURBVDiNzVJJEsAgCEOmH+SlfSJetDQaaQ91plxcSIBERXZHia2/AmpbDbgE3ctp3K44BZofkKMcHFWn/EPsJ6CGk5mLolHj6inKvHVSLCDW+48jObPV4PR7W3PRYweKFhFv/lyoWyKJ5PN/HBVcRBIbb1m1OAAAAABJRU5ErkJggg=="><img alt="8" title="Hit counter" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAVCAIAAADAXPmFAAABf2lDQ1BzUkdCIElFQzYxOTY2LTIuMQAAKJF1kc8rRFEUxz8GESPKjywsJg2rIUZNbJSZhJI0RhlsZp55M2rezOu9kWSrbKcosfFrwV/AVlkrRaRky5rYoOdco0Yy93bv+dzvPed07rngiqQ1w67oASOTs8IjQc9MdNZT9UitzGZa8Mc02xyanByn5Hi7oUzZqy6Vq7Tfv6N2IWFrUFYtPKiZVk54VHh8OWcq3hRu0lKxBeFjYZ8lBQpfKz1e4CfFyQJ/KLYi4RC4GoQ9yV8c/8VayjKE5eV4jfSS9lOPeok7kZmeEtsuqw2bMCME8TDGMCEC9DIge4Au/HTLiRLxPd/xE2QlVpPdZAWLRZKkyOETdUmyJ8TqoidkpllR/f/bV1vv8xeyu4NQ+eA4Lx1QtQGfecd533eczwMov4ezTDE+uwf9r6Lni5p3F+rX4OS8qMW34HQdWu/MmBX7lspluXQdno+gLgqNl1AzV+jZzz2HtxBZla+6gO0d6BT/+vkvdv5n7QE3vncAAAAJcEhZcwAADsQAAA7EAZUrDhsAAABWSURBVDiN5VNBDgAgCALX/79cR0fqqoOnODmFVFxAN+jhvCKas1lxAfpz5tlKQ2k+pJZqdFQL9QP6BboDM3M1qTtWp2AM50UHxpE+sdUObOxOPP+Hfiyb7BQlYsbtmgAAAABJRU5ErkJggg=="><img alt="9" title="Hit counter" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAVCAIAAADAXPmFAAABf2lDQ1BzUkdCIElFQzYxOTY2LTIuMQAAKJF1kc8rRFEUxz8GESPKjywsJg2rIUZNbJSZhJI0RhlsZp55M2rezOu9kWSrbKcosfFrwV/AVlkrRaRky5rYoOdco0Yy93bv+dzvPed07rngiqQ1w67oASOTs8IjQc9MdNZT9UitzGZa8Mc02xyanByn5Hi7oUzZqy6Vq7Tfv6N2IWFrUFYtPKiZVk54VHh8OWcq3hRu0lKxBeFjYZ8lBQpfKz1e4CfFyQJ/KLYi4RC4GoQ9yV8c/8VayjKE5eV4jfSS9lOPeok7kZmeEtsuqw2bMCME8TDGMCEC9DIge4Au/HTLiRLxPd/xE2QlVpPdZAWLRZKkyOETdUmyJ8TqoidkpllR/f/bV1vv8xeyu4NQ+eA4Lx1QtQGfecd533eczwMov4ezTDE+uwf9r6Lni5p3F+rX4OS8qMW34HQdWu/MmBX7lspluXQdno+gLgqNl1AzV+jZzz2HtxBZla+6gO0d6BT/+vkvdv5n7QE3vncAAAAJcEhZcwAADsQAAA7EAZUrDhsAAABgSURBVDiNY2CgNWBEMP8TpZAJoZoRl1oGBkaEcUwIUVx6GFEsZ0GRw6oH1alMGPIEAO01oPqBEVvgogqi+hFXVCCpgtkQSIQNjJhOChwGwbqecLAyEVDNgJ7ASM4PtAcAUoUUKAw29gMAAAAASUVORK5CYII="></div>
1312 </div>
1313 </div>
1314 </footer>
1315
1316 <!-- Fathom - beautiful, simple website analytics -->
1317 <script src="https://cdn.usefathom.com/script.js" site="GVMGKAKP" honor-dnt="true" defer></script>
1318 <!-- / Fathom -->
1319
1320 <!-- Algolia DocSearch -->
1321 <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/@docsearch/js@3"></script>
1322
1323
1324
1325 <template id="tpl-testimonial">
1326 <div class="testimonial">
1327 <img class="testimonial-picture">
1328 <div class="testimonial-content">
1329 <div class="testimonial-quote">
1330
1331 </div>
1332 <a class="testimonial-name" target="_blank">
1333
1334 </a>
1335 <div class="testimonial-role">
1336 <div class="testimonial-role-text"></div>
1337 <a class="testimonial-org"></a>
1338 </div>
1339 </div>
1340 </div>
1341 </template>
1342
1343 <script>
1344 AsciinemaPlayer.create('/resources/demo.cast', $_('#video-demo'), {
1345 preload: true,
1346 autoPlay: true,
1347 controls: true
1348 });
1349 </script>
1350 </body>
1351 </html>