Skip to main content

Contributed modules

Vortex ships the contributed modules most Drupal projects need, pre-configured and wired into the environment-aware settings and the provisioning scripts. This page lists every shipped module in alphabetical order: what it does, why it ships, and how it is configured.

➡️ See Overview for the mechanisms that require, configure and install these modules.

ClamAV

ClamAV scans uploaded files for malware with the ClamAV engine before they are saved. Ships only when the ClamAV service is selected.

Configuration

settings.clamav.php selects daemon or executable mode and points the daemon at the ClamAV service, but only when DRUPAL_CLAMAV_ENABLED is set.

VariablePurpose
DRUPAL_CLAMAV_ENABLEDApplies the override only when set
DRUPAL_CLAMAV_MODESelects daemon or executable mode
CLAMAV_HOST, CLAMAV_PORTDaemon host and port

Coffee

Coffee adds a keyboard shortcut to jump straight to any administration page by typing its name.

Configuration

No settings override.

Config Split

Configuration Split splits configuration into sets that are conditionally imported, enabling environment-specific configuration such as development-only modules.

Configuration

settings.config_split.php enables the split matching the detected environment - local, ci, dev or stage - so each environment imports only its own set.

Config Update

Configuration Update Manager provides tools and Drush commands to report, revert and import configuration changes relative to the defaults shipped by modules.

Configuration

No settings override.

Devel

Devel is a suite of development tools for inspecting variables, entities and the service container while debugging.

Configuration

settings.devel.php excludes it from the exported configuration.

Drupal Helpers

Drupal helpers is a collection of helper functions that simplify writing update hooks and deployment operations.

  • Installed: As a dependency of the ys_demo demo module, declared in ys_demo.info.yml.

Configuration

No settings override.

➡️ See Drupal helpers for the helper facades.

Environment Indicator

Environment Indicator shows a colored banner identifying the current environment to prevent accidental changes on the wrong site.

Configuration

settings.environment_indicator.php names the indicator after the detected environment and colors it per environment - red for production, yellow for stage, green for dev - with the toolbar integration and favicon marker turned on.

Generated Content

Generated content generates deterministic placeholder content from declarative definitions for development and testing.

Configuration

settings.generated_content.php excludes it from the exported configuration.

➡️ See Generated content for the plugin system and the demo plugin.

Migrate Plus

Migrate Plus extends the core Migrate API with extra source and process plugins and configuration-entity migrations. The demo migration module uses it against the second database.

Configuration

No settings override.

Ships only when the migration feature is selected - the installer removes the requirement otherwise.

➡️ See Migrations for the second database and the demo migration.

Migrate Tools

Migrate Tools provides Drush commands and a UI to run, roll back and monitor migrations. scripts/provision-20-migration.sh drives it during provisioning.

Configuration

No settings override.

Ships only when the migration feature is selected - the installer removes the requirement otherwise.

➡️ See Migrations for the second database and the demo migration.

Navigation Extra Tools adds administration shortcuts - clear caches, run cron, run database updates - to the core Navigation module.

Configuration

No settings override.

Pathauto

Pathauto automatically generates URL aliases for content based on configurable patterns.

Configuration

No settings override.

Redirect

Redirect manages URL redirects and creates them automatically when content URLs change.

Configuration

No settings override.

Redis

Redis integrates Drupal with the Redis in-memory store for cache and lock backends. Ships only when the Redis service is selected.

Configuration

settings.redis.php makes Redis the default cache backend, registers the module container YAML files and swaps the bootstrap container over - all gated on DRUPAL_REDIS_ENABLED and on the redis PHP extension being loaded, so a two-stage deployment can provision the service before switching the cache.

VariablePurpose
DRUPAL_REDIS_ENABLEDApplies the override only when set
REDIS_HOST, REDIS_SERVICE_PORTConnection host and port

Reroute Email

Reroute Email intercepts outgoing emails and redirects them to a configurable address instead of the intended recipients. This prevents accidental email delivery to real users in non-production environments while still allowing email functionality to be tested.

Configuration

settings.reroute_email.php enables rerouting in every environment except local, ci, stage and prod.

Environment behavior:

EnvironmentRerouting enabledReason
LocalNoEmails are typically not sent in local development
CINoAutomated tests do not send real emails
DevYesPrevents accidental delivery to real users
StageNoStage may require real email delivery for UAT
ProdNoProduction emails must reach actual recipients

Rerouting is also enabled in any custom environments (e.g., PR environments) that do not match the standard environment types listed above.

Environment variables:

VariableDefaultPurpose
DRUPAL_REROUTE_EMAIL_ADDRESSwebmaster@your-site-domain.exampleAddress to receive all rerouted emails
DRUPAL_REROUTE_EMAIL_ALLOWED*@your-site-domain.examplePattern for addresses allowed to bypass rerouting

Overriding default behavior:

Set DRUPAL_REROUTE_EMAIL_DISABLED to any non-empty value to completely disable email rerouting in an environment where it would otherwise be enabled.

Example of the Reroute Email module settings.reroute_email.php file
<?php

/**
* @file
* Reroute email settings.
*/

declare(strict_types=1);

$config['reroute_email.settings']['address'] = getenv('DRUPAL_REROUTE_EMAIL_ADDRESS') ?: 'webmaster@your-site-domain.example';
$config['reroute_email.settings']['allowed'] = getenv('DRUPAL_REROUTE_EMAIL_ALLOWED') ?: '*@your-site-domain.example';

