Skip to Content
ConfigurationConfig File Reference

Config File Reference

The config file provides project-level configuration in a single structured JSON file. It is the recommended way to manage non-secret settings.

File Discovery

SeqDesk searches for config files in the project root (same directory as package.json) in this order:

  1. seqdesk.config.json (recommended)
  2. .seqdeskrc
  3. .seqdeskrc.json

The first file found is used. If no config file exists, only environment variables, database settings, and built-in defaults apply.

Complete Structure

{ "app": { "port": 8000 }, "site": { "name": "My Sequencing Facility", "dataBasePath": "/mnt/sequencing/data", "contactEmail": "facility@example.com" }, "pipelines": { "enabled": true, "databaseDirectory": "/mnt/seqdesk/pipeline-databases", "execution": { "mode": "local", "runDirectory": "./pipeline_runs", "conda": { "enabled": true, "path": "/opt/conda", "environment": "seqdesk-pipelines" }, "slurm": { "enabled": false, "queue": "default", "cores": 4, "memory": "16GB", "timeLimit": 24, "options": "" }, "pipelineOverrides": { "mag": { "mode": "slurm", "slurm": { "queue": "long", "cores": 16, "memory": "128GB", "timeLimit": 48 } }, "metaxpath": { "mode": "slurm" } } }, "mag": { "enabled": true, "version": "3.4.0", "stubMode": false, "skipProkka": true, "skipConcoct": true } }, "ena": { "testMode": true, "username": "", "password": "", "brokerAccount": false, "centerName": "" }, "sequencingFiles": { "extensions": [".fastq.gz", ".fq.gz", ".fastq", ".fq"], "scanDepth": 2, "allowSingleEnd": true, "ignorePatterns": ["**/tmp/**", "**/undetermined/**"], "autoAssign": false, "activeWriteMinAgeMs": 60000, "simulationMode": "auto", "simulationTemplateDir": "/opt/seqdesk/simulation-templates" }, "access": { "departmentSharing": false, "allowDeleteSubmittedOrders": false, "allowUserAssemblyDownload": false, "orderNotesEnabled": true, "postSubmissionInstructions": "" }, "auth": { "allowRegistration": true, "requireEmailVerification": false, "sessionTimeout": 24 }, "moduleSettings": { "account-validation": { "allowedDomains": ["example.org"], "enforceValidation": false }, "billing-info": { "pspEnabled": false, "costCenterEnabled": false } }, "telemetry": { "enabled": false, "endpoint": "https://www.seqdesk.com/api/telemetry/heartbeat", "intervalHours": 24 }, "notifications": { "enabled": false, "inApp": { "enabled": true }, "provider": "seqdesk-relay", "relayUrl": "https://www.seqdesk.com/api/notifications/relay", "events": { "order": { "submitted": true, "statusChanged": true, "samplesSent": true }, "ticket": { "created": true, "reply": true } }, "userDefaults": { "orders": true, "support": true } }, "runtime": { "databaseUrl": "postgresql://seqdesk:replace-with-password@127.0.0.1:5432/seqdesk?schema=public", "directUrl": "postgresql://seqdesk:replace-with-password@127.0.0.1:5432/seqdesk?schema=public", "nextAuthUrl": "http://localhost:3000", "nextAuthSecret": "your-secret-here" } }

Section Reference

app — Application Runtime

KeyTypeDefaultDescription
portinteger8000App listen port for generated start scripts

site — Facility Information

KeyTypeDefaultDescription
namestring"SeqDesk"Display name shown in the UI
dataBasePathstring"./data"Base directory for sequencing data
contactEmailstringContact email shown to researchers

pipelines — Pipeline Configuration

KeyTypeDefaultDescription
enabledbooleanfalseMaster switch for pipeline features
databaseDirectorystring""Optional shared root directory for large pipeline database assets

pipelines.execution — Execution Settings

KeyTypeDefaultDescription
mode"local" | "slurm" | "kubernetes""local"Where pipelines run
runDirectorystring"./pipeline_runs"Output directory
pipelineOverridesobject{}Per-pipeline execution defaults keyed by pipeline ID

pipelines.execution.conda — Conda Settings

KeyTypeDefaultDescription
enabledbooleanfalseUse Conda for dependencies
pathstring"/opt/conda"Conda installation path
environmentstringEnvironment name

pipelines.execution.slurm — SLURM Settings

KeyTypeDefaultDescription
enabledbooleanfalseSubmit jobs to SLURM
queuestring"default"Partition/queue name
coresinteger4CPUs per job
memorystring"16GB"Memory per job
timeLimitinteger24Time limit (hours)
optionsstring""Additional SLURM options

pipelines.execution.pipelineOverrides — Per-Pipeline Runtime Policy

Each override is keyed by pipeline ID. Use this to keep global execution local while sending large workflows such as mag or metaxpath to SLURM.

KeyTypeDescription
mode"inherit" | "local" | "slurm"Execution target for this pipeline
slurmobjectOptional per-pipeline queue, cores, memory, time limit, and options
nextflowProfilestringOptional Nextflow profile for this pipeline

pipelines.mag — MAG Pipeline

KeyTypeDefaultDescription
enabledbooleantrueEnable nf-core/mag
versionstring"3.4.0"Pipeline version
stubModebooleanfalseTest mode (no real analysis)
skipProkkabooleantrueSkip Prokka annotation
skipConcoctbooleantrueSkip CONCOCT binning

