Skip to content
Joinup is a collaborative platform created by the European Commission that aims to help e-Government professionals share their experience with each other
TSQL PHP Gherkin HTML CSS JavaScript Other
Branch: develop
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github Issue #ISAICP-4003: fix typos. Nov 3, 2017
docs ISAICP-4974: Remove the old implementation for reporting user statist… Mar 26, 2019
drush #192: Update README with a new link (#195) Sep 24, 2016
resources Revert "ISAICP-5400: Fatal error when updating from production databa… Jul 28, 2019
scripts ISAICP-5474: Force a cache clear and container rebuild just after uni… Aug 9, 2019
src/Phing Merge remote-tracking branch 'origin/develop' into ISAICP-5129 Mar 31, 2019
tests Merge remote-tracking branch 'origin/develop' into ISAICP-5246 Aug 8, 2019
web ISAICP-5476: Install the 'published_at' field storage definition. Aug 14, 2019
.dockerignore ISAICP-4751: Provide a separate build properties file for the docker … Jan 15, 2019
.gitattributes Issue #ISAICP-2510: Webfonts are binary. Jun 9, 2016
.gitignore ISAICP-5144: Allow users to have local files. Good for config overrid… Mar 4, 2019
.travis.yml Also run tests on PHP 7.1. Jan 14, 2017
LICENSE ISAICP-4140: Update licence. Aug 12, 2019 ISAICP-4974: Remove the old implementation for reporting user statist… Mar 26, 2019
appspec.yml Passing doc root to packer Apr 28, 2016
build.continuousphp.xml ISAICP-4503: Disable checkpoints for CPHP. May 15, 2018
build.dist.xml ISAICP-4970: Disable error_level setting only when settings.local.php… Feb 12, 2019
build.docker.main.xml ISAICP-4751: Allow to override both Phing targets and properties in t… Jan 21, 2019
build.docker.overrides.xml ISAICP-4751: Allow to override both Phing targets and properties in t… Jan 21, 2019
build.migration.xml ISAICP-4174: Fix docs. Nov 29, 2017
build.project.xml Merge remote-tracking branch 'origin/develop' into ISAICP-5455 Aug 8, 2019 Merge remote-tracking branch 'origin/develop' into ISAICP-5348 Jul 18, 2019 ISAICP-4686: Make sure Webtools Geocoding results are served from cac… Nov 27, 2018 ISAICP-5091: Restore build properties for Solr cores. Feb 25, 2019
build.redis.xml ISAICP-5050: Document how to configure and enable Redis support. Jan 31, 2019
build.solr.xml ISAICP-5071: Temporarily increase memory limits so downloads don't ru… Apr 16, 2019
build.xml Issue #ISAICP-2965: Remove deletestack from build'xml - moved to infra. Mar 20, 2017
composer.json Merge remote-tracking branch 'origin/develop' into ISAICP-5246 Aug 11, 2019
composer.lock Merge remote-tracking branch 'origin/develop' into ISAICP-5246 Aug 11, 2019
docker-compose.prod_db.yml ISAICP-4751: Update the memory limit in the container. Dec 10, 2018
docker-compose.yml ISAICP-5144: Remove commented out line. Mar 7, 2019
phpcs-ruleset.xml.dist ISAICP-5445: Adhere to the DrupalPractice.General rules. Jul 27, 2019
phpunit.xml.dist ISAICP-5459: Run phpunit in verbose mode. Aug 6, 2019

Joinup website

This is the source code for

Build Status

Joinup is a collaborative platform created by the European Commission and funded by the European Union via the Interoperability Solutions for European Public Administrations (ISA) Programme.

It offers several services that aim to help e-Government professionals share their experience with each other. We also hope to support them to find, choose, re-use, develop and implement interoperability solutions.

The Joinup platform is developed as a Drupal 8 distribution, and therefore tries to follow the 'drupal-way' as much as possible.

You are free to fork this project to host your own collaborative platform. Joinup is licensed under the EUPL, which is compatible with the GPL.


