\input texinfo @settitle godlighty @copying Copyright @copyright{} 2021-2024 @email{stargrave@@stargrave.org, Sergey Matveev} @end copying @node Top @top godlighty @command{godlighty} is @url{https://www.gnu.org/philosophy/free-sw.html, free software} highly-customizable HTTP, HTTP/2, HTTPS server written on pure Go. Why yet another web-server? Because all others suck even for my simple ordinary needs: they use hateful OpenSSL, lack documentation, has complex configuration format, lack some features, hard to extend with. @itemize @item Rather minimalistic pure-Go web-server with few number of dependencies, producing single statically linked executable. Maximal reuse of native libraries capabilities. @item Modern, reliable, secure and fast TLS 1.3 implementation with ChaCha20-Poly1305, session resumption and SNI. @item If built with @url{http://www.gostls13.cypherpunks.ru/, gostls13}, then @url{http://www.gost.cypherpunks.ru/, GOST} TLS 1.3 cryptography will be fully supported, with ability to use GOST-based X.509 certificates if client announces its knowledge of GOST algorithms (with the fallback to ordinary ECDSA/EdDSA ones). @item HTTP/1.1, @url{https://en.wikipedia.org/wiki/HTTP%2F2, HTTP/2} (only when negotiated during ALPN) and keepalives support. Graceful shutdowns. @item @code{gzip} and @url{https://facebook.github.io/zstd/, Zstandard} compression on-the-fly. @item @code{Range}, @code{ETag} (based on file/directory's @code{ctime}), @code{Last-Modified} and corresponding precondition handlers are fully used. @item Auto-generated directory listings and read-only @url{https://en.wikipedia.org/wiki/WebDAV, WebDAV} support. @item Per-domain HTTP basic authorization and TLS client authentication. @item If corresponding @file{.meta4} files are found, it is parsed and additional @code{Link}s with @code{Digest}s headers are generated automatically, based on that @url{http://www.metalinker.org/, Metalink} file. @item Very friendly to @url{http://cr.yp.to/daemontools.html, daemontools}. Can drop (UID, GID, groups) privileges. @end itemize Basically all configuration is done directly inside source code. You have to recompile it every time configuration changes. Is it a problem? I doubt, because Go is very fast. But it produces huge statically linked executables, you say! Use @command{bsdiff}/@command{bspatch}! It is created exclusively to drive my own websites, but if you are interested, then @code{git clone git://git.stargrave.org/godlighty.git} it. @insertcopying @include cfg.texi @include usage.texi @bye