Topic: ADR tooling comparison

ADR Tooling Comparison — adr-tools vs Log4Brains vs adr-log vs Hand-rolled

Four main options exist for teams adopting Architecture Decision Records in 2026: the original Bash scripts (adr-tools), a Next.js static site generator (Log4Brains), a Node CLI tuned for MADR format (adr-log), and no tooling at all (a copied template + your editor). The right choice depends on one question before all others: do your non-engineer stakeholders need a web UI to browse decisions, or do they already live in the git repository? That single answer eliminates two of the four options immediately.

TL;DR

Need only file creation with consistent numbering → adr-tools. Need a web UI for non-git users → Log4Brains (pair with adr-tools for creation). Using MADR format and want a Markdown index file → adr-log. Zero runtime dependencies and full control → hand-rolled. All four are compatible with the ADR GitHub Action for CI validation; the creation tool and the CI tool are independent choices.

The two distinct jobs ADR tooling does

Before comparing tools, it is worth separating the two jobs that ADR tooling can do, because different tools do different subsets:

  1. Creation tooling — scaffolds new ADR files with correct numbering, template, and initial status. adr-tools, adr-log, and hand-rolled scripts are creation tools. Log4Brains is not — it does not create files.
  2. Publication tooling — renders the ADR directory as a browsable web interface with filtering, search, and status badges. Log4Brains is a publication tool. adr-tools generates a plain-text TOC but not a web UI. adr-log generates a Markdown index file.

Most teams that use Log4Brains also use adr-tools for creation — they are not competing options. The confusion arises because they're often mentioned in the same breath when teams are evaluating "ADR tooling," and teams assume they must pick one. In practice, the creation tool and publication tool are independent choices.

A third job — CI enforcement — is handled by the ADR GitHub Action regardless of which creation or publication tool the team uses. The GitHub Action validates format, checks supersession pointer integrity, and auto-generates an index on every PR. It is not listed in the comparison below because it is not a competing tool — it is a companion to any of them.

Feature comparison

Feature adr-tools Log4Brains adr-log Hand-rolled
Language / runtime Bash (no runtime needed) Node.js 18+ Node.js 14+ None (touch + cp)
Install brew install adr-tools or clone + PATH npm install -g log4brains npm install -g adr-log Copy template.md once
Creates ADR files Yes — adr new "Title" No Yes — adr-log new "Title" Yes — manually or via one-liner alias
Auto-numbering Yes (0001-, 0002-...) N/A (no creation) Yes (sequential) Manual (error-prone)
ADR format supported Nygard (native) Nygard + YAML frontmatter MADR (native) Any
Web UI No (plain-text TOC only via adr generate toc) Yes — searchable Next.js static site with status badges and supersession graph No (generates index.md) No
Monorepo support Partial — one ADR_DIR per invocation, no unified view Yes — packages array in log4brains.yml, cross-package search No Any (manual)
Supersession awareness No — adr link adds text links but no pointer validation Yes — renders supersession graph and shows chain visually No No
GitHub Pages deploy N/A (no web output) Yes — log4brains build outputs static site; documented GH Pages Action N/A (Markdown output) N/A
CI integration Can run adr generate toc in CI to fail on missing TOC entries Can fail build on missing/broken ADRs (log4brains build --check) Can run adr-log to regenerate index.md in CI Use ADR GitHub Action (independent)
Maintenance status (2026) Stable, low activity — last substantive commit 2023 Active — v0.x series, releases 2024–2025 Minimal — last release 2022 N/A (you own it)
GitHub stars (approx.) ~4.5k ~900 ~100 N/A

adr-tools: the original, still the reference

adr-tools (github.com/natemoen/adr-tools, originally by Nat Pryce) is the most referenced ADR creation tool in tutorials, blog posts, and the adr-tools GitHub Discussions forum. Its three commands — adr init doc/decisions, adr new "Title of decision", and adr generate toc — cover the creation and indexing use cases. The format it produces is Nygard's original five-section template.

