Skip to content
This repository

DuckDuckGo Community Platform


DuckDuckGo - Community Platform

New documentation in progress! Please only try if you know what you are doing.


Requires perl 5.14.2 (or higher) and:

  apt-get install cpanm build-essential libgd2-xpm-dev libssl-dev git wget libxml2-dev imagemagick perl-doc postgresql libpq-dev

(This requires PostgreSQL for the recommended setup.) The above uses apt-get for Debian-based distributions including Ubuntu. If you're using a different distribution, the command may differ.

You'll next need to make sure you install Dist::Zilla module:

  cpanm -i Dist::Zilla


After checking out, you will need to install the prerequisite modules. You must have installed Dist::Zilla. Then, you can do the following to install the base Perl requirements (run this in the source root with dist.ini file):

  dzil authordeps --missing | cpanm
  dzil listdeps --missing | grep -v abstract | cpanm

If you're doing this on a fresh Perl install, this may take a while to install.

Additionally, you must install DDGC deps from duckpan:

  duckpan DDGC::Static

To start, you must first initialize the base database. The default is to use SQLite if no Database configuration environment variables are found, but it is strongly recommended to use Postgresql. To do this, make sure you set the following 3 environment variables before proceeding further (and these variables need to be set permanently post this, so you need to put them in a .bashrc or correspdonding initialization scripts for your shell):

(Use your preferred database name / user / password values)


Note: Do ensure that the user ('ddgc' in above example) has the 'createdb' permission. To do this, login to psql as a superuser and run:


Now, run the script to initialize the base database:


Do note that the script will complain if you already have an existing database at the target location. If this happens, you would need to use use the --kill switch to reset it:

  script/ --kill

For the flags to work, you need to generate the sprites used for the flags. This process has to be repeated everytime the country flags are changed.



You can start the web server, if you are inside the repository with:

  script/ -r -d

If you want to do any of the above activities with intense debug logging you can use the following ENV variables before the command, like in this example:

  DBIC_TRACE_PROFILE=console DBIC_TRACE=1 script/ -r -d

The -r switch assures that it reloads itself, if some of the codefiles are changed. For changes on templates he will not restart. (If you work on the blog you sadly have to restart by hand if you change the data file).

The -d switch sets the web server into debugging mode. This activates a side bar with additional request informations, and also shows you much more informations on the terminal. If you don't want those, you can just deactivate it. For work on HTML/CSS or the blog it might disturb.


We prepared some accounts for testing in the default setup, those can all be accessed with random passwords (yes, you can't test wrong password yet, sorry).

The following account exist:

* testone An admin, who is native German but also speaks English.

* testtwo A normal user who speaks Spanish with public profile.

* testthree A translation_manager who speaks English, Arabic, and German.

* testfour An admin, who speaks German, Spanish, and English.

* testfive A normal user without public profile, who speaks Russian and English.

* Additionally there are also test1 to test100 all without any setup.

Something went wrong with that request. Please try again.