FAQ
Common questions about getting SeqDesk installed and running. For step-by-step guides, start with the Installation and Getting Started sections.
Requirements & Dependencies
What do I need to run SeqDesk?
Node.js 22.13.0 through 22.x or Node.js 24.x (recommended), PostgreSQL 14+, and
a Linux host or local macOS application environment. The installer also uses
Bash, curl, tar, npm, and a SHA-256 checksum tool. Native
Windows is not supported; WSL is guidance rather than a currently tested
installation target. See Prerequisites for
the required-versus-extended CI matrix.
Does SeqDesk work with SQLite?
No — SeqDesk is PostgreSQL-only. SQLite is not supported for new installs. An existing SQLite instance must stay on its last SQLite-compatible release until it is manually migrated to PostgreSQL.
Do I need Conda, Nextflow, or SLURM?
Only if you run pipelines. Pipeline support is off by default. With
--with-pipelines, the installer reuses a compatible Conda base or provisions
Miniconda, then creates or updates the seqdesk-pipelines
environment with Python 3.11, Java 17, Nextflow, nf-core, and supporting
command-line tools. SLURM is optional — add it when pipeline jobs should be
submitted to a cluster scheduler. The core application (sequencing orders,
samples, studies, ENA submission) runs without any of them.
Installation & Quickstart
How do I install SeqDesk?
Download the installer and run it from a terminal:
curl -fsSLo /tmp/seqdesk-install.sh https://seqdesk.org/install.sh &&
bash /tmp/seqdesk-install.sh --interactive --dir "$HOME/seqdesk"Node.js and npm are still required by the release installation. The npm launcher remains an equivalent alternative. See the Quickstart and Linux install guides.
Where does it install, and what port does it use?
The default target is ./seqdesk relative to your current directory. For
predictable installs, set an absolute path with --dir (for example
bash /tmp/seqdesk-install.sh --interactive --dir "$HOME/seqdesk"). The listen port comes from your configuration
(app.port or --port); installed instances default to port 8000, while the
local npm run dev server uses 3000. For a production Linux target, prepare a
service-owned parent first rather than assuming /opt is writable.
The installer aborts because the target directory already exists.
A fresh install refuses to overwrite an existing directory. In interactive mode
it asks “Backup and replace?”; with -y it aborts instead. Pass
--overwrite-existing to move the old directory to <dir>.backup.<timestamp>
and replace it. See Unattended + Reconfigure.
How do I install on macOS?
Install Node.js with Homebrew, then use the guided installer:
brew install node@24
export PATH="$(brew --prefix node@24)/bin:$PATH"
curl -fsSLo /tmp/seqdesk-install.sh https://seqdesk.org/install.sh
SEQDESK_BIND_HOST=127.0.0.1 bash /tmp/seqdesk-install.sh --interactive \
--dir "$HOME/seqdesk"The guided installer resolves PostgreSQL for you: it reuses an already-running
PostgreSQL 14+ server, an adoptable Unix socket, or a non-root Homebrew service.
If none is available it creates a cluster it owns under $HOME/.seqdesk/postgres
(override with SEQDESK_PG_HOME; the path must be 85 characters or shorter),
initialized and started as your macOS login user with initdb/pg_ctl. That
cluster listens on a private Unix socket only — no TCP port, no launchd service —
and <dir>/start.sh starts it before the app. PostgreSQL setup must run as your
normal macOS login user: never use sudo, including sudo brew services start.
See Prerequisites and the dedicated
macOS guide.
Database & Migrations
Migrations hang or time out (advisory-lock error on a pooled database).
migrate deploy takes a session-level Postgres advisory lock, which a
transaction-mode connection pooler cannot hold — so on a pooled endpoint (such as
Neon’s -pooler host) it hangs and fails with P1002. Point DIRECT_URL at the
unpooled endpoint for migrations. SeqDesk also derives the unpooled URL
automatically as a safety net, so a misconfigured pooled URL still works.
What is DIRECT_URL for?
DATABASE_URL is the runtime connection the app uses; DIRECT_URL is the
connection Prisma uses for schema migrations. They can be the same string for a
direct database. For cloud databases that put a pooler in front, set DIRECT_URL
to the unpooled connection so migrations bypass the pooler. See the
config file reference.
Can the installer set up PostgreSQL for me?
Yes — and in most cases you do not have to supply a database at all. Run the
guided installer as a normal, non-root user: SeqDesk first reuses a healthy local
PostgreSQL 14+ server (or a Unix socket) it can administer, and otherwise creates
and owns a private cluster under $HOME/.seqdesk/postgres (override with
SEQDESK_PG_HOME; the path must be 85 characters or shorter). That cluster is
socket-only — it opens no TCP port, is not registered with launchd or systemd,
and <dir>/start.sh starts it before the app on every boot.
On Linux, sudo is only needed to install the PostgreSQL server package when it
is absent (sudo apt-get install postgresql /
sudo dnf install postgresql-server), or to administer a pre-existing system
server that SeqDesk adopts, whose role and database it creates through
sudo -n -u postgres psql. Never run the installer itself with sudo: it
refuses to create a PostgreSQL instance owned by root and tells you to rerun as a
normal user or pass --database-url. --prepare-postgres remains available as a
separate administrator bootstrap step, operating on a DATABASE_URL that already
exists — the Prerequisites page includes a
ready-to-send SQL template for locked-down servers where an admin must prepare
the role and database first.
First Login & Security
How do I log in the first time?
Open the URL printed by the installer and use the administrator account created
by the guided wizard. The packaged install defaults to port 8000. An
unattended install that omits account settings creates
admin@example.com / admin (facility admin) and
user@example.com / user (researcher). These defaults are published and
exist only for bootstrap — change or remove them immediately on any shared
or network-reachable instance. If installation-time seeding could not finish,
the app redirects to /setup and retries it. See
First Login & Setup.
Can I expose SeqDesk to the public internet?
No. SeqDesk assumes a closed, trusted network — behind a VPN or on an
institutional intranet. Convenience defaults such as open self-registration and
bootstrap accounts assume that context. Note that the app binds to 0.0.0.0
(all interfaces) by default, so it is reachable from anything that can route to
the host: set SEQDESK_BIND_HOST=127.0.0.1 at install time (it is persisted in
<dir>/.seqdesk-bind-host and reapplied by start.sh) if the instance should
only answer on the loopback interface. The public demo at demo.seqdesk.org is
the only intentional exception.
Is there SSO or OAuth?
Not built in. Authentication is email + password via the NextAuth credentials provider. For single sign-on, run SeqDesk behind an identity-aware proxy (for example Cloudflare Access or Pomerium) and trust its forwarded headers.
Updates & Health
How do I update or roll back?
Use Admin → Settings → Software Updates to check for and install an
application release. Upgrading the npm launcher updates the seqdesk command,
not an already-installed application. Likewise, --reconfigure reapplies
settings and deliberately skips the release download; it is not an update.
Use the Software Updates rollback action, or re-point the active release
symlink manually if the app cannot start. See
Manual Update & Rollback.
How do I check that an install is healthy?
Run npx -y seqdesk@latest doctor — it is read-only and safe to run as often as
you like. It
verifies the install layout, that the database is reachable, and that the app
answers over HTTP. Exit code 0 means no failures (warnings are allowed); exit
code 1 means at least one check failed. See seqdesk doctor.
Still stuck? See Support & Messages or open an issue on GitHub .