Skip to main content
Version: v2

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.

  • Installed: During development provisioning by the EnableDevelopmentModulesDeployStep deploy step.

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.

  • Installed: During development provisioning by the EnableDevelopmentModulesDeployStep deploy step with GENERATED_CONTENT_CREATE=1, unless DRUPAL_GENERATED_CONTENT_SKIP=1 installs it without generating.

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.

  • Installed: As a dependency of the ys_migrate demo migration module, which the MigrateContentDeployStep deploy step installs 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.

Migrate Tools​

Migrate Tools provides Drush commands and a UI to run, roll back and monitor migrations. the MigrateContentDeployStep deploy step drives it during provisioning.

  • Installed: As a dependency of the ys_migrate demo migration module, which the MigrateContentDeployStep deploy step installs 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.

Rerouting replaces the recipient of an outgoing message with the configured address, unless that recipient matches DRUPAL_REROUTE_EMAIL_ALLOWED. With rerouting disabled, every message reaches its intended recipient. Rerouting is therefore disabled only where that delivery is either wanted or already intercepted by other means.

Environment behavior:

EnvironmentRerouting enabledReason
LocalNoPygmy already catches outgoing mail
CINoThe mail collector stores messages instead of sending them
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.

Rerouting is off in ci so that tests can assert on the address a message was sent to. With rerouting on, every message would carry the rerouting address instead of the intended one.

A site that deselects this module during installation still sends no mail from ci, because the mail collector stores messages there regardless. That site does send mail to real recipients in dev and in custom environments.

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);

$settings['config_exclude_modules'][] = 'reroute_email';

$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';

if (in_array($settings['environment'], [ENVIRONMENT_LOCAL, ENVIRONMENT_CI, ENVIRONMENT_PROD], TRUE)) {
// Deliver every message to its intended recipient. Local and CI capture
// outgoing mail by other means, and production sends to real recipients.
$config['reroute_email.settings']['enable'] = FALSE;
}
else {
// Send every outgoing message to the address above instead of to its
// intended recipient, unless that recipient matches the allowed list.
$config['reroute_email.settings']['enable'] = TRUE;
}

// Allow an environment to opt out of the rerouting set above.
if (getenv('DRUPAL_REROUTE_EMAIL_DISABLED') === '1') {
// Deliver every message to its intended recipient.
$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.

  • Installed: During development provisioning by the EnableDevelopmentModulesDeployStep deploy step.

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;
}
}

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

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

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

// Allow ACME challenge path for Let's Encrypt certificate generation.
if (getenv('DRUPAL_SHIELD_ALLOW_ACME_CHALLENGE') === '1') {
$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.

  • Installed: During development provisioning by the EnableDevelopmentModulesDeployStep deploy step, and as a dependency of the ys_demo demo module.

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.