Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

OLDP: Open Legal Data Platform

Build Status Coverage Status Documentation Status PyPI version

OLDP is a web application, written in Python 3.5 and based on the Django web framework, It is used for processing legal text and providing a REST-API and Elasticsearch-based search engine. OLDP is being develop by the non-profit initiative Open Legal Data with the goal of building an Open Data platform for legal documents (mainly court decisions and laws). The platform makes legal information freely accessible for the general public and especially third-party apps.

Our documentation is available here.


Live demo

A live demo is available here (in German).


  • Cases: Court decisions with meta data and content in HTML.
  • Laws: Full-text laws and regulations and their corresponding case-law.
  • Courts: Browse courts organized by states, jurisdiction and level of appeal from your country.
  • Search: A document search engine based on Elasticsearch/Haystack supporting most common search syntax and faceting.
  • API: Adding, updating, retrieving and deleting data through CRUD REST API based on DRF including auto-generated API clients from Swagger.
  • Themes: Easily adjust the look and feel depending on your countries needs (see German theme).

Installation guide

Before you can use OLDP, you’ll need to get it installed. For a more detailed guide on how to get started with OLDP have a look at: Getting started


To skip the whole installation procedure you can simply run OLDP as Docker container. Just git clone the repository first and then start everything with a docker-compose up from within the repository directory. A small tutorial on how to use OLDP with Docker can be found here.


Before anything else you will need to install the application dependencies.

  • Python 3.5 with pip (virtualenv or conda recommended)
  • Node JS 8.12.x with npm for building JS dependencies
  • Database (MySQL, SQLite, ...): All database engines that support Django's DB API should work. MySQL is recommended.
  • Elasticsearch 5.4.x: Our search engine backend. Other systems supported by haystack should also work.
  • Redis 4.x: Caching engine (optional)
  • gcc Required to compile some Python libs
  • python-mysqldb, libmysqlclient-dev if you choose MySQL as database
  • gettext for Django locales with msguniq
  • pandoc convert docbook to HTML (import GG)
  • GDAL: Geospatial libraries used by the haystack search module (see here).
# Create virtualenv
virtualenv -p python3 env
source env/bin/activate

# Clone repository to current directory
git clone .

# Install dependencies
apt-get install -y $(cat apt_requirements.txt)
pip install -r requirements.txt
npm install

The first time you run OLDP, you will need to initialize the database with its default blank values. If you want to run OLDP in production mode, you also need to prepare static files and localization.

# Prepare assets (JS, CSS, images, fonts, ...)
npm run-script build

# Prepare database
./ migrate

# Localization (German and English, needed for production)
./ compilemessages --l de --l en

# Prepare static files (needed for production)
./ collectstatic --no-input


Run the following command to start the web app at http://localhost:8000/.

./ runserver 8000


The manage the app settings we rely on django-configurations. Pre-configured settings can be used by setting the DJANGO_CONFIGURATION environment variable to either Prod, Dev or Test. You can as well override specific settings from oldp/ with environment variables:

Variable name Default value Comment
DJANGO_SETTINGS_MODULE oldp.settings Tell Django which settings file you want to use (in Python path syntax).
DJANGO_CONFIGURATION Prod Choice a predefined class of settings: Dev, Prod or Test
DATABASE_URL mysql://oldp:oldp@ Path to database (usually mysql or sqlite)
DJANGO_SECRET_KEY None Set this to a secret value in production mode
DJANGO_ELASTICSEARCH_URL http://localhost:9200/ Elasticsearch settings (scheme, host, port)
DJANGO_ELASTICSEARCH_INDEX oldp Elasticsearch index name
DJANGO_DEBUG True Enable to show debugging messages and errors
DJANGO_ADMINS Admin, Format: Foo,;Bar,
DJANGO_LANGUAGES_DOMAINS Format: {'':'de','':'fr'}
DJANGO_DEFAULT_FROM_EMAIL Emails are sent from this address
DJANGO_EMAIL_HOST localhost SMTP server
DJANGO_FEEDBACK_EMAIL Messages from feedback widget are sent to this address.
DJANGO_TEST_WITH_ES False Run tests that require Elasticsearch
DJANGO_TEST_WITH_WEB False Run tests that require web access
DJANGO_LOG_FILE oldp.log Name of log file (in logs directory)
DJANGO_CACHE_DISABLE False Set to True to disable cache (Redis)


Please use our GitHub issues to report bugs, request feature or simply leave some feedback.


To contact Open Legal Data Platform, see here:


Please cite the following research paper, if you use our code or data:

author = {Ostendorff, Malte and Blume, Till and Ostendorff, Saskia},
title = {Towards an Open Platform for Legal Information},
year = {2020},
isbn = {9781450375856},
publisher = {Association for Computing Machinery},
address = {New York, NY, USA},
url = {},
doi = {10.1145/3383583.3398616},
booktitle = {Proceedings of the ACM/IEEE Joint Conference on Digital Libraries in 2020},
pages = {385–388},
numpages = {4},
keywords = {open data, open source, legal information system, legal data},
location = {Virtual Event, China},
series = {JCDL '20}


OLDP is licensed under the MIT License.