See our contributors guide.

Running your own instance of Joinup

There are two ways to run Joinup. With docker and docker-compose and building a local installation.


To start with docker, please, check the separated README file.

Local installation

To run Joinup locally, below is a list of requirements and instructions.


  • A regular LAMP stack running PHP 7.1.0 or higher
  • Virtuoso 7 (Triplestore database)
  • SASS compiler
  • Apache Solr

Dependency management and builds

We use Drupal composer as a template for the project. For the most up-to-date information on how to use Composer, build the project using Phing, or on how to run the Behat test, please refer directly to the documention of drupal-composer.

Initial setup

  • Clone the repository.

    $ git clone
  • Use composer to install the dependencies.

    $ cd joinup-dev
    $ composer install
  • Install Solr. If you already have Solr installed you can configure it manually by following the installation instructions from the Search API Solr module. Or you can execute the following command to download and configure a local instance of Solr. It will be installed in the folder ./vendor/apache/solr.

    $ ./vendor/bin/phing setup-apache-solr
  • Install Virtuoso. For basic instructions, see setting up Virtuoso. Due to a bug in Virtuoso 6 it is recommended to use Virtuoso 7. During installation some RDF based taxonomies will be imported from the resources/fixtures folder. Make sure Virtuoso can read from this folder by adding it to the DirsAllowed setting in your virtuoso.ini. For example:

    DirsAllowed = /var/www/joinup/resources/fixtures, /usr/share/virtuoso-opensource-7/vad
  • Install the official SASS compiler. This depends on Ruby being installed on your system.

    $ gem install sass
  • Install Selenium. The simplest way of doing this is using Docker to install and run it with a single command. This will download all necessary files and start the browser in the background in headless mode:

    $ docker run -d -p 4444:4444 --network=host selenium/standalone-chrome
  • Point the document root of your webserver to the 'web/' directory.

Create a local build properties file

Create a new file in the root of the project named ` using your favourite text editor:

$ vim

This file will contain configuration which is unique to your development machine. This is mainly useful for specifying your database credentials and the username and password of the Drupal admin user so they can be used during the installation.

Because these settings are personal they should not be shared with the rest of the team. Make sure you never commit this file!

All options you can use can be found in the file. Just copy the lines you want to override and change their values. Do not copy the entire file, since this would override all options.


# The location of the Composer binary.
composer.bin = /usr/bin/composer

# The location of the Virtuoso console (Debian / Ubuntu).
isql.bin = /usr/bin/virtuoso-isql
# The location of the Virtuoso console (Arch Linux).
isql.bin = /usr/bin/virtuoso-isql
# The location of the Virtuoso console (Redhat / Fedora / OSX with Homebrew).
isql.bin = /usr/local/bin/isql

# SQL database settings. = my_database
drupal.db.user = root
drupal.db.password = hunter2

# SPARQL database settings.
sparql.dsn = localhost
sparql.user = my_username
sparql.password = qwerty123

# Admin user.
drupal.admin.username = admin
drupal.admin.password = admin

# The base URL to use in tests.
drupal.base_url = http://joinup.local

# Verbosity of Drush commands. Set to 'yes' for verbose output.
drush.verbose = yes

Build the project

Execute the Phing target build-dev to build a development instance, then install the site with install-dev:

$ ./vendor/bin/phing build-dev
$ ./vendor/bin/phing install-dev

Run the tests

Run the Behat test suite to validate your installation.

$ cd tests
$ ./behat

During development you can enable Behat test screen-shots by uncomment this line in tests/features/bootstrap/FeatureContext.php:

  // use \Drupal\joinup\Traits\ScreenShotTrait;

and use the pretty formatter instead of progress, in tests/behat.yml:

    pretty: ~

Also run the PHPUnit tests, from the web root.

$ cd web
$ ../vendor/bin/phpunit

Frontend development

See the readme in the theme folder.

Technical details

You can’t perform that action at this time.