Skip to Content
ConfigurationEnvironment Variables

Environment Variables

Environment variables come in three quite different families, and confusing them is the most common source of “I set the variable and nothing happened”:

  1. Configuration mappings — recognised by the configuration loader and merged into the resolved configuration at the highest priority. Whether that changes behaviour depends on whether the feature reads the resolved configuration; see Configuration Sources & Priority.
  2. Application runtime switches — read directly by feature code with process.env. These always take effect, and none of them appear in /api/admin/config/status.
  3. Installer inputs — consumed by install-dist.sh and the seqdesk launcher before the app starts. They have no effect on a running app.

Value parsing (family 1 only)

Variables in the configuration-mapping family are parsed by target type:

  • Booleans — the literal strings "true" / "false", case-insensitive. Any other value is kept verbatim as a string, so write SEQDESK_SLURM_ENABLED=true, never SEQDESK_SLURM_ENABLED=1.
  • Numbers — parsed as integers for paths containing slurm.cores, slurm.timeLimit, scanDepth, sessionTimeout, or intervalHours.
  • Arrays — comma-separated and trimmed, e.g. ".fastq.gz,.fq.gz,.fastq,.fq". This applies to extensions and ignorePatterns.
  • Strings — everything else.

1. Configuration mappings

Site

VariableConfig pathTypeDefaultEffect
SEQDESK_SITE_NAMEsite.namestring"SeqDesk"Reported in config status; the UI reads SiteSettings.siteName
SEQDESK_DATA_PATHsite.dataBasePathstring"./data"Live — overrides the admin-set data base path
SEQDESK_CONTACT_EMAILsite.contactEmailstringReported in config status; the UI reads SiteSettings.contactEmail

Pipelines

Pipeline execution reads the resolved configuration and lets env/file values override the admin-saved settings, so the execution variables are live.

VariableConfig pathTypeDefaultDescription
SEQDESK_PIPELINE_DATABASE_DIRpipelines.databaseDirectorystring""Live. Shared root directory for large pipeline database assets
SEQDESK_PIPELINE_RUN_DIRpipelines.execution.runDirectorystring"./pipeline_runs"Live. Output directory for pipeline runs
SEQDESK_PIPELINE_MODEpipelines.execution.modeenum"local"Live. Execution mode: local or slurm
SEQDESK_PIPELINES_ENABLEDpipelines.enabledbooleanfalseInstall-time input. Which pipelines a running app offers comes from the PipelineConfig rows under Settings → Pipelines, not from this value.

kubernetes is still accepted by the low-level configuration parser for compatibility with older files, but SeqDesk has no Kubernetes execution backend, and the executor treats it exactly like local. Use local or slurm.

Conda

VariableConfig pathTypeDefaultDescription
SEQDESK_CONDA_PATHpipelines.execution.conda.pathstring"/opt/conda"Path to the Conda installation
SEQDESK_CONDA_ENVpipelines.execution.conda.environmentstring"seqdesk-pipelines"Environment name, or an absolute environment prefix
SEQDESK_CONDA_CACHE_DIRpipelines.execution.conda.cacheDirstring""Shared Nextflow conda cache directory; per-process environments are built once and reused across runs

Pipeline execution is Conda-only. SeqDesk always sets its pipeline runtime mode to Conda and adds the conda Nextflow profile when needed.

SLURM

VariableConfig pathTypeDefaultDescription
SEQDESK_SLURM_ENABLEDpipelines.execution.slurm.enabledbooleanfalseEnable SLURM job submission
SEQDESK_SLURM_QUEUEpipelines.execution.slurm.queuestring"cpu"SLURM partition/queue name
SEQDESK_SLURM_CORESpipelines.execution.slurm.coresinteger4CPU cores per job
SEQDESK_SLURM_MEMORYpipelines.execution.slurm.memorystring"64GB"Memory per job
SEQDESK_SLURM_TIMEpipelines.execution.slurm.timeLimitinteger12Time limit in hours

There is no SEQDESK_SLURM_OPTIONS variable, and pipelines.execution.slurm.options in a config file is discarded by the executor. Set extra sbatch flags in Settings → Infrastructure → Pipeline Runtime, or at install time with SEQDESK_EXEC_SLURM_OPTIONS.