// Enable rerouting in all environments except local, ci, stage and prod.
// This covers dev and any custom environments (e.g., PR environments).
if (!in_array($settings['environment'], [ENVIRONMENT_LOCAL, ENVIRONMENT_CI, ENVIRONMENT_STAGE, ENVIRONMENT_PROD], TRUE)) {
$config['reroute_email.settings']['enable'] = TRUE;
}
else {
$config['reroute_email.settings']['enable'] = FALSE;
}

// Allow disabling reroute email completely in an environment.
if (!empty(getenv('DRUPAL_REROUTE_EMAIL_DISABLED'))) {
$config['reroute_email.settings']['enable'] = FALSE;
}

RobotsTxt

RobotsTxt manages the robots.txt file from the admin UI, useful when it cannot be placed on disk (for example, in multisite setups).

Configuration

settings.robotstxt.php serves a Disallow: / file outside production, so non-production environments are not indexed.

SDC Devel

SDC Devel provides development and validation tooling for Single Directory Components (SDC), reporting issues in component definitions and templates.

Configuration

No settings override.

Search API

Search API provides a framework for building search experiences with pluggable indexing backends.

Configuration

No settings override.

Search API Solr

Search API Solr is a Search API backend that integrates Apache Solr for fast, scalable search. Ships only when the Solr service is selected.

Configuration

No settings override.

Security Kit

Security Kit adds configurable security-hardening HTTP headers, including Content Security Policy and anti-framing protection.

  • Installed: Required only - not installed during provisioning; enable it when the project needs it.

Configuration

settings.seckit.php disables the Content Security Policy and the upgrade-insecure-requests header locally and in CI, where the site is not served over HTTPS.

Shield

Shield restricts access to your site by requiring HTTP authentication credentials.

Configuration

settings.shield.php forces Shield on in non-production environments other than local and ci, where it is forced off. Production is left untouched, so Shield stays under UI control there.

Environment behavior:

EnvironmentShield enabledReason
LocalNoNo need for HTTP auth during local development
CINoAutomated tests must access the site freely
DevYesProtects development environments from crawlers
StageYesProtects staging environments from public access
ProdNot enforcedLeft to the site configuration - enable or disable through the UI

Environment variables:

VariableDefaultPurpose
DRUPAL_SHIELD_USERHTTP authentication username
DRUPAL_SHIELD_PASSHTTP authentication password
DRUPAL_SHIELD_PRINTMessage shown in the authentication popup (module default when unset)
DRUPAL_SHIELD_ALLOW_ACME_CHALLENGESet to any non-empty value to keep the /.well-known/acme-challenge/* path open for Let's Encrypt certificate generation

Overriding default behavior:

Set DRUPAL_SHIELD_DISABLED to any non-empty value to completely disable Shield in an environment where it would otherwise be enabled. This is useful for temporary access during debugging or when an environment does not require protection.

Example of the Shield module settings.shield.php file
<?php

/**
* @file
* Shield settings.
*/

declare(strict_types=1);

// Shield can be enabled and disabled in production through UI.
//
// For other environments, Shield is enforced to be enabled.
// 'DRUPAL_SHIELD_USER' and 'DRUPAL_SHIELD_PASS' environment variables must
// be added in the environment or there will be no way to bypass HTTP Auth.
//
// Unlike other settings files, enablement does not follow the presence of
// environment variables: Shield must stay enabled even when the credential
// variables are missing.
if ($settings['environment'] !== ENVIRONMENT_PROD) {
$config['shield.settings']['shield_enable'] = TRUE;

if ($settings['environment'] === ENVIRONMENT_LOCAL || $settings['environment'] === ENVIRONMENT_CI) {
$config['shield.settings']['shield_enable'] = FALSE;
}
}

if (!empty(getenv('DRUPAL_SHIELD_USER')) && !empty(getenv('DRUPAL_SHIELD_PASS'))) {
$config['shield.settings']['credentials']['shield']['user'] = getenv('DRUPAL_SHIELD_USER');
$config['shield.settings']['credentials']['shield']['pass'] = getenv('DRUPAL_SHIELD_PASS');
}

// Allow overriding the title of the Shield pop-up.
if (getenv('DRUPAL_SHIELD_PRINT')) {
$config['shield.settings']['print'] = getenv('DRUPAL_SHIELD_PRINT');
}

// Allow disabling Shield completely in an environment.
if (!empty(getenv('DRUPAL_SHIELD_DISABLED'))) {
$config['shield.settings']['shield_enable'] = FALSE;
}

// Allow ACME challenge path for Let's Encrypt certificate generation.
if (!empty(getenv('DRUPAL_SHIELD_ALLOW_ACME_CHALLENGE'))) {
$config['shield.settings']['method'] = 0;
$shield_acme_path = '/.well-known/acme-challenge/*';
$shield_existing_paths = $config['shield.settings']['paths'] ?? '';
$config['shield.settings']['paths'] = str_contains($shield_existing_paths, $shield_acme_path) ? $shield_existing_paths : trim($shield_existing_paths . "\n" . $shield_acme_path);
}

Stage File Proxy

Stage File Proxy fetches media files from a remote site on demand, so local environments do not need a full copy of the files directory.

Configuration

settings.stage_file_proxy.php sets the origin from DRUPAL_STAGE_FILE_PROXY_ORIGIN outside production and injects the Shield credentials into that URL when they are set, so a shielded origin still serves files.

Testmode

Testmode adjusts site behavior during automated tests, for example by filtering out generated content from listings.

Configuration

settings.testmode.php excludes it from the exported configuration.

➡️ See Testmode for the configuration and the Behat integration.

XML Sitemap

XML sitemap generates a multilingual XML sitemap to help search engines index the site.

Configuration

settings.xmlsitemap.php stops cron regeneration and search engine submission outside production, so non-production environments are never advertised.