Editor's note: as of July 2006, the author has produced an update to this article discussing developments since its original publication. See "Which Wiki" update for details.
A Wiki is a web site that can be edited directly by people browsing it. That way, they can add new content, correct errors or inaccuracies, and add their own comments, among other things. Since the debut of the original Wiki Wiki Web, many publicly available, usually open source, Wiki implementations have appeared, enabling webmasters to set up their own Wikis on their sites. These Wiki implementations vary in their features, ease of installation, syntax, and semantics.
The purpose of this article is to give an overview of several popular Wiki implementations and see how they fare. It is not trivial to switch from one Wiki implementation to the other, because this will usually require translating all of the pages from the old syntax to the new one. Thus, choosing a Wiki engine requires some care, taking possible future developments into account. This article will hopefully help you make that choice if the need arises.
For their pages, Wiki implementations offer a markup language, usually very different than HTML. The alternate syntax helps to prevent HTML injection attacks and also allows easier editing. Some Wikis support a subset of HTML, but this is uncommon.
Most implementations identify Wiki pages in the markup by using an identifier, usually formed
from capitalized words (for example,
ThisIsAWikiPage). Wiki users refer to
this form of capitalization as CamelCase. Any such identifiers in the page
create links to other internal pages in the Wiki. Following a link to a non-existing page
often gives the opportunity to edit the page's contents, thus creating a new
There are other common rich-text paradigms. Some allow users to designate
portions of text as external links to URLs. One embeds images based on the URLs.
It's usually possible to highlight text with bold, underline, or italics, add
<ol>s) and bulleted lists
<ul>s), blocks of monospace text (representing program code
or output), and so forth.
Some Wikis have page attachments: binary files associated with the page to which it can refer. This is useful for putting images or directly downloadable files in the Wiki. Another common feature is version control. Version control allows users to save and recall previous version of the edited pages, in order to reverse damage, either accidental or malicious. Most Wiki implementations also have a search feature for searching their pages.
In addition to the above, several Wiki engines offer extra features such as user management and permissions, extendability, and an extended markup that supports various operations such as meta-syntax.
For simplicity's sake, I'll assume that you want to install a Wiki on a UNIX machine (Linux, in my case). Should you want to set up a Wiki on Microsoft Windows, you may encounter other or different problems. I'll also concentrate on Wikis written in Perl, Python, and PHP because they are familiar languages, widely available, and well studied.
The criteria for evaluating the Wiki implementations are:
Installation requirements and ease of installation--how easy is it to perform the installation as an under-privileged user?
Does the installation require an SQL database? If so, can the Wiki implementation use a pre-defined prefix for all of its tables? (This is useful in shared-hosting situations where you cannot create your own unique databases.)
These are not the only criteria you might consider. However, they do cover what I consider the common subset of considerations. If your needs differ, please feel free to use the following comparisons as a starting place for your research.
TWiki (pronounced "twee-kee"), is a mature Wiki implementations whose mission starts with "TWiki is a leading-edge, web-based collaboration platform targeting the corporate intranet world." However, I found it to be also useful for public Internet sites.
Installing TWiki may seem intimidating, but I was able to automate it using
shell scripts I wrote. The documentation does not explain well how a
non-administrator can install it. While the documentation for the first part
does explain it (though not too clearly), the second part recommends using the
chown command (which only root can do), in order to achieve some
purposes. I finally gave up on that and installed it with administrator
The TWiki syntax is very powerful and flexible and also allows the inclusion of many HTML tags. Furthermore, it allows users to include special variables there to accomplish various tasks, including generating a table of contents or displaying the current time.
TWiki is very powerful and includes support for attachments, user management and permissions, and skins. There are many Twiki plugins available. Twiki also supports version control using RCS.
One drawback is that you must have an appropriate HTTP authentication scheme set up in order to use Twiki's user management. Otherwise, the users cannot log in to their accounts, so all changes to the pages are anonymous. I would have preferred a cookie-based authentication and login, but these are not available in the version that I tested.
TWiki is impressive and powerful, but setting it up and enabling some features may be problematic.
The Kwiki motto is a "A Quickie Wiki
that's not Tricky." Installing it is pretty straightforward for a site you
admin: just install the Perl package (from CPAN or elsewhere), and then type
kwiki-install in a CGI-served directory to create an instance. Installing
Kwiki on a server you are not an admin of is more complicated but doable.
I found the Kwiki markup not powerful. Some things are impossible with it, such as hyperlinking an arbitrary piece of text to an email address (mail fooish). I also could not find how to link a Wiki page with a text link different from the Wiki page name (like this link to LinkedWikiWikiPage). There is also no support for attachments, HTML markup as an alternative to the Wiki markup, etc. It is disappointing.
Kwiki can use either RCS or Subversion for version control. (Those who wish to use Subversion should check out the corrected Kwiki version as the CPAN Kwiki does not work with the up-to-date Subversion.) Kwiki is easily customizable and has several Kwiki enhancements available. Generally, however, they are less powerful than TWiki's.
All in all, Kwiki is easy to install and customize, but its formatting rules are lacking.
PmWiki is a PHP Wiki implementation by Patrick Michaud. Installing or upgrading a PmWiki instance is a very simple process with a few steps. It works very easily on a web-hosting server without administrator privileges.
The PmWiki markup rules are relatively powerful, making for a very nice Wiki experience. PmWiki has several useful features, including the ability to lock files under passwords. It also uses its own custom version-control format.
PmWiki is a good choice for a simple public or in-house Wiki.
MediaWiki is the Wiki implementation used by Wikipedia and the other WikiMedia resources. These are, probably, the largest and most successful Wikis. MediaWiki offers a lot of features, including an optional file upload feature, a very comprehensive markup, very good internationalization support (even supporting bi-directional text), version control, a search feature, back-links, mathematical equations support, and page names that can consist of any character.
MediaWiki is written in PHP and uses a MySQL database. MediaWiki's installation is incredibly simple, especially considering its complexity. It involves setting up a MySQL database, unpacking the distribution, making a certain directory there writable, and accessing a configuration script. It has a lot of configuration options, and you can configure it to your heart's desire. I didn't look for much documentation on the configuration; I just used the code. It should work in almost any web-hosting environment that gives you MySQL and PHP.
The MediaWiki syntax is both very rich and very flexible. You can even use some HTML tags instead of the regular markup, which is useful if you cannot recall the original markup immediately. Its many features may make it overkill for some sites, but that largely depends on your target audience.
My only problem with MediaWiki is the fact that I could not find a way to
make it use a prefix for the tables it uses (for example,
mediawiki_articles). This may make
it more problematic to deploy in hosting accounts that give only one MySQL
database. I fear that deploying it along with other applications on the same
database (or deploying two such different Wikis on the same site) would be very
The MediaWiki mathematical formulae processing logic is written in O'Caml, and requires compilation and
installation using its compiler. If you need that plugin, you can cross-compile
or ask a friend to produce a binary on a machine with a similar configuration.
It also requires a TeX distribution and
ghostscript, which may make deploying
it on an under-privileged machine even harder.
Nevertheless, MediaWiki is a superb product. I highly recommended trying it.
MoinMoin is a Wiki implementation written in Python, derived from an earlier implementation called PikiPiki. MoinMoin's ease of installation is moderate: it's not as hard to install as TWiki, but is not very straightforward either, requiring users to move files around on the hard disk.
The MoinMoin syntax is rich. Several documents included in the site of the
default distribution describe it well. MoinMoin supports internationalization,
but you need to set the default page encoding to UTF-8 first. It also has
i18n-ized page names, but encodes them in a
_HH notation, which
makes them unusable in the browser's location bar.
MoinMoin has a nice collection of extensions, but not as many as TWiki. MoinMoin seems like a nice and solid Wiki. My problem with it is that it seems to fall between the chairs of the competition: it isn't as powerful and extensible as TWiki; it isn't as easy to set up as Kwiki, PmWiki, or MediaWiki; and its syntax is not as rich as MediaWiki's (lacking mathematical notation, for example). I would first consider using something else instead.
UseModWiki is a Wiki engine written in Perl. Anecdotally, Wikipedia used this first before re-implementing their current engine. Other sites also use UseModWiki.
UseModWiki is very simple to set up and upgrade. It has a rich syntax, and allows for arbitrary characters in page names. It also supports using some HTML tags instead of the WikiWiki markup. It has other nice features, including search, a list of recent changes, and page history.
For simple Wikis, UseModWiki is a very good choice. I recommend choosing between it and PmWiki based on the feature list of both Wikis.
PhpWiki is a Wiki written in PHP that uses a database (supporting popular implementations such MySQL and PostgreSQL). It is easy to set up. As opposed to MediaWiki, it can use an optional database prefix, allowing hosting more than one such Wiki using the same database.
PhpWiki supports rich and powerful text formatting rules that also support some rudimentary HTML tags. It supports most common Wiki features, such as a recent changes list and a search feature. It also supports plugins and skins. PhpWiki has good internationalization in the sense that you can label a page with any sequence of characters. It does not support attachments without any plugins installed, however.
PHP-Wiki seems like a well rounded and useful Wiki, useful for small collaboration Wikis.
Chiq-Chaq is fairly uncommon, but I review it here because I have had some experience with it. Chiq-Chaq is Hebrew slang for "quickly," giving the name a similar meaning to WikiWiki. The Chiq-Chaq installation is quite complicated but doable.
If you need good internationalization, use MediaWiki (or perhaps UseModWiki) instead. Otherwise, you are better off with another Wiki. Avoid Chiq-Chaq.
TWiki is good for team collaboration, as it is powerful and supports attachments. Its lack of localized URLs may make it unsuitable for some teams who might prefer MediaWiki. For Wikis with a lot of rich content, media, and internationalization, and that have their own dedicated databases, MediaWiki is ideal. Its good internationalization makes it necessary for many Wikis that support localized content.
PmWiki, PHP-Wiki, and UseModWiki are good for most regular Wikis; PHP-Wiki may be inappropriate because of its reliance on an SQL database. MoinMoin may be a viable alternative to TWiki or to different Wikis. I wouldn't recommend the other Wikis mentioned here.
I'd like to thank Omer Zak for reviewing a draft of this article and giving important comments. I also would like to thank my editor chromatic for his editorial assistance. I also want to thank many people on the IRC who answered questions I had regarding the various Wiki implementations.
is a software professional, who has been experimenting with programming since 1987 and with various UNIX technologies since 1996. He graduated from the Technion with a B.Sc. in Electrical Engineering, and has been heavily involved as a Linux and open source user, developer, and advocate.
His most successful project so far was Freecell Solver, but he also headed several other projects, and contributed to other projects such as Perl 5, Subversion, and the GIMP.
Return to ONLamp.com
Copyright © 2009 O'Reilly Media, Inc.