{"id":22694370,"url":"https://github.com/timo-reymann/mkdocs-decision-records","last_synced_at":"2026-04-03T03:05:45.055Z","repository":{"id":267342224,"uuid":"900934332","full_name":"timo-reymann/mkdocs-decision-records","owner":"timo-reymann","description":"Manage decision records with mkdocs in a customizable and minimal fashion.","archived":false,"fork":false,"pushed_at":"2026-03-20T09:01:06.000Z","size":1516,"stargazers_count":10,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-21T01:52:14.642Z","etag":null,"topics":["adr","mkdocs","pypi"],"latest_commit_sha":null,"homepage":"https://pypi.org/project/mkdocs-decision-records/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/timo-reymann.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"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},"funding":{"github":["timo-reymann"],"custom":["https://www.buymeacoffee.com/timoreymann","Buy me a coffee"]}},"created_at":"2024-12-09T18:32:42.000Z","updated_at":"2026-03-20T09:00:05.000Z","dependencies_parsed_at":"2025-12-20T02:02:01.692Z","dependency_job_id":null,"html_url":"https://github.com/timo-reymann/mkdocs-decision-records","commit_stats":{"total_commits":33,"total_committers":3,"mean_commits":11.0,"dds":"0.24242424242424243","last_synced_commit":"bef88c337e9a182fb8af7b67dd8dc626bd83d274"},"previous_names":["timo-reymann/mkdocs-decision-records"],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/timo-reymann/mkdocs-decision-records","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timo-reymann%2Fmkdocs-decision-records","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timo-reymann%2Fmkdocs-decision-records/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timo-reymann%2Fmkdocs-decision-records/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timo-reymann%2Fmkdocs-decision-records/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/timo-reymann","download_url":"https://codeload.github.com/timo-reymann/mkdocs-decision-records/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timo-reymann%2Fmkdocs-decision-records/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31330249,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-03T02:17:30.558Z","status":"ssl_error","status_checked_at":"2026-04-03T02:17:30.071Z","response_time":107,"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","mkdocs","pypi"],"created_at":"2024-12-10T03:07:32.062Z","updated_at":"2026-04-03T03:05:45.049Z","avatar_url":"https://github.com/timo-reymann.png","language":"Python","funding_links":["https://github.com/sponsors/timo-reymann","https://www.buymeacoffee.com/timoreymann","Buy me a coffee"],"categories":["Python"],"sub_categories":[],"readme":"mkdocs-decision-records\n===\n[![PyPI version](https://badge.fury.io/py/mkdocs-decision-records.svg)](https://pypi.org/project/mkdocs-decision-records)\n[![PyPI - Downloads](https://img.shields.io/pypi/dm/mkdocs-decision-records)](https://pypi.org/project/mkdocs-decision-records)\n[![LICENSE](https://img.shields.io/github/license/timo-reymann/mkdocs-decision-records)](https://github.com/timo-reymann/mkdocs-decision-records/blob/main/LICENSE)\n[![CircleCI](https://circleci.com/gh/timo-reymann/mkdocs-decision-records.svg?style=shield)](https://app.circleci.com/pipelines/github/timo-reymann/mkdocs-decision-records)\n[![codecov](https://codecov.io/gh/timo-reymann/mkdocs-decision-records/graph/badge.svg?token=EVgb1KIcjC)](https://codecov.io/gh/timo-reymann/mkdocs-decision-records)\n[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=timo-reymann_mkdocs-decision-records\u0026metric=alert_status)](https://sonarcloud.io/summary/new_code?id=timo-reymann_mkdocs-decision-records)\n[![Code Smells](https://sonarcloud.io/api/project_badges/measure?project=timo-reymann_mkdocs-decision-records\u0026metric=code_smells)](https://sonarcloud.io/summary/new_code?id=timo-reymann_mkdocs-decision-records)\n[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=timo-reymann_mkdocs-decision-records\u0026metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=timo-reymann_mkdocs-decision-records)\n[![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=timo-reymann_mkdocs-decision-records\u0026metric=security_rating)](https://sonarcloud.io/summary/new_code?id=timo-reymann_mkdocs-decision-records)\n[![Renovate](https://img.shields.io/badge/renovate-enabled-green?logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzNjkgMzY5Ij48Y2lyY2xlIGN4PSIxODkuOSIgY3k9IjE5MC4yIiByPSIxODQuNSIgZmlsbD0iI2ZmZTQyZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTUgLTYpIi8+PHBhdGggZmlsbD0iIzhiYjViNSIgZD0iTTI1MSAyNTZsLTM4LTM4YTE3IDE3IDAgMDEwLTI0bDU2LTU2YzItMiAyLTYgMC03bC0yMC0yMWE1IDUgMCAwMC03IDBsLTEzIDEyLTktOCAxMy0xM2ExNyAxNyAwIDAxMjQgMGwyMSAyMWM3IDcgNyAxNyAwIDI0bC01NiA1N2E1IDUgMCAwMDAgN2wzOCAzOHoiLz48cGF0aCBmaWxsPSIjZDk1NjEyIiBkPSJNMzAwIDI4OGwtOCA4Yy00IDQtMTEgNC0xNiAwbC00Ni00NmMtNS01LTUtMTIgMC0xNmw4LThjNC00IDExLTQgMTUgMGw0NyA0N2M0IDQgNCAxMSAwIDE1eiIvPjxwYXRoIGZpbGw9IiMyNGJmYmUiIGQ9Ik04MSAxODVsMTgtMTggMTggMTgtMTggMTh6Ii8+PHBhdGggZmlsbD0iIzI1YzRjMyIgZD0iTTIyMCAxMDBsMjMgMjNjNCA0IDQgMTEgMCAxNkwxNDIgMjQwYy00IDQtMTEgNC0xNSAwbC0yNC0yNGMtNC00LTQtMTEgMC0xNWwxMDEtMTAxYzUtNSAxMi01IDE2IDB6Ii8+PHBhdGggZmlsbD0iIzFkZGVkZCIgZD0iTTk5IDE2N2wxOC0xOCAxOCAxOC0xOCAxOHoiLz48cGF0aCBmaWxsPSIjMDBhZmIzIiBkPSJNMjMwIDExMGwxMyAxM2M0IDQgNCAxMSAwIDE2TDE0MiAyNDBjLTQgNC0xMSA0LTE1IDBsLTEzLTEzYzQgNCAxMSA0IDE1IDBsMTAxLTEwMWM1LTUgNS0xMSAwLTE2eiIvPjxwYXRoIGZpbGw9IiMyNGJmYmUiIGQ9Ik0xMTYgMTQ5bDE4LTE4IDE4IDE4LTE4IDE4eiIvPjxwYXRoIGZpbGw9IiMxZGRlZGQiIGQ9Ik0xMzQgMTMxbDE4LTE4IDE4IDE4LTE4IDE4eiIvPjxwYXRoIGZpbGw9IiMxYmNmY2UiIGQ9Ik0xNTIgMTEzbDE4LTE4IDE4IDE4LTE4IDE4eiIvPjxwYXRoIGZpbGw9IiMyNGJmYmUiIGQ9Ik0xNzAgOTVsMTgtMTggMTggMTgtMTggMTh6Ii8+PHBhdGggZmlsbD0iIzFiY2ZjZSIgZD0iTTYzIDE2N2wxOC0xOCAxOCAxOC0xOCAxOHpNOTggMTMxbDE4LTE4IDE4IDE4LTE4IDE4eiIvPjxwYXRoIGZpbGw9IiMzNGVkZWIiIGQ9Ik0xMzQgOTVsMTgtMTggMTggMTgtMTggMTh6Ii8+PHBhdGggZmlsbD0iIzFiY2ZjZSIgZD0iTTE1MyA3OGwxOC0xOCAxOCAxOC0xOCAxOHoiLz48cGF0aCBmaWxsPSIjMzRlZGViIiBkPSJNODAgMTEzbDE4LTE3IDE4IDE3LTE4IDE4ek0xMzUgNjBsMTgtMTggMTggMTgtMTggMTh6Ii8+PHBhdGggZmlsbD0iIzk4ZWRlYiIgZD0iTTI3IDEzMWwxOC0xOCAxOCAxOC0xOCAxOHoiLz48cGF0aCBmaWxsPSIjYjUzZTAyIiBkPSJNMjg1IDI1OGw3IDdjNCA0IDQgMTEgMCAxNWwtOCA4Yy00IDQtMTEgNC0xNiAwbC02LTdjNCA1IDExIDUgMTUgMGw4LTdjNC01IDQtMTIgMC0xNnoiLz48cGF0aCBmaWxsPSIjOThlZGViIiBkPSJNODEgNzhsMTgtMTggMTggMTgtMTggMTh6Ii8+PHBhdGggZmlsbD0iIzAwYTNhMiIgZD0iTTIzNSAxMTVsOCA4YzQgNCA0IDExIDAgMTZMMTQyIDI0MGMtNCA0LTExIDQtMTUgMGwtOS05YzUgNSAxMiA1IDE2IDBsMTAxLTEwMWM0LTQgNC0xMSAwLTE1eiIvPjxwYXRoIGZpbGw9IiMzOWQ5ZDgiIGQ9Ik0yMjggMTA4bC04LThjLTQtNS0xMS01LTE2IDBMMTAzIDIwMWMtNCA0LTQgMTEgMCAxNWw4IDhjLTQtNC00LTExIDAtMTVsMTAxLTEwMWM1LTQgMTItNCAxNiAweiIvPjxwYXRoIGZpbGw9IiNhMzM5MDQiIGQ9Ik0yOTEgMjY0bDggOGM0IDQgNCAxMSAwIDE2bC04IDdjLTQgNS0xMSA1LTE1IDBsLTktOGM1IDUgMTIgNSAxNiAwbDgtOGM0LTQgNC0xMSAwLTE1eiIvPjxwYXRoIGZpbGw9IiNlYjZlMmQiIGQ9Ik0yNjAgMjMzbC00LTRjLTYtNi0xNy02LTIzIDAtNyA3LTcgMTcgMCAyNGw0IDRjLTQtNS00LTExIDAtMTZsOC04YzQtNCAxMS00IDE1IDB6Ii8+PHBhdGggZmlsbD0iIzEzYWNiZCIgZD0iTTEzNCAyNDhjLTQgMC04LTItMTEtNWwtMjMtMjNhMTYgMTYgMCAwMTAtMjNMMjAxIDk2YTE2IDE2IDAgMDEyMiAwbDI0IDI0YzYgNiA2IDE2IDAgMjJMMTQ2IDI0M2MtMyAzLTcgNS0xMiA1em03OC0xNDdsLTQgMi0xMDEgMTAxYTYgNiAwIDAwMCA5bDIzIDIzYTYgNiAwIDAwOSAwbDEwMS0xMDFhNiA2IDAgMDAwLTlsLTI0LTIzLTQtMnoiLz48cGF0aCBmaWxsPSIjYmY0NDA0IiBkPSJNMjg0IDMwNGMtNCAwLTgtMS0xMS00bC00Ny00N2MtNi02LTYtMTYgMC0yMmw4LThjNi02IDE2LTYgMjIgMGw0NyA0NmM2IDcgNiAxNyAwIDIzbC04IDhjLTMgMy03IDQtMTEgNHptLTM5LTc2Yy0xIDAtMyAwLTQgMmwtOCA3Yy0yIDMtMiA3IDAgOWw0NyA0N2E2IDYgMCAwMDkgMGw3LThjMy0yIDMtNiAwLTlsLTQ2LTQ2Yy0yLTItMy0yLTUtMnoiLz48L3N2Zz4=)](https://renovatebot.com)\n\n\u003cp align=\"center\"\u003e\n\t\u003cimg width=\"600\" src=\"https://raw.githubusercontent.com/timo-reymann/mkdocs-decision-records/main/.github/images/demo.png\"\u003e\n    \u003cbr /\u003e\n    Manage decision records with mkdocs in a customizable and minimal fashion.\n\u003c/p\u003e\n\n## Features\n\n- Customizable status colors and lifecycle\n- Enforces information to be present for ADRs\n- Allows description being kept as markdown\n\n## Demo\n\n[You can find a Demo on GitHub Pages](https://timo-reymann.github.io/mkdocs-decision-records/)\n\n## Installation\n\n1. Install `mkdocs-decision-records` from the PyPi registry using your favorite package manager\n2. Configure your `mkdocs.yml`\n   ```yaml\n   plugins:\n   - decision-records:\n       # Folder where your decision records are located, defaults to adr\n       decisions_folder: adr\n       # Optional prefix to prepend to ticket numbers\n       ticket_url_prefix: https://ticket.example.com/\n       # Configure amount of required deciders\n       required_deciders_count: 1\n       # Configure available stages and the badge colors\n       lifecycle_stages:\n         {status}: {color}\n   ```\n3. Create your ADRs ensuring to add the frontmatter meta data:\n   ```markdown\n   ---\n   id: 000\n   status: proposed | rejected | accepted | deprecated | … | superseded\n   [superseded_by: \u003cid it has been replaced with\u003e]\n   date: YYYY-MM-DD\n   deciders:\n      - decider 1\n      - decider 2\n   # Optional ticket\n   ticket: FOO-1\n   ---\n\n   ## Context and Problem Statement\n\n   [Describe the context and problem statement, e.g., in free form using two to three sentences. You may want to articulate the problem in form of a question.]\n\n   ## Decision Drivers \u003c!-- optional --\u003e\n\n   * [driver 1, e.g., a force, facing concern, …]\n   * [driver 2, e.g., a force, facing concern, …]\n   * … \u003c!-- numbers of drivers can vary --\u003e\n\n   ## Considered Options\n\n   * [option 1]\n   * [option 2]\n   * [option 3]\n\n   ## Decision Outcome\n\n   Chosen option: \"[option 1]\",\n   because [justification. e.g., only option, which meets k.o. criterion decision driver | which resolves force force | … | comes out best (see below)].\n\n   ## Pros and Cons of the Options \u003c!-- optional --\u003e\n\n   ### [option 1]\n\n   [example | description | pointer to more information | …] \u003c!-- optional --\u003e\n\n   * Good, because [argument a]\n   * Good, because [argument b]\n   * Bad, because [argument c]\n   * … \u003c!-- numbers of pros and cons can vary --\u003e\n\n   ### [option 2]\n\n   [example | description | pointer to more information | …] \u003c!-- optional --\u003e\n\n   * Good, because [argument a]\n   * Good, because [argument b]\n   * Bad, because [argument c]\n   * … \u003c!-- numbers of pros and cons can vary --\u003e\n\n   ### [option 3]\n\n   [example | description | pointer to more information | …] \u003c!-- optional --\u003e\n\n   * Good, because [argument a]\n   * Good, because [argument b]\n   * Bad, because [argument c]\n   * … \u003c!-- numbers of pros and cons can vary --\u003e\n\n   ## Links \u003c!-- optional --\u003e\n\n   * [Link type] [Link to ADR] \u003c!-- example: Refined by [ADR-0005](0005-example.md) --\u003e\n   * … \u003c!-- numbers of links can vary --\u003e\n   ```\n\n## Superseding ADRs\n\nThis plugin is opinionated about using `superseded` status.\n\nWhen setting the status to `superseded`, make to sure also set `superseded_by` to the ADR id it has been replaced with.\n\n```markdown\n---\n# adr details\nstatus: superseded\nsuperseded_by: 123\n---\n\u003c!-- Deprecated ADR --\u003e\n```\n\n## Motivation\n\nI love ADRs and documenting decisions in general. This plugin makes it a bit easier, enforcing basic meta information\nwhile keeping the format open enough so you can do your thing.\n\n## Contributing\n\nI love your input! I want to make contributing to this project as easy and transparent as possible, whether it's:\n\n- Reporting a bug\n- Discussing the current state of the configuration\n- Submitting a fix\n- Proposing new features\n- Becoming a maintainer\n\nTo get started please read the [Contribution Guidelines](./CONTRIBUTING.md).\n\n## Development\n\n### Requirements\n\n- Python 3.12+\n- Poetry\n\n### Build\n\n````sh\npoetry install\n````\n\n### Alternatives\n\n- [mkdocs-material](https://pypi.org/project/mkdocs-material-adr/)\n    - Needs to use the theme\n    - ADR graph\n- [mkdocs-macros-adr-summary](https://github.com/febus982/mkdocs-macros-adr-summary)\n    - works entirely with macros\n    - no metadata table at the top\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftimo-reymann%2Fmkdocs-decision-records","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftimo-reymann%2Fmkdocs-decision-records","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftimo-reymann%2Fmkdocs-decision-records/lists"}