Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/davidG97/qa-flow/llms.txt

Use this file to discover all available pages before exploring further.

QA Flow ships as a pre-built Docker image (davidg1997/qa-flow) that bundles the React frontend, Express backend, Prisma database layer, and a Playwright-ready Chromium installation into a single container. You can reach that image in three ways: through the convenience npx launcher, by running Docker directly, or by cloning the repository and starting the development stack with pnpm. Choose the method that best fits your workflow.
The npx launcher is the fastest path to a running QA Flow instance. It requires no global installation — npx downloads the CLI package on demand, which in turn pulls the Docker image and starts the container for you.

Prerequisites

Start QA Flow

npx @davidg97/qa-flow
On first run the CLI pulls davidg1997/qa-flow:latest from Docker Hub. Subsequent runs use the cached image unless a newer version is available.

Customize the Port

The default port is 3001. Use -p or --port to change it:
npx @davidg97/qa-flow --port 8080
npx @davidg97/qa-flow -p 8080

Other CLI Flags

# Print the package version and exit
npx @davidg97/qa-flow --version

# Show full help text
npx @davidg97/qa-flow --help

Persistent Data

The launcher automatically creates and mounts three named Docker volumes so your data survives container restarts:
VolumeMount Path in ContainerContents
qa-flow-data/app/dataSQLite database
qa-flow-screenshots/app/server/screenshotsTest screenshots
qa-flow-recordings/app/server/recordingsSession recordings

JWT Secret

If the JWT_SECRET environment variable is not set, the CLI generates a cryptographically random 32-byte secret automatically for that session. For persistent deployments, set it explicitly so token validity is maintained across restarts:
JWT_SECRET="your-secret-min-32-chars" npx @davidg97/qa-flow
A session-generated JWT_SECRET means all existing login sessions are invalidated whenever the container restarts. Always set a fixed JWT_SECRET for any non-throwaway deployment.

Environment Variables

All three installation methods respect the same set of environment variables. The table below covers every variable QA Flow currently recognises.
VariableDescriptionDefault
PORTTCP port the Express server listens on inside the container3001
JWT_SECRETSecret used to sign and verify JWT authentication tokens. Must be at least 32 characters for production use.Auto-generated (random) if unset
DATABASE_URLPrisma database connection string. Use file:/path/to/db.db for SQLite or libsql://… for Turso.file:/app/data/qa-flow.db
TURSO_AUTH_TOKENAuthentication token for Turso cloud databases. Required when DATABASE_URL points to a libsql:// endpoint.(none)
CDP_URLURL of a remote Chrome DevTools Protocol endpoint (e.g. http://localhost:9222). When set, Playwright connects to that Chrome instance instead of launching a new one.(none — launches headless Chromium)
When running locally with pnpm dev:all, environment variables for the backend are read from server/.env. When running via Docker or npx, pass them with -e VAR=value flags or through a .env file referenced by Docker Compose.

Default Login Credentials

Regardless of installation method, QA Flow seeds the database with a default administrator account on first run:
FieldValue
Emailadmin@qaflow.com
Passwordadmin123
Change the default admin password and set a strong JWT_SECRET before deploying QA Flow on any server accessible outside of localhost. The default credentials are public knowledge and must not be used in production.

Build docs developers (and LLMs) love