tipidee
What is it ?
tipidee is a web server. It supports HTTP 1.0 and 1.1. It aims to be compliant with RFC 9112: while it only implements a very limited subset of the optional functionality in HTTP 1.1, it implements all the mandatory parts. It is usable with both HTTP and HTTPS.
It runs under a super-server, e.g. inetd, s6-tcpserver, or s6-tlsserver (for HTTPS). Traditionally, inetd-mode web servers aren't considered performant, but tipidee aims to eke out every single drop of performance that is attainable with its programming model.
- For the impatient: a quickstart guide.
Why another Web server?
There are roughly two groups of web servers.
The first one is big, powerful servers such as nginx, Apache httpd, and so on. They focus on environments where simplicity isn't a concern and can be traded off for features, integration with larger ecosystems, or just serving speed. (lighttpd, for instance, was developed as a proof of concept for solving the c10k problem.)
The second one is small, quick-and-dirty servers, aimed at easily deploying basic HTTP service for serving static files for prototying or in resource constrained environments such as embedded devices. Among them, for instance, busybox httpd, bozohttpd, or various httpds from ACME Labs.
And, surprisingly, not much in between. There are a ton of supposedly "tiny" or "minimal" servers, written in languages whose naked runtime uses more resources than the whole skarnet.org ecosystem by two orders of magnitude; but there isn't one that focused on what I want from a web server, which is:
- Usability with HTTPS without the need to entangle the code with a given TLS library — which means delegating the TLS layer to a super-server and not performing the socket work itself. This is important: tying your Web server to a TLS library makes it more difficult to maintain, more difficult to secure, more difficult to build, and more difficult to package and distribute.
- Support for HTTP 1.1, with persistent connections, and not only 1.0
- Support for real CGI, not only NPH
All in all, I felt that despite how crowded the web server space is, there wasn't a satisfactory offer for the needs of skarnet.org and similar sites that need an intermediary web server.
And why "tipidee"?
Because h-t-t-p-d is already pretty tedious to say out loud, and other web servers have a nasty habit of adding to it; but I'd rather make it shorter. Just like the code.
Installation
Requirements
- A POSIX-compliant system with a standard C development environment
- GNU make, version 3.81 or later
- skalibs version 2.15.0.0 or later. It's a build-time requirement. It's also a run-time requirement if you link against the shared version of the skalibs library.
- Recommended at run-time: s6-networking version
2.8.0.0 or later. It's not a strict requirement, but tipidee relies on a super-server such as
s6-tcpserver
to listen to the network and provide connection
information via environment variables. It also defers to tools such as
s6-tcpserver-access
to provide access control and connection fine-tuning. And if you want
to run an HTTPS server, you'll need something like
s6-tlsserver
to manage the TLS transport layer. It will make your life easier.
- When built with BearSSL, s6-tlsserver basically gives you a TLS tunnel for free. Bearly any RAM use. Don't take my word for it; try it out for yourself.
Licensing
tipidee is free software. It is available under the ISC license.
Download
- The current released version of tipidee is 0.0.7.2. You can access its checksum here.
- You can checkout a copy of the
tipidee
git repository:
git clone git://git.skarnet.org/tipidee
- There's also a Codeberg mirror, or a GitHub mirror, or a SourceHut mirror of the tipidee git repository.
Compilation
- See the enclosed INSTALL file for installation details.
Upgrade notes
- This page lists the differences to be aware of between the previous versions of tipidee and the current one.
Reference
Commands
- The tipideed program
- The tipidee-config program
- The ls.cgi internal program
- The tipidee-logaggregate internal program
- The cgiwrapper-nollmcrawler internal program
Internal commands
Configuration format
Usage notes
- tipidee's quickstart guide
- A list of caveats and FAQs
Design notes
Related resources
- tipidee is discussed on the skaware mailing-list.
tipidee manual pages
- Lennart Jablonka is providing the tipidee documentation as a set of man pages.
