How to Install BMad
Use npx bmad-method install to set up BMad in your project. One command handles first installs, upgrades, channel switching, and scripted CI runs. This page covers all of it.
When to Use This
Section titled âWhen to Use Thisâ- Starting a new project with BMad
- Adding or removing modules on an existing install
- Switching a module to main-HEAD or pinning to a specific release
- Scripting installs for CI pipelines, Dockerfiles, or enterprise rollouts
First-time install (the fast path)
Section titled âFirst-time install (the fast path)ânpx bmad-method installThe interactive flow asks you five things:
- Installation directory (defaults to the current working directory)
- Which modules to install (checkboxes for core, bmm, bmb, cis, gds, tea)
- âReady to install (all stable)?â â Yes accepts the latest released tag for every external module
- Which AI tools/IDEs to integrate with (claude-code, cursor, and others)
- Per-module config (name, language, output folder)
Accept the defaults and you land on the latest stable release of every module, configured for your chosen tool.
Picking a specific version
Section titled âPicking a specific versionâTwo independent axes control what ends up on disk.
Axis 1: external module channels
Section titled âAxis 1: external module channelsâEvery external module â bmb, cis, gds, tea, and any community module â installs on one of three channels:
| Channel | What gets installed | Who picks this |
|---|---|---|
stable (default) | Highest released semver tag. Prereleases like v2.0.0-alpha.1 are excluded. | Most users |
next | Main branch HEAD at install time | Contributors, early adopters |
pinned | A specific tag you name | Enterprise installs, CI reproducibility |
Channels are per-module. You can run bmb on next while leaving cis on stable â the flags below let you mix freely.
Axis 2: installer binary version
Section titled âAxis 2: installer binary versionâThe bmad-method npm package itself has two dist-tags:
| Command | What you get |
|---|---|
npx bmad-method install (@latest) | Latest stable installer release |
npx bmad-method@next install | Latest prerelease installer, auto-published on every push to main |
The installer binary determines your core and bmm versions. Those two modules ship bundled inside the installer package rather than being cloned from separate repos.
Why core and bmm donât have their own channel
Section titled âWhy core and bmm donât have their own channelâTheyâre stapled to the installer binary you ran:
npx bmad-method installâ latest stable core and bmmnpx bmad-method@next installâ prerelease core and bmmnode /path/to/local-checkout/tools/installer/bmad-cli.js installâ whatever your local checkout has
--pin bmm=v6.3.0 and --next=bmm are silently ineffective against bundled modules, and the installer warns you when you try. A future release extracts bmm from the installer package; once that ships, bmm gets a proper channel selector like bmb has today.
Updating an existing install
Section titled âUpdating an existing installâRunning npx bmad-method install in a directory that already contains _bmad/ gives you a menu:
| Choice | What it does |
|---|---|
| Quick Update | Re-runs the install with your existing settings. Refreshes files, applies patches and minor stable upgrades, refuses major upgrades. Fast, non-interactive. |
| Modify Install | Full interactive flow. Add or remove modules, reconfigure settings, optionally review and switch channels for existing modules. |
Upgrade prompts
Section titled âUpgrade promptsâWhen Modify detects a newer stable tag for a module youâve installed on stable, it classifies the diff and prompts accordingly:
| Upgrade type | Example | Default |
|---|---|---|
| Patch | v1.7.0 â v1.7.1 | Y |
| Minor | v1.7.0 â v1.8.0 | Y |
| Major | v1.7.0 â v2.0.0 | N |
Major defaults to N because breaking changes frequently surface as âinstabilityâ when they werenât expected. The prompt includes a GitHub release-notes URL so you can read what changed before accepting.
Under --yes, patch and minor upgrades apply automatically. Majors stay frozen â pass --pin <code>=<new-tag> to accept non-interactively.
Switching a moduleâs channel
Section titled âSwitching a moduleâs channelâInteractively: choose Modify â answer Yes to âReview channel assignments?â â each external module offers Keep, Switch to stable, Switch to next, or Pin to a tag.
Via flags: the recipes in the next section cover the common cases.
Headless CI installs
Section titled âHeadless CI installsâFlag reference
Section titled âFlag referenceâ| Flag | Purpose |
|---|---|
--yes, -y | Skip all prompts; accept flag values + defaults |
--directory <path> | Install into this directory (default: current working dir) |
--modules <a,b,c> | Exact module set. Core is auto-added. Not a delta â list everything you want kept. |
--tools <a,b> | IDE/tool selection. Required for fresh --yes installs. Run --list-tools for valid IDs. |
--list-tools | Print all supported tool/IDE IDs (with target directories) and exit. |
--action <type> | install, update, or quick-update. Defaults based on existing install state. |
--custom-source <urls> | Install custom modules from Git URLs or local paths |
--channel <stable|next> | Apply to all externals (aliased as --all-stable / --all-next) |
--all-stable | Alias for --channel=stable |
--all-next | Alias for --channel=next |
--next=<code> | Put one module on next. Repeatable. |
--pin <code>=<tag> | Pin one module to a specific tag. Repeatable. |
--user-name, --communication-language, --document-output-language, --output-folder | Override per-user config defaults |
Precedence when flags overlap: --pin beats --next= beats --channel / --all-* beats the registry default (stable).
Recipes
Section titled âRecipesâDefault install â latest stable for everything:
npx bmad-method install --yes --modules bmm,bmb,cis --tools claude-codeEnterprise pin â reproducible byte-for-byte:
npx bmad-method install --yes \ --modules bmm,bmb,cis \ --pin bmb=v1.7.0 --pin cis=v0.2.0 \ --tools claude-codeBleeding edge â externals on main HEAD:
npx bmad-method install --yes --modules bmm,bmb --all-next --tools claude-codeAdd a module to an existing install (keep everything else):
npx bmad-method install --yes --action update \ --modules bmm,bmb,gds--tools is omitted intentionally â --action update reuses the tools configured during the first install.
Mix channels â bmb on next, gds on stable:
npx bmad-method install --yes --action update \ --modules bmm,bmb,cis,gds \ --next=bmbWhat got installed
Section titled âWhat got installedâAfter any install, _bmad/_config/manifest.yaml records exactly whatâs on disk:
modules: - name: bmb version: v1.7.0 # the tag, or "main" for next channel: stable # stable | next | pinned sha: 86033fc9aeae2ca6d52c7cdb675c1f4bf17fc1c1 source: external repoUrl: https://github.com/bmad-code-org/bmad-builderThe sha field is written for git-backed modules (external, community, and URL-based custom). Bundled modules (core, bmm) and local-path custom modules donât have one â their code travels with the installer binary or your filesystem, not a cloneable ref.
For cross-machine reproducibility, donât rely on rerunning the same --modules command. Stable-channel installs resolve to the highest released tag at install time, so a later rerun lands on whatever has been released since. Convert the recorded tags from manifest.yaml into explicit --pin flags on the target machine, e.g.:
npx bmad-method install --yes --modules bmb,cis \ --pin bmb=v1.7.0 --pin cis=v0.4.2 --tools claude-codeTroubleshooting
Section titled âTroubleshootingââCould not resolve stable tagâ or âAPI rate limit exceededâ
Section titled ââCould not resolve stable tagâ or âAPI rate limit exceededââYouâve hit GitHubâs 60/hr anonymous limit. Set GITHUB_TOKEN and retry. If you already have a token set, it may be expired or rate-limited on its own budget â try a different token or wait for the hourly reset.
âTag âvX.Y.Zâ not foundâ
Section titled ââTag âvX.Y.Zâ not foundââThe tag you passed to --pin doesnât exist in the moduleâs repo. Check the repoâs releases page on GitHub for valid tags.
A pinned install keeps upgrading
Section titled âA pinned install keeps upgradingâPinned installs donât upgrade. Quick-update applies patches and minors on stable channel only; it wonât touch pinned or next. If a pinned install changed, open _bmad/_config/manifest.yaml â channel: pinned plus a fixed version and sha should hold across runs unless you explicitly override via flags.
--pin bmm=X didnât do anything
Section titled â--pin bmm=X didnât do anythingâbmm is a bundled module â --pin and --next= donât apply. Use npx bmad-method@next install for a prerelease core/bmm, or check out the bmad-bmm repo and run the installer locally to get unreleased changes.