I’ve made a wiki

Introducing Bikini: an open-source, personal wiki application.

A Bikini page

During the past weeks I’ve designed and written Bikini, an open-source personal wiki web application. Bikini allows to quickly organize your ideas and notes using the typical conventions found in wikis.

Motivation and design choices

I’ve written Bikini mostly for myself but you might find useful too. The original requirement was a better way to organize a fairly large amount of notes, citations, recipes and bookmarks accumulated during the past years. Such material was scattered between Apple Mail’s notes, bookmarks, e-mails, etc. and I quickly realized the approach wasn’t ideal.

I wanted to have such material available online and be easily browsable with my iPhone. Also I wanted a software to be easily installed on generic web hosting like Dreamhost, the hosting service I’m using right now.

Bikini doesn’t aim to have dozen of features or support heavy multi users scenarios usually found on mainstream wikis, instead it sports a simple interface — no complex forms, just one big textarea — and careful typography choices for readable, good looking pages both on desktop and mobile environments.

A note about the wiki syntax

Initially I thought to use Markdown, which I love, but it doesn’t really cut for wikis since it lacks a succinct way to specify WikiWords. So, instead of invent yet another wiki syntax, I’ve settled to use Creole. Creole, although not particularly lightweight, is pretty widespread and with a good amount of support. Better yet, there are at least two Python fast and robust parsers to choose from.


  • Start immediately: simple setup procedure, self-contained, no external dependencies.
  • Don’t lose anything: multiple revisions support.
  • Find what’s missing: list of needed pages and unlinked pages.
  • Stay updated: list of recents changes, as Atom feed too.
  • Read everywhere: optimized print and mobile stylesheet.
  • Cool looking: optional SmartyPants support for good looking quotes, dashes and ellipses.


See Download.


Bikini requires Python 2.5+ and runs as CGI script within Apache web server. It uses the server filesystem to store contents so you don’t need to connect it to a relational database.


Setup process is minimal, given that you have the right settings and permissions to execute CGI scripts within the desired web site. You may want to check that with your system administrator.

Extract the files from distribution archive into the installation directory (including the hidden .htaccess file), point your browser to the corresponding URI and the FrontPage page should appear.

Setup contains a more detailed step-by-step procedure.


A sample configuration.sample.py file is provided. You can (and should) copy or rename such file into configuration.py and edit its settings. The most important settings are:

  • SITE_NAME, self descriptive.
  • SITE_DESCRIPTION, think this as a tagline. It follows site’s name.
  • OWNER_NAME, who owns and maintains the site.
  • OWNER_URI, web (http://example.com/) or email URI (mailto:john@example.com) to contact the site’s owner.
  • USE_SMARTYPANTS, either set to False (default) or True to activate SmartyPants.

Another interesting setting you may want to change is NAV_NAMES, which is a list of links to be placed on top and bottom navigation. It allows to personalize navigation and make relevant pages easily reachable by users.


Content caching makes a big difference on perceived site speed so I advice to change the ExpiresActive from Off to On in the Bikini .htaccess file:

<IfModule mod_expires.c>
   #ExpiresActive Off
   ExpiresActive On    
   ...other caching directives...

Future directions

If you want to know more about future releases and upcoming features please take a look at Roadmap and Ideas.


Bikini was developed and tested on Mac OS X 10.6.x, Debian Linux, Safari 5 and Firefox 5.


Comments for this article are closed, thank you.