JSON-Rohbericht maschinenlesbar
{
"data": {
"repo": {
"topics": [
"python",
"html",
"template-engine",
"html-escape",
"markupsafe",
"jinja",
"pallets"
],
"is_fork": false,
"size_kb": 1033,
"has_wiki": false,
"homepage": "https://markupsafe.palletsprojects.com",
"languages": {
"C": 4327,
"Shell": 445,
"Python": 27201
},
"pushed_at": "2025-09-27T18:47:09Z",
"created_at": "2010-06-22T17:22:58Z",
"owner_type": "Organization",
"updated_at": "2026-07-16T03:54:11Z",
"description": "Safely add untrusted strings to HTML/XML markup.",
"is_archived": false,
"is_disabled": false,
"license_spdx": "BSD-3-Clause",
"default_branch": "main",
"license_spdx_raw": "BSD-3-Clause",
"primary_language": "Python",
"significant_languages": [
"Python",
"C"
]
},
"owner": {
"blog": "https://palletsprojects.com",
"name": "Pallets",
"type": "Organization",
"login": "pallets",
"company": null,
"location": null,
"followers": 2372,
"avatar_url": "https://avatars.githubusercontent.com/u/16748505?v=4",
"created_at": "2016-01-17T21:29:18Z",
"is_verified": null,
"public_repos": 17,
"account_age_days": 3838
},
"license": {
"state": "standard",
"spdx_id": "BSD-3-Clause",
"raw_spdx": "BSD-3-Clause",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "3.0.3",
"kind": "patch",
"published_at": "2025-09-27T18:38:54Z"
},
{
"tag": "3.0.2",
"kind": "patch",
"published_at": "2024-10-18T15:23:33Z"
},
{
"tag": "3.0.1",
"kind": "patch",
"published_at": "2024-10-08T17:02:01Z"
},
{
"tag": "3.0.0",
"kind": "major",
"published_at": "2024-10-07T21:09:42Z"
},
{
"tag": "2.1.5",
"kind": "patch",
"published_at": "2024-02-02T16:31:56Z"
},
{
"tag": "2.1.4",
"kind": "patch",
"published_at": "2024-01-19T22:51:12Z"
},
{
"tag": "2.1.3",
"kind": "patch",
"published_at": "2023-06-02T21:45:17Z"
},
{
"tag": "2.1.2",
"kind": "patch",
"published_at": "2023-01-17T18:26:06Z"
},
{
"tag": "2.1.1",
"kind": "patch",
"published_at": "2022-03-15T13:21:57Z"
},
{
"tag": "2.1.0",
"kind": "minor",
"published_at": "2022-02-18T03:58:05Z"
},
{
"tag": "2.0.1",
"kind": "patch",
"published_at": "2021-05-18T17:20:35Z"
},
{
"tag": "2.0.0",
"kind": "major",
"published_at": "2021-05-12T00:12:44Z"
},
{
"tag": "2.0.0rc2",
"kind": "other",
"published_at": "2021-04-16T15:10:48Z"
}
],
"recent_commits": [
{
"oid": "b2e4d9c7687be25695fffbe93a37622302b24fb1",
"body": null,
"is_bot": false,
"headline": "Merge branch 'stable'",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2025-09-27T18:45:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "adf9f3d76f1579444a9fbadabace6c2315e79408",
"body": null,
"is_bot": false,
"headline": "release version 3.0.3 (#508)",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2025-09-27T18:38:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "297fc8e356e6836a62087949245d09a28e9f1b13",
"body": null,
"is_bot": false,
"headline": "release version 3.0.3",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2025-09-27T18:08:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7e4e6ce249107c5f27fa6fe890e29da7a8dc8f0c",
"body": null,
"is_bot": false,
"headline": "Free-threading: run with pytest-run-paralell (#507)",
"author_name": "Guido Imperiale",
"author_login": "crusaderky",
"committed_at": "2025-09-27T17:39:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6100b9c0d466495a08d55b33cb172d7b5d8e9aa1",
"body": null,
"is_bot": false,
"headline": "enable riscv64 wheels (#506)",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2025-09-26T22:25:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c9d5ecfc7eec6f611b19cdc8e1cde1aaa65cb8eb",
"body": null,
"is_bot": false,
"headline": "enable riscv64 wheels",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2025-09-26T22:19:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2f9b33753052e7c6df1464a7c900787d04ae9daf",
"body": null,
"is_bot": false,
"headline": "tox for 3.14",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2025-09-25T16:10:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "78d951a9549dee9fc901c55fc79a74a5f01e96fc",
"body": null,
"is_bot": false,
"headline": "update dev dependencies",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2025-09-25T15:54:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bb6744e392e79611b110c5ba022238eb1b855cc2",
"body": null,
"is_bot": false,
"headline": "add entry",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2025-09-25T15:49:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "65c4134ab16a3faccbcac2cba90da0db2b799542",
"body": null,
"is_bot": false,
"headline": "upgrade cibuildwheel, add `cp314` wheels and test on CPython 3.14 (#504)",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2025-09-25T15:45:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3a9bd88b84c9edba8b922bb12b84a59feed98788",
"body": null,
"is_bot": false,
"headline": "add cp314 wheels",
"author_name": "Clément Robert",
"author_login": "neutrinoceros",
"committed_at": "2025-09-25T15:41:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1251593f6b0e3b45f2cc8aba662622bc22d6a5e2",
"body": null,
"is_bot": false,
"headline": "Merge branch 'stable'",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2025-06-14T20:32:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "aafe44d87bd7974bc82af8c4010dea9938441edf",
"body": null,
"is_bot": false,
"headline": "remove slsa provenance (#501)",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2025-06-14T20:10:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ee3efa97b4ecb9cbe8eb86236c4b993efe4007fc",
"body": "PyPI and trusted publishing has built-in attestation support now.",
"is_bot": false,
"headline": "remove slsa provenance",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2025-06-14T20:08:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d70c89acc0e0de584c57714e316e75baacbf9752",
"body": null,
"is_bot": false,
"headline": "Merge branch 'stable'",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2025-06-12T21:01:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ff87c0949bda1aa5d59130668c4b421532c8927e",
"body": null,
"is_bot": false,
"headline": "svg logo",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2025-06-12T21:01:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "be09b1cc919c73eb2f677d36e6a5a4aaaee42299",
"body": null,
"is_bot": false,
"headline": "Merge branch 'stable'",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2025-06-11T18:32:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ca3638df6aeb6c67bfc870f572d58940465b320a",
"body": null,
"is_bot": false,
"headline": "svg logo",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2025-06-11T18:32:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0494f0d95230185bfd857996bb64f3e66c9cf7e9",
"body": null,
"is_bot": false,
"headline": "Merge branch 'stable'",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2025-06-11T18:19:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a35d0f2b15513a81adcb667dcd48fe4e8a2c69c7",
"body": null,
"is_bot": false,
"headline": "svg logo (#500)",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2025-06-11T18:18:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9e2dac4117f31b93f494e3a5727513245fade7ac",
"body": null,
"is_bot": false,
"headline": "svg logo",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2025-06-11T18:17:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "dfa58162f6ba9a0afebab7e924af362cd0bede66",
"body": null,
"is_bot": false,
"headline": "remove previously deprecated code (#499)",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2025-05-29T04:06:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "82cabf9c5a2f8f1b27854afcc3e0d9bf5a32f0c2",
"body": null,
"is_bot": false,
"headline": "remove previously deprecated code",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2025-05-29T04:03:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0c422e10b1e1ba43ca56a56f1f8a11edfb431b71",
"body": null,
"is_bot": false,
"headline": "drop end of life python versions (#498)",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2025-05-29T04:02:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3f3b67bde964146a72f8c73e4c6b73879e1516d2",
"body": null,
"is_bot": false,
"headline": "drop end of life python versions",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2025-05-29T04:00:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "42703532bfa7731731015902d17ebc1790a2d4d0",
"body": null,
"is_bot": false,
"headline": "Merge branch 'stable'",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2025-05-29T03:57:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5abca29391f0ee0aadfe2e121445a961739b7a03",
"body": null,
"is_bot": false,
"headline": "update CHANGES.rst",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2025-05-29T03:56:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e96a84fecf7594d93779c43565522bee229d0830",
"body": null,
"is_bot": false,
"headline": "Adopt multi-phase initialisation (PEP 489) (#495)",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2025-05-29T03:54:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "643a70a44da1fa07ef8b0509b1c4b932d26b86fa",
"body": null,
"is_bot": false,
"headline": "Adopt multi-phase init (PEP 489)",
"author_name": "Adam Turner",
"author_login": "AA-Turner",
"committed_at": "2025-05-29T03:51:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "dec39fef923985232adf7c844bfeb38b3f0772c2",
"body": null,
"is_bot": false,
"headline": "change to DeprecationWarning (#497)",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2025-05-29T02:43:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1b54b64cab03d8af99229252e68ff02a72519f6b",
"body": null,
"is_bot": false,
"headline": "change to DeprecationWarning",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2025-05-29T02:41:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a743120d9663cecedb9a215f42b7bd6893591690",
"body": null,
"is_bot": false,
"headline": "Enable Windows arm64 build (#486)",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2025-05-29T02:34:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4013ab09faa016138a7997656609e3a954b62da4",
"body": null,
"is_bot": false,
"headline": "add arm64 build",
"author_name": "Finn Womack",
"author_login": "finnagin",
"committed_at": "2025-05-29T02:21:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "55ce4f19ac170f120c8dd4f8810dee00c7b53c0d",
"body": null,
"is_bot": false,
"headline": "start version 3.0.3",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2025-05-29T02:18:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "de440417ca200b451f0ac06070d0795acb0faa68",
"body": null,
"is_bot": false,
"headline": "update uv.lock",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2025-05-29T02:13:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "738306beab664c27d39caf200c3c478101512f92",
"body": null,
"is_bot": false,
"headline": "Merge branch 'stable'",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2025-05-29T02:10:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "730482daf543d99366a61791382dc5b2ea9b8047",
"body": null,
"is_bot": false,
"headline": "use uv (#496)",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2025-05-29T02:10:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f38ca06034499d140849d9d0715356f7e169c59a",
"body": null,
"is_bot": false,
"headline": "use uv",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2025-05-29T01:49:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5f2980738834f138f4684d6b86cb32fd64bac631",
"body": null,
"is_bot": false,
"headline": "use global contributing guide (#484)",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2025-01-14T21:45:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b9c2dbacbaacecce170ac743b4b66c34afd75287",
"body": "Remove the per-project files so we don't have to keep them in sync.\nGitHub's UI links to everything except the contributing guide, so add a\nsection about that to the readme.",
"is_bot": false,
"headline": "use global contributing guide",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2025-01-14T21:43:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "620c06c919c1bd7bb1ce3dbee402e1c0c56e7ac3",
"body": "This reverts commit b97dda5c67c1ee44babc71fb20f966a5cf14effe.",
"is_bot": false,
"headline": "Revert \"delete CONTRIBUTING.rst\"",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-10-24T21:44:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f651195bd5fdafb30789851f4d29637b77730a0c",
"body": null,
"is_bot": false,
"headline": "Merge branch 'stable'",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-10-24T19:50:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0f471f1849ecc33d1cc837a7dce61d1afcaf3b9e",
"body": null,
"is_bot": false,
"headline": "update test workflow trigger",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-10-24T19:50:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "edf67f48aedaed1733aa12309c751db70f3c9546",
"body": null,
"is_bot": false,
"headline": "Merge branch 'stable'",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-10-24T19:05:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "dc0938a65562cb18f7544ecd1366b623c99e6e90",
"body": null,
"is_bot": false,
"headline": "update dev dependencies",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-10-24T19:04:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "15044923a7563a2cdfe201c94b9d2417e714ff93",
"body": null,
"is_bot": false,
"headline": "update dev dependencies",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-10-24T18:58:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b97dda5c67c1ee44babc71fb20f966a5cf14effe",
"body": "move to pallets/.github",
"is_bot": false,
"headline": "delete CONTRIBUTING.rst",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-10-24T01:04:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "34db9005700ee928517955d1b04cc275c3f315b5",
"body": null,
"is_bot": false,
"headline": "start version 3.1.0",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-10-18T15:25:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f030667fb52d94c8ce560376ba71749f60aef04a",
"body": null,
"is_bot": false,
"headline": "release version 3.0.2 (#479)",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-10-18T15:23:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "28ace20b140d15c083e1cbc163ee6b7778ba098c",
"body": null,
"is_bot": false,
"headline": "release version 3.0.2",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-10-18T15:02:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6b51fd8f7386983b7038ad973557367cbd48579a",
"body": null,
"is_bot": false,
"headline": "build requires at least setuptools 70.1 (#478)",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-10-17T00:26:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "99dda9fd708432bd07d02327b2668661aa3cdaa0",
"body": null,
"is_bot": false,
"headline": "build requires at least setuptools 70.1",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-10-17T00:23:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3d8fd8cc006124a49ce2f4268b4d1739e301583e",
"body": null,
"is_bot": false,
"headline": "fix version",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-10-17T00:20:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1933c4be9c2c88613f7660840cde27a1bb7567e0",
"body": null,
"is_bot": false,
"headline": "fix version",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-10-17T00:19:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e85aff4d878aa458d5c1e879bf475d8483647f71",
"body": null,
"is_bot": false,
"headline": "relax speedups str check (#477)",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-10-17T00:18:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8cb1691ca038ca39942e088b956f5b94d8f636bf",
"body": null,
"is_bot": false,
"headline": "relax speedups str check",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-10-17T00:07:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4dafb7c36f1f654f1edd85228d346252b0065d45",
"body": null,
"is_bot": false,
"headline": "start version 3.1.0",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-10-16T21:10:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9c44ecf45141f691d373a66ce664c43b5a6cc761",
"body": null,
"is_bot": false,
"headline": "update docs build",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-10-16T21:07:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "275c76905617c3f0e34de14e8794fcf4dfb0f937",
"body": null,
"is_bot": false,
"headline": "Merge branch '2.1.x' into 3.0.x",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-10-16T21:04:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d762f0dbdaf8fbd4c3622d6efafea99c0036a443",
"body": null,
"is_bot": false,
"headline": "update docs build",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-10-16T20:55:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "97725d1257362045749014d5177718b9064a0242",
"body": "last 2.0.x maintenance",
"is_bot": false,
"headline": "Merge tag '2.0.x' into 2.1.x",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-10-16T20:50:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7ee787ecbf1e6caf9c331ef1b1d1cfddcb32d8a2",
"body": null,
"is_bot": false,
"headline": "update docs build",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-10-16T20:43:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f197e448d704b0b70f63250cabf6c79581970b45",
"body": "last 1.1.x maintenance",
"is_bot": false,
"headline": "Merge tag '1.1.x' into HEAD",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-10-16T20:12:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "dcfdffa7d7bc8f165266d48368c946168b8e5b6d",
"body": null,
"is_bot": false,
"headline": "update docs build",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-10-16T19:50:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7b72ed9d757cf2253f581943ebfb90d3109fee15",
"body": null,
"is_bot": false,
"headline": "update docs build",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-10-16T19:10:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "719576e059b19fcf28910de1e8fcf3990d486e90",
"body": null,
"is_bot": false,
"headline": "release version 3.0.1 (#470)",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-10-08T17:01:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ef0b95e2544ea0d09230a57dc01ac91e3bab9689",
"body": null,
"is_bot": false,
"headline": "release version 3.0.1",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-10-08T16:24:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "54bb00bfafe57582bc196ac92eda32cb942f0025",
"body": null,
"is_bot": false,
"headline": "fix exact str check (#469)",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-10-08T16:23:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7add29c77b088299841e1017a7cd2f96133a6659",
"body": null,
"is_bot": false,
"headline": "fix exact str check",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-10-08T16:16:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b5291646cbabf945069db07c34b08fb1f623134d",
"body": null,
"is_bot": false,
"headline": "cast to PyUnicodeObject (#468)",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-10-08T16:08:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cf4fc43f989ac587e2799598cbf71931cd05ca6e",
"body": null,
"is_bot": false,
"headline": "cast to PyUnicodeObject",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-10-08T16:04:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2c6093042275eae2a68455f4af0342fc300d12c7",
"body": null,
"is_bot": false,
"headline": "start version 3.0.1",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-10-08T16:00:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "85813f1876e885a39737509ac9590c42ad9a2789",
"body": null,
"is_bot": false,
"headline": "release version 3.0.0 (#465)",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-10-07T21:09:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7643710ef05e9d3bfe48325f29f671679d39aaab",
"body": null,
"is_bot": false,
"headline": "release version 3.0.0",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-10-07T20:32:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "44a54cde1cd04b0a9ac0ae49b1111559ef0c4cc8",
"body": null,
"is_bot": false,
"headline": "Build Python 3.13 wheels (#461)",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-10-07T20:15:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0a00cfe3947266c9ed38bc01ea67ba1a6ad9f1f1",
"body": null,
"is_bot": false,
"headline": "style changes",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-10-07T16:28:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b6ff4add28518940dfab64dec7ad622d9be7c6f4",
"body": null,
"is_bot": false,
"headline": "update CHANGES.rst",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-10-07T16:19:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9f8bcee09addc235b124b3fa8c1211376acfdcab",
"body": null,
"is_bot": false,
"headline": "Merge branch 'main' into cp313",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-10-06T18:51:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "402311d9cc0f61711eabdce71f01e37f22b7a7d3",
"body": null,
"is_bot": false,
"headline": "update dev dependencies",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-10-06T18:49:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f56c1051b9edbe0dacceaefffe45b536cd191e2a",
"body": null,
"is_bot": false,
"headline": "drop support for python 3.8 (#464)",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-10-06T18:48:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9372f3823adefdc01262d2a74ecb6f8b9cf91e3b",
"body": null,
"is_bot": false,
"headline": "drop support for python 3.8",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-10-06T18:46:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "27a2e433b7fd068672d1068946dd422fe45eef0a",
"body": null,
"is_bot": false,
"headline": "Use `sys._is_gil_enabled()`",
"author_name": "Edgar Ramírez-Mondragón",
"author_login": "edgarrmondragon",
"committed_at": "2024-10-03T05:04:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cefaed97e6d55a5c67ab2733ccac2f1b26a31031",
"body": null,
"is_bot": false,
"headline": "Report Py_GIL_DISABLED config in pytest output",
"author_name": "Edgar Ramírez-Mondragón",
"author_login": "edgarrmondragon",
"committed_at": "2024-09-27T23:57:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "98917367b69c97c821ac8c8df4d7428a9bf4c7da",
"body": null,
"is_bot": false,
"headline": "Declare free-threaded support",
"author_name": "Edgar Ramírez-Mondragón",
"author_login": "edgarrmondragon",
"committed_at": "2024-09-27T23:56:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "540800682b86bfaad9aa77889ff76d59c62634e7",
"body": null,
"is_bot": false,
"headline": "Test with free-threaded Python 3.13",
"author_name": "Edgar Ramírez-Mondragón",
"author_login": "edgarrmondragon",
"committed_at": "2024-09-27T06:16:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "179cb77446cd7339716fb6e7867eb25ced7a7be9",
"body": null,
"is_bot": false,
"headline": "Bump cibuildwheel to 2.21.1",
"author_name": "Edgar Ramírez-Mondragón",
"author_login": "edgarrmondragon",
"committed_at": "2024-09-27T05:58:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "43f7d1173ffd45caded5e618b529755482ea17fd",
"body": null,
"is_bot": false,
"headline": "Build Python 3.13 wheels (non free-threaded)",
"author_name": "Edgar Ramírez-Mondragón",
"author_login": "edgarrmondragon",
"committed_at": "2024-09-27T05:56:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b43c029eb1541645454623d46cd6b92df8acbaaa",
"body": "Committed via https://github.com/asottile/all-repos",
"is_bot": false,
"headline": "set up pre-commit lite workflow",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-09-01T16:04:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9016905c4cfe12824a6773b1172816a30570c583",
"body": "Committed via https://github.com/asottile/all-repos",
"is_bot": false,
"headline": "set up pre-commit lite workflow",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-09-01T15:48:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "235cd06a1bdfa22773773f108d65a6cbc73f4155",
"body": "Committed via https://github.com/asottile/all-repos",
"is_bot": false,
"headline": "set up pre-commit lite workflow",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-09-01T15:32:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1b864c2349810f92ed471f613488df45351ebf60",
"body": null,
"is_bot": false,
"headline": "remove pre-commit.ci update",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-08-24T01:11:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "645d5fbbe03f21b0ef526b589ef3b677b158502b",
"body": null,
"is_bot": false,
"headline": "remove unused config",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-08-24T00:52:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f879402b24f2a0490f9b04e57beaa8b999dbf17b",
"body": null,
"is_bot": false,
"headline": "update dev dependencies",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-08-24T00:52:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "23c90b446d042b6eb31574d9830cc6c96aeb46ba",
"body": null,
"is_bot": false,
"headline": "add gha-update, remove dependabot",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-08-24T00:40:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d2cb9c1a91aa6db666286ea0361e3f586eb15aa9",
"body": null,
"is_bot": false,
"headline": "[pre-commit.ci] pre-commit autoupdate (#459)",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-08-06T15:30:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "27a93d83b0d922bd723ef7905d56543953c94cbd",
"body": "updates:\n- [github.com/astral-sh/ruff-pre-commit: v0.5.0 → v0.5.6](https://github.com/astral-sh/ruff-pre-commit/compare/v0.5.0...v0.5.6)",
"is_bot": true,
"headline": "[pre-commit.ci] pre-commit autoupdate",
"author_name": "pre-commit-ci[bot]",
"author_login": "pre-commit-ci[bot]",
"committed_at": "2024-08-05T23:09:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "34c57f8a3facf488aa0e59fd727027815ef37907",
"body": "…458)",
"is_bot": false,
"headline": "Bump the python-requirements group in /requirements with 5 updates (#…",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-08-03T14:29:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a541d65f306502312262f31f25ade83bf9288813",
"body": null,
"is_bot": false,
"headline": "Bump the github-actions group with 5 updates (#457)",
"author_name": "David Lord",
"author_login": "davidism",
"committed_at": "2024-08-03T14:28:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "67789443aa48d7c5e1d2c64a7dc099f6c5cf4c95",
"body": "Bumps the python-requirements group in /requirements with 5 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [sphinx](https://github.com/sphinx-doc/sphinx) | `7.3.7` | `8.0.2` |\n| [pytest](https://github.com/pytest-dev/pytest) | `8.2.2` | `8.3.2` |\n| [mypy](https://github.com/python/mypy) | `\n[…]\nependency-name: pyright\n dependency-type: direct:production\n update-type: version-update:semver-patch\n dependency-group: python-requirements\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
"is_bot": true,
"headline": "Bump the python-requirements group in /requirements with 5 updates",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2024-08-01T12:56:17Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "2e6156788a012f359c17f39cca0d260ecba02024",
"body": "Bumps the github-actions group with 5 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [actions/setup-python](https://github.com/actions/setup-python) | `5.1.0` | `5.1.1` |\n| [actions/upload-artifact](https://github.com/actions/upload-artifact) | `4.3.3` | `4.3.4` |\n| [docker/setup-qemu-actio\n[…]\ne: actions/download-artifact\n dependency-type: direct:production\n update-type: version-update:semver-patch\n dependency-group: github-actions\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
"is_bot": true,
"headline": "Bump the github-actions group with 5 updates",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2024-08-01T12:02:38Z",
"body_truncated": true,
"is_coding_agent": false
}
],
"releases_count": 13,
"commits_last_year": 11,
"latest_release_at": "2025-09-27T18:38:54Z",
"latest_release_tag": "3.0.3",
"releases_from_tags": false,
"days_since_last_push": 297,
"active_weeks_last_year": 2,
"days_since_latest_release": 297,
"mean_days_between_releases": 146.4
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": true,
"health_percentage": 100,
"has_issue_template": false,
"has_code_of_conduct": true,
"has_pull_request_template": true
},
"ecosystem": {
"packages": [
{
"name": "MarkupSafe",
"exists": true,
"license": "BSD-3-Clause",
"keywords": [
"Development Status :: 5 - Production/Stable",
"Environment :: Web Environment",
"Intended Audience :: Developers",
"Operating System :: OS Independent",
"Programming Language :: Python",
"Topic :: Internet :: WWW/HTTP :: Dynamic Content",
"Topic :: Text Processing :: Markup :: HTML",
"Typing :: Typed"
],
"ecosystem": "pypi",
"matches_repo": true,
"registry_url": "https://pypi.org/project/MarkupSafe/",
"is_deprecated": false,
"latest_version": "3.0.3",
"repository_url": "https://github.com/pallets/markupsafe/",
"versions_count": 35,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": "2010-06-22T19:55:49.280044Z",
"latest_published_at": "2025-09-27T18:37:40.426446Z",
"latest_version_yanked": null,
"days_since_latest_publish": 297
}
]
},
"popularity": {
"forks": 187,
"stars": 693,
"watchers": 30,
"fork_history": {
"days": [
{
"date": "2011-02-17",
"count": 1
},
{
"date": "2011-06-22",
"count": 1
},
{
"date": "2011-07-20",
"count": 1
},
{
"date": "2011-08-10",
"count": 1
},
{
"date": "2012-05-15",
"count": 1
},
{
"date": "2013-02-21",
"count": 1
},
{
"date": "2013-04-29",
"count": 1
},
{
"date": "2013-05-21",
"count": 1
},
{
"date": "2013-07-19",
"count": 1
},
{
"date": "2013-09-23",
"count": 1
},
{
"date": "2013-12-27",
"count": 1
},
{
"date": "2014-02-26",
"count": 1
},
{
"date": "2014-02-27",
"count": 1
},
{
"date": "2014-03-06",
"count": 1
},
{
"date": "2014-08-03",
"count": 1
},
{
"date": "2014-10-11",
"count": 1
},
{
"date": "2015-01-26",
"count": 1
},
{
"date": "2015-03-23",
"count": 1
},
{
"date": "2015-03-24",
"count": 1
},
{
"date": "2015-06-27",
"count": 1
},
{
"date": "2015-07-09",
"count": 1
},
{
"date": "2015-07-14",
"count": 1
},
{
"date": "2015-08-28",
"count": 1
},
{
"date": "2015-09-28",
"count": 1
},
{
"date": "2015-11-09",
"count": 1
},
{
"date": "2015-11-21",
"count": 1
},
{
"date": "2015-12-11",
"count": 1
},
{
"date": "2015-12-16",
"count": 1
},
{
"date": "2016-03-21",
"count": 1
},
{
"date": "2016-05-02",
"count": 1
},
{
"date": "2016-05-03",
"count": 1
},
{
"date": "2016-05-31",
"count": 1
},
{
"date": "2016-11-21",
"count": 1
},
{
"date": "2016-11-26",
"count": 1
},
{
"date": "2017-01-27",
"count": 1
},
{
"date": "2017-01-29",
"count": 1
},
{
"date": "2017-02-12",
"count": 1
},
{
"date": "2017-03-29",
"count": 1
},
{
"date": "2017-06-07",
"count": 1
},
{
"date": "2017-08-08",
"count": 1
},
{
"date": "2017-09-19",
"count": 1
},
{
"date": "2017-10-31",
"count": 1
},
{
"date": "2017-11-22",
"count": 1
},
{
"date": "2017-12-30",
"count": 1
},
{
"date": "2018-01-27",
"count": 1
},
{
"date": "2018-02-06",
"count": 1
},
{
"date": "2018-04-19",
"count": 1
},
{
"date": "2018-05-31",
"count": 1
},
{
"date": "2018-06-01",
"count": 1
},
{
"date": "2018-08-11",
"count": 1
},
{
"date": "2018-09-04",
"count": 2
},
{
"date": "2018-09-26",
"count": 1
},
{
"date": "2018-10-04",
"count": 1
},
{
"date": "2018-12-31",
"count": 1
},
{
"date": "2019-01-10",
"count": 1
},
{
"date": "2019-01-24",
"count": 1
},
{
"date": "2019-04-16",
"count": 1
},
{
"date": "2019-05-06",
"count": 1
},
{
"date": "2019-05-31",
"count": 1
},
{
"date": "2019-07-03",
"count": 1
},
{
"date": "2019-10-19",
"count": 1
},
{
"date": "2019-10-28",
"count": 1
},
{
"date": "2019-11-30",
"count": 1
},
{
"date": "2019-12-24",
"count": 1
},
{
"date": "2020-02-28",
"count": 1
},
{
"date": "2020-03-12",
"count": 1
},
{
"date": "2020-04-29",
"count": 1
},
{
"date": "2020-05-28",
"count": 1
},
{
"date": "2020-06-11",
"count": 1
},
{
"date": "2020-07-08",
"count": 1
},
{
"date": "2020-09-01",
"count": 1
},
{
"date": "2020-09-04",
"count": 1
},
{
"date": "2020-09-08",
"count": 1
},
{
"date": "2020-09-18",
"count": 1
},
{
"date": "2020-09-29",
"count": 1
},
{
"date": "2020-10-13",
"count": 1
},
{
"date": "2021-01-14",
"count": 1
},
{
"date": "2021-02-07",
"count": 1
},
{
"date": "2021-02-20",
"count": 1
},
{
"date": "2021-04-21",
"count": 1
},
{
"date": "2021-05-08",
"count": 1
},
{
"date": "2021-05-09",
"count": 1
},
{
"date": "2021-05-11",
"count": 1
},
{
"date": "2021-05-24",
"count": 1
},
{
"date": "2021-05-28",
"count": 1
},
{
"date": "2021-06-11",
"count": 1
},
{
"date": "2021-06-29",
"count": 1
},
{
"date": "2021-07-31",
"count": 1
},
{
"date": "2021-08-24",
"count": 1
},
{
"date": "2021-08-30",
"count": 1
},
{
"date": "2021-09-10",
"count": 1
},
{
"date": "2021-10-22",
"count": 1
},
{
"date": "2021-12-05",
"count": 1
},
{
"date": "2022-01-05",
"count": 1
},
{
"date": "2022-01-06",
"count": 1
},
{
"date": "2022-02-02",
"count": 1
},
{
"date": "2022-02-15",
"count": 1
},
{
"date": "2022-03-18",
"count": 1
},
{
"date": "2022-03-24",
"count": 1
},
{
"date": "2022-04-06",
"count": 1
},
{
"date": "2022-04-08",
"count": 1
},
{
"date": "2022-04-19",
"count": 1
},
{
"date": "2022-04-30",
"count": 1
},
{
"date": "2022-05-02",
"count": 1
},
{
"date": "2022-06-13",
"count": 1
},
{
"date": "2022-07-12",
"count": 1
},
{
"date": "2022-07-16",
"count": 1
},
{
"date": "2022-08-31",
"count": 1
},
{
"date": "2022-10-17",
"count": 1
},
{
"date": "2022-10-28",
"count": 1
},
{
"date": "2022-11-21",
"count": 1
},
{
"date": "2022-11-23",
"count": 1
},
{
"date": "2022-12-29",
"count": 1
},
{
"date": "2023-01-02",
"count": 1
},
{
"date": "2023-01-05",
"count": 1
},
{
"date": "2023-03-19",
"count": 1
},
{
"date": "2023-04-12",
"count": 1
},
{
"date": "2023-04-25",
"count": 1
},
{
"date": "2023-05-16",
"count": 1
},
{
"date": "2023-06-14",
"count": 1
},
{
"date": "2023-11-08",
"count": 1
},
{
"date": "2023-11-12",
"count": 2
},
{
"date": "2023-11-17",
"count": 1
},
{
"date": "2023-12-05",
"count": 1
},
{
"date": "2024-01-09",
"count": 1
},
{
"date": "2024-01-25",
"count": 1
},
{
"date": "2024-01-26",
"count": 1
},
{
"date": "2024-03-06",
"count": 1
},
{
"date": "2024-03-20",
"count": 1
},
{
"date": "2024-03-23",
"count": 1
},
{
"date": "2024-04-19",
"count": 1
},
{
"date": "2024-04-29",
"count": 1
},
{
"date": "2024-05-10",
"count": 1
},
{
"date": "2024-05-28",
"count": 1
},
{
"date": "2024-06-12",
"count": 1
},
{
"date": "2024-06-25",
"count": 1
},
{
"date": "2024-06-26",
"count": 1
},
{
"date": "2024-07-04",
"count": 1
},
{
"date": "2024-07-05",
"count": 1
},
{
"date": "2024-09-30",
"count": 1
},
{
"date": "2024-10-15",
"count": 1
},
{
"date": "2025-02-10",
"count": 1
},
{
"date": "2025-02-25",
"count": 1
},
{
"date": "2025-04-17",
"count": 1
},
{
"date": "2025-05-03",
"count": 1
},
{
"date": "2025-05-06",
"count": 1
},
{
"date": "2025-05-19",
"count": 2
},
{
"date": "2025-05-21",
"count": 1
},
{
"date": "2025-05-26",
"count": 1
},
{
"date": "2025-06-23",
"count": 1
},
{
"date": "2025-07-31",
"count": 1
},
{
"date": "2025-08-04",
"count": 1
},
{
"date": "2025-08-18",
"count": 1
},
{
"date": "2025-09-11",
"count": 1
},
{
"date": "2025-09-26",
"count": 1
},
{
"date": "2025-10-08",
"count": 1
},
{
"date": "2025-10-28",
"count": 1
},
{
"date": "2025-11-28",
"count": 1
},
{
"date": "2025-12-17",
"count": 1
},
{
"date": "2026-01-27",
"count": 1
},
{
"date": "2026-02-05",
"count": 1
},
{
"date": "2026-02-09",
"count": 1
},
{
"date": "2026-02-14",
"count": 1
},
{
"date": "2026-03-10",
"count": 1
},
{
"date": "2026-03-30",
"count": 1
},
{
"date": "2026-04-03",
"count": 1
},
{
"date": "2026-04-10",
"count": 1
},
{
"date": "2026-05-24",
"count": 1
},
{
"date": "2026-05-31",
"count": 1
},
{
"date": "2026-06-05",
"count": 1
},
{
"date": "2026-06-22",
"count": 1
},
{
"date": "2026-07-10",
"count": 1
},
{
"date": "2026-07-14",
"count": 1
},
{
"date": "2026-07-19",
"count": 3
},
{
"date": "2026-07-21",
"count": 1
}
],
"complete": true,
"collected": 180,
"total_forks": 187
},
"star_history": {
"days": [
{
"date": "2010-06-22",
"count": 18
},
{
"date": "2010-07-08",
"count": 1
},
{
"date": "2010-08-06",
"count": 1
},
{
"date": "2010-11-02",
"count": 1
},
{
"date": "2011-01-12",
"count": 1
},
{
"date": "2011-02-27",
"count": 1
},
{
"date": "2011-10-22",
"count": 1
},
{
"date": "2011-11-16",
"count": 1
},
{
"date": "2012-04-01",
"count": 1
},
{
"date": "2013-02-20",
"count": 1
},
{
"date": "2013-03-08",
"count": 1
},
{
"date": "2013-05-15",
"count": 1
},
{
"date": "2013-05-22",
"count": 1
},
{
"date": "2013-05-24",
"count": 1
},
{
"date": "2013-06-06",
"count": 1
},
{
"date": "2013-06-07",
"count": 6
},
{
"date": "2013-06-09",
"count": 1
},
{
"date": "2013-07-11",
"count": 1
},
{
"date": "2013-08-20",
"count": 1
},
{
"date": "2013-08-21",
"count": 2
},
{
"date": "2013-08-29",
"count": 1
},
{
"date": "2013-09-09",
"count": 1
},
{
"date": "2013-10-04",
"count": 1
},
{
"date": "2013-10-12",
"count": 1
},
{
"date": "2013-11-21",
"count": 1
},
{
"date": "2013-12-05",
"count": 1
},
{
"date": "2013-12-21",
"count": 1
},
{
"date": "2014-03-17",
"count": 1
},
{
"date": "2014-03-31",
"count": 1
},
{
"date": "2014-04-18",
"count": 1
},
{
"date": "2014-05-24",
"count": 1
},
{
"date": "2014-07-03",
"count": 1
},
{
"date": "2014-07-07",
"count": 1
},
{
"date": "2014-07-14",
"count": 1
},
{
"date": "2014-08-28",
"count": 1
},
{
"date": "2014-09-12",
"count": 1
},
{
"date": "2014-09-17",
"count": 1
},
{
"date": "2014-11-14",
"count": 1
},
{
"date": "2015-01-24",
"count": 1
},
{
"date": "2015-01-29",
"count": 1
},
{
"date": "2015-02-15",
"count": 1
},
{
"date": "2015-02-26",
"count": 1
},
{
"date": "2015-03-07",
"count": 1
},
{
"date": "2015-03-29",
"count": 1
},
{
"date": "2015-03-31",
"count": 1
},
{
"date": "2015-04-23",
"count": 1
},
{
"date": "2015-05-09",
"count": 1
},
{
"date": "2015-06-27",
"count": 1
},
{
"date": "2015-07-14",
"count": 1
},
{
"date": "2015-07-16",
"count": 6
},
{
"date": "2015-07-17",
"count": 2
},
{
"date": "2015-07-19",
"count": 1
},
{
"date": "2015-10-11",
"count": 1
},
{
"date": "2015-10-16",
"count": 1
},
{
"date": "2015-11-05",
"count": 1
},
{
"date": "2015-11-10",
"count": 1
},
{
"date": "2015-11-15",
"count": 1
},
{
"date": "2015-11-21",
"count": 1
},
{
"date": "2015-11-24",
"count": 1
},
{
"date": "2015-11-27",
"count": 1
},
{
"date": "2015-11-28",
"count": 1
},
{
"date": "2015-12-11",
"count": 1
},
{
"date": "2016-01-25",
"count": 1
},
{
"date": "2016-03-01",
"count": 1
},
{
"date": "2016-03-15",
"count": 1
},
{
"date": "2016-03-29",
"count": 3
},
{
"date": "2016-03-30",
"count": 2
},
{
"date": "2016-04-01",
"count": 1
},
{
"date": "2016-04-02",
"count": 1
},
{
"date": "2016-04-03",
"count": 1
},
{
"date": "2016-04-10",
"count": 1
},
{
"date": "2016-04-18",
"count": 1
},
{
"date": "2016-05-02",
"count": 1
},
{
"date": "2016-05-04",
"count": 1
},
{
"date": "2016-06-20",
"count": 1
},
{
"date": "2016-06-21",
"count": 1
},
{
"date": "2016-06-22",
"count": 2
},
{
"date": "2016-06-30",
"count": 1
},
{
"date": "2016-07-13",
"count": 1
},
{
"date": "2016-08-05",
"count": 1
},
{
"date": "2016-08-16",
"count": 1
},
{
"date": "2016-09-09",
"count": 1
},
{
"date": "2016-09-23",
"count": 1
},
{
"date": "2016-10-08",
"count": 1
},
{
"date": "2016-10-20",
"count": 1
},
{
"date": "2016-11-14",
"count": 1
},
{
"date": "2016-11-26",
"count": 1
},
{
"date": "2016-12-04",
"count": 1
},
{
"date": "2016-12-10",
"count": 1
},
{
"date": "2017-01-17",
"count": 1
},
{
"date": "2017-02-07",
"count": 1
},
{
"date": "2017-02-09",
"count": 1
},
{
"date": "2017-02-10",
"count": 1
},
{
"date": "2017-02-12",
"count": 1
},
{
"date": "2017-02-19",
"count": 1
},
{
"date": "2017-02-23",
"count": 1
},
{
"date": "2017-03-08",
"count": 1
},
{
"date": "2017-03-21",
"count": 1
},
{
"date": "2017-03-22",
"count": 1
},
{
"date": "2017-03-28",
"count": 1
},
{
"date": "2017-04-06",
"count": 1
},
{
"date": "2017-04-16",
"count": 1
},
{
"date": "2017-04-17",
"count": 1
},
{
"date": "2017-05-01",
"count": 1
},
{
"date": "2017-05-24",
"count": 1
},
{
"date": "2017-05-27",
"count": 1
},
{
"date": "2017-06-02",
"count": 2
},
{
"date": "2017-06-07",
"count": 1
},
{
"date": "2017-06-19",
"count": 1
},
{
"date": "2017-06-20",
"count": 1
},
{
"date": "2017-06-26",
"count": 1
},
{
"date": "2017-06-28",
"count": 1
},
{
"date": "2017-07-07",
"count": 2
},
{
"date": "2017-08-04",
"count": 1
},
{
"date": "2017-08-10",
"count": 1
},
{
"date": "2017-08-17",
"count": 1
},
{
"date": "2017-08-18",
"count": 1
},
{
"date": "2017-08-23",
"count": 1
},
{
"date": "2017-08-24",
"count": 1
},
{
"date": "2017-09-01",
"count": 1
},
{
"date": "2017-09-07",
"count": 1
},
{
"date": "2017-10-19",
"count": 3
},
{
"date": "2017-10-22",
"count": 1
},
{
"date": "2017-11-03",
"count": 1
},
{
"date": "2017-11-13",
"count": 1
},
{
"date": "2017-11-22",
"count": 1
},
{
"date": "2017-11-23",
"count": 1
},
{
"date": "2017-11-24",
"count": 1
},
{
"date": "2017-11-27",
"count": 1
},
{
"date": "2017-12-01",
"count": 1
},
{
"date": "2017-12-03",
"count": 1
},
{
"date": "2017-12-12",
"count": 1
},
{
"date": "2017-12-15",
"count": 1
},
{
"date": "2017-12-31",
"count": 1
},
{
"date": "2018-01-05",
"count": 1
},
{
"date": "2018-01-15",
"count": 1
},
{
"date": "2018-02-13",
"count": 1
},
{
"date": "2018-02-16",
"count": 1
},
{
"date": "2018-02-23",
"count": 1
},
{
"date": "2018-02-25",
"count": 1
},
{
"date": "2018-03-08",
"count": 1
},
{
"date": "2018-03-09",
"count": 1
},
{
"date": "2018-04-03",
"count": 1
},
{
"date": "2018-04-08",
"count": 1
},
{
"date": "2018-04-13",
"count": 1
},
{
"date": "2018-04-17",
"count": 1
},
{
"date": "2018-04-26",
"count": 1
},
{
"date": "2018-04-27",
"count": 1
},
{
"date": "2018-04-28",
"count": 1
},
{
"date": "2018-05-04",
"count": 1
},
{
"date": "2018-05-15",
"count": 1
},
{
"date": "2018-05-16",
"count": 2
},
{
"date": "2018-06-02",
"count": 1
},
{
"date": "2018-06-04",
"count": 1
},
{
"date": "2018-06-14",
"count": 1
},
{
"date": "2018-07-11",
"count": 1
},
{
"date": "2018-07-20",
"count": 1
},
{
"date": "2018-07-24",
"count": 1
},
{
"date": "2018-08-07",
"count": 1
},
{
"date": "2018-08-16",
"count": 1
},
{
"date": "2018-08-31",
"count": 1
},
{
"date": "2018-09-23",
"count": 1
},
{
"date": "2018-09-25",
"count": 1
},
{
"date": "2018-09-26",
"count": 1
},
{
"date": "2018-09-29",
"count": 1
},
{
"date": "2018-10-04",
"count": 1
},
{
"date": "2018-11-12",
"count": 2
},
{
"date": "2018-11-17",
"count": 1
},
{
"date": "2018-11-18",
"count": 1
},
{
"date": "2018-11-20",
"count": 1
},
{
"date": "2018-11-21",
"count": 1
},
{
"date": "2018-11-23",
"count": 1
},
{
"date": "2018-11-28",
"count": 1
},
{
"date": "2018-12-01",
"count": 1
},
{
"date": "2018-12-13",
"count": 1
},
{
"date": "2018-12-14",
"count": 1
},
{
"date": "2018-12-31",
"count": 1
},
{
"date": "2019-01-22",
"count": 1
},
{
"date": "2019-01-24",
"count": 1
},
{
"date": "2019-01-28",
"count": 2
},
{
"date": "2019-02-08",
"count": 2
},
{
"date": "2019-02-10",
"count": 1
},
{
"date": "2019-02-17",
"count": 2
},
{
"date": "2019-03-04",
"count": 1
},
{
"date": "2019-03-06",
"count": 1
},
{
"date": "2019-03-08",
"count": 1
},
{
"date": "2019-03-16",
"count": 1
},
{
"date": "2019-03-17",
"count": 1
},
{
"date": "2019-03-21",
"count": 1
},
{
"date": "2019-03-29",
"count": 1
},
{
"date": "2019-04-01",
"count": 1
},
{
"date": "2019-04-06",
"count": 1
},
{
"date": "2019-04-18",
"count": 1
},
{
"date": "2019-04-22",
"count": 2
},
{
"date": "2019-04-27",
"count": 1
},
{
"date": "2019-05-11",
"count": 1
},
{
"date": "2019-05-23",
"count": 1
},
{
"date": "2019-05-29",
"count": 1
},
{
"date": "2019-05-30",
"count": 1
},
{
"date": "2019-05-31",
"count": 1
},
{
"date": "2019-06-07",
"count": 1
},
{
"date": "2019-06-12",
"count": 1
},
{
"date": "2019-07-03",
"count": 1
},
{
"date": "2019-07-06",
"count": 1
},
{
"date": "2019-07-11",
"count": 1
},
{
"date": "2019-07-13",
"count": 1
},
{
"date": "2019-07-18",
"count": 1
},
{
"date": "2019-07-28",
"count": 1
},
{
"date": "2019-08-09",
"count": 1
},
{
"date": "2019-08-15",
"count": 1
},
{
"date": "2019-08-17",
"count": 1
},
{
"date": "2019-08-18",
"count": 1
},
{
"date": "2019-09-03",
"count": 2
},
{
"date": "2019-09-07",
"count": 2
},
{
"date": "2019-09-12",
"count": 1
},
{
"date": "2019-09-18",
"count": 1
},
{
"date": "2019-09-23",
"count": 1
},
{
"date": "2019-10-14",
"count": 1
},
{
"date": "2019-10-20",
"count": 1
},
{
"date": "2019-10-29",
"count": 1
},
{
"date": "2019-10-31",
"count": 1
},
{
"date": "2019-11-17",
"count": 1
},
{
"date": "2019-11-21",
"count": 1
},
{
"date": "2019-11-28",
"count": 1
},
{
"date": "2019-12-10",
"count": 1
},
{
"date": "2019-12-11",
"count": 1
},
{
"date": "2019-12-14",
"count": 1
},
{
"date": "2019-12-23",
"count": 1
},
{
"date": "2019-12-27",
"count": 1
},
{
"date": "2020-01-06",
"count": 1
},
{
"date": "2020-01-15",
"count": 1
},
{
"date": "2020-01-26",
"count": 1
},
{
"date": "2020-02-14",
"count": 1
},
{
"date": "2020-02-19",
"count": 1
},
{
"date": "2020-02-20",
"count": 1
},
{
"date": "2020-03-12",
"count": 1
},
{
"date": "2020-03-23",
"count": 1
},
{
"date": "2020-03-25",
"count": 1
},
{
"date": "2020-03-28",
"count": 1
},
{
"date": "2020-03-29",
"count": 1
},
{
"date": "2020-04-11",
"count": 1
},
{
"date": "2020-04-14",
"count": 1
},
{
"date": "2020-04-15",
"count": 1
},
{
"date": "2020-04-18",
"count": 1
},
{
"date": "2020-04-22",
"count": 1
},
{
"date": "2020-04-27",
"count": 1
},
{
"date": "2020-04-29",
"count": 1
},
{
"date": "2020-04-30",
"count": 1
},
{
"date": "2020-05-08",
"count": 1
},
{
"date": "2020-05-15",
"count": 1
},
{
"date": "2020-05-17",
"count": 1
},
{
"date": "2020-05-19",
"count": 2
},
{
"date": "2020-06-06",
"count": 1
},
{
"date": "2020-06-18",
"count": 1
},
{
"date": "2020-06-19",
"count": 2
},
{
"date": "2020-06-20",
"count": 1
},
{
"date": "2020-06-28",
"count": 1
},
{
"date": "2020-06-29",
"count": 1
},
{
"date": "2020-07-18",
"count": 1
},
{
"date": "2020-07-22",
"count": 2
},
{
"date": "2020-07-24",
"count": 1
},
{
"date": "2020-07-26",
"count": 1
},
{
"date": "2020-08-03",
"count": 1
},
{
"date": "2020-08-18",
"count": 1
},
{
"date": "2020-08-19",
"count": 2
},
{
"date": "2020-08-26",
"count": 1
},
{
"date": "2020-09-06",
"count": 1
},
{
"date": "2020-09-18",
"count": 1
},
{
"date": "2020-10-02",
"count": 1
},
{
"date": "2020-10-15",
"count": 2
},
{
"date": "2020-10-16",
"count": 1
},
{
"date": "2020-11-06",
"count": 1
},
{
"date": "2020-11-09",
"count": 1
},
{
"date": "2020-11-12",
"count": 1
},
{
"date": "2020-11-13",
"count": 1
},
{
"date": "2020-11-20",
"count": 1
},
{
"date": "2020-12-06",
"count": 1
},
{
"date": "2020-12-14",
"count": 1
},
{
"date": "2020-12-17",
"count": 2
},
{
"date": "2020-12-21",
"count": 1
},
{
"date": "2020-12-25",
"count": 1
},
{
"date": "2020-12-30",
"count": 2
},
{
"date": "2021-01-02",
"count": 1
},
{
"date": "2021-01-03",
"count": 1
},
{
"date": "2021-01-04",
"count": 1
},
{
"date": "2021-01-12",
"count": 1
},
{
"date": "2021-01-19",
"count": 2
},
{
"date": "2021-02-14",
"count": 2
},
{
"date": "2021-02-17",
"count": 1
},
{
"date": "2021-02-18",
"count": 1
},
{
"date": "2021-03-04",
"count": 1
},
{
"date": "2021-03-07",
"count": 1
},
{
"date": "2021-03-21",
"count": 2
},
{
"date": "2021-03-25",
"count": 1
},
{
"date": "2021-03-31",
"count": 1
},
{
"date": "2021-04-11",
"count": 1
},
{
"date": "2021-04-15",
"count": 1
},
{
"date": "2021-04-20",
"count": 3
},
{
"date": "2021-04-21",
"count": 3
},
{
"date": "2021-04-23",
"count": 1
},
{
"date": "2021-04-24",
"count": 1
},
{
"date": "2021-04-25",
"count": 1
},
{
"date": "2021-05-01",
"count": 1
},
{
"date": "2021-05-04",
"count": 1
},
{
"date": "2021-05-06",
"count": 1
},
{
"date": "2021-05-09",
"count": 1
},
{
"date": "2021-05-11",
"count": 1
},
{
"date": "2021-05-12",
"count": 1
},
{
"date": "2021-05-13",
"count": 1
},
{
"date": "2021-05-15",
"count": 1
},
{
"date": "2021-05-16",
"count": 1
},
{
"date": "2021-05-18",
"count": 2
},
{
"date": "2021-05-21",
"count": 1
},
{
"date": "2021-05-22",
"count": 2
},
{
"date": "2021-05-23",
"count": 1
},
{
"date": "2021-05-24",
"count": 2
},
{
"date": "2021-06-02",
"count": 1
},
{
"date": "2021-06-06",
"count": 1
},
{
"date": "2021-06-11",
"count": 1
},
{
"date": "2021-06-21",
"count": 1
},
{
"date": "2021-07-06",
"count": 1
},
{
"date": "2021-07-07",
"count": 1
},
{
"date": "2021-07-23",
"count": 1
},
{
"date": "2021-07-24",
"count": 1
},
{
"date": "2021-07-26",
"count": 1
},
{
"date": "2021-07-29",
"count": 1
},
{
"date": "2021-07-31",
"count": 1
},
{
"date": "2021-08-03",
"count": 1
},
{
"date": "2021-08-11",
"count": 1
},
{
"date": "2021-08-17",
"count": 1
},
{
"date": "2021-08-25",
"count": 1
},
{
"date": "2021-08-27",
"count": 1
},
{
"date": "2021-08-30",
"count": 1
},
{
"date": "2021-09-07",
"count": 1
},
{
"date": "2021-09-08",
"count": 1
},
{
"date": "2021-09-10",
"count": 2
},
{
"date": "2021-09-15",
"count": 1
},
{
"date": "2021-09-25",
"count": 1
},
{
"date": "2021-10-05",
"count": 2
},
{
"date": "2021-10-25",
"count": 1
},
{
"date": "2021-10-26",
"count": 1
},
{
"date": "2021-10-30",
"count": 2
},
{
"date": "2021-11-06",
"count": 2
},
{
"date": "2021-11-11",
"count": 1
},
{
"date": "2021-11-25",
"count": 1
},
{
"date": "2021-11-29",
"count": 1
},
{
"date": "2021-12-05",
"count": 1
},
{
"date": "2021-12-12",
"count": 1
},
{
"date": "2021-12-14",
"count": 1
},
{
"date": "2021-12-19",
"count": 1
},
{
"date": "2021-12-23",
"count": 1
},
{
"date": "2022-01-03",
"count": 1
},
{
"date": "2022-01-04",
"count": 1
},
{
"date": "2022-01-08",
"count": 1
},
{
"date": "2022-01-11",
"count": 2
},
{
"date": "2022-02-05",
"count": 1
},
{
"date": "2022-02-16",
"count": 1
},
{
"date": "2022-02-17",
"count": 2
},
{
"date": "2022-02-19",
"count": 2
},
{
"date": "2022-02-21",
"count": 1
},
{
"date": "2022-02-22",
"count": 2
},
{
"date": "2022-03-02",
"count": 1
},
{
"date": "2022-03-09",
"count": 1
},
{
"date": "2022-03-15",
"count": 1
},
{
"date": "2022-03-21",
"count": 1
},
{
"date": "2022-03-25",
"count": 1
},
{
"date": "2022-03-29",
"count": 3
},
{
"date": "2022-03-30",
"count": 2
},
{
"date": "2022-04-10",
"count": 1
},
{
"date": "2022-04-12",
"count": 1
},
{
"date": "2022-04-14",
"count": 1
},
{
"date": "2022-04-17",
"count": 1
},
{
"date": "2022-04-18",
"count": 1
},
{
"date": "2022-04-24",
"count": 1
},
{
"date": "2022-05-02",
"count": 1
},
{
"date": "2022-05-11",
"count": 1
},
{
"date": "2022-05-12",
"count": 1
},
{
"date": "2022-05-19",
"count": 1
},
{
"date": "2022-05-20",
"count": 1
},
{
"date": "2022-05-23",
"count": 1
},
{
"date": "2022-05-28",
"count": 1
},
{
"date": "2022-06-18",
"count": 1
},
{
"date": "2022-06-25",
"count": 1
},
{
"date": "2022-07-05",
"count": 1
},
{
"date": "2022-07-06",
"count": 2
},
{
"date": "2022-07-11",
"count": 1
},
{
"date": "2022-07-12",
"count": 1
},
{
"date": "2022-07-19",
"count": 1
},
{
"date": "2022-07-20",
"count": 1
},
{
"date": "2022-07-22",
"count": 1
},
{
"date": "2022-07-26",
"count": 1
},
{
"date": "2022-08-03",
"count": 1
},
{
"date": "2022-08-05",
"count": 1
},
{
"date": "2022-08-06",
"count": 1
},
{
"date": "2022-08-08",
"count": 1
},
{
"date": "2022-08-30",
"count": 1
},
{
"date": "2022-09-01",
"count": 1
},
{
"date": "2022-09-09",
"count": 3
},
{
"date": "2022-09-12",
"count": 1
},
{
"date": "2022-09-29",
"count": 1
},
{
"date": "2022-10-10",
"count": 1
},
{
"date": "2022-10-18",
"count": 1
},
{
"date": "2022-10-19",
"count": 1
},
{
"date": "2022-10-23",
"count": 1
},
{
"date": "2022-10-25",
"count": 1
},
{
"date": "2022-10-26",
"count": 1
},
{
"date": "2022-10-30",
"count": 1
},
{
"date": "2022-11-09",
"count": 1
},
{
"date": "2022-11-11",
"count": 1
},
{
"date": "2022-11-17",
"count": 1
},
{
"date": "2022-11-22",
"count": 1
},
{
"date": "2022-11-24",
"count": 2
},
{
"date": "2022-11-25",
"count": 1
},
{
"date": "2022-12-13",
"count": 1
},
{
"date": "2022-12-25",
"count": 1
},
{
"date": "2022-12-31",
"count": 1
},
{
"date": "2023-01-05",
"count": 1
},
{
"date": "2023-01-18",
"count": 1
},
{
"date": "2023-01-19",
"count": 2
},
{
"date": "2023-01-23",
"count": 1
},
{
"date": "2023-02-01",
"count": 1
},
{
"date": "2023-02-03",
"count": 1
},
{
"date": "2023-02-04",
"count": 1
},
{
"date": "2023-02-07",
"count": 1
},
{
"date": "2023-02-23",
"count": 1
},
{
"date": "2023-03-01",
"count": 1
},
{
"date": "2023-03-25",
"count": 1
},
{
"date": "2023-03-27",
"count": 1
},
{
"date": "2023-04-11",
"count": 1
},
{
"date": "2023-04-14",
"count": 1
},
{
"date": "2023-04-20",
"count": 1
},
{
"date": "2023-04-22",
"count": 1
},
{
"date": "2023-04-29",
"count": 1
},
{
"date": "2023-05-17",
"count": 1
},
{
"date": "2023-05-25",
"count": 2
},
{
"date": "2023-05-28",
"count": 1
},
{
"date": "2023-06-09",
"count": 1
},
{
"date": "2023-06-23",
"count": 1
},
{
"date": "2023-06-30",
"count": 1
},
{
"date": "2023-07-04",
"count": 1
},
{
"date": "2023-07-22",
"count": 1
},
{
"date": "2023-07-31",
"count": 1
},
{
"date": "2023-08-03",
"count": 1
},
{
"date": "2023-08-05",
"count": 1
},
{
"date": "2023-08-20",
"count": 1
},
{
"date": "2023-08-26",
"count": 1
},
{
"date": "2023-08-31",
"count": 1
},
{
"date": "2023-09-18",
"count": 1
},
{
"date": "2023-09-28",
"count": 1
},
{
"date": "2023-10-06",
"count": 1
},
{
"date": "2023-10-12",
"count": 2
},
{
"date": "2023-10-14",
"count": 1
},
{
"date": "2023-11-01",
"count": 1
},
{
"date": "2023-11-04",
"count": 1
},
{
"date": "2023-11-08",
"count": 1
},
{
"date": "2023-11-19",
"count": 1
},
{
"date": "2023-11-27",
"count": 1
},
{
"date": "2023-12-02",
"count": 1
},
{
"date": "2023-12-03",
"count": 1
},
{
"date": "2023-12-08",
"count": 1
},
{
"date": "2023-12-13",
"count": 1
},
{
"date": "2023-12-16",
"count": 1
},
{
"date": "2023-12-17",
"count": 1
},
{
"date": "2023-12-21",
"count": 1
},
{
"date": "2023-12-23",
"count": 1
},
{
"date": "2023-12-28",
"count": 2
},
{
"date": "2024-01-01",
"count": 1
},
{
"date": "2024-01-03",
"count": 1
},
{
"date": "2024-01-09",
"count": 1
},
{
"date": "2024-01-10",
"count": 1
},
{
"date": "2024-01-11",
"count": 4
},
{
"date": "2024-01-12",
"count": 1
},
{
"date": "2024-01-15",
"count": 1
},
{
"date": "2024-01-16",
"count": 2
},
{
"date": "2024-01-19",
"count": 1
},
{
"date": "2024-01-21",
"count": 1
},
{
"date": "2024-01-25",
"count": 1
},
{
"date": "2024-01-29",
"count": 1
},
{
"date": "2024-02-06",
"count": 1
},
{
"date": "2024-02-13",
"count": 1
},
{
"date": "2024-02-21",
"count": 1
},
{
"date": "2024-02-22",
"count": 1
},
{
"date": "2024-03-01",
"count": 1
},
{
"date": "2024-03-02",
"count": 1
},
{
"date": "2024-03-05",
"count": 1
},
{
"date": "2024-03-14",
"count": 1
},
{
"date": "2024-03-20",
"count": 1
},
{
"date": "2024-03-27",
"count": 1
},
{
"date": "2024-03-28",
"count": 1
},
{
"date": "2024-03-30",
"count": 1
},
{
"date": "2024-04-02",
"count": 1
},
{
"date": "2024-04-11",
"count": 1
},
{
"date": "2024-04-13",
"count": 1
},
{
"date": "2024-04-14",
"count": 1
},
{
"date": "2024-04-16",
"count": 2
},
{
"date": "2024-05-03",
"count": 1
},
{
"date": "2024-05-05",
"count": 2
},
{
"date": "2024-05-07",
"count": 1
},
{
"date": "2024-05-08",
"count": 1
},
{
"date": "2024-05-09",
"count": 1
},
{
"date": "2024-05-17",
"count": 2
},
{
"date": "2024-05-22",
"count": 1
},
{
"date": "2024-06-02",
"count": 1
},
{
"date": "2024-06-04",
"count": 2
},
{
"date": "2024-06-12",
"count": 1
},
{
"date": "2024-06-14",
"count": 1
},
{
"date": "2024-06-19",
"count": 1
},
{
"date": "2024-06-23",
"count": 1
},
{
"date": "2024-06-27",
"count": 1
},
{
"date": "2024-07-04",
"count": 1
},
{
"date": "2024-07-14",
"count": 1
},
{
"date": "2024-07-20",
"count": 1
},
{
"date": "2024-07-27",
"count": 1
},
{
"date": "2024-08-10",
"count": 1
},
{
"date": "2024-08-11",
"count": 1
},
{
"date": "2024-08-13",
"count": 1
},
{
"date": "2024-09-09",
"count": 1
},
{
"date": "2024-09-11",
"count": 1
},
{
"date": "2024-09-15",
"count": 1
},
{
"date": "2024-09-16",
"count": 1
},
{
"date": "2024-09-17",
"count": 2
},
{
"date": "2024-09-29",
"count": 1
},
{
"date": "2024-10-08",
"count": 2
},
{
"date": "2024-10-25",
"count": 1
},
{
"date": "2024-10-30",
"count": 2
},
{
"date": "2024-11-08",
"count": 1
},
{
"date": "2024-11-17",
"count": 1
},
{
"date": "2024-11-22",
"count": 1
},
{
"date": "2024-12-09",
"count": 1
},
{
"date": "2025-01-18",
"count": 2
},
{
"date": "2025-01-28",
"count": 1
},
{
"date": "2025-02-12",
"count": 1
},
{
"date": "2025-02-17",
"count": 1
},
{
"date": "2025-03-02",
"count": 1
},
{
"date": "2025-03-05",
"count": 1
},
{
"date": "2025-03-06",
"count": 1
},
{
"date": "2025-03-18",
"count": 1
},
{
"date": "2025-03-19",
"count": 1
},
{
"date": "2025-03-20",
"count": 1
},
{
"date": "2025-04-07",
"count": 2
},
{
"date": "2025-04-15",
"count": 1
},
{
"date": "2025-04-18",
"count": 1
},
{
"date": "2025-05-07",
"count": 1
},
{
"date": "2025-05-08",
"count": 1
},
{
"date": "2025-05-12",
"count": 1
},
{
"date": "2025-05-29",
"count": 1
},
{
"date": "2025-06-07",
"count": 2
},
{
"date": "2025-06-18",
"count": 1
},
{
"date": "2025-06-21",
"count": 1
},
{
"date": "2025-06-25",
"count": 1
},
{
"date": "2025-06-28",
"count": 1
},
{
"date": "2025-06-30",
"count": 1
},
{
"date": "2025-07-13",
"count": 1
},
{
"date": "2025-07-17",
"count": 2
},
{
"date": "2025-07-26",
"count": 1
},
{
"date": "2025-08-06",
"count": 1
},
{
"date": "2025-08-23",
"count": 1
},
{
"date": "2025-09-05",
"count": 1
},
{
"date": "2025-09-10",
"count": 1
},
{
"date": "2025-09-13",
"count": 1
},
{
"date": "2025-10-02",
"count": 1
},
{
"date": "2025-10-14",
"count": 1
},
{
"date": "2025-10-17",
"count": 1
},
{
"date": "2025-10-31",
"count": 1
},
{
"date": "2025-11-02",
"count": 1
},
{
"date": "2025-11-04",
"count": 2
},
{
"date": "2025-11-12",
"count": 1
},
{
"date": "2025-11-24",
"count": 1
},
{
"date": "2025-11-26",
"count": 6
},
{
"date": "2025-12-03",
"count": 1
},
{
"date": "2025-12-18",
"count": 1
},
{
"date": "2025-12-23",
"count": 1
},
{
"date": "2025-12-24",
"count": 1
},
{
"date": "2025-12-25",
"count": 1
},
{
"date": "2026-01-09",
"count": 1
},
{
"date": "2026-02-03",
"count": 1
},
{
"date": "2026-03-25",
"count": 1
},
{
"date": "2026-04-07",
"count": 1
},
{
"date": "2026-04-24",
"count": 2
},
{
"date": "2026-05-03",
"count": 1
},
{
"date": "2026-05-07",
"count": 1
},
{
"date": "2026-05-09",
"count": 1
},
{
"date": "2026-05-23",
"count": 1
},
{
"date": "2026-05-30",
"count": 1
},
{
"date": "2026-06-12",
"count": 1
},
{
"date": "2026-06-23",
"count": 1
},
{
"date": "2026-06-30",
"count": 2
},
{
"date": "2026-07-13",
"count": 1
},
{
"date": "2026-07-16",
"count": 1
}
],
"complete": true,
"collected": 693,
"total_stars": 693
},
"open_issues_and_prs": 14
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [],
"has_llms_txt": false,
"has_dockerfile": false,
"has_mcp_signal": false,
"bootstrap_files": [
"docs/Makefile"
],
"api_schema_files": [],
"has_devcontainer": true,
"typecheck_configs": [
"src/markupsafe/py.typed"
],
"toolchain_manifests": [],
"largest_source_bytes": 12736,
"source_files_sampled": 13,
"oversized_source_files": 0,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"dependencies": {
"manifests": [
"pyproject.toml",
"setup.py"
],
"advisories": {
"error": "No resolved dependencies to assess",
"scope": "repository_graph",
"source": null,
"findings": [],
"collected": false,
"malicious": [],
"truncated": false,
"by_severity": {},
"advisory_count": 0,
"affected_count": 0,
"assessed_count": 0,
"malicious_count": 0,
"assessed_package": null,
"unassessed_count": 0,
"direct_affected_count": 0
},
"ecosystems": [
"pypi"
],
"dependencies": [],
"all_dependencies": {
"error": null,
"source": "github-sbom",
"packages": [],
"collected": true,
"truncated": false,
"total_count": 0,
"direct_count": 0,
"indirect_count": 0
}
},
"maintainership": {
"issues": {
"open_prs": 9,
"merged_prs": 285,
"open_issues": 5,
"closed_ratio": 0.965,
"closed_issues": 139,
"closed_unmerged_prs": 81
},
"bus_factor": 1,
"bot_contributors": 3,
"top_contributors": [
{
"type": "User",
"login": "davidism",
"commits": 509,
"avatar_url": "https://avatars.githubusercontent.com/u/1242887?v=4"
},
{
"type": "User",
"login": "mitsuhiko",
"commits": 69,
"avatar_url": "https://avatars.githubusercontent.com/u/7396?v=4"
},
{
"type": "User",
"login": "edgarrmondragon",
"commits": 6,
"avatar_url": "https://avatars.githubusercontent.com/u/16805946?v=4"
},
{
"type": "User",
"login": "methane",
"commits": 3,
"avatar_url": "https://avatars.githubusercontent.com/u/199592?v=4"
},
{
"type": "User",
"login": "ThiefMaster",
"commits": 2,
"avatar_url": "https://avatars.githubusercontent.com/u/179599?v=4"
},
{
"type": "User",
"login": "amcgregor",
"commits": 2,
"avatar_url": "https://avatars.githubusercontent.com/u/76750?v=4"
},
{
"type": "User",
"login": "Cito",
"commits": 2,
"avatar_url": "https://avatars.githubusercontent.com/u/464599?v=4"
},
{
"type": "User",
"login": "dawranliou",
"commits": 2,
"avatar_url": "https://avatars.githubusercontent.com/u/4307599?v=4"
},
{
"type": "User",
"login": "gtback",
"commits": 2,
"avatar_url": "https://avatars.githubusercontent.com/u/1045796?v=4"
},
{
"type": "User",
"login": "greyli",
"commits": 2,
"avatar_url": "https://avatars.githubusercontent.com/u/12967000?v=4"
}
],
"contributors_sampled": 43,
"top_contributor_share": 0.802
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"lock.yaml",
"pre-commit.yaml",
"publish.yaml",
"tests.yaml"
],
"has_docs_dir": true,
"linter_configs": [],
"has_editorconfig": true,
"has_linter_config": true,
"has_precommit_config": true
},
"security_signals": {
"lockfiles": [
"uv.lock"
],
"scorecard": {
"checks": [
{
"name": "Binary-Artifacts",
"score": 10,
"reason": "no binaries found in the repo",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
},
{
"name": "Branch-Protection",
"score": 3,
"reason": "branch protection is not maximal on development and all release branches",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": 6,
"reason": "6 out of 10 merged PRs checked by a CI test -- score normalized to 6",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
},
{
"name": "CII-Best-Practices",
"score": 0,
"reason": "no effort to earn an OpenSSF best practices badge detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
},
{
"name": "Code-Review",
"score": 1,
"reason": "Found 3/22 approved changesets -- score normalized to 1",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 10,
"reason": "project has 17 contributing companies or organizations",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": 10,
"reason": "no dangerous workflow patterns detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
},
{
"name": "Dependency-Update-Tool",
"score": 10,
"reason": "update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 10,
"reason": "project is fuzzed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
},
{
"name": "License",
"score": 10,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 0,
"reason": "0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
},
{
"name": "Packaging",
"score": 10,
"reason": "packaging workflow detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
},
{
"name": "Pinned-Dependencies",
"score": 9,
"reason": "dependency not pinned by hash detected -- score normalized to 9",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 0,
"reason": "SAST tool is not run on all commits -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
},
{
"name": "Security-Policy",
"score": 9,
"reason": "security policy file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
},
{
"name": "Signed-Releases",
"score": 8,
"reason": "4 out of the last 5 releases have a total of 4 signed artifacts.",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
},
{
"name": "Token-Permissions",
"score": 0,
"reason": "detected GitHub workflow tokens with excessive permissions",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
},
{
"name": "Vulnerabilities",
"score": 0,
"reason": "22 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "b2e4d9c7687be25695fffbe93a37622302b24fb1",
"ran_at": "2026-07-22T01:37:17Z",
"aggregate_score": 5.7,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": false,
"has_dependabot_config": false
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": "2026-07-22T00:20:00Z",
"oldest_open_prs": [
{
"number": 438,
"created_at": "2024-04-22T23:50:32Z",
"last_comment_at": "2025-02-19T16:42:41Z",
"last_comment_author": "davidism"
},
{
"number": 510,
"created_at": "2025-09-29T13:56:59Z",
"last_comment_at": "2025-09-30T09:51:56Z",
"last_comment_author": "crusaderky"
},
{
"number": 512,
"created_at": "2025-10-08T11:10:52Z",
"last_comment_at": "2026-03-04T10:33:25Z",
"last_comment_author": "flying-sheep"
},
{
"number": 514,
"created_at": "2026-02-09T10:42:09Z",
"last_comment_at": "2026-02-14T22:52:38Z",
"last_comment_author": "Lauszus"
},
{
"number": 516,
"created_at": "2026-02-14T21:48:43Z",
"last_comment_at": "2026-06-05T20:16:58Z",
"last_comment_author": "davidism"
},
{
"number": 518,
"created_at": "2026-02-16T12:03:02Z",
"last_comment_at": "2026-02-23T10:16:10Z",
"last_comment_author": "PankhudiJ17"
},
{
"number": 519,
"created_at": "2026-03-10T19:21:53Z",
"last_comment_at": "2026-03-12T13:12:26Z",
"last_comment_author": "thewhaleking"
},
{
"number": 522,
"created_at": "2026-04-10T09:41:35Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 524,
"created_at": "2026-05-28T10:46:26Z",
"last_comment_at": null,
"last_comment_author": null
}
],
"last_merged_pr_at": "2025-09-27T18:38:34Z",
"ci_last_conclusion": "FAILURE",
"oldest_open_issues": [
{
"number": 511,
"created_at": "2025-10-08T08:39:05Z",
"last_comment_at": "2025-10-08T09:19:55Z",
"last_comment_author": "xmo-odoo"
},
{
"number": 515,
"created_at": "2026-02-14T21:43:02Z",
"last_comment_at": "2026-03-20T16:49:22Z",
"last_comment_author": "keepsTime"
},
{
"number": 517,
"created_at": "2026-02-16T11:50:34Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 521,
"created_at": "2026-04-07T12:14:35Z",
"last_comment_at": "2026-04-08T11:56:41Z",
"last_comment_author": "MohamedKasem99"
},
{
"number": 523,
"created_at": "2026-05-28T10:43:58Z",
"last_comment_at": null,
"last_comment_author": null
}
]
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/pallets/markupsafe",
"host": "github.com",
"name": "markupsafe",
"owner": "pallets"
},
"metrics": {
"overall": {
"key": "overall",
"band": "moderate",
"name": "Overall health",
"note": null,
"notes": [],
"value": 66,
"inputs": {
"security": 57,
"vitality": 35,
"community": 82,
"governance": 67,
"engineering": 91
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "at_risk",
"name": "Vitality",
"value": 35,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "critical",
"name": "Development activity",
"note": null,
"notes": [],
"value": 15,
"inputs": {
"commits_last_year": 11,
"human_commit_share": 0.97,
"days_since_last_push": 297,
"active_weeks_last_year": 2
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 297 days ago",
"points": 3.6,
"status": "partial",
"details": [
{
"code": "push_recency",
"params": {
"days": 297
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "2/52 weeks with commits",
"points": 1.4,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 2
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "11 commits in the last year",
"points": 9.7,
"status": "partial",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 11
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "moderate",
"name": "Release discipline",
"note": null,
"notes": [],
"value": 64,
"inputs": {
"releases_count": 13,
"latest_release_tag": "3.0.3",
"releases_from_tags": false,
"days_since_latest_release": 297,
"mean_days_between_releases": 146.4
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "13 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 13
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 297 days ago",
"points": 16.2,
"status": "partial",
"details": [
{
"code": "release_recency",
"params": {
"days": 297
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~146.4 days",
"points": 12.6,
"status": "partial",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 146.4
}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "4 out of the last 5 releases have a total of 4 signed artifacts.",
"points": 8,
"status": "partial",
"details": [],
"max_points": 10
}
]
},
{
"key": "abandonment",
"band": "excellent",
"name": "Abandonment",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"cap": null,
"state": "dormant",
"guards": [
"maintainer_replying",
"recent_release"
],
"signals": [
"scorecard_unmaintained",
"broken_ci"
],
"red_flag": false,
"multiplier_pct": 100,
"declared_reason": null,
"unverified_reason": null,
"unanswered_open_prs": 3,
"unanswered_open_issues": 0,
"days_since_last_merged_pr": 297,
"days_since_last_human_commit": 297,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "no human commit for 297 days, with nothing left unanswered; held at dormant by a maintainer still replying, a release within the year",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_quiet",
"params": {
"days": 297
}
},
{
"code": "abandonment_guarded",
"params": {
"guards": "a maintainer still replying, a release within the year"
}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "good",
"name": "Community & Adoption",
"value": 82,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "good",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 73,
"inputs": {
"forks": 187,
"stars": 693,
"watchers": 30,
"growth_state": "organic",
"growth_factor_pct": 100
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "693 stars",
"points": 46.1,
"status": "partial",
"details": [
{
"code": "stars",
"params": {
"count": 693
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "187 forks",
"points": 18.9,
"status": "partial",
"details": [
{
"code": "forks",
"params": {
"count": 187
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "30 watchers",
"points": 8.1,
"status": "partial",
"details": [
{
"code": "watchers",
"params": {
"count": 30
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "excellent",
"name": "Community health",
"note": null,
"notes": [],
"value": 92,
"inputs": {
"has_readme": true,
"has_license": true,
"has_contributing": true,
"has_issue_template": false,
"has_code_of_conduct": true,
"has_pull_request_template": true
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 22.5,
"status": "met",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "recognized license (BSD-3-Clause)",
"points": 22.5,
"status": "met",
"details": [
{
"code": "license_standard",
"params": {}
},
{
"code": "license_spdx",
"params": {
"spdx": "BSD-3-Clause"
}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 18,
"status": "met",
"details": [],
"max_points": 18
},
{
"key": "code_of_conduct",
"name": "Code of conduct",
"detail": null,
"points": 13.5,
"status": "met",
"details": [],
"max_points": 13.5
},
{
"key": "issue_template",
"name": "Issue template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.2
},
{
"key": "pr_template",
"name": "PR template",
"detail": null,
"points": 6.3,
"status": "met",
"details": [],
"max_points": 6.3
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "moderate",
"name": "Sustainability & Governance",
"value": 67,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "at_risk",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 37,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 43,
"top_contributor_share": 0.802
},
"components": [
{
"key": "bus_factor",
"name": "Bus factor",
"detail": "1 contributor(s) cover half of all commits",
"points": 9,
"status": "partial",
"details": [
{
"code": "bus_factor",
"params": {
"count": 1
}
}
],
"max_points": 54
},
{
"key": "commit_distribution",
"name": "Commit distribution",
"detail": "top contributor authored 80% of commits",
"points": 4.5,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 80
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "43 contributors",
"points": 13.5,
"status": "met",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 43
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 17 contributing companies or organizations",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "good",
"name": "Issue & PR responsiveness",
"note": null,
"notes": [],
"value": 76,
"inputs": {
"merged_prs": 285,
"open_issues": 5,
"closed_issues": 139,
"issue_closed_ratio": 0.965,
"closed_unmerged_prs": 81
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "96% of issues closed",
"points": 45.1,
"status": "partial",
"details": [
{
"code": "issues_closed_share",
"params": {
"share": 96
}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "285/366 decided PRs merged",
"points": 29.8,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 285,
"decided": 366
}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 3/22 approved changesets -- score normalized to 1",
"points": 1.5,
"status": "partial",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "good",
"name": "Ownership & stewardship",
"note": null,
"notes": [],
"value": 75,
"inputs": {
"followers": 2372,
"owner_type": "Organization",
"is_verified": null,
"owner_login": "pallets",
"public_repos": 17,
"account_age_days": 3838
},
"components": [
{
"key": "ownership_backing",
"name": "Ownership backing",
"detail": "organization-owned",
"points": 30,
"status": "met",
"details": [
{
"code": "owner_organization",
"params": {}
}
],
"max_points": 30
},
{
"key": "verified_domain",
"name": "Verified domain",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 20
},
{
"key": "owner_reach",
"name": "Owner reach",
"detail": "2,372 followers of pallets",
"points": 24.3,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 2372,
"login": "pallets"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "17 public repos, account ~10 yr old",
"points": 21.1,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 17
}
},
{
"code": "account_age_years",
"params": {
"years": 10
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "excellent",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 91,
"inputs": {
"packages": [
"MarkupSafe"
],
"ecosystems": "pypi",
"any_deprecated": false,
"min_days_since_publish": 297
},
"components": [
{
"key": "published_resolvable",
"name": "Published & resolvable",
"detail": "1 package(s) on pypi",
"points": 25,
"status": "met",
"details": [
{
"code": "packages_published",
"params": {
"count": 1,
"ecosystems": "pypi"
}
}
],
"max_points": 25
},
{
"key": "publish_recency",
"name": "Publish recency",
"detail": "latest publish 297 days ago",
"points": 26,
"status": "partial",
"details": [
{
"code": "publish_recency",
"params": {
"days": 297
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "35 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 35
}
}
],
"max_points": 20
},
{
"key": "not_deprecated",
"name": "Not deprecated",
"detail": "active, not deprecated or yanked",
"points": 20,
"status": "met",
"details": [
{
"code": "package_not_deprecated",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
},
{
"key": "engineering",
"band": "excellent",
"name": "Engineering Quality",
"value": 91,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "excellent",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 92,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": true,
"has_linter_config": true,
"has_precommit_config": true
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "4 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 4
}
}
],
"max_points": 24
},
{
"key": "tests_present",
"name": "Tests present",
"detail": null,
"points": 24,
"status": "met",
"details": [],
"max_points": 24
},
{
"key": "linter_config",
"name": "Linter config",
"detail": null,
"points": 16,
"status": "met",
"details": [],
"max_points": 16
},
{
"key": "pre_commit_hooks",
"name": "Pre-commit hooks",
"detail": null,
"points": 9.6,
"status": "met",
"details": [],
"max_points": 9.6
},
{
"key": "editorconfig",
"name": ".editorconfig",
"detail": null,
"points": 6.4,
"status": "met",
"details": [],
"max_points": 6.4
},
{
"key": "openssf_scorecard_ci_tests",
"name": "OpenSSF Scorecard: CI-Tests",
"detail": "6 out of 10 merged PRs checked by a CI test -- score normalized to 6",
"points": 12,
"status": "partial",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "excellent",
"name": "Documentation",
"note": null,
"notes": [],
"value": 90,
"inputs": {
"topics": [
"python",
"html",
"template-engine",
"html-escape",
"markupsafe",
"jinja",
"pallets"
],
"has_wiki": false,
"homepage": "https://markupsafe.palletsprojects.com",
"has_readme": true,
"has_docs_dir": true,
"has_description": true
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 30,
"status": "met",
"details": [],
"max_points": 30
},
{
"key": "documentation_directory",
"name": "Documentation directory",
"detail": null,
"points": 25,
"status": "met",
"details": [],
"max_points": 25
},
{
"key": "documentation_homepage_site",
"name": "Documentation / homepage site",
"detail": "https://markupsafe.palletsprojects.com",
"points": 15,
"status": "met",
"details": [],
"max_points": 15
},
{
"key": "repository_description",
"name": "Repository description",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "topics",
"name": "Topics",
"detail": "7 topics",
"points": 10,
"status": "met",
"details": [
{
"code": "topics_count",
"params": {
"count": 7
}
}
],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "moderate",
"name": "Security",
"value": 57,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "moderate",
"name": "Security posture",
"note": null,
"notes": [],
"value": 57,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 18,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 0,
"scorecard_aggregate": 5.7
},
"components": [
{
"key": "binary_artifacts",
"name": "Binary-Artifacts",
"detail": "no binaries found in the repo",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "branch_protection",
"name": "Branch-Protection",
"detail": "branch protection is not maximal on development and all release branches",
"points": 2.2,
"status": "partial",
"details": [],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "6 out of 10 merged PRs checked by a CI test -- score normalized to 6",
"points": 1.5,
"status": "partial",
"details": [],
"max_points": 2.5
},
{
"key": "cii_best_practices",
"name": "CII-Best-Practices",
"detail": "no effort to earn an OpenSSF best practices badge detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "code_review",
"name": "Code-Review",
"detail": "Found 3/22 approved changesets -- score normalized to 1",
"points": 0.8,
"status": "partial",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 17 contributing companies or organizations",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "dangerous_workflow",
"name": "Dangerous-Workflow",
"detail": "no dangerous workflow patterns detected",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "dependency_update_tool",
"name": "Dependency-Update-Tool",
"detail": "update tool detected",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is fuzzed",
"points": 5,
"status": "met",
"details": [],
"max_points": 5
},
{
"key": "license",
"name": "License",
"detail": "license file detected",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "packaging",
"name": "Packaging",
"detail": "packaging workflow detected",
"points": 5,
"status": "met",
"details": [],
"max_points": 5
},
{
"key": "pinned_dependencies",
"name": "Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 9",
"points": 4.5,
"status": "partial",
"details": [],
"max_points": 5
},
{
"key": "sast",
"name": "SAST",
"detail": "SAST tool is not run on all commits -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "security_policy",
"name": "Security-Policy",
"detail": "security policy file detected",
"points": 4.5,
"status": "partial",
"details": [],
"max_points": 5
},
{
"key": "signed_releases",
"name": "Signed-Releases",
"detail": "4 out of the last 5 releases have a total of 4 signed artifacts.",
"points": 6,
"status": "partial",
"details": [],
"max_points": 7.5
},
{
"key": "token_permissions",
"name": "Token-Permissions",
"detail": "detected GitHub workflow tokens with excessive permissions",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "vulnerabilities",
"name": "Vulnerabilities",
"detail": "22 existing vulnerabilities detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "high_risk_jurisdiction_exposure",
"band": "excellent",
"name": "High-Risk Jurisdiction Exposure",
"note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
"notes": [
{
"code": "jurisdiction_evidence_limits",
"params": {}
}
],
"value": 100,
"inputs": {
"meaning": "self-published location evidence; not nationality or citizenship",
"red_flag": false,
"exposures": [],
"policy_countries": [
"Russia",
"Iran",
"North Korea"
],
"review_only_matches": 0,
"assessed_self_published_locations": 26
},
"components": [
{
"key": "policy_exposure_multiplier",
"name": "Policy exposure multiplier",
"detail": "no confirmed policy-scope location match",
"points": 100,
"status": "met",
"details": [
{
"code": "jurisdiction_no_match",
"params": {}
}
],
"max_points": 100
}
]
}
],
"description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
},
{
"key": "ai_readiness",
"band": "moderate",
"name": "AI Readiness",
"value": 61,
"weight": 0,
"metrics": [
{
"key": "ai_agent_context",
"band": "critical",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 14,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 0.258,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "no CLAUDE.md / AGENTS.md / editor rules",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_agent_instructions",
"params": {}
}
],
"max_points": 45
},
{
"key": "machine_readable_docs_llms_txt",
"name": "Machine-readable docs (llms.txt)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "legible_commit_history",
"name": "Legible commit history",
"detail": "25 of 97 human commits state their intent (structured subject or explanatory body)",
"points": 13.7,
"status": "partial",
"details": [
{
"code": "legible_history",
"params": {
"legible": 25,
"sampled": 97
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "excellent",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 89,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [
"uv.lock"
],
"has_dockerfile": false,
"typed_language": false,
"bootstrap_files": [
"docs/Makefile"
],
"has_devcontainer": true,
"has_linter_config": true,
"typecheck_configs": [
"src/markupsafe/py.typed"
],
"agent_commit_share": 0,
"toolchain_manifests": [],
"dependency_bot_commit_share": 0.02
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": "docs/Makefile",
"points": 18,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "docs/Makefile"
}
}
],
"max_points": 18
},
{
"key": "automated_tests",
"name": "Automated tests",
"detail": null,
"points": 22,
"status": "met",
"details": [],
"max_points": 22
},
{
"key": "lint_format_config",
"name": "Lint / format config",
"detail": null,
"points": 11,
"status": "met",
"details": [],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": "src/markupsafe/py.typed",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "src/markupsafe/py.typed"
}
}
],
"max_points": 11
},
{
"key": "reproducible_environment",
"name": "Reproducible environment",
"detail": "devcontainer, lockfile",
"points": 10,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "devcontainer, lockfile"
}
}
],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "no agent-authored commits among the last 100",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_agent_authored_commits",
"params": {
"sampled": 100
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "2 of the last 100 commits are automated dependency updates",
"points": 8,
"status": "met",
"details": [
{
"code": "dependency_bot_commits",
"params": {
"count": 2,
"sampled": 100
}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 9",
"points": 9,
"status": "partial",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "good",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 82,
"inputs": {
"primary_language": "Python",
"largest_source_bytes": 12736,
"source_files_sampled": 13,
"oversized_source_files": 0
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "Python with type-check config (src/markupsafe/py.typed)",
"points": 27,
"status": "partial",
"details": [
{
"code": "typecheck_config_language",
"params": {
"files": "src/markupsafe/py.typed",
"language": "Python"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "0/13 source files over 60KB",
"points": 55,
"status": "met",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 13,
"oversized": 0
}
}
],
"max_points": 55
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
}
],
"metrics_version": "1.13.0"
},
"warnings": [],
"report_type": "repository",
"generated_at": "2026-07-22T01:37:40.669434Z",
"schema_version": "0.26.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/p/pallets/markupsafe.svg",
"full_name": "pallets/markupsafe",
"license_state": "standard",
"license_spdx": "BSD-3-Clause"
}