ena — ENA Submission

KeyTypeDefaultDescription
testModebooleantrueUse test server
usernamestringWebin username
passwordstringWebin password
brokerAccountbooleanfalseWebin account has ENA broker permissions
centerNamestring""Submission center name

Avoid storing ENA credentials in the config file. Use environment variables (SEQDESK_ENA_USERNAME, SEQDESK_ENA_PASSWORD) or the Admin UI instead.

sequencingFiles — File Discovery

KeyTypeDefaultDescription
extensionsstring[][".fastq.gz", ".fq.gz", ".fastq", ".fq"]Allowed file extensions
scanDepthinteger2Directory scan depth (1–10)
allowSingleEndbooleantrueAllow single-end reads
ignorePatternsstring[]["**/tmp/**", "**/undetermined/**"]Glob patterns to skip
autoAssignbooleanAutomatically link discovered files to samples when names match
activeWriteMinAgeMsintegerMinimum file age (ms) for active-write stability checks
simulationMode"auto" | "synthetic" | "template""auto"Read-simulation mode (auto uses templates if available)
simulationTemplateDirstringDirectory of realistic FASTQ pairs for template-based simulation

access — Researcher Access Policy

KeyTypeDefaultDescription
departmentSharingbooleanAllow users to share submitted orders within their department
allowDeleteSubmittedOrdersbooleanAllow users to delete submitted orders
allowUserAssemblyDownloadbooleanAllow users to download assembly outputs
orderNotesEnabledbooleanEnable order notes/comments
postSubmissionInstructionsstringFacility instructions shown after order submission

auth — Authentication

KeyTypeDefaultDescription
allowRegistrationbooleantruePublic registration enabled
requireEmailVerificationbooleanfalseRequire email verification before sign-in
sessionTimeoutinteger24Session timeout (hours)

moduleSettings — Optional Module Settings

Settings for optional modules, keyed by module id.

moduleSettings.account-validation

KeyTypeDescription
allowedDomainsstring[]Email domains accepted for automatic account validation
enforceValidationbooleanRequire allowed-domain validation for new accounts

moduleSettings.billing-info

KeyTypeDescription
pspEnabledbooleanEnable PSP (project) number capture
pspPrefixRangeobject{ min, max } range for the PSP prefix
pspMainDigitsintegerNumber of main PSP digits
pspSuffixRangeobject{ min, max } range for the PSP suffix
pspExamplestringExample PSP shown in the form
costCenterEnabledbooleanEnable cost-center capture
costCenterPatternstringRegex the cost center must match
costCenterExamplestringExample cost center shown in the form

telemetry — Operational Telemetry

KeyTypeDefaultDescription
enabledbooleanfalseOpt-in anonymous heartbeat reporting
endpointstringhttps://www.seqdesk.com/api/telemetry/heartbeatHeartbeat URL
intervalHoursinteger24Minimum hours between automatic heartbeats

See Operational Telemetry for what’s reported and how to opt out.

notifications — Notifications

Controls the in-app notification panel and the optional hosted email relay.

KeyTypeDefaultDescription
enabledbooleanfalseMaster switch for the hosted SeqDesk email notification relay
inApp.enabledbooleantrueMaster switch for the in-app notification panel/channel
provider"seqdesk-relay""seqdesk-relay"Notification provider (only the hosted relay is supported)
relayUrlstringhttps://www.seqdesk.com/api/notifications/relayHosted relay endpoint
relayTokenstringScoped notification relay token — set via env, never committed
eventsobject(all on)Which events trigger notifications
userDefaultsobject{ orders, support }Default per-user opt-in for orders and support channels

notifications.events — Event Toggles

KeyTypeDefaultDescription
order.submittedbooleantrueNotify when an order is submitted
order.statusChangedbooleantrueNotify when an order status changes
order.samplesSentbooleantrueNotify when samples are marked sent
ticket.createdbooleantrueNotify when a support ticket is created
ticket.replybooleantrueNotify on a ticket reply

The relay token is a secret. Set relayToken through SEQDESK_NOTIFICATION_RELAY_TOKEN — never commit it to a config file. It is masked in /api/admin/config/status responses.

runtime — Application Runtime

These values are applied to process.env at startup if the corresponding environment variable is not already set.

KeyMaps ToDescription
databaseUrlDATABASE_URLPostgreSQL runtime connection string
directUrlDIRECT_URLDirect PostgreSQL connection for Prisma migrations
nextAuthUrlNEXTAUTH_URLNextAuth.js callback URL
nextAuthSecretNEXTAUTH_SECRETSession signing secret
anthropicApiKeyANTHROPIC_API_KEYAPI key for AI validation/extraction routes
adminSecretADMIN_SECRETRelease publishing admin secret used by scripts
blobReadWriteTokenBLOB_READ_WRITE_TOKENVercel Blob token for release publishing scripts
updateServerSEQDESK_UPDATE_SERVERUpdate server URL

Validation

The config system validates:

  • The file must be valid JSON
  • site.dataBasePath must be a string
  • pipelines.execution.mode must be local, slurm, or kubernetes
  • ena.testMode must be a boolean
  • sequencingFiles.scanDepth must be an integer between 1 and 10

Invalid values are logged as warnings and the corresponding default is used instead.