Skip to Content
ConfigurationConfig File Reference

Config File Reference

The settings.json 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. settings.json (recommended)
  2. seqdesk.config.json (legacy/development fallback)
  3. .seqdeskrc
  4. .seqdeskrc.json

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

Older installs may still keep their runtime config under the legacy seqdesk.config.json filename. SeqDesk continues to read it as a fallback, so existing deployments keep working — no rename is required.

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": { "path": "/opt/conda", "environment": "seqdesk-pipelines" }, "slurm": { "enabled": false, "queue": "cpu", "cores": 4, "memory": "64GB", "timeLimit": 12, "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, "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 }, "moduleSettings": { "account-validation": { "allowedDomains": ["example.org"], "enforceValidation": false }, "billing-info": { "pspEnabled": false, "costCenterEnabled": false } }, "telemetry": { "enabled": false, "endpoint": "https://seqdesk.org/api/telemetry/heartbeat", "intervalHours": 24 }, "notifications": { "enabled": false, "inApp": { "enabled": true }, "provider": "seqdesk-relay", "relayUrl": "https://seqdesk.org/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:8000", "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""local"Where pipelines run
runDirectorystring"./pipeline_runs"Output directory
pipelineOverridesobject{}Per-pipeline execution defaults keyed by pipeline ID

pipelines.execution.conda — Conda Settings

KeyTypeDefaultDescription
pathstring"/opt/conda"Conda installation path
environmentstringEnvironment name

pipelines.execution.slurm — SLURM Settings

KeyTypeDefaultDescription
enabledbooleanfalseSubmit jobs to SLURM
queuestring"cpu"Partition/queue name
coresinteger4CPUs per job
memorystring"64GB"Memory per job
timeLimitinteger12Time 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 Conda-compatible Nextflow profile for this pipeline

SeqDesk uses Conda-based pipeline execution. Container profiles such as docker, singularity, apptainer, and podman are rejected when a run starts.

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)
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 sequencing orders within their department
allowDeleteSubmittedOrdersbooleanAllow users to delete submitted sequencing orders
allowUserAssemblyDownloadbooleanAllow users to download assembly outputs
orderNotesEnabledbooleanEnable sequencing order notes/comments
postSubmissionInstructionsstringFacility instructions shown after sequencing order submission

auth — Authentication

KeyTypeDefaultDescription
allowRegistrationbooleantruePublic registration enabled

The configuration shape still accepts auth.requireEmailVerification, auth.sessionTimeout, and sequencingFiles.allowSingleEnd for compatibility, but the current runtime does not enforce the first two and currently forces single-end support on. They are omitted from recommended examples until those implementations change.

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://seqdesk.org/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://seqdesk.org/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 a sequencing order is submitted
order.statusChangedbooleantrueNotify when a sequencing 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 or slurm
  • 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.