Status: Experimental
Open-ADR is a web app to discover, author, and review Architecture Decision Records (ADRs) across GitHub repositories.
- Browse public repositories without signing in (higher limits with a server token).
Explore page:/explore(deep‑link:/explore?owner=<o>&repo=<r>) - Detects common ADR folder conventions and can auto-discover ADRs if paths aren’t standard.
- Lists ADRs and parses YAML front‑matter
status:(normalized to common values). - Views ADR markdown directly from GitHub.
- Creates new ADRs as pull requests — sign in, review/merge on GitHub. With write access the branch lives in the repo; without it, the proposal is built in your fork and comes back as a normal PR.
- Edits and supersedes ADRs as pull requests too — superseding updates the old ADR's
status: superseded by NNNNin the same PR. - Shows open ADR PRs as proposals with the ADR file preview from the PR branch, inline line comments, threaded replies, and approvals.
- Approve proposals in-app; once reviewed, set the ADR's status (accepted / rejected / deprecated) directly from the proposal view.
- Clone and install
git clone https://github.com/seluard/open-adr.git
cd open-adr
npm install- Configure
.env.local
GITHUB_ID=your_client_id
GITHUB_SECRET=your_client_secret
NEXTAUTH_SECRET=generate_a_long_random_string
NEXTAUTH_URL=http://localhost:3000
# Optional – improves rate limits for public browsing
GITHUB_PUBLIC_TOKEN=your_server_token
# Optional – landing demo buttons
NEXT_PUBLIC_DEMO_REPOS=owner1/repo1,owner2/repo2
# Optional – navbar repo+stars (defaults to this repo)
NEXT_PUBLIC_REPO_OWNER=seluard
NEXT_PUBLIC_REPO_NAME=open-adrGenerate a secret (example):
openssl rand -base64 48- Run the dev server
npm run devVisit http://localhost:3000
- Browse public repos without signing in at
/explore. - Sign in with GitHub for private repos and higher rate limits.
- Use the button above or: https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fseluard%2Fopen-adr
- Set environment variables:
- GITHUB_ID, GITHUB_SECRET, NEXTAUTH_SECRET, NEXTAUTH_URL
- Optional: GITHUB_PUBLIC_TOKEN (raises public rate limits)
- Optional: NEXT_PUBLIC_DEMO_REPOS
- Optional: NEXT_PUBLIC_REPO_OWNER / NEXT_PUBLIC_REPO_NAME
- In your GitHub OAuth App, set the callback URL to:
https://<your-project>.vercel.app/api/auth/callback/github.
- GITHUB_ID / GITHUB_SECRET – GitHub OAuth App credentials
- NEXTAUTH_SECRET – long random string for sessions/JWT
- NEXTAUTH_URL – absolute app URL (important in deploys)
- GITHUB_PUBLIC_TOKEN (optional) – server-side token for public browsing rate limits
- NEXT_PUBLIC_DEMO_REPOS (optional) – comma‑separated demo repos for landing buttons
- NEXT_PUBLIC_REPO_OWNER / NEXT_PUBLIC_REPO_NAME (optional) – controls repo+stars in navbar
| Folder | Example | Notes |
|---|---|---|
docs/adr/ |
docs/adr/0001-first-decision.md |
Preferred if you keep docs grouped |
doc/adr/ |
doc/adr/0001-first-decision.md |
Variant seen in some repos |
docs/decisions/ |
docs/decisions/0002-something.md |
Common alternate |
doc/decisions/ |
doc/decisions/0002-something.md |
Variant seen in some repos |
docs/architecture/decisions/ |
docs/architecture/decisions/0003.md |
Popular long path |
architecture/decisions/ |
architecture/decisions/0003.md |
Alternate |
adr/ |
adr/0004-final.md |
Common alternate |
adrs/ |
adrs/0004-final.md |
Alternate |
decisions/ |
decisions/0004-final.md |
Alternate |
If none of the above match, Open‑ADR will attempt a lightweight default-branch tree scan to locate ADR files.
---
status: accepted
date: 2025-09-11
---Unrecognized values are shown as unknown (for now).
Done
- Shared front-matter parser (single source of truth)
- Caching layer to reduce GitHub rate-limit hits
- Unified error handling, dead routes removed
- Create ADRs via PR from the UI (sign in; contributors without push access fall back to a fork-and-PR flow)
- Edit ADRs via PR from the UI
- Supersede an ADR with a new one in a single PR (old ADR's status updated automatically)
- PR merge = acceptance (read-time status resolution)
- Open ADR PRs listed as proposals, with ADR file preview from the PR branch, inline line comments, threaded replies, and approvals
- Set an ADR's status (accepted / rejected / deprecated) from a reviewed proposal — written to the file via a PR-branch commit, so it is correct outside Open-ADR too
Next
- Authoring & lifecycle (remaining)
- Multi-line comment ranges
- Org awareness
- Org dashboard: ADR counts, status distribution, superseded rate
- Cross-repo search over a cached index
- Saved repo collections / multi-repo views
- GitHub Enterprise / SSO auth
Decisions and reasoning: see docs/adr/.
Early stage. Please open an issue describing the idea/problem before a PR.
MIT – see LICENSE
MIT was chosen deliberately: maximum adoption and contribution-friendliness, no copyleft or dual-license split. This is a community-first project.
- Editing existing ADRs? Yes — edits and supersessions go through pull requests, reviewed and merged on GitHub.
- Will you support GitLab? Possibly later; GitHub first.
- Does it store ADRs? No, it fetches from GitHub on demand.
- Rate limits? The app returns 429 when GitHub rate limits are exceeded; set
GITHUB_PUBLIC_TOKENto improve public browsing.
If this project is useful, please star the repository – it helps prioritize the roadmap.