MAG pipeline

Install-time inputs. On a running install these live in the PipelineConfig row for mag and are edited under Settings → Pipelines or per run.

VariableConfig pathTypeDefaultDescription
SEQDESK_MAG_ENABLEDpipelines.mag.enabledbooleantrueEnable nf-core/mag
SEQDESK_MAG_VERSIONpipelines.mag.versionstring"3.4.0"nf-core/mag pipeline version
SEQDESK_MAG_STUBpipelines.mag.stubModebooleanfalseStub mode (fast, no real analysis)

Telemetry

VariableConfig pathTypeDefaultDescription
SEQDESK_TELEMETRY_ENABLEDtelemetry.enabledbooleanfalseOpt-in anonymous heartbeats
SEQDESK_TELEMETRY_ENDPOINTtelemetry.endpointstringhttps://seqdesk.org/api/telemetry/heartbeatHeartbeat URL
SEQDESK_TELEMETRY_INTERVAL_HOURStelemetry.intervalHoursinteger24Minimum hours between heartbeats

Telemetry inverts the usual priority: a value saved in the Admin UI wins over SEQDESK_TELEMETRY_ENABLED and over the config file, so an admin can always switch the heartbeat off from the UI. Above everything sits SEQDESK_TELEMETRY_DISABLED=true, a hard kill switch that short-circuits before any source is consulted.

Notifications

VariableConfig pathTypeDefaultDescription
SEQDESK_NOTIFICATIONS_ENABLEDnotifications.enabledbooleanfalseMaster switch for the hosted email notification relay
SEQDESK_IN_APP_NOTIFICATIONS_ENABLEDnotifications.inApp.enabledbooleantrueMaster switch for the in-app notification panel/channel
SEQDESK_NOTIFICATION_PROVIDERnotifications.providerstring"seqdesk-relay"Notification provider (only seqdesk-relay is supported)
SEQDESK_NOTIFICATION_RELAY_URLnotifications.relayUrlstringhttps://seqdesk.org/api/notifications/relayHosted relay endpoint
SEQDESK_NOTIFICATION_RELAY_TOKENnotifications.relayTokenstringScoped notification relay token (secret)

Email notifications additionally require the Email Notifications module to be enabled under Settings → Modules. Set the relay token through this variable — it is masked in /api/admin/config/status, and the Admin UI deliberately refuses to write it to the database.

Mapped, but the feature reads the database

These variables are recognised by the configuration loader and will show up in /api/admin/config/status with source env — but the corresponding feature reads the SiteSettings row, so setting them on a running server does not change behaviour. They are useful as install-time inputs (the installer and hosted profiles write them into the database) and as a way to see what a config file would produce.

VariableConfig pathWhat the feature actually reads
SEQDESK_ENA_TEST_MODEena.testModeSiteSettings.enaTestMode
SEQDESK_ENA_USERNAMEena.usernameSiteSettings.enaUsername
SEQDESK_ENA_PASSWORDena.passwordSiteSettings.enaPassword (encrypted)
SEQDESK_ENA_CENTERena.centerNameSiteSettings.extraSettings.ena.centerName
SEQDESK_ENA_BROKER_ACCOUNTena.brokerAccountSiteSettings.extraSettings.ena.brokerAccount
SEQDESK_FILES_EXTENSIONSsequencingFiles.extensionsSiteSettings.extraSettings.sequencingFiles.allowedExtensions
SEQDESK_FILES_SCAN_DEPTHsequencingFiles.scanDepthSiteSettings.extraSettings.sequencingFiles.scanDepth
SEQDESK_AUTH_REGISTRATIONauth.allowRegistrationSiteSettings.extraSettings.auth.allowRegistration

To change any of these on a running install, use the Admin UI — see ENA Credentials, Data Storage, and Runtime Settings.

Accepted compatibility variables (unsupported)

The configuration loader still recognises these names so older configuration files and deployment manifests continue to parse. They are not functional controls:

