Shizaru is a minimalistic web server, written in Go, whose guiding principle is "serve no evil". Precisely what counts as "evil" can be configured by the user, so perhaps Shizaru is best explained as a webserver for imposing strong opinions. Said opinions can be imposed in many ways, for example by defining a list of forbidden HTML tags and/or forbidden HTML attributes, a list of forbidden MIME types (as inferred from file extension), a list of forbidden domains which may not be linked to, maximum serveable file size (either globally or per MIME type), and more.
Have no opinions of your own to impose? Fear not! Shizaru has lovely default settings which attempt to promote a fast, safe, clean, simple, respectful web. The website obesity crisis is combatted with strict file size limits, to ensure that your website does not end up larger than the major works of Russian literature. Besides being limited to 32 KiB in size, HTML pages are limited to 3 images and HTML tags cannot be nested more than 10 levels deep. This encourages uncluttered and quickly rendering layouts. <audio>, <applet>, <canvas>, <embed>, <iframe>, <script> and <video> tags are prohibited (among others). In other words, your web pages will need to be actual documents, not applications, which means they have some hope of being usable on older machines or without massively bloated browsers. Third-party images, stylesheets and fonts are not allowed, so your users can rest assured that they aren't being tracked indirectly.
The intended use case for Shizaru is in community-oriented shared-hosting environments, like "pubnix" or "tilde" servers. Server admins can offer free webspace powered by Shizaru and be confident that none of their users will use it to serve anything too egregious. At the same time, the user community can have fun pushing the boundaries together and trying to see what kind of pages can be built within the limits imposed.
Shizaru is used in this capacity at some of the Circumlunar Space servers, including the Zaibatsu - Shizaru served you this very page! To the best of my knowledge, nobody else is using it. This is fine! Shizaru was first written before Project Gemini was started, and I think most people who would who would have found Shizaru interesting dove into Geminispace instead. Because Shizaru serves my webpage and those of other people in my community, I want it to be reliable and secure, so I consider it "maintained" and bug reports and patches are welcome - but I'm not super interested in adding lots of new features or trying to attract more users.
Code lives at https://git.sr.ht/~solderpunk/shizaru.
There's a man page.
Shizaru needs to bind to ports 80 and 443, which requires root privileges on most unix systems. Obviously it's not a good idea to run a webserver as root! The traditional solution is to start the webserver as root, bind to the ports, and then drop rivileges to a safe user with the setuid system call. When Shizaru was first written, the Go programming language didn't support setuid reliably. People seemed to consider this no big deal because modern Linux systems support using so-called "capabilities" to let certain executables bind to ports < 1024 even whe not run as root. Not everybody wants to run Linux, of course, but the days of genuine solidarity amongst non-Windows OSes seem to be well and truly over. Anyway, as of Go 1.16, setuid works, but I haven't rewritten Shizaru to support it yet because it would mean I wouldn't be able to use the easy-peasy ListenAndServe() functionality from the standard library and, well, since nobody else even seems to use the thing, why make life harder for myself? Anyway, what follows is "the easy way" for modern Linux users plus a few clunky work-arounds for everybody else, with apologies.
After git cloneing the repository, run go build to get a shizaru executable. Copy this executable to /usr/local/sbin/ or the conventional equivalent on your system.
[Unit] Description=Shizaru web server After=network.target [Service] Type=simple Restart=always User=www-data ExecStart=/usr/local/bin/shizaru AmbientCapabilities=CAP_NET_BIND_SERVICE [Install] WantedBy=multi-user.target