Ikwi is the wiki tool which powers this site. It uses Git to store pages and page history, Markdown as its internal format for pages (processed with pandoc), and a WYSIWYG editor called Squire. Together, with very little sanitization needed, pandoc and Squire generate reasonably tolerable markup.

Known bugs

  • The WYSIWYG iframe resize-on-launch is rather broken.
  • For some reason uploading a header photo to pages currently causes it to crash so hard that the entire Python server process goes down with it. Not sure what the issue is here.
  • The search feature that powers the link tool makes some odd ranking decisions sometimes. It also seems to end up with duplicates somehow, which might be a bug in Whoosh.
  • Updating the search database and links database (done lazily whenever those databases are requested) can take quite a while. Not sure how to fix this.
  • Squire likes to drop empty <a> tags around, and no doubt others too; these can just be sanitized away at save-time.

Features to implement

  • Keyboard shortcuts (while editing and while reading)
  • Make the editing toolbar stay at the top of the screen when scrolling down
  • View page history
  • Resolve a merge conflict
  • See diffs between versions
  • List of non-existent-but-linked-to-pages (redlinks), ordered by PageRank
  • List of orphaned pages
  • Search
  • Add a commit message when saving
  • Flesh out the ikwi command line tool
  • Page privacy tools (hide page from ’recent changes’ and similar lists)
  • Maybe a ’pull request’-type system so other people can edit pages, but I still get to approve everything (to prevent spam, or for other reasons)
  • Graph of pages with GraphViz, à la sbp’s 2001 map of Logic Error

Miscellaneous to-do

  • Rethink some aspects of the API for Storage objects, in particular make the naming of things more consistent.
  • Re-implement database.py purely in terms of Storage.
  • Maybe make Storage a separate PyPI module for those who want to build web software based on a DVCS.
  • Add tests for the parts of Ikwi that aren’t called storage.py.