Apache CouchDB CONTRIBUTORS
===========================

A number of people have made contributions to the Apache CouchDB community,
project, documentation, or code. Some of these people are listed here.

 * William Beh <willbeh@gmail.com>
 * Dirk Schalge <dirk@epd-me.net>
 * Roger Leigh <rleigh@debian.org>
 * Sam Ruby <rubys@intertwingly.net>
 * Carlos Valiente <superdupont@gmail.com>
 * Till Klampaeckel <till@klampaeckel.de>
 * Jim Lindley <web@jimlindley.com>
 * Yoan Blanc <yoan.blanc@gmail.com>
 * Michael Gottesman <gottesmm@reed.edu>
 * Mark Baran <mebaran@gmail.com>
 * Michael Hendricks <michael@ndrix.org>
 * Antony Blakey <antony.blakey@gmail.com>
 * Paul Carey <paul.p.carey@gmail.com>
 * Hunter Morris <huntermorris@gmail.com>
 * Brian Palmer <jira@brian.codekitchen.net>
 * Maximillian Dornseif <md@hudora.de>
 * Eric Casteleijn <eric.casteleijn@canonical.com>
 * Maarten Thibaut <mthibaut@cisco.com>
 * Florian Ebeling <florian.ebeling@gmail.com>
 * Volker Mische <volker.mische@gmail.com>
 * Brian Candler <B.Candler@pobox.com>
 * Brad Anderson <brad@sankatygroup.com>
 * Nick Gerakines <nick@gerakines.net>
 * Kevin Ilchmann Jørgensen <kijmail@gmail.com>
 * Sebastian Cohnen <sebastian.cohnen@gmx.net>
 * Sven Helmberger <sven.helmberger@gmx.de>
 * Dan Walters <dan@danwalters.net>
 * Curt Arnold <carnold@apache.org>
 * Gustavo Niemeyer
 * Joshua Bronson <jabronson@gmail.com>
 * Kostis Sagonas <kostis@cs.ntua.gr>
 * Matthew Hooker <mwhooker@gmail.com>
 * Ilia Cheishvili <ilia.cheishvili@gmail.com>
 * Lena Herrmann <lena@zeromail.org>
 * Jack Moffit <metajack@gmail.com>
 * Damjan Georgievski <gdamjan@gmail.com>
 * Jan Kassens <jan@kassens.net>
 * James Marca <jmarca@translab.its.uci.edu>
 * Matt Goodall <matt.goodall@gmail.com>
 * Joel Clark <unsigned_char@yahoo.com>
 * Matt Lyon <matt@flowerpowered.com>
 * mikeal <mikeal.rogers@gmail.com>
 * Joscha Feth <joscha@feth.com>
 * Jarrod Roberson <jarrod@vertigrated.com>
 * Jae Kwon <jkwon.work@gmail.com>
 * Gavin Sherry <swm@alcove.com.au>
 * Timothy Smith <tim@couch.io>
 * Martin Haaß <MartinHaass@gmx.net>
 * Hans Ulrich Niedermann <hun@n-dimensional.de>
 * Dmitry Unkovsky <oil.crayons@gmail.com>
 * Zachary Zolton <zachary.zolton@gmail.com>
 * Brian Jenkins <bonkydog@bonkydog.com>
 * Paul Bonser <pib@paulbonser.com>
 * Caleb Land <caleb.land@gmail.com>
 * Juhani Ränkimies <juhani@juranki.com>
 * Kev Jackson <foamdino@gmail.com>
 * Jonathan D. Knezek <jdknezek@gmail.com>
 * David Rose <doppler@gmail.com>
 * Lim Yue Chuan <shasderias@gmail.com>
 * David Davis <xantus@xantus.org>
 * Juuso Väänänen <juuso@vaananen.org>
 * Jeff Zellner <jeff.zellner@gmail.com>
 * Gabriel Farrell <gsf747@gmail.com>
 * Mike Leddy <mike@loop.com.br>
 * Wayne Conrad <wayne@databill.com>
 * Thomas Vander Stichele <thomas@apestaart.org>
 * Felix Hummel <apache@felixhummel.de>
 * Tim Smith <tim@couchbase.com>
 * Dipesh Patel <dipthegeezer.opensource@googlemail.com>
 * Sam Bisbee <sam@sbisbee.com>
 * Nathan Vander Wilt <natevw@yahoo.com>
 * Caolan McMahon <caolan.mcmahon@googlemail.com>
 * Andrey Somov <trophybase@gmail.com>
 * Chris Coulson <chrisccoulson.googlemail.com>
 * Trond Norbye <trond.norbye@gmail.com>
 * Christopher Bonhage <queezey@me.com>
 * Christian Carter <cdcarter@gmail.com>
 * Lukasz Mielicki <mielicki@gmail.com>
 * Omar Yasin <omarkj@gmail.com
 * Matt Cooley <matt@mattcooley.net>
 * Simon Leblanc <sim.leblanc+apache@gmail.com>
 * Rogutės Sparnuotos <rogutes@googlemail.com>
 * Gavin McDonald <gmcdonald@apache.org>
 * Fedor Indutny <fedor@indutny.com>
 * Tim Blair
 * Tady Walsh <hello@tady.me>
 * Sam Rijs <recv@awesam.de>
 * Benjamin Anderson <b@banjiewen.net>
# Authors from commit 6c976bd and onwards are auto-inserted. If you are merging
# a commit from a non-committer, you should not add an entry to this file. When
# `bootstrap` is run, the actual CONTRIBUTORS file will be generated.