The practical limitation is what it does not do. adr-tools creates numbered files and generates a plain-text table of contents. It does not validate supersession pointers, does not detect format drift, and does not produce anything non-engineers can browse without navigating a git repository. Teams that need those capabilities add the ADR GitHub Action for validation and Log4Brains for publication — treating adr-tools as the creation utility only.

Maintenance-wise: adr-tools is stable in the sense that it does not break and its core commands still work. It is not actively maintained in the sense that open issues receive no response. This is fine for a Bash utility whose feature set is intentionally limited. If you need a specific feature (monorepo support, MADR format, web UI), look elsewhere rather than waiting for adr-tools to add it.

Log4Brains: the publication layer

Log4Brains (github.com/thomvaill/log4brains, by Thomas Vaillant) solves a different problem than adr-tools: it makes the ADR directory browsable by people who do not use git. log4brains preview starts a local Next.js development server; log4brains build generates a static site suitable for GitHub Pages or any static host. The generated site includes: a decision timeline, status badges (Proposed / Accepted / Superseded / Deprecated), a supersession graph showing which ADRs replaced which, and full-text search across all decision records.

Three non-obvious requirements for GitHub Pages deployment:

  1. fetch-depth: 0 in the checkout Action step — Log4Brains extracts decision dates from git commit history; a shallow clone (the GitHub Actions default) produces wrong dates or fails date extraction entirely.
  2. A .nojekyll file at the repo root or in the docs output directory — GitHub Pages runs Jekyll processing by default, which strips files and directories whose names begin with an underscore; the Next.js static output uses _next/ for its asset directory, which Jekyll silently removes.
  3. Log4Brains reads Nygard-format Markdown natively. If your team uses MADR format with YAML frontmatter, it also reads that. If your files use a custom format, the title and status extraction may fail — check log4brains preview locally before deploying.

Three limitations teams hit most often, and their mitigations:

adr-log: MADR-native, Markdown-output

adr-log (github.com/adr/adr-log, maintained by the MADR project contributors) is a Node CLI designed for teams using the MADR (Markdown Architecture Decision Records) format. Its primary output is a Markdown index file rather than a web UI — adr-log -d docs/decisions writes a formatted index.md listing all ADRs with status, date, and title. This file can be rendered by GitHub's native Markdown viewer, making the decision log browsable without any build step.

The trade-off is scope. adr-log does one thing (generate a Markdown index) well. It does not generate a web UI, does not validate pointers, and does not support monorepos. Maintenance is minimal — the last release was 2022. For teams committed to MADR format who want a simple index file that renders in GitHub without dependencies, adr-log is useful; for teams that want more, the ADR GitHub Action's auto-index job (job 4) produces the same Markdown table via a standard Action without any separate package installation.

Hand-rolled: the zero-dependency option

Many ADR practices that are described as "using adr-tools" actually use nothing but a template file and the convention that filenames start with a zero-padded four-digit number. The hand-rolled approach is this: copy a template.md into the repo, document the naming convention in the README, and rely on humans to increment the number and update the index table.

The failure mode is predictable: numbering collisions on merge (two engineers open PRs with 0042-*.md on the same day), an index table that goes stale, and no validation that Superseded-by pointers point to files that exist. These are the three exact problems that adr-tools and the ADR GitHub Action respectively solve.

The hand-rolled approach works in three specific contexts:

  1. Teams with very low ADR creation rate (fewer than one per month) where the manual overhead is genuinely negligible.
  2. Environments where installing any runtime (Bash scripts, Node packages) requires a security review that would take longer than the ADR practice's first quarter.
  3. Teams adopting ADRs retrospectively by extracting past decisions from AI chat exports — where the numbering starts from a specific historical date rather than zero and the auto-numbering assumption does not match the retrospective ordering.

If you go hand-rolled, the minimum viable safeguard is a CI check that asserts all filenames match the ^\d{4}- pattern and that no two files share the same four-digit prefix. This catches numbering collisions at PR time without requiring any tooling installation.

Decision tree: which tool for your situation

