{"id":35222605,"url":"https://github.com/joshrotenberg/adrs","last_synced_at":"2026-02-26T23:04:30.869Z","repository":{"id":51348433,"uuid":"345395038","full_name":"joshrotenberg/adrs","owner":"joshrotenberg","description":"Architectural Decision Record tool in Rust","archived":false,"fork":false,"pushed_at":"2026-02-20T05:48:57.000Z","size":2055,"stargazers_count":51,"open_issues_count":8,"forks_count":6,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-02-20T09:33:01.304Z","etag":null,"topics":["adr","architecture-decision-records"],"latest_commit_sha":null,"homepage":"http://joshrotenberg.com/adrs/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/joshrotenberg.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE-APACHE-2.0","code_of_conduct":null,"threat_model":null,"audit":"audit.toml","citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-03-07T16:25:12.000Z","updated_at":"2026-02-20T05:47:53.000Z","dependencies_parsed_at":"2024-03-11T04:28:17.444Z","dependency_job_id":"827f73e0-b824-48a0-a33e-75a51735396b","html_url":"https://github.com/joshrotenberg/adrs","commit_stats":{"total_commits":34,"total_committers":3,"mean_commits":"11.333333333333334","dds":0.1470588235294118,"last_synced_commit":"66acdb9fb3a51a5eb49874e540c1cd76a801c865"},"previous_names":[],"tags_count":26,"template":false,"template_full_name":null,"purl":"pkg:github/joshrotenberg/adrs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joshrotenberg%2Fadrs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joshrotenberg%2Fadrs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joshrotenberg%2Fadrs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joshrotenberg%2Fadrs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/joshrotenberg","download_url":"https://codeload.github.com/joshrotenberg/adrs/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joshrotenberg%2Fadrs/sbom","scorecard":{"id":534241,"data":{"date":"2025-08-11","repo":{"name":"github.com/joshrotenberg/adrs","commit":"b9fd0ec27ff44e307df3d09f0bc3d23ccbac1467"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4,"checks":[{"name":"Code-Review","score":2,"reason":"Found 4/16 approved changesets -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: jobLevel 'contents' permission set to 'write': .github/workflows/book.yml:12","Warn: no topLevel permission defined: .github/workflows/book.yml:1","Warn: no topLevel permission defined: .github/workflows/release.yml:1","Warn: no topLevel permission defined: .github/workflows/rust.yml:1"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/book.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/joshrotenberg/adrs/book.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/book.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/joshrotenberg/adrs/book.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/book.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/joshrotenberg/adrs/book.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:118: update your workflow using https://app.stepsecurity.io/secureworkflow/joshrotenberg/adrs/release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:121: update your workflow using https://app.stepsecurity.io/secureworkflow/joshrotenberg/adrs/release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:131: update your workflow using https://app.stepsecurity.io/secureworkflow/joshrotenberg/adrs/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:52: update your workflow using https://app.stepsecurity.io/secureworkflow/joshrotenberg/adrs/release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:55: update your workflow using https://app.stepsecurity.io/secureworkflow/joshrotenberg/adrs/release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:62: update your workflow using https://app.stepsecurity.io/secureworkflow/joshrotenberg/adrs/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:82: update your workflow using https://app.stepsecurity.io/secureworkflow/joshrotenberg/adrs/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:93: update your workflow using https://app.stepsecurity.io/secureworkflow/joshrotenberg/adrs/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:96: update your workflow using https://app.stepsecurity.io/secureworkflow/joshrotenberg/adrs/release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:107: update your workflow using https://app.stepsecurity.io/secureworkflow/joshrotenberg/adrs/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/rust.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/joshrotenberg/adrs/rust.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/rust.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/joshrotenberg/adrs/rust.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/rust.yml:38: update your workflow using https://app.stepsecurity.io/secureworkflow/joshrotenberg/adrs/rust.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/rust.yml:41: update your workflow using https://app.stepsecurity.io/secureworkflow/joshrotenberg/adrs/rust.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/rust.yml:46: update your workflow using https://app.stepsecurity.io/secureworkflow/joshrotenberg/adrs/rust.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/rust.yml:61: update your workflow using https://app.stepsecurity.io/secureworkflow/joshrotenberg/adrs/rust.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/rust.yml:64: update your workflow using https://app.stepsecurity.io/secureworkflow/joshrotenberg/adrs/rust.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/rust.yml:69: update your workflow using https://app.stepsecurity.io/secureworkflow/joshrotenberg/adrs/rust.yml/main?enable=pin","Info:   0 out of   9 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of  12 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE-APACHE-2.0:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE-APACHE-2.0:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/release.yml:112"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v0.3.0 not signed: https://api.github.com/repos/joshrotenberg/adrs/releases/199495865","Warn: release artifact v0.2.9 not signed: https://api.github.com/repos/joshrotenberg/adrs/releases/172586460","Warn: release artifact v0.2.8 not signed: https://api.github.com/repos/joshrotenberg/adrs/releases/146677696","Warn: release artifact v0.2.7 not signed: https://api.github.com/repos/joshrotenberg/adrs/releases/145556044","Warn: release artifact v0.3.0 does not have provenance: https://api.github.com/repos/joshrotenberg/adrs/releases/199495865","Warn: release artifact v0.2.9 does not have provenance: https://api.github.com/repos/joshrotenberg/adrs/releases/172586460","Warn: release artifact v0.2.8 does not have provenance: https://api.github.com/repos/joshrotenberg/adrs/releases/146677696","Warn: release artifact v0.2.7 does not have provenance: https://api.github.com/repos/joshrotenberg/adrs/releases/145556044"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 29 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-20T06:32:02.692Z","repository_id":51348433,"created_at":"2025-08-20T06:32:02.692Z","updated_at":"2025-08-20T06:32:02.692Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29876371,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-26T22:37:10.609Z","status":"ssl_error","status_checked_at":"2026-02-26T22:37:09.019Z","response_time":89,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["adr","architecture-decision-records"],"created_at":"2025-12-30T00:25:28.479Z","updated_at":"2026-02-26T23:04:30.859Z","avatar_url":"https://github.com/joshrotenberg.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# adrs\n\n[![Crates.io Version](https://img.shields.io/crates/v/adrs)](https://crates.io/crates/adrs)\n[![crates.io](https://img.shields.io/crates/d/adrs.svg)](https://crates.io/crates/adrs)\n[![CI](https://github.com/joshrotenberg/adrs/workflows/CI/badge.svg)](https://github.com/joshrotenberg/adrs/actions?query=workflow%3ACI)\n[![dependency status](https://deps.rs/repo/github/joshrotenberg/adrs/status.svg)](https://deps.rs/repo/github/joshrotenberg/adrs)\n\nA command-line tool for creating and managing [Architecture Decision Records](https://adr.github.io) (ADRs).\n\n## Features\n\n- **adr-tools compatible** - works with existing ADR repositories\n- **Multiple formats** - supports Nygard (classic) and [MADR 4.0.0](https://adr.github.io/madr/) formats\n- **Template variants** - full, minimal, and bare templates\n- **Tags support** - categorize ADRs with tags (NextGen mode)\n- **Full-text search** - search ADR titles and content\n- **Repository health checks** - `doctor` command finds issues\n- **Config discovery** - automatically finds ADR directory from subdirectories\n- **Import/Export** - JSON-ADR format with federation support\n- **MCP server** - AI agent integration via Model Context Protocol\n- **Cross-platform** - macOS, Linux, and Windows binaries\n\n## Installation\n\n### Homebrew (macOS/Linux)\n\n```sh\nbrew install joshrotenberg/brew/adrs\n```\n\n### Cargo\n\n```sh\ncargo install adrs\n```\n\n### Docker\n\n```sh\ndocker run --rm -v $(pwd):/work ghcr.io/joshrotenberg/adrs init\n```\n\n### Binary releases\n\nDownload from [GitHub Releases](https://github.com/joshrotenberg/adrs/releases).\n\n## Quick Start\n\n```sh\n# Initialize a new ADR repository\nadrs init\n\n# Create your first decision\nadrs new \"Use PostgreSQL for persistence\"\n\n# List all ADRs\nadrs list\n\n# Check repository health\nadrs doctor\n```\n\n## Usage\n\n```\nadrs [OPTIONS] \u003cCOMMAND\u003e\n\nCommands:\n  init         Initialize a new ADR repository\n  new          Create a new ADR\n  edit         Edit an existing ADR\n  list         List all ADRs\n  search       Search ADRs for matching content\n  link         Link two ADRs together\n  status       Change an ADR's status\n  config       Show configuration\n  doctor       Check repository health\n  generate     Generate documentation (toc, graph, book)\n  export       Export ADRs to different formats\n  import       Import ADRs from different formats\n  template     Manage ADR templates\n  completions  Generate shell completions\n  cheatsheet   Show quick reference for common workflows\n\nOptions:\n      --ng         Enable NextGen mode with YAML frontmatter\n  -C, --cwd \u003cDIR\u003e  Run from a different directory\n  -h, --help       Print help\n  -V, --version    Print version\n```\n\n## Examples\n\n### Create ADRs with different formats\n\n```sh\n# Classic Nygard format (default)\nadrs new \"Use REST API\"\n\n# MADR 4.0.0 format\nadrs new --format madr \"Use GraphQL\"\n\n# Minimal template\nadrs new --variant minimal \"Quick decision\"\n\n# With tags (NextGen mode)\nadrs --ng new --tags security,api \"Use JWT for authentication\"\n```\n\n### Search and filter\n\n```sh\n# Full-text search\nadrs search postgres\n\n# Filter by status\nadrs list --status accepted\n\n# Filter by tag (NextGen mode)\nadrs --ng list --tag security\n```\n\n### Supersede and link decisions\n\n```sh\n# Supersede an existing ADR\nadrs new --supersedes 2 \"Use MySQL instead\"\n\n# Link related ADRs (auto-derives reverse link)\nadrs link 3 Amends 1\n```\n\n### Generate documentation\n\n```sh\n# Table of contents\nadrs generate toc \u003e doc/adr/README.md\n\n# Graphviz dependency graph\nadrs generate graph | dot -Tsvg \u003e doc/adr/graph.svg\n\n# mdbook\nadrs generate book \u0026\u0026 cd book \u0026\u0026 mdbook serve\n```\n\n### Import/Export\n\n```sh\n# Export to JSON-ADR format\nadrs export json \u003e decisions.json\n\n# Import from another repository\nadrs import decisions.json --renumber\n```\n\n## MCP Server (AI Integration)\n\n`adrs` includes an MCP (Model Context Protocol) server for AI agent integration (enabled by default).\n\nAdd to Claude Desktop config (`claude_desktop_config.json`):\n\n```json\n{\n  \"mcpServers\": {\n    \"adrs\": {\n      \"command\": \"adrs\",\n      \"args\": [\"mcp\", \"serve\"],\n      \"cwd\": \"/path/to/your/project\"\n    }\n  }\n}\n```\n\nThe MCP server provides 15 tools for reading, creating, and managing ADRs.\n\n## Library\n\n`adrs` is built on the `adrs-core` library, which can be used independently:\n\n```toml\n[dependencies]\nadrs-core = \"0.7\"\n```\n\n```rust\nuse adrs_core::Repository;\n\nlet repo = Repository::open(\".\")?;\nfor adr in repo.list()? {\n    println!(\"{}: {}\", adr.number, adr.title);\n}\n```\n\nSee [library documentation](https://docs.rs/adrs-core) for more details.\n\n## Documentation\n\nFull documentation: [joshrotenberg.com/adrs](https://joshrotenberg.com/adrs/)\n\n## Contributing\n\nContributions welcome! See [issues](https://github.com/joshrotenberg/adrs/issues) or open a new one.\n\n## License\n\nMIT or Apache-2.0\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoshrotenberg%2Fadrs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjoshrotenberg%2Fadrs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoshrotenberg%2Fadrs/lists"}