DPAI / Docs / Whitelabel

Whitelabel Guide

Rebrand DPAI end to end from a single JSON file — product name, binary, config directory, env prefix, gateway lock, and theme — with nothing left for a client to configure by hand.

Last updated 2026

Overview

Every product-identifying string, path, colour, and endpoint in DPAI is data, not source. The whitelabel pipeline takes a single brand.json file and produces a fully independent CLI package: its own npm name, binary name, config directory, environment variable prefix, README, and colour theme.

Who this is for. MSPs and agencies who want to resell DPAI under their own name while keeping all client traffic transiting a gateway they control and audit.

1. Scaffold

Generate a starter brand file for your organization:

dpai brand init acme-msp --out acme.brand.json

This writes a JSON file with sensible defaults for every required field, ready to edit.

2. Validate

Check that the brand file is well-formed and every required field is present before building:

dpai brand validate acme.brand.json

Validation catches missing fields, malformed URLs, and reserved names early — before you spend time building an artifact you can't ship.

3. Build

Produce the rebranded CLI in a new output directory:

bun run whitelabel acme.brand.json --out ../acme-cli --install-script

The --install-script flag also generates a one-line curl installer for your own domain, matching the pattern used by the upstream install script.

Gateway lock

Setting gateway.locked to true pins the built CLI to your gateway endpoint. End users cannot repoint it elsewhere, which means every request from every seat you distribute transits infrastructure you audit and control.

FieldEffect
gateway.baseUrlThe only endpoint the built binary will call
gateway.lockedPrevents overriding the base URL at runtime
models.allowRestricts which models a seat may request

brand.json reference

{
  "id": "acme-msp",
  "productName": "Acme",
  "binName": "acme",
  "configDirName": ".acme",
  "envPrefix": "ACME",
  "gateway": {
    "baseUrl": "https://gateway.acme.com/v1",
    "locked": true
  },
  "models": { "allow": ["claude-sonnet-5"] },
  "theme": { "accent": "#ff5500" }
}
  • id — internal identifier used in generated file headers and logs.
  • productName — the display name shown in the TUI and README.
  • binName — the executable name installed on the user's PATH.
  • configDirName — where local config and session state live, e.g. ~/.acme.
  • envPrefix — prefix for environment variables, e.g. ACME_API_KEY.
  • gateway — the backend the built CLI talks to, optionally locked.
  • models.allow — an allow-list restricting selectable models.
  • theme.accent — the accent colour used across the TUI.

Shipping to clients

The output directory from bun run whitelabel is a standalone package. Publish it under your own npm scope, host the generated install script on your own domain, and distribute the binary name you chose. Clients see your brand from the first prompt to the last line of output — nothing to configure, nothing pointing back at DPAI.

Need help with a specific rollout? See Support.