kittywiki

kittywiki is a tiny little wiki program that's designed for building small websites! this website runs on it (and is in fact what i initially built it for) :3

i think being able to easily edit my website, create new pages, etc and have it go live instantly is really useful!! i've been interested in this idea for a while - in my almost-decade of having personal websites of some form i've built a couple custom CMSes inspired by wikis, but this one is the first that's actually kinda a normal wiki software with wiki features.

kittywiki is written in ocaml using the dream web framework, liquid templates, and irmin (for storing page contents in git). it's open source software,[1] licensed under the Be Gay Do Crimes License, and the source code is available on git.gay.

kittywiki vs gitit

when setting up this site, i initially used gitit, which is a wiki software written in haskell that uses a git repo to keep track of page history/revisions/etc. i really liked how simple and customizable it was (i wrote a custom set of templates to make it look like this site currently does), but unfortunately i ran into performance issues. it was constantly eating up 10-20% of a cpu core and i couldn't figure out how to fix it (in large part because i do not know haskell)! so, i ended up just writing my own thing[2] that is very similar but is much faster (and more flexible, while i'm at it)

things kittywiki has that gitit doesn't:

  • good performance
  • more flexible templates, making it easier to build your own site on top of it
  • ability to move pages
  • diffs using patience diff algorithm
  • OIDC authentication
  • slightly better file uploader
  • no jquery! and overall less javascript
  • a good page text editor (uses codemirror)

things gitit has that kittywiki doesn't:

  • categories, templates, recent changes, talk pages, user pages
  • search
  • more supported page formats (it uses pandoc to produce html instead of just using a markdown parser)
  • latex equation rendering with mathjax
  • username/password auth

future development

idk when i will find time for it, but i do want to keep working on kittywiki at some point!! here's a list of things i want to add

  • better auth:

    • right now it just allows anyone who can authenticate with the configured OIDC provider to edit anything. actual access controls would be useful
    • normal username/password auth would make it much easier to set up
    • support for a file that maps OIDC usernames to display names would be useful for OIDC providers that don't let you easily change it (cough cough tailscale)
  • caching: currently it does not cache anything !!! and despite that, it is fast enough for this tiny site and probably many others, but it would be a good idea to improve on that

  • more wiki features: user pages, talk pages, user contributions pages, recent changes, categories, templates

  • make a default set of liquid templates that looks like a normal wiki. maybe just copy gitit's UI

  1. the osi would probably argue otherwise but i do not care

    ↩︎︎
  2. yeah i guess i really did write an entire wiki program to avoid having to learn haskell. oops ,,, i will learn haskell eventually i promise!!!

    ↩︎︎