Generate Architectural Decision Records from simple criteria data.
Project description
ADR Builder
Create clear, consistent Architectural Decision Records (ADRs) from simple forms or YAML/JSON data — no coding required.
- Generates Markdown ADRs using the MADR standard
- Enforces structure and quality with built-in validation
- Works locally via an easy CLI, or in CI via GitHub Actions
- Stores ADRs in
docs/adr/with automatic numbering, slugs, and an index
Who is this for?
- Engineers, product managers, and stakeholders who need to record decisions
- Teams standardizing how ADRs are written and stored
- Anyone who wants a guided, non-technical way to produce ADRs
Quick Start (No Coding)
Option A — Guided interactive flow (recommended):
- Install (one-time)
- macOS:
brew install pipx && pipx ensurepath - All platforms (Python 3.9+):
pipx install adr-builder
- macOS:
- In your project folder, run:
adr init— sets updocs/adr/and defaultsadr new— guided prompts to create an ADR without editing files
- Find your ADRs in
docs/adr/
Option B — From a simple YAML file:
- Create
criteria.yamllike this:
title: Database Selection
status: Proposed
authors: ["Jane Doe"]
tags: ["data", "persistence"]
context:
background: "We need a primary OLTP database."
constraints:
- "Managed service"
- "RTO <= 15m"
drivers:
- "Global availability"
- "Operational simplicity"
options:
- name: "PostgreSQL (AWS RDS)"
pros: ["Mature ecosystem", "Managed backups"]
cons: ["Vertical scaling limits"]
risks: ["Cost at high scale"]
score: 8
- name: "CockroachDB Serverless"
pros: ["Horizontal scale", "Strong consistency"]
cons: ["Learning curve"]
risks: ["Pricing predictability"]
score: 7
decision:
chosen: "PostgreSQL (AWS RDS)"
rationale: "Best balance of maturity and ops simplicity."
consequences:
positive: ["Familiar tooling", "Reduced ops overhead"]
negative: ["Limited horizontal scale"]
references:
links:
- "https://adr.github.io/madr/"
- Generate your ADR:
adr generate --input criteria.yaml
- Your ADRs are created (e.g.,
docs/adr/001-database-selection.mdand.docx).
Option C — In Pull Requests (GitHub Action):
- Add our CI workflow, commit
criteria.yaml, and the action will generate/update ADRs automatically on PRs. See “CI Integration” below.
Sample criteria.yml
Save this as criteria.yml (or criteria.yaml) and run adr generate --input criteria.yml:
title: Database Selection
status: Proposed
authors: ["Jane Doe"]
tags: ["data", "persistence"]
context:
background: "We need a primary OLTP database."
constraints:
- "Managed service"
- "RTO <= 15m"
drivers:
- "Global availability"
- "Operational simplicity"
options:
- name: "PostgreSQL (AWS RDS)"
pros: ["Mature ecosystem", "Managed backups"]
cons: ["Vertical scaling limits"]
risks: ["Cost at high scale"]
score: 8
- name: "CockroachDB Serverless"
pros: ["Horizontal scale", "Strong consistency"]
cons: ["Learning curve"]
risks: ["Pricing predictability"]
score: 7
decision:
chosen: "PostgreSQL (AWS RDS)"
rationale: "Best balance of maturity and ops simplicity."
consequences:
positive: ["Familiar tooling", "Reduced ops overhead"]
negative: ["Limited horizontal scale"]
references:
links:
- "https://adr.github.io/madr/"
Installation
- Requirements: Python 3.9+ (or use Docker)
- Easiest:
pipx install adr-builder- If you don't have pipx:
brew install pipx && pipx ensurepath(macOS) or see https://pipx.pypa.io
- If you don't have pipx:
- Verify:
adr --version
Docker (no Python needed):
docker run --rm -v "$PWD":/work -w /work ghcr.io/OWNER/adr-builder:latest adr --help
Commands
adr init- Scaffolds
docs/adr/, default config, and template
- Scaffolds
adr new- Interactive, step-by-step ADR creation (no editing files needed)
- Generates both Markdown and Word outputs by default
- Use
--format mdor--format docxfor single format
adr generate --input criteria.yaml- Creates or updates an ADR from YAML/JSON (Markdown and Word by default)
adr generate --input criteria.yaml --format md- Generate only a Markdown output
adr generate --input criteria.yaml --format docx- Generate only a Word document output for non-developers
adr validate --input criteria.yaml- Checks structure, required fields, and statuses
- Validates date format, option scores, URL formats, and decision consistency
- Use
--directoryto specify project root for config loading
adr list- Shows existing ADRs, numbers, and slugs
adr --version- Shows the installed version
Output Format
- Default template: MADR
- Default output: Markdown and Word (both)
- File naming:
NNN-slug.{md,docx}(e.g.,001-database-selection.md) - Location:
docs/adr/ - Statuses: Proposed, Accepted, Superseded, Rejected (configurable)
Example generated ADR snippet:
# Database Selection
- Status: Proposed
- Date: 2025-11-06
- Deciders: Jane Doe
- Tags: data, persistence
## Context and Problem Statement
We need a primary OLTP database.
Constraints:
- Managed service
- RTO <= 15m
Decision Drivers:
- Global availability
- Operational simplicity
Templates
- Ships with MADR by default
- Support for custom templates via Jinja2
- Configure defaults in
.adr/adr.config.yaml
Use a custom template:
adr generate --input criteria.yaml --template path/to/template.md.j2
CI Integration (GitHub Action)
Add .github/workflows/adr.yml:
name: ADR
on:
pull_request:
paths:
- 'criteria/*.yaml'
jobs:
build-adr:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.9'
- run: pipx install adr-builder
- run: adr init
- run: adr generate --input criteria/main.yaml
- uses: stefanzweifel/git-auto-commit-action@v5
with:
commit_message: "chore(adr): generate ADR from criteria"
Troubleshooting
- “Command not found: adr”
- Ensure
pipx ensurepathwas run, then open a new terminal
- Ensure
- "Python not found"
- Install Python 3.9+ or use Docker
- Validation errors
- Run
adr validate --input criteria.yamlto see what to fix
- Run
Contributing
- Issues and PRs welcome
- Install dev dependencies:
pip install -e ".[dev]" - Run tests:
pytest - Lint:
ruff check adr_builder/ - Type check:
mypy adr_builder/
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file adr_builder-0.1.3.tar.gz.
File metadata
- Download URL: adr_builder-0.1.3.tar.gz
- Upload date:
- Size: 20.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4de75636edb79b8902fc7d52cba3f17d02c80b36e7a0bab4d5b1f54fab4a3eb5
|
|
| MD5 |
596f0e5ab90abe38a192139654cfee2d
|
|
| BLAKE2b-256 |
03b9b8f573bb634bfefa414f80c8ecc69c7e7b33633b8acad100043746cae9ac
|
File details
Details for the file adr_builder-0.1.3-py3-none-any.whl.
File metadata
- Download URL: adr_builder-0.1.3-py3-none-any.whl
- Upload date:
- Size: 13.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
29de62820caedad0730e0bb66255ebb03887fb1d589e5d0b46f60fc9fee5679e
|
|
| MD5 |
d2cb771f2f8efa1686df3c2b394276f6
|
|
| BLAKE2b-256 |
0928716b9f328245204de60f9fe16151ba4cbf07eb3335ffb72d80a9085a2ac3
|