Design Goals

Must-Have Features

  • Backed by git (every change recorded using version control)
  • Stored as plain text files on the filesystem
  • All pages/articles editable through either a text editor or the wiki’s embedded editor
  • Pages stored as markdown or in a similar markup language (a la Jekyll)
  • Customizable HTML templates for the wiki’s various pages
  • Simple and easy to use
  • Multi-user
  • All metadata kept inside the file’s “Front Matter” (similar to Jekyll)

Would Be Cool To Have

  • Can export entire wiki to static HTML pages so you can serve a read-only version using something like Nginx (again, similar to Jekyll)
  • Editor built into the wiki website with previewing of the processed markdown content
  • Each edit, new page, deletion or other change is recorded using a git commit. All commits have useful messages (like “[user] created a page: /path/to/page”)
  • Backups are dead simple and easy to understand/implement/schedule
  • Access restrictions for pages (perhaps embedded in the front matter)
  • Upload files and images, allowing users to link to them
  • Support merging of pages if two people are editing the same thing at the same time (similar to git merges)
  • Deal with merge conflicts appropriately, possibly the same way you do in git
  • Simple interface to cron-like backups and jobs (probably just use cron under the hood)
  • Users get their own homepage
  • Built in templates to make page creation easier
  • Permission groups (e.g. admin, team, no-permissions)

Will Not Be/Do

  • No collaborative editing (like google docs)
  • No embedded chats
  • No huge backend database. User details might be saved in a sqlite database for ease and performance, but there’ll be a simple csv file containing the usernames, emails and password hashes.