3.5 KB

🌩 Lightning Talk at the 34c3 🚀

Build Status


self-hosted microblogging inspired by Destilled down to the bare minimum, with easy hosting and security in mind. No PHP, no DB, no server-side templating, JS optional.

Design Goals

  • backwards compatible posting (
  • trivial installation and minimal hosting requirements (run on simple hosted webspace),
  • keep server lean, especially for readers,
  • standards compliant (Atom, Atompub, WebSub),
  • easy migration from existing shaarlis,
  • run ok without javascript,
  • visitor reading operates on static flat files only (no server code),
  • secure against brute force login attacks,
  • easy translation & skinning,
  • leverage existing, widely deployed web tec (CGI, XSLT, HTML, CSS),
  • easy fail2ban integration / DOS mitigation,
Quality very good good normal irrelevant
Functionality ×
Reliability ×
Usability ×
Efficiency ×
Changeability ×
Portability ×


tl;dr: a webserver that can execute CGIs and serve files from disc.

ShaarliGo is an old-school CGI binary executable, so it needs a webserver to drive it. Configurations come for Apache (automatic, see static/.htaccess) and Lighttpd (see static/app/lighttpd.conf).

As a self-contained, statically linked, Go executable, it has no runtime dependencies and works on a variety of platforms.

ShaarliGo needs write access to the webroot filesystem to once unpack the web assets and when posting update the content.

Storage footprint is <25 KiB per post.

When posting a page, it is once accessed via HTTP GET to infer title, tags and a thumbnail image URL.

Install / Update

  1. $ curl -LRo shaarligo.cgi.gz # uname -s; uname -m
  2. $ gunzip shaarligo.cgi.gz
  3. $ chmod a+x,a-w shaarligo.cgi
  4. visit in your browser:

done (Apache)! For lighttpd see static/app/lighttpd.conf.

Or build from source at


  1. private posts,
  2. PuSH/PubSubhubbub / WebSub,
  3. import shaarlis (login?),
  4. pwd reset (maybe deleting from app/config.yaml is acceptable),
  5. images/enclosures,
  7. trackback/pingback

Shaarli(OS|er) Compatibilty

see and