Blog · 2026-06-05 · ~7 min read
The MADR 4.0 spec in 15 minutes
MADR stands for "Markdown Any Decision Record." The "Any" is the design choice worth knowing: Michael Nygard's original ADR format was written for architectural decisions. MADR dropped the "Architectural" constraint to cover product calls, vendor selections, hiring decisions, and policy changes in the same format — anything where you want an immutable record with an alternatives section. Version 4.0 is the current spec, the one all major ADR tooling now targets, and the one worth learning if you're starting or migrating an ADR practice today.
TL;DR
MADR is a structured ADR format with YAML frontmatter and Markdown sections. It's the right choice when you want machine-parseable ADRs, CI lint validation, or a publication layer like Log4Brains. Nygard's plain-text format wins for simplicity and zero-tooling setups. MADR 4.0 changed the frontmatter schema (removed tags, renamed to informedEntities, formalized deciders as a list), clarified the date field semantics, and added the consulted field as a first-class frontmatter key. If you're starting in 2025 or later, start with MADR 4.0 — the ecosystem has converged on it.
What MADR adds over Nygard
Nygard's format gives you five sections in a plain Markdown file: Title, Status, Context, Decision, Consequences. No frontmatter, no machine-parseable header, no formal alternatives section. Fast to fill, near-zero adoption friction. You write a Markdown file and you're done.
MADR 4.0 adds structure that pays off as the corpus grows:
- YAML frontmatter — a machine-parseable header with
title,status,date,deciders, and optionallyconsultedandinformed. CI can validate the header without reading the full body; tooling can build indexes and status dashboards from the header alone. - Formal "Considered Options" section — MADR separates the list of options from the prose rationale. In Nygard's format, alternatives live in Context (about forces and motivations) or Consequences (about outcomes) — often they get buried or skipped. MADR makes them a named section, so a future reader can scan "what else was on the table" in 10 seconds without parsing the reasoning.
- "Decision Outcome" with an explicit "because" clause — the format encourages
Chosen option: "[option]", because [justification and its tradeoffs]rather than just naming the choice. The "because" is the load-bearing part of any ADR; making it structurally required means fewer records where the decision is stated but the rationale is missing. - Pros and Cons sub-lists per option — each Considered Option can have its own
Good because...andBad because...bullet list. When comparing three or four options, this structure is far cleaner than prose paragraphs trying to weave tradeoffs for multiple candidates in sequence. - "More Information" section — a lightweight way to link back to an RFC, spike, or pull request without trying to fit that context into the main sections. When running an RFC-to-ADR handoff (the step most teams miss), More Information is where the RFC link lives.
The MADR 4.0 template
Here is the minimal MADR 4.0 template. The sections in brackets are prompts, not headings — replace them with actual content. The consulted, informed, Decision Drivers, Pros and Cons, and More Information sections are optional and can be omitted for lightweight decisions.
---
status: accepted
date: 2026-06-05
deciders: [alice, bob]
consulted: [carol]
informed: [team-channel]
---
# [short title of the decision — name the choice, not the problem]
## Context and Problem Statement
[The situation and why it requires a decision. What constraint or goal is
driving the need to choose?]
## Decision Drivers
* [driver 1 — a force, a constraint, a requirement]
* [driver 2]
## Considered Options
* [option 1]
* [option 2]
* [option 3]
## Decision Outcome
Chosen option: "[option 1]", because [justification and its tradeoffs].
### Consequences
* Good, because [positive consequence]
* Bad, because [negative consequence or risk]
* Neutral, because [neither good nor bad]
## Pros and Cons of the Options
### [option 1]
* Good, because [argument a]
* Good, because [argument b]
* Bad, because [argument c]
### [option 2]
* Good, because [argument d]
* Bad, because [argument e]
## More Information
[Link to RFC, spike, or PR. Omit if not applicable.]
The frontmatter block is the new part compared to Nygard. status can be proposed, accepted, deprecated, or superseded by [ADR-XXXX]. date is the accepted-or-last-modified date (not the creation date — the commit history has creation date; the frontmatter date tracks the last substantive change). deciders is the list of people who made the call; consulted is people whose input was sought before the decision; informed is downstream notification targets such as a Slack channel or mailing list.
See the MADR template reference page for a worked example with a real decision filled in.
MADR 4.0 vs earlier MADR versions
MADR 3.x used a looser frontmatter schema. The key differences in 4.0:
tagsremoved — the 3.xtagsfield had unclear semantics (some teams used it for decision category, others for keywords, others for team names). MADR 4.0 replaced it with the more preciseinformedfield, which explicitly means "notify these people or channels, do not consult them." If your 3.x files havetags, drop the field during migration.decidersformalized as a YAML list — in 3.x, some teams wrotedeciders: Alice, Bob(a string) rather thandeciders: [alice, bob](a list). MADR 4.0 specifies the list form; CI validation tools that target 4.0 will reject the string form. The migration script is a one-liner.datefield semantics clarified — 3.x leftdateambiguous (creation date or acceptance date?). MADR 4.0 specifies it as the date the decision was accepted or last substantively changed. Creation date is in git history; the frontmatter date signals "this is when the decision was finalized."consultedpromoted to frontmatter — in 3.x, the consulted parties were mentioned in prose inside Context. MADR 4.0 promotesconsultedto a frontmatter field, enabling tooling to extract the consultation graph (who was consulted across the ADR corpus) and identify decisions where key stakeholders were never involved.
Most teams with fewer than 30 existing 3.x ADRs migrate in a single PR. The migration is mechanical: drop tags, convert string deciders to list form, check for any date values that look like creation dates and update them to acceptance dates. No section content needs to change.
MADR vs Nygard: which to choose
Choose MADR if:
- You plan to publish the corpus as a browsable site — Log4Brains uses MADR natively and the YAML frontmatter is what it reads to build the status index and decider list
- You want CI validation — the GitHub Action for ADR validation has a MADR 4.0 schema target that catches frontmatter typos and invalid status transitions in seconds
- Your team makes decisions across multiple domains (not just architecture) and wants a single format for all of them
- You're building tooling on the corpus — the frontmatter makes parsing fast without needing to read Markdown body content
Choose Nygard if:
- You want zero tooling — a text editor and git is all you need; there's nothing to install and nothing to configure
- You're onboarding engineers who haven't seen ADRs before and want the lowest possible friction; Nygard's five sections fit in a 200-word example and are immediately legible
- Your ADR corpus is small (under 20 records) and unlikely to grow to the scale where tooling matters
- You want to match the format described in most published ADR guidance — Thoughtworks Radar, Michael Nygard's original post, and most engineering culture blogs use Nygard examples
The practical tradeoff: MADR ADRs take slightly longer to fill correctly because the structure is more explicit. Nygard ADRs are faster but require more discipline to include alternatives — nothing in the template requires them, so under-pressure engineers skip them. Over time, a Nygard corpus tends to accumulate records where the Decision section says "we chose X" with no mention of what was considered and rejected. That's the failure mode MADR's Considered Options section prevents.
For a team of three to five engineers who are already ADR-comfortable, MADR is strictly better. For a team where ADR adoption is uncertain, Nygard's lower friction may be the difference between the practice starting and dying on the first PR review comment about frontmatter YAML syntax. See the ADR tooling comparison for the full breakdown across tools.
Tooling that targets MADR 4.0
Three tools form the current MADR ecosystem:
- Log4Brains — generates a browsable Next.js static site from MADR ADRs. Reads YAML frontmatter directly; the web UI shows the status lifecycle, deciders, and the full ADR body as a formatted page. The Log4Brains setup guide covers the full install-and-deploy path including GitHub Pages. Best for teams publishing a public ADR corpus or for platform orgs where non-engineers need to read decisions without navigating git.
- adr-tools (npryce) — the most referenced ADR creation tool, written in Bash. Creates plain Nygard files by default but can be configured with a custom template to scaffold MADR output. The
adr newcommand then fills the template. Most teams using MADR pair adr-tools (for creation) with Log4Brains (for publication) — the two tools have complementary scopes. - GitHub Action (Peter Evans) — CI step that validates ADR file format, naming conventions, and status transitions. Has a MADR 4.0 schema option. Catches frontmatter typos, missing required fields (
status,date,deciders), and invalid status transitions (accepted → proposedis a schema violation;accepted → supersededis valid). Runs in under a second on a 100-file corpus.
The standard MADR setup at scale is: adr-tools for scaffolding new files, GitHub Action for CI validation on every PR, Log4Brains for the publication layer if a web UI is needed. Each tool is independent — you can adopt any one without the others.
How AI chat output maps onto MADR structure
One more angle worth naming explicitly: MADR 4.0's structure makes it the natural output target for automatic decision extraction from AI chat history.
A typical engineer session in ChatGPT or Claude naturally produces most of the MADR sections. The engineer sets up the problem ("we need to choose a job queue library") — that's Context and Problem Statement. They name constraints ("must support Redis, must have retry semantics, must be open source") — those are Decision Drivers. They ask the model to compare options ("compare BullMQ, Bee-Queue, and Kue") — that's Considered Options with a Pros and Cons breakdown. They make a call ("okay, going with BullMQ") — that's Decision Outcome. The rejected options and the reasons they were rejected are explicit in the thread.
The informal reasoning in chat sessions is often richer than hand-written ADRs. There's less incentive to abbreviate when you're thinking out loud to a language model that's asking follow-up questions, compared to when you're writing for a PR review with a mental timer running. The gap is structure: the information is there but not in MADR shape.
The open-source extractor maps chat content onto MADR sections: the setup maps to Context, named constraints to Decision Drivers, compared options to Considered Options, the final call to Decision Outcome, rejected options and reasons to Pros and Cons. The resulting records aren't as polished as hand-written ADRs — some Considered Options descriptions will be brief, some Decision Outcome "because" clauses will be compressed — but they're in MADR format, they're in the corpus, and they're a starting point for promotion to a formal record if the decision turns out to be load-bearing.
This is why MADR 4.0 is the default output format for extraction: its structured sections map more cleanly onto the natural shape of a reasoning session than Nygard's freeform prose sections do. The dogfooding walkthrough shows the full extraction pipeline — 1,200 chats to 38 structured records — and what the MADR output looks like before and after the triage pass. The ChatGPT export guide and Claude export guide have the mechanics of getting the source files.
Per the ADR staleness data, the ceremony cost is the primary reason ADR practices die. Auto-generated MADR records from chat extraction address that directly: they're the 80% of decisions that aren't worth full ADR ceremony, captured anyway, in a format the 20% of decisions that do warrant ceremony already use. The two tiers are compatible because they're the same format at different completeness levels.
To run the extractor against your ChatGPT export or Claude export and get MADR 4.0 output, the quickest path is the open-source extractor — three commands, runs locally, no data uploaded anywhere. If you want the extraction plus triage interface and team sharing, the waitlist is open.
Further reading
- MADR template reference — copy-paste template with a worked example and the YAML frontmatter schema in full
- Nygard ADR template — the five-section plain-text format, with guidance on when Nygard beats MADR
- ADR tooling comparison — adr-tools vs Log4Brains vs adr-log vs hand-rolled, across 12 dimensions
- Log4Brains setup guide — from npm install to GitHub Pages, with the monorepo workspace configuration
- GitHub Action for ADR validation — CI enforcement for MADR 4.0 format, naming, and status transitions
- ADR vs Decision Log vs RFC — when each artifact is the right tool, and the RFC-to-ADR handoff pattern
- Worked ADR example — a real Postgres vs MongoDB decision in both Nygard and MADR format
FAQ
Is MADR 4.0 backward-compatible with MADR 3.x?
Not in the schema validation sense. MADR 4.0 removed the tags frontmatter field and formalized deciders as a YAML list rather than a free-form string. If you run CI validation against the 4.0 schema, existing 3.x files with tags will fail the lint step. Content-wise they're identical: the body sections haven't changed. Migration is mechanical — a one-pass script to remove tags and convert any deciders: Alice, Bob strings to deciders: [alice, bob] list form. Most teams with 10–30 existing 3.x ADRs run the migration in a single PR.
Do I need Log4Brains to use MADR?
No. MADR is a Markdown file format; Log4Brains is one optional publication layer. You can use MADR with just a git repo and a README that lists the files — that's the zero-tooling path and it works fine. Log4Brains adds a browsable web UI if non-engineer stakeholders need to read ADRs without navigating a git repo. The question is whether the web UI justifies the Node runtime dependency. For most teams under 20 engineers with a single ADR directory, it doesn't. For a platform org running a public decision corpus, it does.
Can MADR be used for non-architecture decisions?
That's the explicit design intent — the "Any" in the acronym replaced "Architectural" to make the format fit for product calls, hiring decisions, vendor selections, and policy changes alongside architectural ones. The template doesn't assume software; the Context, Considered Options, and Decision Outcome sections work equally well for "Should we switch from Stripe to Braintree?" or "Should we hire a generalist or a specialist?" The only adjustment needed is the deciders list.
How do I handle MADR ADRs from AI chat extractions that need polish before merging?
Put them in a proposed/ subdirectory and treat the triage pass as a promotion decision. If the extracted ADR describes a real durable decision, move it to decisions/ and polish the Considered Options prose; if it's too local or already covered by an existing ADR, close the file. The extraction pass is discovery, not final copy. Most extracted records need 5–10 minutes of editing to reach merge quality — tightening the Decision Outcome sentence, condensing multi-paragraph Considered Options into bullet form, adding the More Information link back to the original chat. That's substantially faster than writing the ADR from scratch, which is the point.