VariableAccepted config pathActual runtime behaviour
SEQDESK_CONDA_ENABLEDpipelines.execution.conda.enabledIgnored. Pipeline runtime mode is always Conda.
SEQDESK_FILES_SINGLE_ENDsequencingFiles.allowSingleEndIgnored. allowSingleEnd is always forced to true.
SEQDESK_SESSION_TIMEOUTauth.sessionTimeoutParsed into the resolved configuration, but the authentication runtime does not enforce a timeout.

There is currently no supported switch to disable Conda execution, reject all single-end reads, or set the authentication session lifetime. Do not use these variables to express an operational requirement.

2. Application runtime variables

These are read directly by feature code. They are not part of the configuration merge and do not appear in /api/admin/config/status.

Process environment

VariableDescription
DATABASE_URLPostgreSQL runtime connection string. Required.
DIRECT_URLDirect PostgreSQL connection for Prisma migrations. If DATABASE_URL is set from the environment and this is not, it is derived from DATABASE_URL.
NEXTAUTH_URLNextAuth.js callback URL (installed default: http://localhost:8000)
NEXTAUTH_SECRETSession signing secret. Generate with openssl rand -base64 32.
ANTHROPIC_API_KEYAPI key for the optional field-validation routes
ADMIN_SECRETRelease publishing admin secret used by scripts
BLOB_READ_WRITE_TOKENBlob token used by release publishing scripts

Each of these can also be supplied from the runtime section of settings.json. Those values are applied to process.env at startup only if the variable is not already set, so the environment always wins, and any change needs a restart.

Secrets at rest

VariableDefaultDescription
SEQDESK_ENCRYPTION_KEYfalls back to NEXTAUTH_SECRET, then AUTH_SECRETKey material for encrypting sensitive settings stored in the database (currently the ENA Webin password).

Values are stored as enc:v1:<base64> with AES-256-GCM and an HKDF-derived key. Anything without that prefix is treated as legacy plaintext and re-encrypted the next time it is saved. Set SEQDESK_ENCRYPTION_KEY explicitly if you ever expect to rotate NEXTAUTH_SECRET: rotating the auth secret without a dedicated encryption key makes previously encrypted values undecryptable.

Updates

VariableDefaultDescription
SEQDESK_UPDATE_SERVERhttps://seqdesk.orgUpdate server used by the check and install flow
SEQDESK_ALLOW_INSECURE_UPDATEunsettrue permits an http:// release download URL. Downloads are otherwise https-only so a release cannot be substituted in transit. Use only for an internal mirror on a trusted link.

See Automatic Updates.

Pipelines and execution

VariableDescription
SEQDESK_PIPELINES_DIRAbsolute path to the pipeline packages directory. Point it at shared storage when SLURM compute nodes do not share the app’s filesystem; otherwise SeqDesk looks for pipelines/ beside the app.
SEQDESK_SLURM_INLINE_EXECUTOR1 or true wraps a whole run in a single sbatch allocation and runs its processes with Nextflow’s local executor inside it, instead of submitting one job per process. Useful when compute nodes cannot reach the app for weblog callbacks.
SEQDESK_DISABLE_WORKER_AUTOSTART1 stops the background workers from starting with the server.

Registries and integrations

VariableDefaultDescription
SEQDESK_MIXS_SYNC_URLhttps://seqdesk.org/api/registry/mixsRemote MIxS checklist registry
SEQDESK_API_URLhttps://seqdesk.org/api/registry/sequencing-techRemote sequencing-technology registry endpoint
SEQDESK_USE_LOCAL_TECH_DEFAULTSunsettrue uses the bundled sequencing-technology defaults instead of the remote registry
SEQDESK_PROFILE_REGISTRY_URLhttps://seqdesk.org/api/install-profilesHosted install-profile registry used by in-app profile reload
SEQDESK_PROFILE_REGISTRY_ALLOWLISTunsetComma-separated allowlist of registry origins accepted for profile reload

Surface and development

VariableDescription
SEQDESK_APP_SURFACE / NEXT_PUBLIC_SEQDESK_APP_SURFACElab (default) or workbench — selects which application surface is served
SEQDESK_ENABLE_PUBLIC_DEMO / NEXT_PUBLIC_SEQDESK_ENABLE_PUBLIC_DEMOtrue enables public demo mode. See Demo Mode.
SEQDESK_LOCAL_TESTDATA_PATHDevelopment only (macOS, NODE_ENV=development): a directory used as an implicit data base path when nothing else is configured

3. Installer variables

These are consumed by install-dist.sh and the seqdesk launcher before the app starts. They have no effect on a running app — they configure the install flow itself. This is a practical subset, not an exhaustive list; see the unattended installation guide and seqdesk --help for the supported CLI surface.

Target and mode

VariableTypeDefaultDescription
SEQDESK_DIRpath./seqdeskInstallation directory
SEQDESK_VERSIONstringlatestRelease version to install
SEQDESK_YESboolean0Non-interactive mode
SEQDESK_INTERACTIVEboolean0Guided setup wizard (database choice, then admin/researcher accounts). Ignored when -y, --config, or --profile is used
SEQDESK_OVERWRITE_EXISTINGboolean0With -y, back up an existing install dir to <dir>.backup.<timestamp> and replace it
SEQDESK_LOGpathan unpredictable mktemp name under $TMPDIRInstall log path — see below
SEQDESK_VERBOSEboolean0Promote the diagnostic detail that normally goes only to the install log onto the terminal (same as --verbose)
SEQDESK_USE_PM2boolean1 to start under PM2; 0 to disable
SEQDESK_RUN_DOCTORboolean0Run seqdesk doctor after the install when the CLI is available
SEQDESK_APIstringhttps://seqdesk.org/apiAdvanced: override the release metadata endpoint

The default install log is created with mktemp under $TMPDIR (usually /tmp) as seqdesk-install-<YYYYMMDD-HHMMSS>-XXXXXX.log, under umask 077 and then chmod 600. The name is deliberately unpredictable and the file is private from the moment it exists, which matters on a shared login node. An explicit SEQDESK_LOG is honoured verbatim and created under the same restrictive umask; if permissions cannot be secured, logging is disabled rather than left world-readable. The final path is printed as Log: in the install summary.

Generated bootstrap passwords are printed only to the terminal, never to the install log. Redirecting the installer’s output to a file does not capture them.

Download integrity and network

Added so a slow or hostile network fails loudly instead of hanging, and so a regulated site can refuse an unverified package.

VariableTypeDefaultDescription
SEQDESK_REQUIRE_CHECKSUMbooleanunsetRefuse to install a release whose metadata publishes no checksum. Without it the installer warns loudly, reports RELEASE_INTEGRITY as NOT VERIFIED, and continues.
SEQDESK_CURL_CONNECT_TIMEOUTseconds10Per-attempt connect timeout for every download
SEQDESK_CURL_MAX_TIMEseconds120Per-attempt ceiling for small fetches (release metadata, hosted profiles, config files)
SEQDESK_CURL_DOWNLOAD_MAX_TIMEseconds1800Per-attempt ceiling for the release tarball. At the default this aborts a ~100 MB download below roughly 85 KB/s.
SEQDESK_CURL_RETRIESinteger2Retries for transient download failures

A checksum mismatch is always fatal and is never overridable. The Miniconda installer is fetched with no time ceiling, because it is large and often slow from institutional networks.

Miniconda source

VariableDefaultDescription
SEQDESK_MINICONDA_BASE_URLhttps://repo.anaconda.com/minicondaBase URL the Miniconda installer is fetched from — point it at an internal mirror
SEQDESK_MINICONDA_INSTALLERunsetExact installer filename, e.g. Miniconda3-py312_24.9.2-0-Linux-x86_64.sh. Wins over platform detection.

The default is the rolling -latest- build, so two installs a month apart can get different Conda versions. Pin both variables when you need a reproducible environment for a methods section or a validated deployment.

Configuration source

VariableTypeDescription
SEQDESK_CONFIGpath or URLsettings.json file to apply
SEQDESK_PROFILEstringHosted install-profile id to fetch and apply (legacy alias: SEQDESK_SETTING)
SEQDESK_PROFILE_CODEstringAccess code for a protected hosted install profile (legacy alias: SEQDESK_KEY)
SEQDESK_PROFILE_REGISTRY_URLURLRegistry the profile is fetched from (default https://seqdesk.org/api/install-profiles)
SEQDESK_ADDITIONAL_SETTINGS_FILEpathLocal JSON overrides applied after SEQDESK_CONFIG
SEQDESK_RECONFIGUREbooleanRe-apply configuration to an existing install. Skips the release download entirely — it is not an update.
SEQDESK_RESEED_DBbooleanDuring --reconfigure, run prisma migrate deploy and then the seed. Without it, reconfigure leaves the database untouched.
SEQDESK_PREPARE_POSTGRESbooleanPrepare a local PostgreSQL role/database, then exit

Infrastructure overrides

VariableTypeDescription
SEQDESK_PORTintegerApp port (default 8000)
SEQDESK_BIND_HOSTstringInterface the standalone server binds to. Default 0.0.0.0 — every interface. Set 127.0.0.1 for a local-only evaluation. The value is persisted in <dir>/.seqdesk-bind-host (mode 600) and reapplied by <dir>/start.sh.
SEQDESK_DATABASE_URLstringDATABASE_URL
SEQDESK_DATABASE_DIRECT_URLstringDIRECT_URL for Prisma migrations
SEQDESK_NEXTAUTH_URLstringNEXTAUTH_URL; also the Browser URL the installer prints at the end
SEQDESK_NEXTAUTH_SECRETstringNEXTAUTH_SECRET
SEQDESK_PG_HOMEpathRoot of the PostgreSQL cluster SeqDesk creates when no reusable server exists (default ~/.seqdesk/postgres). Its socket/ subdirectory must stay within 85 characters, so keep this path short.
SEQDESK_DATA_PATHpathSequencing data base path override
SEQDESK_RUN_DIRpathPipeline run directory override
SEQDESK_PIPELINE_DATABASE_DIRpathShared directory for large pipeline database assets

Secrets

VariableTypeDescription
SEQDESK_ANTHROPIC_API_KEYstringAnthropic API key for the optional field-validation routes
SEQDESK_ADMIN_SECRETstringRelease publishing admin secret
SEQDESK_BLOB_READ_WRITE_TOKENstringBlob token for release publishing

Pipeline toggles

VariableTypeDescription
SEQDESK_WITH_PIPELINESboolean1 to install Conda + Nextflow; 0 to skip
SEQDESK_WITH_CONDAbooleanLegacy alias for installing Miniconda
SEQDESK_SKIP_DEPSbooleanDeprecated; ignored in the distribution installer

Pipeline-execution overrides

These set runtime pipeline-execution settings at install time without editing a config file. They are written into SiteSettings.extraSettings.pipelineExecution during install, which is the same place Settings → Infrastructure → Pipeline Runtime writes.

VariableMaps toDescription
SEQDESK_EXEC_USE_SLURMpipelineExecution.useSlurmEnable SLURM submission
SEQDESK_EXEC_SLURM_QUEUEpipelineExecution.slurmQueuePartition/queue name
SEQDESK_EXEC_SLURM_CORESpipelineExecution.slurmCoresCPUs per job
SEQDESK_EXEC_SLURM_MEMORYpipelineExecution.slurmMemoryMemory per job
SEQDESK_EXEC_SLURM_TIME_LIMITpipelineExecution.slurmTimeLimitHours per job
SEQDESK_EXEC_SLURM_OPTIONSpipelineExecution.slurmOptionsExtra sbatch flags — the only supported way to set these
SEQDESK_EXEC_CONDA_PATHpipelineExecution.condaPathAuthoritative Conda base containing condabin/conda or bin/conda, or a new/nonexistent base where Miniconda may be installed
SEQDESK_EXEC_CONDA_ENVpipelineExecution.condaEnvConda environment name
SEQDESK_EXEC_NEXTFLOW_PROFILEpipelineExecution.nextflowProfileOptional additional Nextflow profile; SeqDesk adds conda automatically
SEQDESK_EXEC_WEBLOG_URLpipelineExecution.weblogUrlNextflow weblog endpoint
SEQDESK_EXEC_WEBLOG_SECRETpipelineExecution.weblogSecretShared secret for weblog requests

When SEQDESK_EXEC_CONDA_PATH is set, it takes precedence over PATH and standard user-prefix discovery. A working existing base is reused. A path that does not exist may be created by the Miniconda installer. An existing path that does not contain a working Conda executable stops the install with recovery instructions; the installer does not delete it or silently select another location.

There is no SEQDESK_EXEC_MODE variable in the distribution installer. Choose the execution target with SEQDESK_EXEC_USE_SLURM at install time, or SEQDESK_PIPELINE_MODE / pipelines.execution.mode for the running application. Container profiles such as docker, singularity, apptainer, and podman are rejected when a pipeline starts; SeqDesk supports Conda-based local or SLURM execution.

Private pipeline package (MetaXpath)

VariableAliasDescription
SEQDESK_METAXPATH_PACKAGE_URLMETAXPATH_PACKAGE_URLOptional tarball URL override for the private MetaXpath package
SEQDESK_METAXPATH_KEYMETAXPATH_PACKAGE_TOKENGitHub/package bearer token used to resolve and download the private package
SEQDESK_METAXPATH_SHA256METAXPATH_PACKAGE_SHA256Optional expected tarball checksum override
SEQDESK_METAXPATH_OPTIONAL1 or true downgrades a failed MetaXpath install from fatal to a warning; the rest of the profile still applies

SEQDESK_METAXPATH_PACKAGE_URL and SEQDESK_METAXPATH_SHA256 are normally left unset: when only a MetaXpath token is provided, the release asset URL and SHA-256 digest are resolved automatically.

Form presets

VariableTypeDescription
SEQDESK_ORDER_FORM_SETTINGSpathJSON exported from Settings → Sequencing Order Form → Import / Export, applied after the seed
SEQDESK_STUDY_FORM_SETTINGSpathJSON exported from Settings → Study Forms → Import / Export, applied after the seed

These are installer inputs only. Settings → Infrastructure → Import settings.json deliberately ignores them and points you at the form import screens instead.

SeqDesk.com admin variables

These are used by the hosted SeqDesk.com admin service, not by an installed SeqDesk runtime. Configure them on the SeqDesk.com deployment when using install-profile administration features.

VariableRequiredDefaultDescription
NEON_API_KEYFor hosted Neon provisioningNeon API key used by the install-profile admin panel to create, test, and delete managed Neon projects
NEON_ORG_IDNoOptional Neon organization id passed when creating projects with a personal API key
NEON_DEFAULT_REGION_IDNoaws-eu-central-1Region id for newly provisioned hosted Neon databases

Examples

A SLURM facility, secrets in the unit file

# Site export SEQDESK_SITE_NAME="My Sequencing Facility" export SEQDESK_DATA_PATH="/mnt/sequencing/data" # Pipeline execution on SLURM (enable the pipelines themselves under # Settings -> Pipelines; this only pins where they run) export SEQDESK_PIPELINE_MODE="slurm" export SEQDESK_SLURM_ENABLED="true" export SEQDESK_SLURM_QUEUE="bioinformatics" export SEQDESK_SLURM_CORES="16" export SEQDESK_SLURM_MEMORY="64GB" export SEQDESK_SLURM_TIME="24" # hours # Shared conda cache so isolated compute nodes never fetch packages export SEQDESK_CONDA_PATH="/net/software/conda" export SEQDESK_CONDA_CACHE_DIR="/net/software/conda-cache" # Secrets export DATABASE_URL="postgresql://seqdesk:...@db.internal:5432/seqdesk?schema=public" export NEXTAUTH_SECRET="$(openssl rand -base64 32)" export SEQDESK_ENCRYPTION_KEY="$(openssl rand -base64 32)"

A reproducible, offline-friendly install

SEQDESK_REQUIRE_CHECKSUM=1 \ SEQDESK_MINICONDA_BASE_URL="https://mirror.internal/miniconda" \ SEQDESK_MINICONDA_INSTALLER="Miniconda3-py312_24.9.2-0-Linux-x86_64.sh" \ SEQDESK_CURL_DOWNLOAD_MAX_TIME=3600 \ SEQDESK_LOG=/var/log/seqdesk-install.log \ npx -y seqdesk@latest -y --with-pipelines --dir /opt/seqdesk