Step-by-step guide to run MyBMAD Dashboard locally.
- Node.js 20+
- pnpm 9+
- Docker (for PostgreSQL, or use your own PostgreSQL 15+ instance)
- A GitHub OAuth App — optional, only needed for GitHub login (create one here)
- A GitHub Personal Access Token — optional but recommended for rate limits when importing GitHub repos
git clone https://github.com/DevHDI/my-bmad.git
cd my-bmadpnpm installQuick method — auto-generates secrets for you:
bash scripts/setup.shManual method — copy the template and edit by hand:
cp .env.example .envThen fill in each variable as described below.
If you use the included Docker Compose (step 4), the default value works out of the box:
DATABASE_URL=postgresql://bmad:bmad_dev_password@localhost:5433/bmad_dashboard
The format is postgresql://<user>:<password>@<host>:<port>/<database>. Adjust if you use your own PostgreSQL instance.
A random string used to sign session tokens. Generate one with:
openssl rand -base64 32Paste the output as the value. Any long random string works.
The base URL where your app runs. For local development:
BETTER_AUTH_URL=http://localhost:3002
In production, set this to your real domain (e.g. https://mybmad.example.com).
A random string to protect the cache revalidation API endpoint. Generate one with:
openssl rand -hex 32Required for "Login with GitHub". Follow these steps:
- Go to github.com/settings/developers
- Click New OAuth App
- Fill in the form:
- Application name:
MyBMAD(or anything you like) - Homepage URL:
http://localhost:3002 - Authorization callback URL:
http://localhost:3002/api/auth/callback/github
- Application name:
- Click Register application
- Copy the Client ID into
GITHUB_CLIENT_ID - Click Generate a new client secret, copy it into
GITHUB_CLIENT_SECRET
Without a PAT, the GitHub API allows only 60 requests/hour. With one, you get 5,000/hour. Recommended if you import multiple repositories.
- Go to github.com/settings/tokens
- Click Generate new token (classic)
- Select scopes:
public_repo— for public repositories onlyrepo— if you also need private repositories
- Copy the token into
GITHUB_PAT
If you don't have a local PostgreSQL instance:
docker compose up -dThis starts a PostgreSQL instance on port 5433 (to avoid conflicts with a local PostgreSQL on 5432).
pnpm db:migrateOption A — enable registration in .env, then sign up from the web UI:
ALLOW_REGISTRATION=true
After creating your account, you can set it back to false.
Option B — create an admin directly from the command line:
pnpm db:create-admin --email admin@example.com --password your_password --name Adminpnpm devOpen http://localhost:3002 — log in and start importing repositories.
Note: The dev server runs on port 3002 (configured in
package.json). If you set up GitHub OAuth, make sure the callback URL matches this port.
| Variable | Required | Default / How to generate | Description |
|---|---|---|---|
DATABASE_URL |
Yes | postgresql://bmad:bmad_dev_password@localhost:5433/bmad_dashboard |
PostgreSQL connection string. Works out of the box with the included Docker Compose. |
BETTER_AUTH_SECRET |
Yes | openssl rand -base64 32 |
Random string to sign session tokens. |
BETTER_AUTH_URL |
Yes | http://localhost:3002 |
Base URL where the app is running. |
REVALIDATE_SECRET |
Yes | openssl rand -hex 32 |
Secret to protect the cache revalidation endpoint. |
GITHUB_CLIENT_ID |
No | — | GitHub OAuth App Client ID. Only needed for "Login with GitHub". |
GITHUB_CLIENT_SECRET |
No | — | GitHub OAuth App Client Secret. |
GITHUB_PAT |
No | — | Personal Access Token for higher GitHub API rate limits (60 → 5,000 req/h). |
ALLOW_REGISTRATION |
No | false |
Set to true to allow new users to sign up via email/password. |
ENABLE_LOCAL_FS |
No | false |
Set to true to enable local folder imports. |
The
scripts/setup.shscript auto-generatesBETTER_AUTH_SECRETandREVALIDATE_SECRETfor you.