UP | HOME

Ikwi

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.