Configuration
Nextflow Tower Enterprise is now Seqera Platform Enterprise. Existing configuration parameters, configuration files, and API endpoints that include Tower currently remain unchanged.
Set Seqera configuration values using environment variables, a tower.yml configuration file, or individual values stored in AWS Parameter Store. Sensitive values such as database passwords should be stored securely (e.g., as SecureString type parameters in AWS Parameter Store).
- Environment variables
- tower.yml
- AWS Parameter Store
Declare environment variables in a tower.env file. For example:
TOWER_CONTACT_EMAIL=hello@foo.com
TOWER_SMTP_HOST=your.smtphost.com
See the Environment variables option in each section below.
Declare YAML configuration values in a tower.yml file. For example:
mail:
from: "hello@foo.com"
smtp:
host: "your.smtphost.com"
See the tower.yml option in each section below. YAML configuration keys on this page are listed in "dot" notation, i.e., the SMTP host value in the snippet above is represented as mail.smtp.host in the tables that follow.
Don't declare duplicate keys in your tower.yml configuration file. Platform will only enforce the last instance of configuration keys that are defined more than once, for example:
# This block will not be enforced due to the duplicate `tower` key below
tower:
trustedEmails:
- user@example.com
# This block will be enforced because it's defined last
tower:
auth:
oidc:
- "*@foo.com"
In a Helm chart deployment, the chart writes the platform.YAMLConfigFileContent field of your values file to the tower.yml file that Platform reads. Reserve this field for structured values that no environment variable can express, such as the trusted email list or a custom navigation menu:
platform:
YAMLConfigFileContent: |-
tower:
trustedEmails:
- "*@foo.com"
Where the chart exposes a dedicated value for a setting, such as platform.contactEmail or platform.smtp.host, use that value instead. For other settings that accept an environment variable, use backend.extraEnvVars and cron.extraEnvVars. These apply per deployment, so set both where the backend and cron pods need the same value.
AWS Parameter Store configuration is only supported for AWS deployments.
Create parameters in the AWS Parameter Store individually, using the format
/config/<application_name>/<cfg_path> : <cfg_value>. For example:
/config/tower-app/mail.smtp.user : <your_username>
/config/tower-app/mail.smtp.password : <your_password>
The default application name is tower-app. To deploy multiple instances from the same Seqera Enterprise account, set a custom application name for each instance with the micronaut.application.name value in your tower.yml configuration file.
Sensitive values (such as database passwords) should be SecureString type parameters. See AWS Parameter Store for detailed instructions.
Configuration values not supported in tower.yml or AWS Parameter Store
Due to the order of operations when deploying Seqera Enterprise, some configuration values can only be retrieved from environment variables (tower.env). The following configuration values are not supported for tower.yml or AWS Parameter Store configuration and must be set as environment variables:
- Environment variables
Environment variable | Description | Value |
|---|---|---|
| The user account to access your database. If you are using an external database, you must create this user manually. For installation in a new environment, this value must be set as an environment variable. | Default: |
| The user password to access your database. If you are using an external database, you must create this password manually. For installation in a new environment, this value must be set as an environment variable. | Default: |
| The URL to access your database. For installation in a new environment, this value must be set as an environment variable. See the 24.1 release notes for information about the DB URL format. | Example: |
| Application name. To run multiple instances of the same Seqera account, each instance must have a unique name, e.g., | Default: |
| Set | Default: |
| A comma-separated list of execution backends to enable. At least one is required. A backend must be enabled here before compute environments of that type can be created. See Compute environments for the platform value that corresponds to each compute environment type. |
|
| Set to | Default: |
Basic configuration
Basic configuration options such as the Seqera instance server URL, application name, and license key.
- Environment variables
- tower.yml
- AWS Parameter Store
Environment variable | Description | Value |
|---|---|---|
| Your Seqera instance hostname, IP address, DNS name, or full reverse proxy path where the application is exposed. The | Default: |
| Your Seqera Enterprise license key (required). Contact us to obtain your license key. The key is base64-encoded by Seqera — paste this value exactly as received. |
|
| Application name. To run multiple instances of the same Seqera account, each instance must have a unique name, e.g., | Default: |
| Custom path for the |
|
| Custom landing page for the application (requires version 21.10.1 or later). This value doesn't change the |
|
| Define the HTTP port used by the Seqera backend service (requires version 25.3 or later). |
|
| Define the HTTP port used by the Seqera cron service (requires version 21.06.1 or later). |
|
| Grant users access to the application admin panel. |
|
| Your Seqera system administrator contact email. |
|
| Set to | Default: |
| Enable or disable user private workspaces (requires version 22.1.0 or later). | Default: |
| Path to a PEM file containing your internal certificate authority (CA) certificate, mounted into the Platform container. When set, Platform provisions the certificate to Studio sessions so they can connect to endpoints signed by that CA. See Configure a private certificate authority for Studios. |
|
YAML configuration keys in this table are listed in "dot" notation, i.e., a nested value:
...
mail:
smtp:
host: "your.smtphost.com"
...
is represented as mail.smtp.host.
tower.yml | Description | Value |
|---|---|---|
| Your Seqera instance hostname, IP address, DNS name, or full reverse proxy path where the application is exposed. The | Default: |
| Your Seqera Enterprise license key (required). Contact us to obtain your license key. The key is base64-encoded by Seqera — paste this value exactly as received. |
|
| Application name. To run multiple instances of the same Seqera account, each instance must have a unique name, e.g., | Default: |
| Custom landing page for the application (requires version 21.10.1 or later). This value doesn't change the |
|
| Define the HTTP port used by the Seqera cron service (requires version 21.06.1 or later). |
|
| Grant users access to the application admin panel. |
|
| Your Seqera system administrator contact email. |
|
| Set to | Default: |
| Enable or disable user private workspaces (requires version 22.1.0 or later). | Default: |
AWS Parameter Store configuration is only supported for AWS deployments.
Replace {prefix} in each configuration path with /config/<application_name>, where application_name is tower or your custom application name. See AWS Parameter Store.
AWS Parameter Store | Description | Value |
|---|---|---|
| Your Seqera instance hostname, IP address, DNS name, or full reverse proxy path where the application is exposed. The | Default: |
| Your Seqera Enterprise license key (required). Contact us to obtain your license key. The key is base64-encoded by Seqera — paste this value exactly as received. |
|
| Custom landing page for the application (requires version 21.10.1 or later). This value doesn't change the |
|
| Define the HTTP port used by the Seqera cron service (requires version 21.06.1 or later). |
|
| Grant users access to the application admin panel. |
|
| Your Seqera system administrator contact email. |
|
| Set to | Default: |
| Enable or disable user private workspaces (requires version 22.1.0 or later). | Default: |
Seqera and Redis databases
Configuration values that control Seqera's interaction with databases and Redis instances. TOWER_DB_USER, TOWER_DB_PASSWORD, and TOWER_DB_URL must be specified using environment variables during initial Seqera Enterprise deployment in a new environment. A new installation will fail if DB values are only defined in tower.yml or the AWS Parameter Store. Once the database has been created, these values can be added to tower.yml or AWS Parameter Store entries and removed from your environment variables.
Database and cache version requirements:
From Seqera Enterprise version 26.1:
- MySQL 8.4, the long-term support (LTS) release, is the recommended and tested database version. MySQL 5.7 and 8.0 have reached upstream end-of-life and are no longer tested or supported. Migrate to MySQL 8.4 before you upgrade.
- Seqera Enterprise supports Redis 7.2, Redis 7.4, and Valkey 7.x. Redis 6.x is not supported.
For the full support matrices, see Database changes and Cache layer changes.
Follow your cloud provider specifications to upgrade your instance.
If you use a database other than the provided db container, you must create a user and database schema manually.
- MySQL DB schema creation
- MariaDB schema creation
CREATE DATABASE tower;
ALTER DATABASE tower CHARACTER SET utf8 COLLATE utf8_bin;
CREATE USER 'tower' IDENTIFIED BY <password>;
GRANT ALL PRIVILEGES ON tower.* TO tower@'%' ;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER on tower.* TO tower@'%';
Managed Redis services
Seqera supports managed Redis services such as Amazon ElastiCache, Azure Managed Redis, or Google Memorystore.
Microsoft is retiring Azure Cache for Redis. As of April 1, 2026, new customers cannot create instances, and from October 1, 2026, no new instances can be created. For new Azure deployments, use Azure Managed Redis.
When using a managed Redis service, you must specify the service IP address or DNS name for the TOWER_REDIS_URL as described in the following sections.
- AWS ElastiCache
- Azure Managed Redis
- Google Memorystore
- Self-hosted Redis
- Use a single-node cluster, as multi-node clusters are not supported
- Use an instance with at least 6 GB capacity (cache.m4.large or greater)
- Specify your private ElastiCache instance in the Seqera environment variables:
TOWER_REDIS_URL=redis://<redis private IP>:6379
- Use a single-node cluster, as multi-node clusters are not supported
- Choose a production-capable Azure Managed Redis tier appropriate for your workload
- Specify your private Azure Managed Redis instance in the Seqera environment variables:
TOWER_REDIS_URL=redis://<redis private IP>:6379
- Use a single-node cluster, as multi-node clusters are not supported
- Use an instance with at least 6 GB capacity (M2 or greater)
- Specify your private Memorystore instance in the Seqera environment variables:
TOWER_REDIS_URL=redis://<redis private IP>:6379
If you run the Redis service as a container in your Docker or Kubernetes installation, specify the service name as part of the TOWER_REDIS_URL:
TOWER_REDIS_URL=redis://redis:6379
Database and Redis manual configuration
If the DB username and password variables are left empty when using Docker Compose, default tower database values are applied automatically. With Kubernetes and custom DB deployments, tower values are not pre-filled.
We recommend using managed cloud database services for production deployments.
- Environment variables
- tower.yml
- AWS Parameter Store
Environment variable | Description | Value |
|---|---|---|
| The user account to access your database. If you are using an external database, you must create this user manually. | Default: |
| The user password to access your database. If you are using an external database, you must create this password manually. | Default: |
| The URL to access your database. | Example: |
| Minimum database connection pool size. | Default: |
| Maximum database connection pool size. | Default: |
| Maximum lifespan of database connections, in milliseconds. | Default: |
| The URL to access your Seqera Redis instance. | Example: |
| The password of your Seqera Redis instance. |
TOWER_DB_USER, TOWER_DB_PASSWORD, and TOWER_DB_URL must be specified using environment variables during initial Seqera Enterprise deployment in a new environment.
YAML configuration keys in this table are listed in "dot" notation, i.e., a nested value:
...
mail:
smtp:
host: "your.smtphost.com"
...
is represented as mail.smtp.host.
tower.yml | Description | Value |
|---|---|---|
| The user account to access your database. If you are using an external database, you must create this user manually. For installation in a new environment, this value must be set as an environment variable. | Default: |
| The user password to access your database. If you are using an external database, you must create this password manually. For installation in a new environment, this value must be set as an environment variable. | Default: |
| The URL to access your database. For installation in a new environment, this value must be set as an environment variable. | Example: |
| Minimum database connection pool size. | Default: |
| Maximum database connection pool size. | Default: |
| Maximum lifespan of database connections, in milliseconds. | Default: |
| The URL of your Redis or Valkey instance. Set it with the | Example: |
| The password of your Redis or Valkey instance. Set it with the |
AWS Parameter Store configuration is only supported for AWS deployments.
TOWER_DB_USER, TOWER_DB_PASSWORD, and TOWER_DB_URL must be specified using environment variables during initial Seqera Enterprise deployment in a new environment.
Replace {prefix} in each configuration path with /config/<application_name>, where application_name is tower or your custom application name. See AWS Parameter Store.
AWS Parameter Store | Description | Value |
|---|---|---|
| The user account to access your database. If you are using an external database, you must create this user manually. For installation in a new environment, this value must be set as an environment variable. | Default: |
| The user password to access your database. If you are using an external database, you must create this password manually. For installation in a new environment, this value must be set as an environment variable. | Default: |
| The URL to access your database. For installation in a new environment, this value must be set as an environment variable. |
|
| Minimum database connection pool size. | Default: |
| Maximum database connection pool size. | Default: |
| Maximum lifespan of database connections, in milliseconds. | Default: |
| The URL to access your Seqera Redis instance. | Example: |
| The password of your Seqera Redis instance. |
Opt-in Seqera features
Configuration values that enable opt-in Seqera features per instance or workspace.
Core features
- Environment variables
Environment variable | Description | Value |
|---|---|---|
| Enable Seqera integration with Wave containers. | Default: |
| Define the Wave containers service endpoint URL. | Example: |
| Enable Seqera configuration value retrieval from AWS Parameter Store. | Default: |
| Use AWS Simple Email Service (SES) to send Seqera emails instead of SMTP. | Default: |
| Allow log and report files from Nextflow CLI runs ( | Default: |
| Disable the stepped launch form in the workspaces specified. Omit or set empty ( | Default: Enabled for all workspaces |
| Enable pipeline versioning in the workspaces specified. Accepts a comma-separated list of workspace IDs. | Default: Disabled for all workspaces |
| Allow a Seqera account to be created when an organization member or team member is added by email address. Unlike the equivalent setting for workspace participants, this is enabled by default. | Default: |
| Restrict bucket event actions to the workspaces specified. Accepts a comma-separated list of workspace IDs. Omit it, or set it empty ( | Default: Available in all workspaces |
| Restrict scheduled actions to the workspaces specified. Accepts a comma-separated list of workspace IDs. Omit it, or set it empty ( | Default: Available in all workspaces |
| Restrict pipeline run event actions to the workspaces specified. A pipeline run event action launches a pipeline when a run of a Launchpad pipeline reaches a terminal state. Use it to chain one pipeline to another. Accepts a comma-separated list of workspace IDs. Omit it, or set it empty ( | Default: Available in all workspaces |
| Restrict AI agents to the organizations specified, including the option for a bucket event, scheduled, or pipeline run event action to target an agent instead of launching a pipeline. Accepts a comma-separated list of organization IDs. Omit it, or set it empty, to enable agents in every organization once | Default: Enabled for all organizations |
| How many times an action may fire within | Default: |
| How far back Seqera Platform counts an action's triggers when applying | Default: |
| Enable workload identity federation in the workspaces specified. Omit the variable, or set it empty ( | Default: Enabled for all workspaces |
| Allow a Seqera account to be created when a workspace participant is added by email address. When | Default: |
| How many steps back Seqera Platform traces a run's chain of action triggers before it refuses the event. Seqera Platform suppresses a chain longer than this whether or not it closes a loop. Raise it for deliberately long automation chains. Each extra step is one more database read per finished run. Values below | Default: |
Data features
Configuration values used by Seqera for Datasets, Data Explorer, Data Lineage, and Studios.
- Environment variables
- tower.yml
Environment variable | Description | Value |
|---|---|---|
| Enable Data Explorer in all workspaces. To mount data inside a Studio, you must enable Data Explorer. | Default: |
| Disable Data Explorer automatic cloud bucket retrieval per workspace. | Example: |
| Data Explorer cloud bucket cache duration. | Default: |
| The amount of time that elapses after an error, before a retry attempt is made. | Default: |
| The number of retries Data Explorer will attempt to fetch cloud buckets in the event of temporary errors. | Default: |
| The period of time that retry attempts will be made even when max retries has been exceeded. | Default: |
| Data Explorer download file size limit. Increasing this value may degrade performance. | Default: |
| Maximum and default number of items returned in a single page when listing datasets. | Default: |
| Maximum and default number of items returned in a single page when listing dataset versions. | Default: |
| The URL of the Studios connect proxy. The connect proxy is used internally by Seqera Platform. See Studios deployment. | Example: |
| The custom image repository for Wave containers. Ignored if custom image registry is not present. | Default: |
| The custom image name strategy for Wave containers. See the Wave documentation for available options. | Default: |
| The custom image registry for Wave containers, used as the destination for Studio images that are customized with a conda environment. When left null, defers to whatever Wave has configured as the default. | Default: null |
| An access token used to register new clients in Seqera Platform. Any alphanumeric value is allowed. See Studios deployment. Requires the OIDC provider to be configured. See Cryptographic options. |
|
| Add this variable and set it to | Default: null |
| The minimum time a Studio session must be in the stopping status before a stop request force-stops it. A force stop terminates the compute job immediately instead of waiting for a graceful shutdown. | Default: |
| The file path to a PEM certificate used to sign the OIDC tokens for the OpenID connect provider. See Studios deployment. | Example: |
| Add this variable to enable SSH connection functionality in Studios. Set to comma-separated workspace IDs to enable for specific workspaces, an empty string ("") to enable for all workspaces, or | Default: null |
| Enable SSH key management for Studios SSH connection functionality. | Default: false |
| Comma-separated list of supported SSH public key types for user SSH key registration. | Default: |
| SSH key fingerprint. This allows only SSH connections that have been authenticated with Seqera to connect to the server and is recommended for production environments. To generate the fingerprint, use | Example: |
| | Default: |
| | Example: |
| Control which workspaces have Studios enabled. Leave unset (default) to enable Studios in all workspaces, set to an empty string to disable Studios for all workspaces, or provide a comma-separated list of workspace IDs to enable Studios only in those workspaces. | Default: Enabled for all workspaces |
| Default lifespan in hours for Studios when no workspace-specific settings are configured. | Default: |
| Default privacy setting for Studios when no workspace-specific or Studio-specific settings are configured. Set to | Default: |
| Maximum and default number of items returned in a single page when listing Studios. | Default: |
| The manifest URL used for feature version compatibility checks of Studio clients. | Example: |
| Control which workspaces have the Studio iframe in Connect enabled. Set to | Default: null |
| Initial delay before the job that checks Wave build status for Studios in building status runs for the first time. | Default: |
| Fixed rate at which Wave build status is checked for Studios in building status. | Default: |
| Comma-separated list of registry URLs that are not allowed as build destinations for dockerfile-based Studio images. Registries in this list won't be used for pushing dockerfile builds. | Default: |
| Control which workspaces have Studio startup metrics collection enabled. Set to | Default: null |
| Number of days to retain Studio startup metrics in the database before automatic deletion. Metrics older than this threshold are deleted by a daily scheduled job. | Default: |
| Control which workspaces can use data lineage. Leave unset (default) or set to an empty string to enable lineage in all workspaces. To enable lineage only in specific workspaces, provide a comma-separated list of their IDs. Lineage is not available in personal workspaces. In 26.1, the default disabled lineage in all workspaces. See Upgrade deployment. | Default: Enabled for all workspaces |
| Show the global search bar in the top navigation. Because search results come from data lineage, a workspace also needs | Default: |
| Bucket name prefix for automatically provisioned lineage stores. The bucket is named | Default: |
| Total SNS delivery attempts for the lineage webhook. The AWS default of 3 spans roughly a minute and loses events across a Platform restart. AWS caps the total retry window at 3600 seconds and rejects a delivery policy that exceeds it. Seqera Platform trims an over-budget value to fit at startup. | Default: |
| Ceiling on the delay between SNS delivery retries, in seconds. Counts toward the same 3600-second budget as | Default: |
| Whether to migrate lineage workspaces off the retired SQS event transport once at startup. Runs on the | Default: |
tower.yml | Description | Value |
|---|---|---|
| You can set the downloadable file size limit for Data Explorer and workflow reports. Increasing this value may degrade Platform performance. The supported suffixes are | Default: |
| You can set the maximum number of items listed in Data Explorer. Increasing this value may degrade Platform performance. | Default: |
Co-Scientist
Configuration values Seqera Platform uses to reach a Co-Scientist deployment, control the Co-Scientist panel and agents, and restrict the Projects view. Set these only when Co-Scientist is deployed alongside your installation, except TOWER_SCIENTIST_VIEW_ALLOWED_WORKSPACES, which applies either way.
Environment variable | Description | Value |
|---|---|---|
| Origin of the Co-Scientist agent backend (the | Example: |
| Restrict agents, service accounts, and the Trigger agent button to the organizations specified. Accepts a comma-separated list of organization IDs. Omit it, or set it empty, to enable them in every organization once | Default: Enabled for all organizations |
| Restrict the Co-Scientist panel to the organizations specified. Accepts a comma-separated list of organization IDs. Omit it, or set it empty, to enable the panel in every organization once | Default: Enabled for all organizations |
| Domain that the Platform | Example: |
| Restrict the Projects view to the workspaces specified. Accepts a comma-separated list of workspace IDs. Omit it, or set it empty, to enable projects in every organization workspace. To disable them everywhere, set it to | Default: Enabled for all organization workspaces |
Platform fails to start if TOWER_AGENT_BACKEND_URL is not a valid URI, does not use https, has no host, or contains a query string or fragment.
Cryptographic options
Configuration values used by Seqera to encrypt your data.
Do not modify your crypto secret key between starts. Changing this value will prevent the decryption of existing data.
- Environment variables
- tower.yml
- AWS Parameter Store
Environment variable | Description | Value |
|---|---|---|
| The secret key used to encrypt credentials and secrets (required). | Random string of alphanumeric characters. |
| The file path to a PEM certificate used to sign tokens for Seqera Platform's built-in OIDC provider. Setting it turns on the OIDC provider. When it is unset, Platform serves no JWKS endpoint, cannot verify RS256 signatures, and no workload identity token exchange can complete for any cloud provider. This is required for Studios, workload identity federation, and Google Cloud Batch Workload Identity Federation. | Example: |
| Sign Platform session, agent, and service tokens with RS256 against the OIDC keypair instead of HS256 against | Default: |
| The audience ( | Default: |
| Reject Platform-issued OIDC access tokens whose | Default: |
| The secret used to generate the login JWT token (required). | Random string of 35 characters or more. |
| Enable ( | Default: |
| Used to store the value of the key used to encrypt existing credentials and secrets ( | Your existing |
| The number of records to extract in chunks until all secrets and credentials are processed. Requires | Default: |
YAML configuration keys in this table are listed in "dot" notation, i.e., a nested value:
...
mail:
smtp:
host: "your.smtphost.com"
...
is represented as mail.smtp.host.
tower.yml | Description | Value |
|---|---|---|
| The secret key used to encrypt user credentials (required). | Random string of alphanumeric characters. |
| The secret used to generate the login JWT token (required). | Random string of 35 characters or more. |
| The secret used to generate the login refresh token (required). | Random string of 35 characters or more. |
| Enable ( | Default: |
| Used to store the value of the key used to encrypt existing credentials and secrets ( | Your existing |
| The number of records to extract in chunks until all secrets and credentials are processed. Requires | Default: |
AWS Parameter Store configuration is only supported for AWS deployments.
Replace {prefix} in each configuration path with /config/<application_name>, where application_name is tower or your custom application name. See AWS Parameter Store.
AWS Parameter Store | Description | Value |
|---|---|---|
| The secret key used to encrypt user credentials (required). | Random string of alphanumeric characters. |
| The secret used to generate the login JWT token (required). | Random string of 35 characters or more. |
| The secret used to generate the login refresh token (required). | Random string of 35 characters or more. |
| Enable ( | Default: |
| Used to store the value of the key used to encrypt existing credentials and secrets ( | Your existing |
| The number of records to extract in chunks until all secrets and credentials are processed. Requires | Default: |
Secret key rotation
Rotate the key used to encrypt the credentials and secrets stored in your Platform database. Encryption key rotation is a security best practice and should be performed at an interval specified by your organization's security requirements, or in the event of a suspected compromise of your secret key.
Enable rotation by setting the following configuration values:
- Environment variables
- tower.yml
- AWS Parameter Store
TOWER_SECRET_ROTATION_ENABLED=trueTOWER_SECRET_ROTATION_PREVIOUS_KEY=<EXISTING_TOWER_CRYPTO_SECRET_KEY_VALUE>TOWER_CRYPTO_SECRETKEY=<NEW_SECRET_KEY_VALUE>
tower.secret.rotation.enabled: truetower.secret.rotation.previous-key: <EXISTING_tower.crypto.secretKey_VALUE>tower.crypto.secretKey: <NEW_SECRET_KEY_VALUE>
/tower/secret-rotation/enabled: true/tower/secret-rotation/previous-key: <EXISTING_/tower/crypto/secretKey_VALUE>/tower/crypto/secretKey: <NEW_SECRET_KEY_VALUE>
With rotation enabled and the previous and new key values set, secret key rotation will run as part of the Platform cron service during application startup. Normal application startup is not affected by this process, and Platform is fully operational while the credentials and secrets in your database are being encrypted using your new secret key.
- To prevent data loss, perform a backup of your Platform database and securely back up your current crypto secret key before enabling and performing key rotation.
- All backend pods or containers for your Enterprise deployment must contain the same previous and new secret key values in their Platform config and must be in a ready/running state before starting the Platform cron service.
The Admin panel Encryption tab displays the status of completed or errored encryption tasks.
Backend memory requirements
The Platform backend and cron services run on the Java Virtual Machine (JVM). Allocate at least 4 GB of memory to each service for stable operation under load.
For Kubernetes, set resource limits in your pod specifications:
resources:
limits:
memory: "4Gi"
requests:
memory: "4Gi"
For Docker Compose, set memory limits in your service definitions:
services:
backend:
mem_limit: 4g
memswap_limit: 4g
These default memory allocation limits are included in the Kubernetes manifest templates (tower-svc.yml and tower-cron.yml). For Docker Compose, add the mem_limit settings to your service definitions as shown above.
JVM memory tuning
For production deployments, configure JVM memory parameters with the JAVA_OPTS environment variable. This baseline configuration suits most deployments:
JAVA_OPTS="-Xms1000M -Xmx2000M -XX:MaxDirectMemorySize=800m -Dio.netty.maxDirectMemory=0 -Djdk.nio.maxCachedBufferSize=262144"
The JAVA_TOOL_OPTIONS environment variable is a supported alternative to JAVA_OPTS. The JVM reads it directly at startup and confirms pickup with a Picked up JAVA_TOOL_OPTIONS line in the service logs. Set one variable or the other, not both. Options passed on the command line (which is how JAVA_OPTS is applied) take precedence over JAVA_TOOL_OPTIONS when the same flag appears in both.
These default JVM memory settings are included in the configuration templates provided in these docs:
- Kubernetes: tower-svc.yml and tower-cron.yml
- Docker Compose: tower.env
| Parameter | Description |
|---|---|
-Xms / -Xmx | Initial and maximum heap size — the memory pool for Java objects. |
-XX:MaxDirectMemorySize | Off-heap memory for NIO operations, network buffers, and file I/O. Handles concurrent workflow API operations. |
-Dio.netty.maxDirectMemory=0 | Disables Netty's internal memory tracking and relies on the JVM direct memory limit instead. |
-Djdk.nio.maxCachedBufferSize | Limits the size of cached NIO buffers to prevent excessive memory retention. |
Adjust these baseline values based on the symptoms you observe.
Increase -XX:MaxDirectMemorySize if you observe:
OutOfMemoryError: Direct buffer memoryin the logs- High concurrent workflow launch rates (more than 100 simultaneous workflows)
- Large configuration payloads or heavy API usage
Increase heap memory (-Xmx) if you observe:
OutOfMemoryError: Java heap spacein the logs- Garbage collection pauses that affect performance
- Growing memory usage under sustained load
For deployments running 200 or more concurrent workflows, increase the heap and direct memory limits:
JAVA_OPTS="-Xms1000M -Xmx3000M -XX:MaxDirectMemorySize=1600m -Dio.netty.maxDirectMemory=0 -Djdk.nio.maxCachedBufferSize=262144"
Set the container or pod memory limit higher than the JVM limits to accommodate non-heap memory usage.
These are starting values. Monitor your deployment's memory usage and adjust for your workload. Undersized memory allocation can cause out-of-memory (OOM) failures and service instability.
Compute environments
Configuration values to enable computing platforms and customize Batch Forge resource naming.
- Environment variables
Environment variable | Description | Value |
|---|---|---|
| Comma-separated list of the execution backends to enable. At least one is required. A backend must be enabled here before compute environments of that type can be created. |
|
| Configuration values to control the behavior of the Seqera | Backend configuration: |
| Override the default | Default: |
| Enable legacy role-based AWS credentials. When true, users provide an IAM role ARN only when creating AWS credentials. Access keys, secret keys, and External ID are not used. | Default: |
| Installation-wide customer-managed KMS key that encrypts the temporary AWS Secrets Manager secrets created for runs that use pipeline secrets. Accepts a key ARN or a key ID. Applies to AWS Batch and AWS Cloud compute environments, and only when the compute environment does not define its own Pipeline secrets KMS key. A key is account- and region-specific. Set this default only when every AWS Batch and AWS Cloud compute environment in the installation targets the same AWS account and region. The compute environment credentials require | Default: none (AWS-managed key) |
| How often Seqera Platform writes buffered compute environment last-used timestamps to the database. Seqera Platform buffers the write instead of making it inside the launch, to avoid deadlocks between concurrent launches on the same compute environment. | Default: |
Available platform values
TOWER_ENABLE_PLATFORMS (tower_enable_platforms in the Terraform installer) controls which compute environment types are available in your installation. A platform must be listed here before a compute environment of that type can be created — if a compute environment type does not appear in the Platform UI, the corresponding value is missing from this variable.
| Platform value | Compute environment type |
|---|---|
awsbatch-platform | AWS Batch |
awscloud-platform | AWS Cloud |
azbatch-platform | Azure Batch |
azcloud-platform | Azure Cloud |
googlebatch-platform | Google Cloud Batch |
googlecloud-platform | Google Cloud |
eks-platform | Amazon EKS |
gke-platform | Google Kubernetes Engine |
k8s-platform | Kubernetes |
slurm-platform | Slurm |
lsf-platform | IBM Spectrum LSF |
uge-platform | Grid Engine |
altair-platform | Altair PBS Pro |
moab-platform | Moab |
local-platform | Local (evaluation and development only) |
Specify values as a comma-separated list with no spaces:
TOWER_ENABLE_PLATFORMS=awsbatch-platform,azcloud-platform,k8s-platform
Azure Batch and Azure Cloud are separate compute environment types with separate platform values. Enabling azbatch-platform does not make Azure Cloud compute environments available, and vice versa.
Compute environment cleanup
A scheduled cron job can transition compute environments that are stuck in CREATING or DELETING states into terminal states (ERRORED or INVALID). The cleanup job is disabled by default.
- Environment variables
Environment variable | Description | Value |
|---|---|---|
| Enable the compute environment cleanup cron job, which transitions compute environments stuck in | Default: |
| Stagger between consecutive batch start times. Batch i is scheduled to start i × time-offset seconds after the job tick. | Default: |
| Interval at which the compute environment cleanup cron job runs. | Default: |
| Number of organizations processed per batch in the compute environment cleanup job. | Default: |
| Delay between consecutive batch tasks in the compute environment cleanup job. | Default: |
| Time after which a compute environment stuck in the | Default: |
| Time after which a compute environment stuck in the | Default: |
Workspace orphan cleanup
Two scheduled cron jobs can soft-delete credentials and compute environments whose workspace has been deleted. Both jobs are disabled by default.
- Environment variables
Environment variable | Description | Value |
|---|---|---|
| Enable the two cleanup cron jobs that soft-delete credentials and compute environments whose workspace has been deleted. Removal uses the same path as a user-initiated deletion, and writes one audit log entry per removed item. Because previous versions did not remove these items when a workspace was deleted, a large backlog may exist. Consider lowering the batch size and concurrency for the first runs. | Default: |
| How often the credentials cleanup job checks for credentials whose workspace has been deleted. | Default: |
| Delay before the first credentials cleanup run after startup. The delay varies by up to 50% either way, to spread the load across replicas. | Default: |
| Maximum number of credentials the job removes per run. | Default: |
| Maximum number of credentials removed concurrently on a single replica. Must be | Default: |
| How often the compute environment cleanup job checks for compute environments whose workspace has been deleted. | Default: |
| Delay before the first compute environment cleanup run after startup. The delay varies by up to 50% either way, to spread the load across replicas. | Default: |
| Maximum number of compute environments the job removes per run. | Default: |
| Maximum number of compute environments removed concurrently on a single replica. Deleting a compute environment also removes the cloud resources Batch Forge created for it. Must be | Default: |
Git integration
Seqera Platform has built-in support for public and private Git repositories. Create Git provider credentials to allow Seqera to interact with the following services:
Credentials configured in your SCM providers list override Git credentials in your (organization or personal) workspace.
Public Git repositories can be accessed without authentication, but are often subject to throttling. We recommend always adding Git credentials to your Seqera workspace, regardless of the repository type you use.
- Environment variables
- tower.yml
- AWS Parameter Store
Credentials and other secrets must not be hard-coded in environment variables in production environments. Credentials added using the application UI are SHA256-encrypted before secure storage and not exposed by any Seqera API.
Environment variable | Description |
|---|---|
| Your GitHub username. |
| Your GitHub (classic or fine-grained) access token. |
| Your GitLab username. |
| Your GitLab (Personal, Group, or Project) access token. |
| Your GitLab (Personal, Group, or Project) access token. |
| Your BitBucket username. |
| Your BitBucket App password. |
| Your Gitea username. |
| Your Gitea token. |
| Your Azure DevOps repository username. |
| Your Azure DevOps repository personal access token. |
Credentials and other secrets must not be stored in plain text in production environments. Credentials added using the application UI are SHA256-encrypted before secure storage and not exposed by any Seqera API.
YAML configuration keys in this table are listed in "dot" notation, i.e., a nested value:
...
mail:
smtp:
host: "your.smtphost.com"
...
is represented as mail.smtp.host.
tower.yml | Description |
|---|---|
| Your GitHub username. |
| Your GitHub (classic or fine-grained) access token. |
| Your GitLab username. |
| Your GitLab (Personal, Group, or Project) access token. |
| Your GitLab (Personal, Group, or Project) access token. |
| Your BitBucket username. |
| Your BitBucket App password. |
| Your Gitea username. |
| Your Gitea token. |
| Your Azure DevOps repository username. |
| Your Azure DevOps repository personal access token. |
AWS Parameter Store configuration is only supported for AWS deployments.
Replace {prefix} in each configuration path with /config/<application_name>, where application_name is tower or your custom application name. See AWS Parameter Store.
AWS Parameter Store | Description |
|---|---|
| Your GitHub username. |
| Your GitHub (classic or fine-grained) access token. |
| Your GitLab username. |
| Your GitLab (Personal, Group, or Project) access token. |
| Your GitLab (Personal, Group, or Project) access token. |
| Your BitBucket username. |
| Your BitBucket App password. |
| Your Gitea username. |
| Your Gitea token. |
| Your Azure DevOps repository username. |
| Your Azure DevOps repository personal access token. |
Local repositories
Seqera Enterprise can connect to workflows stored in local Git repositories. To do so, volume mount your local repository folder in your Seqera backend container. Then, update your tower.yml:
tower:
pipeline:
allow-local-repos:
- /path/to/repo
Mail server
Configure values for SMTP email service integration. Production SMTP hosts must use a TLS-protected connection. See SSL/TLS.
AWS deployments also support Amazon Simple Email Service (SES).
SMTP service integration
To use an SMTP gateway for mail service, set SMTP user and password values to null.
Your organization's email security policy may prevent the TOWER_CONTACT_EMAIL address from receiving Seqera emails. If this occurs after successful SMTP configuration, you may need to configure spf, dkim, and dmarc records for your domain. Contact your IT support staff for further assistance.
- Environment variables
- tower.yml
- AWS Parameter Store
Environment variable | Description | Value |
|---|---|---|
| Your email service user. | Example: |
| Your email service password. | |
| Your email service host name, excluding protocol. | Example: |
| Your email service port. Most cloud services block port 25 by default. | Default: |
| The email address used to send Seqera emails. | Example: |
| Use SMTP authentication when calling your email service endpoint. | Default: |
| Switch the connection to a TLS-protected connection before issuing login commands. Must be | Recommended: |
| Require the use of the STARTTLS command. Must be | Recommended: |
| Use AWS SES (Simple Email Service) to use Seqera emails, instead of SMTP. | Default: |
YAML configuration keys in this table are listed in "dot" notation, i.e., a nested value:
...
mail:
smtp:
host: "your.smtphost.com"
...
is represented as mail.smtp.host.
tower.yml | Description | Value |
|---|---|---|
| Your email service user. | Example: |
| Your email service password. | |
| Your email service host name, excluding protocol. | Example: |
| Your email service port. Most cloud services block port 25 by default. | Default: |
| The email address used to send Seqera emails. | Example: |
| Use SMTP authentication when calling your email service endpoint. | Default: |
| Switch the connection to a TLS-protected connection before issuing login commands. Must be | Recommended: |
| Require the use of the STARTTLS command. Must be | Recommended: |
| Enable verbose SMTP session logging to troubleshoot mail delivery. When enabled, Seqera Platform writes the full SMTP protocol exchange (connection, STARTTLS negotiation, authentication, and message transfer) to the application logs. Leave disabled during normal operation. You can set this option only in | Default: |
AWS Parameter Store configuration is only supported for AWS deployments.
Replace {prefix} in each configuration path with /config/<application_name>, where application_name is tower or your custom application name. See AWS Parameter Store.
AWS Parameter Store | Description | Value |
|---|---|---|
| Your email service user. | Example: |
| Your email service password. | |
| Your email service host name, excluding protocol. | Example: |
| Your email service port. Most cloud services block port 25 by default. | Default: |
| The email address used to send Seqera emails. | Example: |
| Use SMTP authentication when calling your email service endpoint. | Default: |
| Switch the connection to a TLS-protected connection before issuing login commands. Must be | Recommended: |
| Require the use of the STARTTLS command. Must be | Recommended: |
AWS SES integration
In AWS deployments, you can use AWS Simple Email Service (SES) instead of traditional SMTP for sending Seqera platform emails.
Simple Email Service (SES) is only supported in Seqera deployments on AWS.
To configure AWS SES as your Seqera email service:
- Set
TOWER_ENABLE_AWS_SES=truein your environment variables. - Specify the email address used to send Seqera emails with one of the following:
- the
TOWER_CONTACT_EMAILenvironment variable - a
mail.fromentry intower.yml - a
/config/<application_name>/mail/fromAWS Parameter Store entry
- the
- The AWS SES service must run in the same region as your Seqera instance.
- The Seqera IAM role must include the
ses:SendRawEmailpermission.
Nextflow launch container
Do not replace the Seqera-provided default image unless absolutely necessary.
- Environment variables
| Environment Variable | Description | Value |
|---|---|---|
TOWER_LAUNCH_CONTAINER | The container image to run the Nextflow execution. This setting overrides the launch container selection for all organizations and workspaces in your account, and disables the per-run Nextflow version selector. | Example: quay.io/seqeralabs/nf-launcher:j17-23.04.3 |
Component compatibility catalog
The component compatibility catalog records which Nextflow, Fusion, and nf-launcher versions work with this Seqera Platform version. The Nextflow version selector and launch validation read from it.
- Environment variables
Environment variable | Description | Value |
|---|---|---|
| Enable the component compatibility catalog. When enabled, the launch form's Nextflow version selector, launch validation, and the | Default: |
| Where Seqera Platform reads the catalog from. | Default: |
| The catalog used when | Default: |
| License Manager URL for the live catalog when | Default: License server URL |
| Connect and read timeout for the live catalog request. If the request exceeds this timeout, Seqera Platform uses the cached copy or the embedded catalog instead. | Default: |
| How often the cron service refreshes the cached copy from the live | Default: |
| Delay before the first catalog refresh after startup. | Default: |
Seqera API
Enable the API endpoints to host the Seqera Enterprise OpenAPI specification and use the tw CLI. Set custom API rate limits and timeouts.
To configure API rate limit environment variables, you must add ratelim to the MICRONAUT_ENVIRONMENTS. Without ratelim being set, the rate limit configuration variables below are ignored.
- Environment variables
| Environment variable | Description | Value |
|---|---|---|
TOWER_ENABLE_OPENAPI | Enable the OpenAPI documentation endpoint, e.g., cloud.seqera.io/openapi/index.html. | Default: false |
TOWER_RATELIMIT_PERIOD | Specify the maximum number of HTTP requests that can be made during the TOWER_RATELIMIT_REFRESH period. | Default: 20 |
TOWER_RATELIMIT_REFRESH | API rate limit refresh period. | Default: 1s |
TOWER_RATELIMIT_TIMEOUT | The waiting period before rejecting requests over the TOWER_RATELIMIT_PERIOD limit during the refresh period. | Default: 500ms |
OIDC access tokens
Configuration values for the audience claim on the OIDC access tokens Seqera Platform issues, and for enforcing it.
- Environment variables
Environment variable | Description | Value |
|---|---|---|
| The audience ( | Default: |
| Reject Platform-issued OIDC access tokens whose | Default: |
Custom navigation menu
Modify your Seqera instance's navigation menu options.
- tower.yml
- Helm chart
tower:
navbar:
menus:
- label: "My Community"
url: "https://host.com/foo"
- label: "My Pipelines"
url: "https://other.com/bar"
In a Helm chart deployment, set the menu options in the platform.YAMLConfigFileContent field of your values file:
platform:
YAMLConfigFileContent: |-
tower:
navbar:
menus:
- label: "My Community"
url: "https://host.com/foo"
- label: "My Pipelines"
url: "https://other.com/bar"
Telemetry
Seqera Platform sends usage telemetry to the Seqera License Manager alongside the license check. Telemetry is enabled by default. To opt out, set both TOWER_TELEMETRY_STANDARD_ENABLED and TOWER_TELEMETRY_BASIC_ENABLED to false.
- Environment variables
Environment variable | Description | Value |
|---|---|---|
| Report entity-level telemetry to the Seqera License Manager: one record per workflow run, Studios session, Studios audit event, day of Data Explorer activity, and workspace. When enabled, Seqera Platform does not send the aggregate counters controlled by | Default: |
| Report the aggregate usage counters that Seqera Platform sent before entity-level telemetry. Only applies when | Default: |
| Number of complete UTC days of entity-level telemetry sent on each run, ending with the previous day. Because Seqera Platform sends the whole window on every run, a later run recovers the data of any run that fails to reach the License Manager. Raising it increases the payload size. Lower it if collecting the window puts too much load on the database. | Default: |
Logging
Logging-related configuration values to aid troubleshooting. See Audit logs for more information on application event logging. Use TOWER_CRON_AUDIT_LOG_CLEAN_UP_ENABLED to disable automatic audit log deletion, and restart Platform after changing audit log settings.
- Environment variables
- tower.yml
Environment variable | Description | Value |
|---|---|---|
| Set | Default: |
| Application event audit log retention period. When cleanup is enabled, Seqera Platform deletes audit log records older than this period from both the legacy (v1) and v2 audit log tables. Value includes units ( | |
| Maximum number of audit log v2 records allowed in a single CSV export. | Default: |
| The output format of Platform logs. | Options: |
| Platform backend logging detail level. | Options: |
| Platform authentication logging detail level. | Options: |
| Base directory to store Platform logs. | Default: |
| The logging format emitted to STDOUT. See here for a reference of the full logback pattern syntax. Keep |
|
| The maximum number of backend log files retained by the system. | Default: |
| The maximum file size of the Platform backend log file. When this limit is reached, a new log file is created. | Default: |
| Tower Agent logging detail level. | Options: |
| Tower Agent polling interval. | Example: |
| Event logging detail level for the SSH connection library used by Seqera. | Options: |
| Set | Default: |
Set the logging detail level for various Seqera services. Logs for particular services may be requested by support to assist with troubleshooting an issue. Set the logging configuration parameter in your Seqera YAML configuration before attempting to reproduce your issue. The example below sets the detail level for application and database logging:
logger is a root-level object in the tower.yml configuration file, i.e., it is not nested under tower.
logger:
levels:
org.hibernate.SQL: DEBUG
org.hibernate.type: TRACE
io.seqera.tower: TRACE
Distributed tracing
Seqera Platform emits OpenTelemetry traces with stable, route-aware span names. You can observe endpoint latency, error rate, and throughput per API route rather than per raw URL.
Platform has no tracing switch of its own. Standard OpenTelemetry configuration governs tracing, and the tracing libraries ship in every installation. With no exporter configured, Platform uses an always-off sampler and records no spans. Tracing costs nothing until you turn it on.
To send traces to a collector, set the standard exporter variables:
OTEL_TRACES_EXPORTER=otlp
OTEL_EXPORTER_OTLP_ENDPOINT=http://collector:4318
OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf
Set OTEL_SERVICE_NAME, OTEL_RESOURCE_ATTRIBUTES, OTEL_TRACES_SAMPLER, and OTEL_TRACES_SAMPLER_ARG as appropriate for your deployment. To turn tracing off again, set OTEL_TRACES_EXPORTER=none.
Platform writes the active trace and span IDs into the logging context. The default TOWER_LOG_PATTERN includes %X{trace_id:--} %X{span_id:--} so that log lines correlate with traces. If you override the pattern, keep both fields.
Audit log v2
Configuration values for the v2 audit log subsystem and the audit log cleanup cron job. The v2 audit log adds support for pre/post change state capture and CSV export limits.
- Environment variables
Environment variable | Description | Value |
|---|---|---|
| Maximum number of records allowed in a single audit log CSV export. | Default: |
| Enable capturing pre- and post-change state images for audit log target resources in air-gapped Enterprise deployments. In deployments that are not air-gapped this is enabled through License Manager. | Default: |
| Enable the audit log cleanup cron job. | Default: |
| Interval at which the audit log cleanup cron job runs. | Default: |
| Initial delay before the audit log cleanup cron job starts after application startup. | Default: |
| Maximum number of audit log records deleted per cleanup run. | Default: |