Preview - not for merging. A fork of darcsden where the CouchDB backend is abstracted behind a type class


darcsden is a darcs repository hosting platform, providing a web application for browsing and managing repos, users, and issues, and a SSH server for push/pull and quick repository creation.


To install:

"cabal install darcsden" will install darcsden and darcsden-ssh executables with generic settings. In particular, the web app's base url will be "http://localhost:8900", and multi-user features will be enabled.

For more control, get the darcsden source, adjust src/DarcsDen/Settings.hs, and run "cabal install" in the top source directory. There are also several optional build flags in darcsden.cabal, mainly to assist with building on windows.

To run darcsden you also need:

  • Redis (for storing web session data)
  • CouchDB (for storing user/repo/repository data)

Both should be running on their default port, or you can change that in Settings.hs. You should configure them by running:

darcsden --install

You should have a "darcsden" user account (for running the app and owning the files), with a ssh key:

adduser --system --home /home/darcsden --shell /bin/bash --group --gecos DarcsDen darcsden
sudo -u darcsden ssh-keygen

To avoid obscure errors due to mixed file ownership in ~/.darcs/cache, always run darcsden as the darcsden user, with $HOME set properly. So if using sudo, include the -H flag, like this:

sudo -Hu darcsden COMMAND...

The directory where you start the web app should contain darcsden's public/ directory. Or you can run it behind a web server that'll serve /public/* requests from that directory.

To start:

For a quick test, run:

sudo -Hu darcsden darcsden

and visit http://localhost:8900 (or other url configured in Settings.hs) in your web browser.

This package provides separate executables for the web and SSH servers, darcsden and darcsden-ssh respectively. You could run them manually while logged in as the darcsden user via screen or dtach. Or, configure them as daemons. See darcsden.god, or these sample supervisord.conf entries:

command=sudo -Hu darcsden /path/to/darcsden --port 8900

command=sudo -Hu darcsden /path/to/darcsden-ssh 22

Here's a sample apache vhost config:

<VirtualHost *:80>
RewriteEngine on
ProxyPreserveHost On
ProxyErrorOverride On
RewriteRule ^/(.*)$1 [P]


darcsden indirectly depends on two external libraries: OpenSSL and pcre.

The -f-ssh flag can be used to disable the ssh server and remove the dependency on OpenSSL.

The -f-closing flag disables the ability for checkins to automatically close issues, removing the dependency on pcre.

OpenSSL can be installed from - download "Win32 OpenSSL v1.0.1e" or whatever similar version is current. [At the time of writing, darcs doesn't work with 64 bit Windows, but if this changes then a 64 bit version can be downloaded from the same location.]

Pick a directory to install it to, e.g. c:/OpenSSL-Win32 - and install HsOpenSSL with cabal install HsOpenSSL --extra-include-dirs="c:/OpenSSL-Win32/include" --extra-lib-dirs="c:/Win32OpenSSL"

Running as a Windows service:

darcsden depends on having CouchDB and redis running, so it also makes sense to install these as services, though it's not essential.

redis can be setup as a Windows service using

The redis service name is redis-instance.

CouchDB comes as a service already.

The CouchDB service name is something like "Apache CouchDB01cd861ad1dbd850", look for "CouchDB" in the output of "sc query" to get the exact name.

To install darcsden as a Windows service given the above names for the redis and CouchDB services, identify the path to darcsden.exe and to the darcsden source tree. Then alter the following command appropriately and run it all on one line:

sc create DarcsDen binPath= "c:.exe --root c:--service" start= auto depend= redis-instance/"Apache CouchDB01cd861ad1dbd850"

To uninstall the service, use "sc delete DarcsDen".


darcsden has a small, clean codebase and is fun to hack on. As an example, here's how to contribute a patch to's darcsden branch:

We hope to see you on #darcs, and many patches in the queue !


Alex Suraci created darcsden. Simon Michael led this release, with help from Ganesh Sittampalam, Guillaume Hoffmann, Niklas Haas, Daniel Patterson and Scott Lawrence. darcsden depends on Darcs, Snap, GHC, and the rest of the Haskell ecosystem.