Getting Started

Quick Start

Boot the engine, sign in to the console, and run your first workflow

Boot an engine, sign a browser in, and run a real workflow — about five minutes end to end.

Prerequisites: install dxflow, and install a container runtime (Docker, Podman, Singularity, or Apptainer) so workflows have somewhere to run.

Step 1: Boot the engine

Start the engine with the web console. The --console flag serves the console and auto-enables HTTP:

sudo dxflow boot up --console
The console listens on port 80 by default, and ports below 1024 are privileged — hence sudo. To run unprivileged, set a higher port (dxflow config set http-port 8080) or grant the bind capability. See Port Binding.

The engine reports where it answers. The Console address is the one to open in a browser:

Engine successfully booted (use 'CTRL+C' to stop)
● Server
  Socket       ~/.dxflow/unix.sock
  HTTP         http://127.0.0.1:80  (bound to 0.0.0.0)
● Console
  Address      http://127.0.0.1:80  (open in a browser)

This runs in the foreground and holds the terminal. Other boot modes:

sudo dxflow boot up                      # Unix socket only, no web server
sudo dxflow boot up --https --console    # serve over HTTPS
sudo dxflow boot up --console --daemon   # background service (Linux, SystemD or OpenRC)

See Advanced Boot Configuration for every flag and deployment pattern.

Step 2: Sign in to the console

Open http://localhost (or http://<your-server-ip>) in a browser. The engine authenticates every connection that arrives over HTTP, so the console opens on a sign-in dialog.

The quickest way in is a pairing code. Leave the engine running and open a second terminal on the engine host:

sudo dxflow engine pair

It prints a single-use code and waits:

● Pairing
  Permissions  SHELL, ARTIFACT, RUNTIME, WORKFLOW, AGENT
  Code         K7QM3XPD
  Waiting 30s for a console to use the code

Choose Pairing code in the browser and enter it. The terminal then shows who is asking and waits for your answer:

● Pairing request
  Address      203.0.113.9
  Agent        Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)
  Approve? [y/N] y

Answer y and the console is signed in.

Codes are single-use and both windows are 30 seconds, so run dxflow engine pair again if either lapses. For a session you can renew in one click, register an RSA key instead and sign in with the private key — see Authorized Key.

Step 3: Run your first workflow

The dxflow hub is a catalog of ready-to-run workflows you pull by name. Deploy JupyterLab:

dxflow workflow create hub://jupyter --identity notebook
dxflow workflow start notebook --override env.app.PASSWORD=my-strong-pass
Workflow created successfully: with 'notebook' identity and 'created' status
Workflow started successfully: with 'notebook' identity

Open http://localhost:8888 and sign in with the password you set. --override tunes a single run — here it replaces the PASSWORD variable on the app step, which otherwise defaults to dxflow.

Browse the rest of the catalog from the CLI:

dxflow workflow hub search genomics
dxflow workflow hub inspect fastqc
The console does the same thing: Resources → New workflow, then start it from the node menu. Both clients call the same engine API. See the User Interface documentation.

Step 4: Watch it run

dxflow workflow list              # identity, name, status, tags, link, created
dxflow workflow steps notebook    # per-step status and exit codes
dxflow workflow logs notebook --live   # stream stdout and stderr
dxflow workflow stats notebook    # live CPU and memory, aggregated across steps

Stop it when you're done, and remove it to reclaim the disk:

dxflow workflow stop notebook
dxflow workflow remove notebook

Step 5: Write your own workflow

A workflow is a YAML definition with a name and a list of steps. Each step names a container image and the runtime it runs on:

# hello.yml
name: hello-world
tags:
    - getting-started
steps:
    - name: hello
      runtime: docker
      image: alpine:latest
      command:
          - echo
          - "Hello from dxflow"

Create and start it in one call:

dxflow workflow create ./hello.yml --identity hello --start
dxflow workflow logs hello

Steps also take ports, volumes, env, and resources (CPU, memory, GPU), and run in phases so you can mix sequential and parallel work. A step defaults to sequential mode, which requires a command; use mode: parallel for long-running services that keep their image's own entrypoint.

Each volumes and ports entry carries a name — that label is what per-run --override values target. See Workflows for the full schema.

Next steps

Troubleshooting

ProblemCheck
Engine won't startIs port 80 already in use, and do you have permission to bind it? See Port Binding.
Console unreachableIs the engine running (dxflow ping)? Does your firewall allow the port? Is the address right?
Console stays on the sign-in dialogPairing codes expire after 30 seconds and are single-use — run dxflow engine pair again.
invalid pairing codeThe code lapsed, was already claimed, or was mistyped. Request a fresh one.
Workflow creation failsThe definition needs a top-level name and at least one step, and every step needs a name and an image.
Workflow start failsIs a container runtime installed and running (dxflow engine info)? Is the image pullable?

For more, see the FAQ and Troubleshooting.