Installation
Install BRAD on your own server. Configure the database, run migrations, start the app — the first-boot wizard does the rest.
BRAD is self-hosted. You point it at a database, start the process, and it boots into a guided installer that walks you through license activation, your first admin account, and your company name. That's it — there is no shell-driven install.
What you need
| Runtime | Node.js 20+ — or Bun 1.1+ — or pnpm on Node 20+. Pick whichever you already run. |
| OS | Anywhere a modern Node/Bun runtime runs. Debian 12 is what we recommend and test against. Ubuntu, Fedora, Alpine, macOS, Windows Server, FreeBSD all work. |
| Database | PostgreSQL 14 or newer. Local or remote — BRAD only needs the connection string. |
| CPU / RAM | 2 vCPU / 2 GB RAM is fine for small teams. Scale with your workload. |
| Reverse proxy | Recommended for TLS. Caddy is the easiest; Nginx, Apache, Traefik, and Plesk all work. |
Redis is optional and only matters at scale (rough rule of thumb: a few hundred concurrent users on the real-time features). A typical install does not need it.
Install
1. Create a database
Any PostgreSQL 14+ instance. Create an empty database and a user that owns it. Grab the connection string — it'll look like postgres://user:password@host:5432/dbname.
2. Unpack the release
Sign in to your account, open the Downloads tab, and grab the latest release zip. Unzip it wherever the app will live.
unzip brad-cms-x.y.z.zip -d /opt/brad
cd /opt/brad3. Configure the database
Open .env (the app creates one with safe defaults on first start if it's missing) and set DATABASE_URL:
DATABASE_URL=postgres://user:password@host:5432/dbnameThat's the only value you have to set. APP_KEY, PORT, HOST, and the rest get production-safe defaults the first time BRAD boots.
Need a different port or a public URL? Set PORT= and APP_URL= in the same file. Everything else can wait.
4. Run migrations
npx prisma migrate deployThis applies the core schema. Module migrations apply automatically every time the app boots — don't run them by hand.
5. Start the app
Whichever you prefer:
bun start # bun
npm start # node
pnpm start # pnpmThe server binds to :3333 by default. Put it behind your reverse proxy. A Caddyfile is two lines:
your-domain.example {
reverse_proxy localhost:3333
}Caddy provisions TLS automatically. Nginx, Apache, and Plesk all forward to localhost:3333 the usual way.
6. Finish in the browser
Open https://your-domain.example. Because no users exist yet, BRAD redirects to its built-in installer:
- License — paste the key from your account dashboard. BRAD verifies it.
- Admin — set the email and password for the first administrator.
- Company — name your organization.
When the wizard finishes you're signed in as the superadmin and the public site is live.
Keeping it running
Use whatever process supervisor you already have — systemd, pm2, docker, supervisord. BRAD ships with a pm2 ecosystem file (bun run cluster:start) but doesn't require it.
Updating
Download a new release zip from your account dashboard, stop the service, replace the files in place (keep your .env and storage/ directory), run npx prisma migrate deploy, and start the service back up.
There is no automatic in-place update on purpose. Self-hosted software that silently rewrites itself has too many ways to corrupt a customer's install. Updates are a deliberate, manual step you control.