A collaborative project founded in the Indie Web Camp.
JavaScript CoffeeScript Ruby Other Perl
Switch branches/tags
Nothing to show
Clone or download
Pull request Compare This branch is 1 commit ahead, 343 commits behind WardCunningham:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


Smallest Federated Wiki Goals

The original wiki was written in a week and cloned within a week after that. The concept was shown to be fruitful while leaving other implementors room to innovate. When we ask for simple, we are looking for the same kind of simplicity: nothing to distract from our innovation in federation.

We imagine two components:

  1. a server component managing page storage and collaboration between peer servers, and,
  2. a client component presenting and modifying the server state in server specific ways.

This project should be judged by the degree that it can:

  • Demonstrate that wiki would have been better had it been effectively federated from the beginning.
  • Explore federation policies necessary to sustain an open creative community.

This project has been founded within the community assembled in Portland at the Indie Web Camp:

How to Participate

First you will want to get caught up with some project history. We've been recording screencast videos for as long as we've had something to demo. You should watch them all. They're short:

Then you may want to read through the end-user how-to documentation which is itself written in a federated wiki:

Once you know where we are and how we got there, you could peruse the project roadmap. This and a number of other forward looking pages are kept in the project's GitHub wiki:

When you start reading code you'll want to start with the "reference" server implementation. This is coded in Ruby as a Sinatra application. There are other server implementations but the Ruby code is as close as we have to a specification as to what it means to be a federated wiki server:

The next code reading stop is the client side javascript which is coded in the punctuation friendly dialect CoffeeScript:

Code contributions are always welcome. We're developing using the fork and pull request model supported so well by GitHub. Please read through their excellent help to make sure you know what's expected of you:

You are welcome to join our developer IRC channel, #fedwiki on freenode. We also meet for a google video chat every Wednesday morning at 10am Pacific time.

If you'd like to know what we think of your programming idea before you program it, just write up an Issue here on GitHub. You'll save us all some time if you read through open issues first:

For that matter, there is lots of coding and project philosophy in the comment history of closed issues. Read through the issues with lots of comments. GitHub has good issue search and will sort closed issues by number of comments to make this easy:

We're proud to be forked frequently. Go ahead and fork this project now. We're glad to have you.

Install and Launch

The project is distributed as a GitHub repository. You will need a git client. Learn more from GitHub:

When you have git. Use it to clone the repository:

git clone git://github.com/WardCunningham/Smallest-Federated-Wiki.git
cd Smallest-Federated-Wiki

We have several server implementations that share the same client code. Our reference implementation is in Sinatra. We're using Ruby 1.9.2 which we manage with rvm.

To install rvm:

curl -L https://get.rvm.io | bash -s stable --ruby

Then install Ruby, from one of the following versions:

Mac-Specific note: On the latest OS X versions, you first need the gcc compiler. 
One way is to install XCode from Apple Store. (Free)
The Command Line Tools must be installed. See the Downloads section of Xcode's preferences.

rvm install 1.9.2
rvm use 1.9.2

Mac-Specific note: If you see an error message such as the following on latest versions of OS X,
	"The provided compiler '/usr/bin/gcc' is LLVM based, it is not yet
	fully supported by ruby and gems, please read `rvm requirements`."
		rvm install 1.9.2 --with-gcc=clang
		rvm use 1.9.2

The software has been known to run trouble-free under version 1.8.5 so long as appropriate gem versions are installed. The latest releases of OSX work better with 1.9.3.

For latest versions of OS X:

rvm install 1.9.3 --with-gcc=clang
rvm use 1.9.3

The server is a ruby bundle. Get the bundler gem and then use it to get everything else:

gem install bundler
bundle install

Launch the server with this bundle command:

cd server/sinatra
bundle exec rackup -s puma -p 1111

Now go to your browser and browse your new wiki:


Running specs

The acceptance test suite is written using RSpec 2 and utilizes Selenium heavily. You must have a recent version of Firefox installed to run the test suite.

The spec files are kept in the /spec folder.

To run an individual spec, run

bundle exec rspec spec/[spec name].rb

Where the [spec name].rb can be


To run all specs, run

bundle exec rake spec

Running coffeescript tests

Client-side unit and integration tests are written using mocha. The test runner is an HTML page (runtests.html) which is self-served by the wiki server itself.

If your server is running at http:///localhost:9292 then you can run your tests by invoking http://localhost:9292/runtests.html.

Note: The test runner page must be accessed via a server. loading the page in a browser directly from your filesystem will not work correctly.

Looking For Code Bloat

Try this command to see if any code files have grown unpleasantly large.

wc -l `find * | perl -ne 'next if /jquery/; print if /\.(rb|haml|sass|coffee)$/'` | sort -rgb


You may use the Smallest Federated Wiki under either the MIT License or the GNU General Public License (GPL) Version 2.

Debian Squeeze quick hints

for those not using Ruby much, but using Debian:

sudo apt-get install ruby1.9.1 rubygems ruby1.9.1-examples debian-keyring ri1.9.1 ruby1.9.1-dev rubygems-doc
sudo gem install bundle
sudo /var/lib/gems/1.8/bin/bundle install
rvm 1.9.2
/var/lib/gems/1.8/bin/bundle exec rackup -s puma -p 1111