PHPackages                             openeuropa/oe\_whitelabel - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. openeuropa/oe\_whitelabel

ActiveDrupal-theme

openeuropa/oe\_whitelabel
=========================

OpenEuropa Whitelabel theme.

1.31.0(1mo ago)229.3k↓45.5%4[13 PRs](https://github.com/openeuropa/oe_whitelabel/pulls)EUPL-1.2PHPPHP &gt;=8.1

Since Sep 17Pushed 2mo ago17 watchersCompare

[ Source](https://github.com/openeuropa/oe_whitelabel)[ Packagist](https://packagist.org/packages/openeuropa/oe_whitelabel)[ RSS](/packages/openeuropa-oe-whitelabel/feed)WikiDiscussions 1.x Synced 1mo ago

READMEChangelog (10)Dependencies (76)Versions (320)Used By (0)

The OpenEuropa Whitelabel theme
===============================

[](#the-openeuropa-whitelabel-theme)

Sub-theme of [OpenEuropa Bootstrap base theme](https://github.com/openeuropa/bootstrap-component-library), with theming for OpenEuropa library features.

Features
--------

[](#features)

### Paragraphs

[](#paragraphs)

The paragraphs below are not yet themed therefore not recommended for usage:

- Contextual navigation
- Document

Some paragraphs are considered "internal", and only meant to be used inside other paragraphs:

- Listing item: To be used as item paragraph within 'Listing item block'.
- Fact: To be used as item paragraph within 'Facts and figures'.

Usage as a dependency
---------------------

[](#usage-as-a-dependency)

Website projects can use `oe_whitelabel` either as an active theme, or they can create a custom theme using `oe_whitelabel` as a base theme.

### Requirements

[](#requirements)

The package is meant for Drupal projects that manage their dependencies with [Composer](https://www.drupal.org/docs/develop/using-composer/using-composer-to-manage-drupal-site-dependencies#managing-contributed).

Ideally this project should be managed with [Docker](https://www.docker.com/get-docker) and [Docker Compose](https://docs.docker.com/compose/), but this is not a hard requirement.

Check the [composer.json](composer.json) for required PHP version and other dependencies.

### Add the composer package

[](#add-the-composer-package)

Add this manually in composer.json, or combine with existing entries:

```
    "extra": {
        "artifacts": {
            "openeuropa/oe_bootstrap_theme": {
                "dist": {
                    "url": "https://github.com/{name}/releases/download/{pretty-version}/{project-name}-{pretty-version}.zip",
                    "type": "zip"
                }
            },
            "openeuropa/oe_whitelabel": {
                "dist": {
                    "url": "https://github.com/{name}/releases/download/{pretty-version}/{project-name}-{pretty-version}.zip",
                    "type": "zip"
                }
            }
        }
    }

```

While this package is still in its `alpha` phase, you need an extra step in composer, to avoid getting anything from the obsolete and unsupported `0.x` branch.

One option is to set `minimum-stability` and require the `^1.0` version. You should also set `prefer-stable` to mitigate the impact on other dependencies. Review this again when the site goes into production.

```
composer config minimum-stability alpha
composer config prefer-stable true
composer require openeuropa/oe_whitelabel:^1.0
```

Alternatively, if you don't want to set `minimum-stability`, you need to specify explicit versions for all dependencies with alpha versions:

```
composer require openeuropa/oe_whitelabel:^1.0@alpha openeuropa/oe_bootstrap_theme:^1.0@alpha
```

Review the installed package versions.

```
composer show -i | grep oe_
```

### Enable and configure

[](#enable-and-configure)

Enable required and optional submodules:

```
# Always required.
./vendor/bin/drush en oe_whitelabel_helper

# Required, if you use oe_paragraphs module, or if you copied any paragraph
# types from that module.
./vendor/bin/drush en oe_whitelabel_paragraphs

# Other submodules are optional - check the /modules/ folder.
./vendor/bin/drush en
```

Enable the theme and set as default:

```
./vendor/bin/drush config-set system.theme default oe_whitelabel
```

### Media copyright text

[](#media-copyright-text)

The theme ships recipes and view modes that add a reusable copyright field to media types (images and AV Portal photos).

Apply the recipes (they are not auto-applied):

```
# Run in your Drupal root where the theme is installed.
./vendor/bin/drush recipe "/var/www/html/build/themes/contrib/oe_whitelabel/recipes/media_image_copyright"
./vendor/bin/drush recipe "/var/www/html/build/themes/contrib/oe_whitelabel/recipes/media_av_portal_photo_copyright"
```

In this repository's default `runner.yml.dist` setup, these recipes are applied automatically during site provisioning.

Then:

1. Fill `field_media_copyright` on your media items (or set a default/backfill).

Once the field has values, the copyright text appears automatically in banner, carousel, gallery, and featured media patterns.

For the `Listing item` paragraph, image copyright is configured with the dedicated `field_oe_image_copyright` field on the paragraph, not from media.

Development setup
-----------------

[](#development-setup)

### Using LAMP stack or similar

[](#using-lamp-stack-or-similar)

This is not officially supported. You are on your own.

### Using Docker Compose

[](#using-docker-compose)

Alternatively, you can build a development site using [Docker](https://www.docker.com/get-docker) and [Docker Compose](https://docs.docker.com/compose/) with the provided configuration.

Docker provides the necessary services and tools such as a web server and a database server to get the site running, regardless of your local host configuration.

#### Requirements

[](#requirements-1)

- [Docker](https://www.docker.com/get-docker)
- [Docker Compose](https://docs.docker.com/compose/)

#### Configuration

[](#configuration)

By default, Docker Compose reads two files, a `docker-compose.yml` and an optional `docker-compose.override.yml` file. By convention, the `docker-compose.yml` contains your base configuration and it's provided by default. The override file, as its name implies, can contain configuration overrides for existing services or entirely new services. If a service is defined in both files, Docker Compose merges the configurations.

Find more information on Docker Compose extension mechanism on [the official Docker Compose documentation](https://docs.docker.com/compose/extends/).

#### Start the container

[](#start-the-container)

If you have other (daemonized) containers running, you might want to stop them first:

```
docker stop $(docker ps -q)
```

To start, run:

```
docker-compose up
```

It's advised to not daemonize `docker-compose` so you can turn it off (`CTRL+C`) quickly when you're done working. However, if you'd like to daemonize it, you have to add the flag `-d`:

```
docker-compose up -d
```

#### Optionally purge existing installation

[](#optionally-purge-existing-installation)

If you already had the package installed, and want a clean start:

```
docker-compose exec web rm composer.lock
docker-compose exec web rm -rf vendor/
docker-compose exec web rm -rf build/
```

#### Install the package

[](#install-the-package)

```
# This will trigger npm commands to build assets.
docker-compose exec web composer install
docker-compose exec web ./vendor/bin/run drupal:site-install
```

Using default configuration, the development site files should be available in the `build` directory and the development site should be available at:  or .

#### Run code review

[](#run-code-review)

To run the grumphp checks:

```
docker-compose exec web ./vendor/bin/grumphp run
```

or

```
docker-compose exec web ./vendor/bin/run toolkit:code-review
```

#### Run phpunit tests

[](#run-phpunit-tests)

To run all phpunit tests:

```
docker-compose exec web ./vendor/bin/phpunit
```

or, using the toolkit command as in the pipeline:

```
docker-compose exec web ./vendor/bin/run toolkit:test-phpunit --junit
```

To run a specific test class:

```
docker-compose exec web ./vendor/bin/phpunit --testdox modules/oe_whitelabel_paragraphs/tests/src/Functional/ParagraphsTest.php
```

To run a single test method, use `--filter`:

```
docker-compose exec web ./vendor/bin/phpunit --testdox modules/oe_whitelabel_paragraphs/tests/src/Functional/ParagraphsTest.php --filter=testAccordionParagraph
```

Rebuild assets during development
---------------------------------

[](#rebuild-assets-during-development)

To rebuild assets with npm during development, without having to run `composer install` or `composer update`:

```
docker-compose exec web npm install
docker-compose exec web npm run build
# or, for continuous updates:
docker-compose exec web npm run watch
```

Upgrade from older versions
---------------------------

[](#upgrade-from-older-versions)

### Upgrade to 1.0.0-alpha7

[](#upgrade-to-100-alpha7)

#### Paragraphs migration

[](#paragraphs-migration)

Paragraphs-related theming and functionality has been moved from the [OpenEuropa Bootstrap base theme](https://github.com/openeuropa/oe_bootstrap_theme) to [OpenEuropa Whitelabel](https://github.com/openeuropa/oe_whitelabel).

Special paragraphs fields that were introduced in `oe_bootstrap_theme_paragraphs` are being renamed in `oe_whitelabel_paragraphs`.

If you have the `oe_paragraphs` module enabled, you should create a `hook_post_update_NAME()` in your code, to enable the `oe_whitelabel_paragraphs` module during deployment.

```
function EXAMPLE_post_update_00001(): void {
  \Drupal::service('module_installer')->install(['oe_whitelabel_paragraphs']);
}
```

This is needed to make sure that the install hook for `oe_whitelabel_paragraphs` runs *before* config-import during a deployment.

Note that `drush updb` will also trigger update hooks in `oe_bootstrap_theme_helper`, which will uninstall the legacy module `oe_bootstrap_theme_paragraphs`.

### Upgrade to 1.0.0-alpha6

[](#upgrade-to-100-alpha6)

This release contains some bugs, please move directly to alpha7.

###  Health Score

59

—

FairBetter than 99% of packages

Maintenance88

Actively maintained with recent releases

Popularity32

Limited adoption so far

Community25

Small or concentrated contributor base

Maturity79

Established project with proven stability

 Bus Factor3

3 contributors hold 50%+ of commits

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~7 days

Total

207

Last Release

53d ago

Major Versions

0.1.202512101800 → 1.28.02025-12-11

0.4455.202601192242 → 1.29.02026-01-21

0.3347.202602120030 → 1.29.12026-02-18

0.4335.202602202025 → 1.30.02026-02-25

0.1.202603160955 → 1.31.02026-03-25

PHP version history (4 changes)0.241020211240PHP &gt;=7.3

0.1.202202221138PHP &gt;=7.4

1.2.0PHP &gt;=8.0

1.4.0PHP &gt;=8.1

### Community

Maintainers

![](https://www.gravatar.com/avatar/d3b1f4079f9a82f6dd88fe6577d1256b4ecbbccbcd4a4ec9bea7c2fd6f72b99a?d=identicon)[DIGIT-CORE](/maintainers/DIGIT-CORE)

---

Top Contributors

[![drishu](https://avatars.githubusercontent.com/u/11507647?v=4)](https://github.com/drishu "drishu (570 commits)")[![escuriola](https://avatars.githubusercontent.com/u/6751237?v=4)](https://github.com/escuriola "escuriola (402 commits)")[![donquixote](https://avatars.githubusercontent.com/u/150032?v=4)](https://github.com/donquixote "donquixote (262 commits)")[![brummbar](https://avatars.githubusercontent.com/u/8488617?v=4)](https://github.com/brummbar "brummbar (237 commits)")[![tibi2303](https://avatars.githubusercontent.com/u/36895476?v=4)](https://github.com/tibi2303 "tibi2303 (230 commits)")[![Maxfire](https://avatars.githubusercontent.com/u/6443180?v=4)](https://github.com/Maxfire "Maxfire (126 commits)")[![abel-santos-corral](https://avatars.githubusercontent.com/u/34939110?v=4)](https://github.com/abel-santos-corral "abel-santos-corral (109 commits)")[![kp77](https://avatars.githubusercontent.com/u/648045?v=4)](https://github.com/kp77 "kp77 (74 commits)")[![GilNovacomm](https://avatars.githubusercontent.com/u/57403283?v=4)](https://github.com/GilNovacomm "GilNovacomm (57 commits)")[![AaronGilMartinez](https://avatars.githubusercontent.com/u/7264392?v=4)](https://github.com/AaronGilMartinez "AaronGilMartinez (56 commits)")[![piotrsmykaj](https://avatars.githubusercontent.com/u/10449853?v=4)](https://github.com/piotrsmykaj "piotrsmykaj (35 commits)")[![julien-](https://avatars.githubusercontent.com/u/7086610?v=4)](https://github.com/julien- "julien- (14 commits)")[![enriquelacoma](https://avatars.githubusercontent.com/u/5982573?v=4)](https://github.com/enriquelacoma "enriquelacoma (9 commits)")[![vengador](https://avatars.githubusercontent.com/u/433632?v=4)](https://github.com/vengador "vengador (8 commits)")[![peterserfozo](https://avatars.githubusercontent.com/u/22172388?v=4)](https://github.com/peterserfozo "peterserfozo (5 commits)")[![10atm-blue](https://avatars.githubusercontent.com/u/18004849?v=4)](https://github.com/10atm-blue "10atm-blue (3 commits)")[![libetho](https://avatars.githubusercontent.com/u/19326563?v=4)](https://github.com/libetho "libetho (1 commits)")[![jonhy81](https://avatars.githubusercontent.com/u/8508448?v=4)](https://github.com/jonhy81 "jonhy81 (1 commits)")[![hernani](https://avatars.githubusercontent.com/u/707860?v=4)](https://github.com/hernani "hernani (1 commits)")[![v1nc3nz00](https://avatars.githubusercontent.com/u/13203140?v=4)](https://github.com/v1nc3nz00 "v1nc3nz00 (1 commits)")

### Embed Badge

![Health badge](/badges/openeuropa-oe-whitelabel/health.svg)

```
[![Health](https://phpackages.com/badges/openeuropa-oe-whitelabel/health.svg)](https://phpackages.com/packages/openeuropa-oe-whitelabel)
```

###  Alternatives

[farmos/farmos

A web-based farm record keeping application.

1.2k6.7k1](/packages/farmos-farmos)[openeuropa/oe_theme

OpenEuropa base theme.

37163.4k5](/packages/openeuropa-oe-theme)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
