About Joinup source code

This is the source code for Joinup (https://joinup.ec.europa.eu/). Joinup is a collaborative platform created by the European Commission and funded by the European Union via the Interoperability solutions for public administrations, businesses and citizens (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.

Find the latest Joinup source code release by clicking here.


See our contributors guide.

Running your own instance of Joinup


  • 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 https://github.com/ec-europa/joinup-dev.git
  • 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 `build.properties.local using your favourite text editor:

$ vim build.properties.local

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 build.properties.dist file. Just copy the lines you want to override and change their values. Do not copy the entire build.properties.dist file, since this would override all options.

Example build.properties.local:

# 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.
drupal.db.name = 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

  • In Rdf draft module there is information on handling draft in CRUD operations for rdf entities.
  • In Joinup notification module there is information on how to handle notifications in Joinup.
  • In Joinup core module there is information on how to handle and create workflows.
  • In Matomo analytics you find information about working with the web analytics platform used in Joinup.

Owner/Contact Information

European Commission / DG Informatics (DIGIT) - Interoperability solutions for public administrations, businesses and citizens (ISA²)
Supra-national authority
Contact information


Solution type
Interoperable European Solution

Solution external reference information


Only solution facilitators can create new content