Runtime Settings (Admin UI)
Most of what a facility admin changes day to day lives in the database, in the
SiteSettings singleton row, and is edited through the Admin UI. No file
editing, no restart.
Two things make this more subtle than “the UI is the settings screen”:
- The database is the lowest-priority configuration source. If the same
setting is pinned in
settings.jsonor an environment variable, the UI field still saves — and the pinned value keeps winning. - For several features the database is the only source that is read. ENA
credentials, file discovery rules, access policy and module settings are read
from
SiteSettingsdirectly, so the Admin UI is authoritative for them regardless of what the config file says.
Both behaviours are explained in Configuration Sources & Priority.
Where the settings live
All admin screens sit under the sidebar Settings group. The sub-items, in sidebar order:
| Sidebar item | Route | Owns |
|---|---|---|
| Sequencing Order Form | /admin/form-builder | Order form fields, post-submission instructions, deletion of submitted orders, user assembly downloads |
| Study Forms / Define Studies | /admin/study-form-builder or /admin/study-definitions | Study form fields and groups (the label depends on whether the dynamic-studies module is enabled) |
| MIxS Checklists | /admin/mixs-checklists | Which MIxS checklists are offered |
| Modules | /admin/modules | Optional module on/off switches and their settings |
| Sequencers | /admin/sequencing-tech | Sequencing technology, device and kit registry |
| MinKNOW Stream | /admin/minknow-stream | Live ONT ingest configuration |
| Infrastructure | /admin/data-compute | Hub for Data Storage and Pipeline Runtime, plus Import settings.json |
| Background Workers | /admin/background-workers | Worker status and controls |
| Accounts | /admin/admin-accounts | Administrator accounts and Access & Sharing |
| Data Upload | /admin/ena | ENA Configuration (Webin credentials, test mode) |
| Pipelines | /admin/settings/pipelines | Which pipelines are enabled and their per-pipeline configuration |
| Notifications | /admin/settings/notifications | Notification channels and events |
| Info | /admin/settings | Platform Info — diagnostics, software updates, telemetry toggle, sequencing order notes |
Every one of these requires a FACILITY_ADMIN session. The underlying APIs
return 401 for anyone else.
Setting-by-setting
Site identity and branding
These columns exist on the SiteSettings row, but there is no admin form for
them. Site name and contact email are set through the config file or a hosted
install profile; the remaining branding columns are seeded with defaults and are
not part of the supported configuration surface.
| Field | SiteSettings column | How it is set |
|---|---|---|
| Site Name | siteName | site.name in settings.json, an install profile, or the seed default SeqDesk |
| Contact Email | contactEmail | site.contactEmail in settings.json or an install profile |
| Data Base Path | dataBasePath | site.dataBasePath, or Settings → Infrastructure → Data Storage |
| Primary Color | primaryColor | Seed default #3b82f6; no UI, not profile-managed |
| Secondary Color | secondaryColor | Seed default #1e40af; no UI, not profile-managed |
| Logo URL | logoUrl | No UI, not profile-managed |
| Favicon URL | faviconUrl | No UI, not profile-managed |
| Help Text | helpText | No UI, not profile-managed |
Access and sharing
| Setting | Screen | Stored as |
|---|---|---|
| Department Sharing | Accounts → Access & Sharing | extraSettings.departmentSharing |
| User Assembly Downloads | Accounts → Access & Sharing | extraSettings.allowUserAssemblyDownload |
| Allow Deletion of Submitted Sequencing Orders | Sequencing Order Form | extraSettings.allowDeleteSubmittedOrders |
| Post-Submission Instructions | Sequencing Order Form | SiteSettings.postSubmissionInstructions |
| Sequencing Order notes | Info (Platform Info) | extraSettings.orderNotesEnabled |
Two of these deserve a second thought before you flip them:
- Department Sharing lets everyone in a department view and edit each other’s sequencing orders, not just view them. Appropriate for a single shared lab; wrong for a facility serving unrelated groups.
- Allow Deletion of Submitted Sequencing Orders lets facility admins delete orders after submission. It exists for testing. Leave it off in production — deletion is not recoverable from within SeqDesk.
Turning Sequencing Order notes off hides the shared markdown notepad on sequencing order pages and disables the notes API, so it is a real switch rather than a cosmetic one.
ENA configuration
Found under sidebar Settings → Data Upload (/admin/ena, titled “ENA
Configuration”):
| Setting | Stored as | Notes |
|---|---|---|
| ENA Username | SiteSettings.enaUsername | |
| ENA Password | SiteSettings.enaPassword | Encrypted at rest with AES-256-GCM, keyed from SEQDESK_ENCRYPTION_KEY or NEXTAUTH_SECRET |
| ENA Test Mode | SiteSettings.enaTestMode | Default true; submissions go to the ENA test service until you turn it off |
This screen is authoritative: ENA submissions read these columns, not the
resolved configuration. Putting a Webin password in settings.json neither works
at runtime nor is safe. See
ENA Credentials.
Rotating NEXTAUTH_SECRET without a separate
SEQDESK_ENCRYPTION_KEY makes the stored ENA password
undecryptable — re-enter it on this screen afterwards.
Infrastructure
Settings → Infrastructure (/admin/data-compute) is a hub with two detail
screens and a JSON import.
| Screen | Route | Stored as |
|---|---|---|
| Data Storage | /admin/data-storage | SiteSettings.dataBasePath and extraSettings.sequencingFiles (extensions, scan depth, ignore patterns, auto-assign) |
| Pipeline Runtime | /admin/pipeline-runtime | extraSettings.pipelineExecution (execution mode, SLURM queue/cores/memory/time limit/options, Conda path and environment, Nextflow profile, run and database directories, weblog URL and secret) |
| Import settings.json | on the hub page | Applies a settings.json into the database in one step |
Pipeline Runtime is the only supported place to set extra sbatch options: a
pipelines.execution.slurm.options value in a config file is discarded by the
executor. Everything else on that screen loses to a config-file or environment
value for the same key.
Import settings.json applies the site, access, auth, ena,
sequencingFiles, sequencingTech, telemetry, notifications,
moduleSettings, modules, pipelines and forms blocks of a settings file
into the database. It deliberately ignores install-only and secret blocks
(bootstrap, runtime, privatePipelines, installer preset paths such as
orderFormSettings) and warns rather than applying them. It is the supported way
to push install-time sections into an already-running install without re-running
the installer.
See Data Storage and Pipeline Runtime.
Modules
Found under sidebar Settings → Modules (/admin/modules). The
modulesConfig column stores which optional modules are on:
| Module ID | Name | Default | Has settings |
|---|---|---|---|
mixs-metadata | MIxS Metadata | on | — |
ena-sample-fields | ENA Sample Fields | on | — |
ai-validation | AI Field Validation | on | — |
funding-info | External Funding & Grants | off | — |
billing-info | Cost Center & PSP | off | yes |
sequencing-tech | Sequencing Technology | off | yes |
dynamic-studies | Dynamic Study Definitions | off | — |
account-validation | Account Validation | off | yes |
notifications | Email Notifications | off | yes |
Module settings are stored separately from the on/off switch:
extraSettings.accountValidationSettings and extraSettings.billingSettings,
which correspond to moduleSettings.account-validation and
moduleSettings.billing-info in
the config file. Module changes may require a
page refresh to take effect, because the enabled-module set is read once when the
client loads.
Enabling a module is not the same as configuring it. Account Validation
enabled with an empty allowedDomains and the default enforceValidation: true
blocks every new registration; set the domains at the same time. Email
Notifications enabled without notifications.enabled and a relay token
dispatches nothing.
Other extraSettings keys
| Setting | Screen | Key |
|---|---|---|
| Study form fields and groups | Study Forms | extraSettings.studyFormFields, extraSettings.studyFormGroups |
| Sequencing technology config | Sequencers | extraSettings.sequencingTechConfig |
| Telemetry | Info (Platform Info) | extraSettings.telemetry |
| Install-profile pipeline allowlist | applied by profile/import | extraSettings.installProfilePipelineAllowlist |
Platform Info
Settings → Info (/admin/settings) is titled Platform Info. It is
primarily a diagnostics view rather than a settings form. It shows:
- Diagnostics Snapshot, Health Overview and Diagnostics Shortcuts
- Feature Flags — the module and capability state the server is running with
- Demo data — seeding controls for the bundled example dataset
- Software Updates — running, installed and latest versions, and the update and rollback controls (see Automatic Updates)
- Detected Tool Versions
- Configuration Sources — the resolved configuration and where each value came from
It also carries two real toggles that have no better home: Sequencing Order notes and SeqDesk telemetry.
How quickly a change applies
| Change | Takes effect |
|---|---|
Anything read straight from SiteSettings (ENA, access policy, file discovery, modules) | On the next request, though module state may need a page refresh |
| Anything read through the resolved configuration (pipeline execution, notifications, telemetry, data base path) | Within 60 seconds — the resolution cache TTL. Saving clears the cache for the process that handled the request; other processes wait for their own TTL. |
runtime.* values (DATABASE_URL, DIRECT_URL, NEXTAUTH_URL, NEXTAUTH_SECRET) | Only after a restart — they are copied into process.env once at startup |
app.port | Only after a restart, and only via the generated start scripts |
Checking which source is winning
If a UI field will not stick, check what the resolver thinks:
GET /api/admin/config/statusLook up the dotted path in sources. database means the Admin UI is in charge.
env or file means your change is being overridden and you need to remove the
pin — or accept it. default means nothing has ever set it.
The same information is on the Platform Info page under Configuration Sources.
Secrets are masked in the /api/admin/config/status response.
ena.password, notifications.relayToken, and the
runtime secrets (nextAuthSecret, anthropicApiKey,
adminSecret, blobReadWriteToken) are returned as
******** when set. A masked value tells you a secret is present,
not what it is. The endpoint is restricted to FACILITY_ADMIN
sessions.
Related
- Configuration Sources & Priority
- Config File Reference
- Administration — task guides for these screens