Surface Architectural Decision Records in the context of the code they govern. Records stay as plain markdown in your repo — decisionledger.dev.
Features
- CodeLens
- File-level at the top of any file matched by a record's
applies-toglobs. - Symbol-level on any line carrying an inline
// dl:adr 0042anchor.
- File-level at the top of any file matched by a record's
- Hover — a rich tooltip (status, deciders, summary, open link) on an inline anchor.
- Link Selection to Decision Record — inserts a language-aware anchor comment above the current line, so precise links move with the code through refactors.
- Diagnostics (Problems panel) — warns about dangling anchors (
dl:adrpointing at a missing record) and code governed by a superseded/deprecated record. - Read view — a themed webview rendering the record with its status, metadata, and a clickable supersedes/superseded-by chain.
- Full-text search across id, title, tags, deciders, and body.
- Decisions view in the activity bar — every record grouped by status.
- Status bar count of decisions governing the active file.
- Commands: New Decision Record (from template), Open Decision Record, Show Decisions for This File, Link Selection to Decision Record, Search Decision Records, Open Preview.
Records are MADR-style markdown files in docs/adr/ (configurable). Markdown is the only source of
truth; the extension keeps a disposable in-memory index warmed by a file watcher.
Linking code to a decision
Two complementary mechanisms:
applies-toglobs (in the record) — coarse, file/folder level, zero code changes.- Inline anchors (in the code) —
// dl:adr 0042above a symbol; precise and refactor-proof. Use Link Selection to Decision Record from the editor context menu to insert one.
Record format
---
id: "0042"
title: Adopt event sourcing for orders
status: accepted # proposed | accepted | superseded | deprecated
applies-to:
- "src/orders/**"
---
## Context
## Decision
## Consequences
Settings
| Setting | Default | Purpose |
|---|---|---|
decisionLedger.folder |
docs/adr |
Folder holding records |
decisionLedger.fileGlob |
**/*.md |
Which files in it are records |
decisionLedger.codeLens.enabled |
true |
Toggle the file CodeLens |
decisionLedger.anchor.keywords |
["dl:adr", "@adr"] |
Keywords that mark an inline anchor |
decisionLedger.diagnostics.enabled |
true |
Toggle Problems-panel warnings |
Develop
npm install
npm run watch # esbuild in watch mode
# press F5 in VS Code to launch the Extension Development Host
See PLAN.md for the full roadmap.