Start here and follow the first matching branch:

  1. Do non-engineer stakeholders (PMs, executives, new hires without git access) need to browse decisions?
    → Yes: add Log4Brains as your publication layer. Also add adr-tools or hand-rolled for creation unless Log4Brains' log4brains adr new subcommand (which delegates to adr-tools) is acceptable.
    → No: skip Log4Brains.
  2. Are you using MADR format specifically (with YAML frontmatter and the Options Considered section)?
    → Yes: consider adr-log for its native MADR awareness and Markdown-index output. Pair with the ADR GitHub Action for validation.
    → No: use Nygard format.
  3. Do you need consistent auto-numbering without manual tracking?
    → Yes: use adr-tools (adr new handles numbering). No Node required, works in any CI with Bash.
    → No (low ADR rate, retrospective import, or managed manually): go hand-rolled.
  4. In all cases: add the ADR GitHub Action for CI enforcement regardless of your creation tool. The Action's supersession integrity check (job 3) and auto-index job (job 4) work with Nygard or MADR format, and with adr-tools-, adr-log-, Log4Brains-, or hand-rolled ADR directories.

The gap all four tools share

Every tool in this comparison helps you manage ADRs you have already written. None of them surfaces the decisions that never reached the ADR directory in the first place — made in a ChatGPT or Claude tab during an implementation sprint and never formalized.

The pattern is common: a team adopts adr-tools or Log4Brains, writes ADRs diligently for a quarter, then velocity drops as newer decisions get made conversationally in AI sessions that feel too small or too uncertain to warrant a formal ADR. Six months later, the decision log has 20 ADRs and 80 undocumented calls. The new engineer asks why the team chose the message queue vendor, and the answer lives in a ChatGPT conversation that nobody exported.

The WhyChose extractor reads your AI chat exports (ChatGPT or Claude) and surfaces those informally-made decisions as structured records. The extracted records can be promoted to ADRs via any of the tools above — the WhyChose output includes the original chat snippet and trade-offs considered, which maps directly to Nygard's Context and Consequences sections. The tooling choice for creation, validation, and publication is orthogonal to the extraction step.

Get early access

Related questions

Is adr-tools still maintained in 2026?

adr-tools is stable but not actively maintained. The last substantive commits date to 2023–2024; open issues accumulate without response. This is not unusual for a Bash utility that does exactly what it says — the core commands (adr init, adr new, adr generate toc) have not needed changes because the Nygard format itself has not changed. Teams using adr-tools in CI via GitHub Actions report no breakage. The practical guidance: adr-tools is safe to adopt for creation; just don't expect new features or quick issue responses. Pair it with the ADR GitHub Action for CI enforcement and Log4Brains for publication if those matter.

Can I use Log4Brains without adr-tools?

Yes. Log4Brains is purely a reader and publisher — it does not create ADR files and does not depend on adr-tools. It reads any Markdown file that follows the Nygard format (Title heading + Status + ## Context + ## Decision + ## Consequences sections) or YAML frontmatter format. Many teams create ADRs manually with their editor and use Log4Brains only for the web publication layer. The common pairing is: adr-tools for adr new (creation + numbering) and Log4Brains for log4brains preview / log4brains build (web UI). But either half is independently useful.

What ADR tool works best in a monorepo?

Log4Brains has the most explicit monorepo support via the packages array in log4brains.yml, which lets you point at multiple doc/decisions/ directories across packages and renders them as a unified searchable site with package-scoped filtering. adr-tools works in monorepos but requires a separate ADR_DIR variable per package and generates separate TOC files — no unified cross-package view. adr-log does not have monorepo mode. Hand-rolled scripts can be adapted for any directory layout but require manual index maintenance. For a monorepo where non-engineer stakeholders need to browse decisions across packages, Log4Brains workspace mode is the clear choice.

Do I need ADR tooling at all, or can I just use a text editor?

Many successful ADR practices use only a text editor and a Markdown template file. ADR tooling solves three specific problems: (1) consistent file naming and numbering (0001-, 0002- prefixes) so that Superseded-by and Supersedes pointers resolve deterministically; (2) auto-generated index/TOC so engineers don't maintain a README table by hand; (3) web UI for non-engineer stakeholders who cannot navigate a git repository. If all three are non-problems for your team, the simplest option is a copied template file. Add tooling when one of the three problems actually bites you.

Further reading