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.
| Variable | Purpose |
|---|---|
DRUPAL_CLAMAV_ENABLED | Applies the override only when set |
DRUPAL_CLAMAV_MODE | Selects daemon or executable mode |
CLAMAV_HOST, CLAMAV_PORT | Daemon 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
scripts/provision-10-enable-dev-modules.sh.
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_demodemo module, declared inys_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
scripts/provision-10-enable-dev-modules.shwithGENERATED_CONTENT_CREATE=1, unlessDRUPAL_GENERATED_CONTENT_SKIP=1installs 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_migratedemo migration module, whichscripts/provision-20-migration.shinstalls 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. scripts/provision-20-migration.sh drives it during provisioning.
- Installed: As a dependency of the
ys_migratedemo migration module, whichscripts/provision-20-migration.shinstalls 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
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.
| Variable | Purpose |
|---|---|
DRUPAL_REDIS_ENABLED | Applies the override only when set |
REDIS_HOST, REDIS_SERVICE_PORT | Connection 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:
| Environment | Rerouting enabled | Reason |
|---|---|---|
| Local | No | Emails are typically not sent in local development |
| CI | No | Automated tests do not send real emails |
| Dev | Yes | Prevents accidental delivery to real users |
| Stage | No | Stage may require real email delivery for UAT |
| Prod | No | Production 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:
| Variable | Default | Purpose |
|---|---|---|
DRUPAL_REROUTE_EMAIL_ADDRESS | webmaster@your-site-domain.example | Address to receive all rerouted emails |
DRUPAL_REROUTE_EMAIL_ALLOWED | *@your-site-domain.example | Pattern 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.
- Installed: During development provisioning by
scripts/provision-10-enable-dev-modules.sh.
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:
| Environment | Shield enabled | Reason |
|---|---|---|
| Local | No | No need for HTTP auth during local development |
| CI | No | Automated tests must access the site freely |
| Dev | Yes | Protects development environments from crawlers |
| Stage | Yes | Protects staging environments from public access |
| Prod | Not enforced | Left to the site configuration - enable or disable through the UI |
Environment variables:
| Variable | Default | Purpose |
|---|---|---|
DRUPAL_SHIELD_USER | HTTP authentication username | |
DRUPAL_SHIELD_PASS | HTTP authentication password | |
DRUPAL_SHIELD_PRINT | Message shown in the authentication popup (module default when unset) | |
DRUPAL_SHIELD_ALLOW_ACME_CHALLENGE | Set 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.
- Installed: During development provisioning by
scripts/provision-10-enable-dev-modules.sh, and as a dependency of theys_demodemo 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.