Informe JSON sin procesar legible por máquina
{
"data": {
"repo": {
"topics": [
"wayland",
"wayland-compositor",
"compositor",
"cpp26"
],
"is_fork": false,
"size_kb": 80091,
"has_wiki": true,
"homepage": "https://hypr.land",
"languages": {
"C": 3214,
"C++": 5689684,
"Lua": 31083,
"Nix": 32602,
"GLSL": 57439,
"CMake": 34034,
"Shell": 54525,
"Python": 30498,
"Makefile": 4861
},
"pushed_at": "2026-07-28T19:56:46Z",
"created_at": "2022-03-16T19:49:13Z",
"owner_type": "Organization",
"updated_at": "2026-07-29T03:25:30Z",
"description": "Hyprland is an independent, highly customizable, dynamic tiling Wayland compositor that doesn't sacrifice on its looks.",
"is_archived": false,
"is_disabled": false,
"license_spdx": "BSD-3-Clause",
"default_branch": "main",
"license_spdx_raw": "BSD-3-Clause",
"primary_language": "C++",
"significant_languages": [
"C++"
]
},
"owner": {
"blog": "https://hyprland.org",
"name": "Hypr Development",
"type": "Organization",
"login": "hyprwm",
"company": null,
"location": null,
"followers": 2893,
"avatar_url": "https://avatars.githubusercontent.com/u/107882187?v=4",
"created_at": "2022-06-20T18:00:15Z",
"is_verified": null,
"public_repos": 41,
"account_age_days": 1499
},
"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": "v0.56.1",
"kind": "patch",
"published_at": "2026-07-27T16:37:57Z"
},
{
"tag": "v0.56.0",
"kind": "minor",
"published_at": "2026-07-20T08:36:24Z"
},
{
"tag": "v0.55.4",
"kind": "patch",
"published_at": "2026-06-11T17:10:22Z"
},
{
"tag": "v0.55.3",
"kind": "patch",
"published_at": "2026-06-07T10:36:23Z"
},
{
"tag": "v0.55.2",
"kind": "patch",
"published_at": "2026-05-16T13:01:15Z"
},
{
"tag": "v0.55.1",
"kind": "patch",
"published_at": "2026-05-13T22:56:04Z"
},
{
"tag": "v0.55.0",
"kind": "minor",
"published_at": "2026-05-09T13:41:46Z"
},
{
"tag": "v0.54.3",
"kind": "patch",
"published_at": "2026-03-27T18:19:26Z"
},
{
"tag": "v0.54.2",
"kind": "patch",
"published_at": "2026-03-10T13:29:03Z"
},
{
"tag": "v0.54.1",
"kind": "patch",
"published_at": "2026-03-03T21:07:25Z"
},
{
"tag": "v0.54.0",
"kind": "minor",
"published_at": "2026-02-27T18:23:50Z"
},
{
"tag": "v0.53.3",
"kind": "patch",
"published_at": "2026-01-24T20:04:27Z"
},
{
"tag": "v0.53.2",
"kind": "patch",
"published_at": "2026-01-23T13:18:32Z"
},
{
"tag": "v0.53.1",
"kind": "patch",
"published_at": "2026-01-02T21:24:12Z"
},
{
"tag": "v0.53.0",
"kind": "minor",
"published_at": "2025-12-29T15:27:56Z"
},
{
"tag": "v0.52.2",
"kind": "patch",
"published_at": "2025-12-03T23:01:50Z"
},
{
"tag": "v0.52.1",
"kind": "patch",
"published_at": "2025-11-09T23:33:15Z"
},
{
"tag": "v0.52.0",
"kind": "minor",
"published_at": "2025-11-07T16:48:29Z"
},
{
"tag": "v0.51.1",
"kind": "patch",
"published_at": "2025-09-22T20:55:57Z"
},
{
"tag": "v0.51.0",
"kind": "minor",
"published_at": "2025-09-10T12:53:30Z"
},
{
"tag": "v0.50.1",
"kind": "patch",
"published_at": "2025-07-19T21:37:10Z"
},
{
"tag": "v0.50.0",
"kind": "minor",
"published_at": "2025-07-16T09:34:22Z"
},
{
"tag": "v0.49.0",
"kind": "minor",
"published_at": "2025-05-08T20:28:38Z"
},
{
"tag": "v0.48.1",
"kind": "patch",
"published_at": "2025-03-28T16:19:37Z"
},
{
"tag": "v0.48.0",
"kind": "minor",
"published_at": "2025-03-23T15:40:22Z"
},
{
"tag": "v0.47.2",
"kind": "patch",
"published_at": "2025-02-02T00:51:21Z"
},
{
"tag": "v0.47.1",
"kind": "patch",
"published_at": "2025-01-29T23:23:29Z"
},
{
"tag": "v0.47.0",
"kind": "minor",
"published_at": "2025-01-27T12:11:02Z"
},
{
"tag": "v0.46.2",
"kind": "patch",
"published_at": "2024-12-19T19:43:12Z"
},
{
"tag": "v0.46.1",
"kind": "patch",
"published_at": "2024-12-17T16:33:05Z"
},
{
"tag": "v0.46.0",
"kind": "minor",
"published_at": "2024-12-16T23:59:57Z"
},
{
"tag": "v0.45.2",
"kind": "patch",
"published_at": "2024-11-19T22:00:59Z"
},
{
"tag": "v0.45.1",
"kind": "patch",
"published_at": "2024-11-18T14:39:51Z"
},
{
"tag": "v0.45.0",
"kind": "minor",
"published_at": "2024-11-09T14:55:53Z"
},
{
"tag": "v0.44.1",
"kind": "patch",
"published_at": "2024-10-09T13:03:04Z"
},
{
"tag": "v0.44.0",
"kind": "minor",
"published_at": "2024-10-06T11:22:36Z"
},
{
"tag": "v0.43.0",
"kind": "minor",
"published_at": "2024-09-08T17:00:46Z"
},
{
"tag": "v0.42.0",
"kind": "minor",
"published_at": "2024-08-07T19:36:05Z"
},
{
"tag": "v0.41.2",
"kind": "patch",
"published_at": "2024-06-25T12:16:09Z"
},
{
"tag": "v0.41.1",
"kind": "patch",
"published_at": "2024-06-13T10:03:59Z"
},
{
"tag": "v0.41.0",
"kind": "minor",
"published_at": "2024-06-10T14:33:46Z"
},
{
"tag": "v0.40.0",
"kind": "minor",
"published_at": "2024-05-04T15:56:31Z"
},
{
"tag": "v0.39.1",
"kind": "patch",
"published_at": "2024-04-16T16:07:52Z"
},
{
"tag": "v0.39.0",
"kind": "minor",
"published_at": "2024-04-14T18:57:34Z"
},
{
"tag": "v0.38.1",
"kind": "patch",
"published_at": "2024-04-06T14:31:47Z"
},
{
"tag": "v0.38.0",
"kind": "minor",
"published_at": "2024-04-01T18:41:14Z"
},
{
"tag": "v0.37.1",
"kind": "patch",
"published_at": "2024-03-16T14:57:33Z"
},
{
"tag": "v0.37.0",
"kind": "minor",
"published_at": "2024-03-16T00:13:23Z"
},
{
"tag": "v0.36.0",
"kind": "minor",
"published_at": "2024-02-28T00:45:11Z"
},
{
"tag": "v0.35.0",
"kind": "minor",
"published_at": "2024-02-05T02:12:15Z"
},
{
"tag": "v0.34.0",
"kind": "minor",
"published_at": "2024-01-01T12:13:27Z"
},
{
"tag": "v0.33.1",
"kind": "patch",
"published_at": "2023-12-06T16:53:09Z"
},
{
"tag": "v0.33.0",
"kind": "minor",
"published_at": "2023-12-05T00:58:39Z"
},
{
"tag": "v0.32.3",
"kind": "patch",
"published_at": "2023-11-11T18:17:25Z"
},
{
"tag": "v0.32.2",
"kind": "patch",
"published_at": "2023-11-11T17:27:57Z"
},
{
"tag": "v0.32.1",
"kind": "patch",
"published_at": "2023-11-11T15:33:42Z"
},
{
"tag": "v0.32.0",
"kind": "minor",
"published_at": "2023-11-07T21:16:10Z"
},
{
"tag": "v0.31.0",
"kind": "minor",
"published_at": "2023-10-16T16:31:53Z"
},
{
"tag": "v0.30.0",
"kind": "minor",
"published_at": "2023-09-22T23:17:57Z"
},
{
"tag": "v0.29.1",
"kind": "patch",
"published_at": "2023-09-03T11:42:17Z"
},
{
"tag": "v0.29.0",
"kind": "minor",
"published_at": "2023-08-28T21:42:18Z"
},
{
"tag": "v0.28.0",
"kind": "minor",
"published_at": "2023-08-03T16:08:24Z"
},
{
"tag": "v0.27.2",
"kind": "patch",
"published_at": "2023-07-19T11:42:22Z"
},
{
"tag": "v0.27.1",
"kind": "patch",
"published_at": "2023-07-18T19:52:06Z"
},
{
"tag": "v0.27.0",
"kind": "minor",
"published_at": "2023-07-12T11:30:21Z"
},
{
"tag": "v0.26.0",
"kind": "minor",
"published_at": "2023-05-29T17:28:20Z"
},
{
"tag": "v0.25.0",
"kind": "minor",
"published_at": "2023-05-03T16:28:20Z"
},
{
"tag": "v0.24.1",
"kind": "patch",
"published_at": "2023-04-09T17:11:13Z"
},
{
"tag": "v0.24.0",
"kind": "minor",
"published_at": "2023-04-08T12:20:54Z"
},
{
"tag": "v0.23.0beta",
"kind": "other",
"published_at": "2023-03-14T22:12:58Z"
},
{
"tag": "v0.22.0beta",
"kind": "other",
"published_at": "2023-02-20T23:25:20Z"
},
{
"tag": "v0.21.0beta",
"kind": "other",
"published_at": "2023-01-28T18:38:53Z"
},
{
"tag": "v0.20.1beta",
"kind": "other",
"published_at": "2023-01-07T12:55:41Z"
},
{
"tag": "v0.20.0beta",
"kind": "other",
"published_at": "2023-01-05T22:36:01Z"
},
{
"tag": "v0.19.2beta",
"kind": "other",
"published_at": "2022-12-12T15:05:06Z"
},
{
"tag": "v0.19.1beta",
"kind": "other",
"published_at": "2022-12-07T19:39:29Z"
},
{
"tag": "v0.19.0beta",
"kind": "other",
"published_at": "2022-12-06T13:22:20Z"
},
{
"tag": "v0.18.0beta",
"kind": "other",
"published_at": "2022-11-16T17:45:32Z"
},
{
"tag": "v0.17.0beta",
"kind": "other",
"published_at": "2022-10-30T12:40:46Z"
},
{
"tag": "v0.16.0beta",
"kind": "other",
"published_at": "2022-10-17T16:26:13Z"
},
{
"tag": "v0.15.3beta",
"kind": "other",
"published_at": "2022-10-11T09:57:07Z"
},
{
"tag": "v0.15.2beta",
"kind": "other",
"published_at": "2022-10-09T21:41:08Z"
},
{
"tag": "v0.15.1beta",
"kind": "other",
"published_at": "2022-10-06T21:19:33Z"
},
{
"tag": "v0.15.0beta",
"kind": "other",
"published_at": "2022-10-03T21:49:56Z"
},
{
"tag": "v0.14.0beta",
"kind": "other",
"published_at": "2022-09-21T17:28:12Z"
},
{
"tag": "v0.13.1beta",
"kind": "other",
"published_at": "2022-09-09T13:40:46Z"
},
{
"tag": "v0.13.0beta",
"kind": "other",
"published_at": "2022-09-07T17:11:20Z"
},
{
"tag": "v0.12.1beta",
"kind": "other",
"published_at": "2022-08-30T19:12:58Z"
},
{
"tag": "v0.12.0beta",
"kind": "other",
"published_at": "2022-08-29T10:05:40Z"
},
{
"tag": "v0.11.1beta",
"kind": "other",
"published_at": "2022-08-23T21:24:59Z"
},
{
"tag": "v0.11.0beta",
"kind": "other",
"published_at": "2022-08-22T08:08:09Z"
},
{
"tag": "v0.10.3beta",
"kind": "other",
"published_at": "2022-08-20T18:12:49Z"
},
{
"tag": "v0.10.2beta",
"kind": "other",
"published_at": "2022-08-17T13:15:09Z"
},
{
"tag": "v0.10.1beta",
"kind": "other",
"published_at": "2022-08-11T21:01:16Z"
},
{
"tag": "v0.10.0beta",
"kind": "other",
"published_at": "2022-08-08T19:35:39Z"
},
{
"tag": "v0.9.1beta",
"kind": "other",
"published_at": "2022-08-02T20:28:22Z"
},
{
"tag": "v0.9.0beta",
"kind": "other",
"published_at": "2022-07-31T22:55:41Z"
},
{
"tag": "v0.8.1beta",
"kind": "other",
"published_at": "2022-07-26T20:55:33Z"
},
{
"tag": "v0.8.0beta",
"kind": "other",
"published_at": "2022-07-26T08:16:21Z"
},
{
"tag": "v0.7.1beta",
"kind": "other",
"published_at": "2022-07-12T20:21:28Z"
}
],
"recent_commits": [
{
"oid": "924a35735ebadd67c8a078042060fe7e6ba7e060",
"body": null,
"is_bot": false,
"headline": "ci/vouch: update",
"author_name": "Vaxry",
"author_login": "vaxerski",
"committed_at": "2026-07-28T19:56:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ff24e1755fd308ee70367d63168a12feb05d1fc2",
"body": "clean up the code, separate impl, etc",
"is_bot": false,
"headline": "ipc: refactor socket1 and socket2 (#15624)",
"author_name": "Vaxry",
"author_login": "vaxerski",
"committed_at": "2026-07-28T11:12:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7b4d0b9dc1d6e6edeaf3fb50ca70f73844f2d861",
"body": null,
"is_bot": false,
"headline": "ci/vouch: check out files first",
"author_name": "Vaxry",
"author_login": "vaxerski",
"committed_at": "2026-07-28T10:08:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b5f71b249753ffdf54027a0760930b9f3dfe50a0",
"body": null,
"is_bot": false,
"headline": "ci/vouch: fix template file",
"author_name": "Vaxry",
"author_login": "vaxerski",
"committed_at": "2026-07-27T23:09:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6d9b634de2e75a166b46e0c30c23062f0d8d7070",
"body": "we now have vouch",
"is_bot": false,
"headline": "ci: remove new pr comment",
"author_name": "Vaxry",
"author_login": "vaxerski",
"committed_at": "2026-07-27T23:00:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e7d685d1e7a7ffd4bcae888b785db948d01cfb8a",
"body": null,
"is_bot": false,
"headline": "github: improve templates",
"author_name": "Vaxry",
"author_login": "vaxerski",
"committed_at": "2026-07-27T16:04:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fdd49ae16e205fb5e5178ade21f7cd4c9af06ef2",
"body": null,
"is_bot": false,
"headline": "github: update PR template",
"author_name": "Vaxry",
"author_login": "vaxerski",
"committed_at": "2026-07-27T14:07:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "65e81c116ad92e14c574656c916cef761e4035e5",
"body": null,
"is_bot": false,
"headline": "config/lua: do not nuke package.path (#15622)",
"author_name": "Vaxry",
"author_login": "vaxerski",
"committed_at": "2026-07-27T13:34:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9f777b130e556602ca796fd6b810ac6abe0588e8",
"body": "* re-add groupbar positional dragging\nmodified: src/render/decorations/CHyprGroupBarDecoration.cpp\n\n* format\nmodified: src/render/decorations/CHyprGroupBarDecoration.cpp",
"is_bot": false,
"headline": "groupbar: re-add groupbar positional dragging (#15615)",
"author_name": "MightyPlaza",
"author_login": "MightyPlaza",
"committed_at": "2026-07-27T13:26:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "dd9038373cb6d9dfbebf7da0e9fbf2b8c7fd06b4",
"body": "* opengl: use two VAO's for custom UV\n\ninstead of overwriting the same VAO only to reset it later and\nglBufferData orphaningm etc. just have two VAO's one static, one for\ncustomUV's.\n\n* renderer: dont only rely max rects to get extents\n\ngetting extents for over 8 rects is fine when its local and small, but\nscattered across the monitor it means full size damage for a few\ndifferent tiled windows. so keep rects unless extents are at most 2\ntimes their area.",
"is_bot": false,
"headline": "opengl: get rid of VAO stalls once and for all. (#15603)",
"author_name": "Tom Englund",
"author_login": "gulafaran",
"committed_at": "2026-07-27T11:26:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3de8c49b80d82ce47fda2cd1708ae2d8484adaa7",
"body": null,
"is_bot": false,
"headline": "protocols/pointerwarp: send mouse frame event after motion (#15599)",
"author_name": "Awused",
"author_login": "awused",
"committed_at": "2026-07-27T11:24:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d91db3c707d5a56bdbb01d2eb20aa4228ed87dd4",
"body": null,
"is_bot": false,
"headline": "meta: add generator and update bug templates",
"author_name": "Vaxry",
"author_login": "vaxerski",
"committed_at": "2026-07-27T11:22:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6484f437429fb68542095d1dd980f3e9a7c5c6e1",
"body": "* compositor: merge ready states in the surface queue\n\neach waiter was previously added to wl_event_loop. but the\nwl_event_loop has no order guarantee, so it could mean fence\nA, B, C sits in the queue ready but processes B first then C, then A,\nand now we commit A -> B -> C, change waiters to return\n[…]\nes this. so any client abusing this has only itself to blame.\n\nwhen the content update containing \"set_barrier\" was made active at a latching deadline,\nit will be active for at least one refresh cycle",
"is_bot": false,
"headline": "compositor: merge ready states in the surface queue (#15504)",
"author_name": "Tom Englund",
"author_login": "gulafaran",
"committed_at": "2026-07-27T11:16:56Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "94fe1706eb2e253a7dc4ccfc771cb707178326a8",
"body": "* renderer: ensure only one buffer reference is added\n\nnot only does snapshots, hit endRender and add the buffer to\nm_usedAsyncBuffers but the first real frame does it too, we might have duplicate\nbuffers added pointing to the same IHLBuffer and fences merging with themself.\nso use a std::pair insid\n[…]\nurfaces that has expired. when\nadding fences.\n\n* renderer: move m_usedAsyncBuffers to CMonitor\n\nif showing on two or more monitors, they get a surfacepass per monitor.\nand both needs to add its fence.",
"is_bot": false,
"headline": "renderer: ensure only one buffer reference is added (#15584)",
"author_name": "Tom Englund",
"author_login": "gulafaran",
"committed_at": "2026-07-27T11:15:44Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "8fd90780e8788b227efc710a146b6eef80763c04",
"body": null,
"is_bot": false,
"headline": "ci/vouch: init vouch ci",
"author_name": "Vaxry",
"author_login": "vaxerski",
"committed_at": "2026-07-27T11:09:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d8dc50309c551cfa44fee70744397311b8b7c5fc",
"body": null,
"is_bot": false,
"headline": "github: materialize symlinks",
"author_name": "Vaxry",
"author_login": "vaxerski",
"committed_at": "2026-07-26T16:02:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6e4484f924b4be40af1098ed92807954c2b3d2c1",
"body": null,
"is_bot": false,
"headline": "github: add discussion templates",
"author_name": "Vaxry",
"author_login": "vaxerski",
"committed_at": "2026-07-26T15:58:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7b8454d21efae4190ec3ae7d547d5088a887cc4d",
"body": "* lua: support workspace selectors in `hl.get_workspace()`\n\n* tests: lua `hl.get_workspace()` with selectors\n\n* lua: don't change focus in `hl.get_workspace()`\n\nThat results in an expired workspace being returned, when it should just\nbe `nil` for nonexistent spaces.",
"is_bot": false,
"headline": "config/lua: support workspace selectors in `hl.get_workspace()` (#15555)",
"author_name": "Lucas Ritzdorf",
"author_login": "LRitzdorf",
"committed_at": "2026-07-26T14:17:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f7a711625ea553fe503f41ea8b65c0c6f468ef50",
"body": "* compositor: fix wl_surface.attach proto violations\n\nWhen the bound wl_surface version is 5 or higher, passing any\nnon-zero x or y is a protocol violation, and will result in an\n'invalid_offset' error being raised. The x and y arguments are ignored\nand do not change the pending state. To achieve eq\n[…]\neat: fix protocol violations\n\nuse enum instead of bogus -1, axis_discreete states\n\nThis event is deprecated with wl_pointer version 8 - this event is not\nsent to clients supporting version 8 or later.",
"is_bot": false,
"headline": "protocols: a few protocol error touchups (#15474)",
"author_name": "Tom Englund",
"author_login": "gulafaran",
"committed_at": "2026-07-26T14:07:34Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "453d96e92739a2a0b865cf9166d48ba14ec14b7b",
"body": "m_scale is float, and with fractional scaling and float precision we end\nup with things like 1600 * 1.8f = 2879.99992 , we need to round to not\nloose 1 pixel.",
"is_bot": false,
"headline": "renderer: round m_scale calculations (#15594)",
"author_name": "Tom Englund",
"author_login": "gulafaran",
"committed_at": "2026-07-25T11:53:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "225e018cea9d437e4ada8daaf144cca8f239557c",
"body": null,
"is_bot": false,
"headline": "CI: fix codeownersplus status comment spam (#15597)",
"author_name": "Nikolai Nechaev",
"author_login": "kolayne",
"committed_at": "2026-07-25T11:17:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "566ff8fa7208f7027cbc21b0b208d121ee80eb38",
"body": "* monitor: fix transform logical pixels\n\nseems to have vanished in old refactor, without setting m_size the\nlogical pixels are wrong if you start in non rotation, change config and\napply rotation. m_size still refers to no transformed position.\n\n* monitor: fix added unavailable mirror workspace\n\napplyMonitorRule moved away workspaces and m_activeWorkspace before this with setMirror(),\n but onConnect then reassigned one. if guard it.",
"is_bot": false,
"headline": "monitor: fix rotate and mirror regression (#15587)",
"author_name": "Tom Englund",
"author_login": "gulafaran",
"committed_at": "2026-07-24T12:51:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e820db90cf9a87db53690fd92ec328c2bd2f486d",
"body": "* desktop/rule: add no_xdg_drags window rule\n\n* peenor\n\n* peenor\n\n* pis",
"is_bot": false,
"headline": "desktop/rule: add no_xdg_drags window rule (#15573)",
"author_name": "Vaxry",
"author_login": "vaxerski",
"committed_at": "2026-07-24T09:59:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "62d890eaccc3fcbdc00f85fe27d611d0a8681e7a",
"body": "ref #15527",
"is_bot": false,
"headline": "workspace: add changeworkspaceid to socket2 (#15571)",
"author_name": "Vaxry",
"author_login": "vaxerski",
"committed_at": "2026-07-23T19:20:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e701768d5d3a08907e8087222aeec89d8f83b889",
"body": "…(#15570)\n\nref #15526",
"is_bot": false,
"headline": "protocols/outputMgmt: fix reload not being fired after no-op commits …",
"author_name": "Vaxry",
"author_login": "vaxerski",
"committed_at": "2026-07-23T19:20:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7d2ea270704c265dd100a7898e6186e49c6741a7",
"body": "ref #15488",
"is_bot": false,
"headline": "desktop/windowRule: fix exec rules leaking (#15543)",
"author_name": "Vaxry",
"author_login": "vaxerski",
"committed_at": "2026-07-22T16:35:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a9902ea65f461af868497c4e74fed798ade0b1b0",
"body": null,
"is_bot": false,
"headline": "config: remove legacy config support (#15539)",
"author_name": "Vaxry",
"author_login": "vaxerski",
"committed_at": "2026-07-22T16:35:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4588b2958e0dcd6199aa258b19de9dc944f5947e",
"body": "otherwise various other things might override what the user wants to do",
"is_bot": false,
"headline": "config/lua: use openLate for window.open events (#15540)",
"author_name": "Vaxry",
"author_login": "vaxerski",
"committed_at": "2026-07-22T13:09:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "36cc0e3765361c228d1896832841baa357539b8e",
"body": "The edgeBottom branch read delta.y instead of the axis-swapped\nmodDelta.y, so horizontal resizeactive deltas were ignored for the\nfirst window of a shared band on vertical scrollers.",
"is_bot": false,
"headline": "scrolling: fix in-band resize for the first window of a band (#15532)",
"author_name": "j_wise",
"author_login": "jwiseuk",
"committed_at": "2026-07-22T12:33:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c4605ba7f1b58f2ddf4f031f01814b8e39057d8e",
"body": "yes\n\n---------\n\nCo-authored-by: Vaxry <vaxry@vaxry.net>",
"is_bot": false,
"headline": "example: update hyprland.lua default springs (#15499)",
"author_name": "Mint",
"author_login": "cebem1nt",
"committed_at": "2026-07-22T12:06:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "eb21dae6fbd521c118fd293fca1ff04c46d888f3",
"body": null,
"is_bot": false,
"headline": "makefile: smol Makefile QoL patches (#15491)",
"author_name": "Lucas Ritzdorf",
"author_login": "LRitzdorf",
"committed_at": "2026-07-22T11:54:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ca90dfb0e736d187603d55c234ae34fa8834accf",
"body": null,
"is_bot": false,
"headline": "compositor: add a deprecation notice to .conf configs (#15538)",
"author_name": "Vaxry",
"author_login": "vaxerski",
"committed_at": "2026-07-22T11:29:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1a3606234c59842340ad9a42baeeffe44a9d6cda",
"body": "fixes #15521 and adds a tiny test",
"is_bot": false,
"headline": "compositor: init eventManager earlier (#15522)",
"author_name": "Vaxry",
"author_login": "vaxerski",
"committed_at": "2026-07-21T13:52:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d7188d5821cdf26144f3729ed7cdfe106f437aa7",
"body": "nullptr check eis_client_get_name or return \"<unnamed\"",
"is_bot": false,
"headline": "input: nullptr check eis_client_get_name (#15520)",
"author_name": "Tom Englund",
"author_login": "gulafaran",
"committed_at": "2026-07-21T09:56:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9d3bc3b0ce0dbec643e0ad91f82ed804ddc8cc5c",
"body": "* don't queue unrequested presentation feedbacks\n\n* don't fifo lock unrendered surfaces\n\n* render:not_shown_fifo_lock\n\n* cleaner unneeded feedvacl skip\n\n* keep fifo locks by default\n\n* fix visibility check",
"is_bot": false,
"headline": "fifo: minor feedback fixes (#14765)",
"author_name": "UjinT34",
"author_login": "UjinT34",
"committed_at": "2026-07-21T09:55:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7ef766c9c6613a793587fc7f7d2e7a371babafc6",
"body": "Crashes at startup with hyprutils < 0.14.0.\nRef: https://codeberg.org/hyproverlay/hyproverlay/issues/104",
"is_bot": false,
"headline": "build: update hyprutils dependency to 0.14.0 (#15518)",
"author_name": "Anthony Ruhier",
"author_login": "aruhier",
"committed_at": "2026-07-21T09:54:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "14c093991618da0d12c7ea754c7487837142d684",
"body": "…fiers` enabled (#15477)",
"is_bot": false,
"headline": "input-capture: fix `allow_input_capture` bind flag with `capture_modi…",
"author_name": "littleblack111",
"author_login": "littleblack111",
"committed_at": "2026-07-21T08:42:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d39afc0a56fd4015d0e881f7a28130dcb9761b11",
"body": null,
"is_bot": false,
"headline": "hyprctl: fix json output for binds (#15507)",
"author_name": "Vaxry",
"author_login": "vaxerski",
"committed_at": "2026-07-21T08:37:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2174f26a142d32823ceb8d7039e39eef52dbd050",
"body": null,
"is_bot": false,
"headline": "view: do not render monitor for tearing if it's blocked (#15500)",
"author_name": "Vaxry",
"author_login": "vaxerski",
"committed_at": "2026-07-20T19:04:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5b260faeb9e4563b9e6bd74450a97f39a9d708e9",
"body": "* Revert \"init: revert \"gain real-time through rtkit (#15411)\"\"\n\nThis reverts commit ad317198d90ec1060ec11402695152e5c71a3546.\n\n* init: gain realtime before we enter the loop",
"is_bot": false,
"headline": "init: gain real-time through rtkit (again) (#15465)",
"author_name": "André Silva",
"author_login": "andresilva",
"committed_at": "2026-07-20T10:49:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "36b2e0cfe0c6094dbc47bd42a437431315bb3087",
"body": null,
"is_bot": false,
"headline": "version: bump to 0.56.0",
"author_name": "Vaxry",
"author_login": "vaxerski",
"committed_at": "2026-07-20T07:50:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "42b15274bcde7d9add76dfc70b0bb70c7a870305",
"body": "…#15486)",
"is_bot": false,
"headline": "ci(codeowners-plus): fetch PR head before trying to diff against it (…",
"author_name": "Lucas Ritzdorf",
"author_login": "LRitzdorf",
"committed_at": "2026-07-19T20:35:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "271b0d1eb4fc4899c8607c5e9d4eacbfb0282a62",
"body": null,
"is_bot": false,
"headline": "desktop/focusstate: restore keyboard focus after layer closed (#15419)",
"author_name": "myamusashi",
"author_login": "myamusashi",
"committed_at": "2026-07-19T12:14:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0a5aa45bc151bff51a61a051ba72ea3743a26b0e",
"body": "…estruction (#15471)\n\n* windowstate/layerstate: don't dynamic_cast a view's self-ptr during destruction\n\nThe view.destroy listeners erase_if'd their containers by evaluating\ndynamicPointerCast<IView>(x->m_self). Since the event is emitted from\n~IView, the matching view's derived member m_self is alr\n[…]\ndereferences the dying object.\n\n* iview: remove pointless destroy listener\n\nCWindow/Layers calls removeSafe in their own onDestroy,\nthe best way to avoid buggy code is by simply not doing it at all :)",
"is_bot": false,
"headline": "windowstate/layerstate: don't dynamic_cast a view's self-ptr during d…",
"author_name": "Tom Englund",
"author_login": "gulafaran",
"committed_at": "2026-07-19T10:56:43Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "abc2ecf1d4006e8e33216a0234e1ca2c771edc62",
"body": "earlier codex complaint, if empty fifo commit happend but contained\nfeedbacks it was silently dropped. also at the same time the only time\nwe should discard current feedbacks if there are any is when a new\nbuffer appears.\n\nadd a presentation bit flag, set it in onGetFeedback.",
"is_bot": false,
"headline": "presentation: ensure feedbacks arent silently dropped (#15473)",
"author_name": "Tom Englund",
"author_login": "gulafaran",
"committed_at": "2026-07-19T09:59:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ef903b892747f17dc2a8768675a15134f4ebd95f",
"body": null,
"is_bot": false,
"headline": "[gha] Nix: update inputs",
"author_name": "vaxerski",
"author_login": "vaxerski",
"committed_at": "2026-07-19T08:22:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c3e2d14db44f22e6ce6ad0b2725727bf38487fc5",
"body": null,
"is_bot": false,
"headline": "input-capture: permission type not in lua config (#15481)",
"author_name": "littleblack111",
"author_login": "littleblack111",
"committed_at": "2026-07-19T08:20:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "55ce25bd67ab6f2ae7d60883f6c626be7d2ee12f",
"body": "animationManager.hpp does makeUnique<CAnimatedVariable<VarType>>() , so\nthis has never worked.",
"is_bot": false,
"headline": "animation: dont .lock() a uniqueptr (#15470)",
"author_name": "Tom Englund",
"author_login": "gulafaran",
"committed_at": "2026-07-18T07:24:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "466f6bc53f44c42fd7d8f8c01eeaec112112aefd",
"body": "…te, attempt 2 (#15459)\n\n* Revert \"presentation: revert \"associate feedback with committed surface state (#15243)\"\"\n\nThis reverts commit 4a753eaa03b1fad1b0fccfa78d3756efe85673ef.\n\n* presentation: fix WP locks and discard failed draws\n\nthe reason it stopped working is last change that PR\ndid was movi\n[…]\no .lock() the\nWP, we cant lock a WP that points to a UP.\n\nalso ensure all draws that isnt visible or simply failed creating\ntexture or invalid sizes discard in elementrenderer. and all others\npresent.",
"is_bot": false,
"headline": "protocols/presentation: associate feedback with committed surface sta…",
"author_name": "Tom Englund",
"author_login": "gulafaran",
"committed_at": "2026-07-17T21:54:38Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "116e636fc06479f8b344b1fa8d22d5f70e86d1d5",
"body": "* frame: fix frame scheduling being skipped or one vblank off\n\nin renderer we need to check if we have pending damage, needsFrame can\nbe cleared by commits that was done while pageflip was in flight.\n\nm_renderingActive also needs to be set after actually comitting.\n\nadd a commitTimingTarget that we \n[…]\n \"C++ steady-clock epoch does not exactly match\nCLOCK_MONOTONIC\" doesnt occur. unify the timespec code in both\nmonitor and commit timing protocol. always send the timespec on monitor\npresented signal.",
"is_bot": false,
"headline": "frame: fix frame scheduling being skipped or one vblank off (#15404)",
"author_name": "Tom Englund",
"author_login": "gulafaran",
"committed_at": "2026-07-17T21:53:09Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "26c0b380f4292985ed9811fa20fd6262c89c5100",
"body": "* pointer-warp: fix forgetting enter serial\n\n* fix 4am code",
"is_bot": false,
"headline": "pointer-warp: fix forgetting enter serial (#15462)",
"author_name": "Dregu",
"author_login": "Dregu",
"committed_at": "2026-07-17T21:52:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4afc273db287ad4069cc8ab3edff4a09c31d3410",
"body": "* tokens: expire one shot initial workspace tokens\n\ntokens are only removed once a window maps, so things like\nxdg-desktop-portal got the 1337 month duration token added and always\nfirst launch in the wrong workspace. check PINITIALWSTRACKING and if\nmode 1 just give them a 1 second token. like other\n[…]\nthe default timeout for the initial workspace tracking token.\n\n* tokens: rename timeout to actually timeout\n\nurgl, to much going on at the same time. TIMEOUT certainly makes more\nsense for an timeout.",
"is_bot": false,
"headline": "internal: fix tokens for xdg-desktop-portals (#15433)",
"author_name": "Tom Englund",
"author_login": "gulafaran",
"committed_at": "2026-07-17T15:54:36Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "ad317198d90ec1060ec11402695152e5c71a3546",
"body": "This reverts commit 83cd85b3d57c9da1bcec80a46b7eec3514a344a9.",
"is_bot": false,
"headline": "init: revert \"gain real-time through rtkit (#15411)\"",
"author_name": "Vaxry",
"author_login": "vaxerski",
"committed_at": "2026-07-17T14:41:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3f6055bdbf2b84590d687d388e37b779e2901cd3",
"body": "Co-authored-by: Pppp1116 <ACCOUNT1_NOREPLY>",
"is_bot": false,
"headline": "xwayland: preserve title fallback state (#15449)",
"author_name": "NotPppp1116",
"author_login": null,
"committed_at": "2026-07-17T12:30:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "de530935a05a1c2a8da6408980a9a8644355396d",
"body": null,
"is_bot": false,
"headline": "hyprpm: continue after repository update failures (#15391)",
"author_name": "lin",
"author_login": "gfhdhytghd",
"committed_at": "2026-07-17T12:28:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "46f64d36b8e93f1c24433529998dbae61c4dcdcf",
"body": "* Expose tearingHint in hyprctl clients\n\n* Add tearing_hint field to HL.Window",
"is_bot": false,
"headline": "ipc/lua: rxpose tearingHint for windows (#15431)",
"author_name": "Ciren",
"author_login": "SergeyKasmy",
"committed_at": "2026-07-17T12:28:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "44d16e9bd1272fc271100a35d9165fd51452a26f",
"body": null,
"is_bot": false,
"headline": "config/lua: allow wildcards or absolute paths in require (#15461)",
"author_name": "Vaxry",
"author_login": "vaxerski",
"committed_at": "2026-07-17T12:27:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "164aed999dc1d922f33baa9e2407e79a0dc5a22c",
"body": "* desktoå/view: fix IView virtual inheritance and erase_if ptr\n\nCSubsurface and CSessionLock inherited IView non-virtually while\nCWindow/CLayerSurface/CPopup inherited it virtually.\n\nerase_if compared event.address with the derived complete object\npointer. under virtual inheritance those addresses d\n[…]\np/view: use dynamic casting over static casting\n\nchange to dynamic casting instead of static casting.\n\n* better\n\n* more better\n\nmore better is more.\n\n---------\n\nCo-authored-by: Vaxry <vaxry@vaxry.net>",
"is_bot": false,
"headline": "desktop/view: fix IView virtual inheritance and erase_if ptr (#15421)",
"author_name": "Tom Englund",
"author_login": "gulafaran",
"committed_at": "2026-07-17T12:27:15Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "229bca7b1a0238cd44eb827ae9a23d6798d37ef9",
"body": "Co-authored-by: Pppp1116 <ACCOUNT1_NOREPLY>",
"is_bot": false,
"headline": "build: link Glaze to the compositor core (#15454)",
"author_name": "NotPppp1116",
"author_login": null,
"committed_at": "2026-07-17T09:42:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5663e6d12923f4c0af3bca17a5e45de449bc0c79",
"body": "Co-authored-by: Pppp1116 <ACCOUNT1_NOREPLY>",
"is_bot": false,
"headline": "xwayland: validate ICCCM hint replies (#15450)",
"author_name": "NotPppp1116",
"author_login": null,
"committed_at": "2026-07-17T08:24:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d3e1411d9461ecee39b23f263ae376ed7ae9d94d",
"body": "* screenshare: don recopy a dmabuf while fence is pending\n\ncopy is called for every pending frame on the output commit. and output\ncommit fires on any output commit not just buffer ones. so the fence can\neasily be not signaled yet.\n\n* screenshare: erase done frames too\n\nerase done frames from m_pendingFrames to avoid growing to huge\nnumbers. a finished frame copied/failed/session gone is skipped by the\ncopy but was only erased once it expired. a slow client could let the\nvector grow.",
"is_bot": false,
"headline": "screenshare: minor fence and copy fixes (#15429)",
"author_name": "Tom Englund",
"author_login": "gulafaran",
"committed_at": "2026-07-17T08:22:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4a753eaa03b1fad1b0fccfa78d3756efe85673ef",
"body": "… (#15243)\"\n\nThis reverts commit 0cf705600f450bd8c890ff4a8c856829e1e44a39.",
"is_bot": false,
"headline": "presentation: revert \"associate feedback with committed surface state…",
"author_name": "Vaxry",
"author_login": "vaxerski",
"committed_at": "2026-07-17T08:20:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9d1813ad2941f468ccaeabaa4110107f517b2ba0",
"body": "This reverts commit 031579e722ef23f61541b6c6e3d7b6f479940eea.",
"is_bot": false,
"headline": "dmabuf: revert \"ensure both create and create_immed verify v4 (#15424)\"",
"author_name": "Vaxry",
"author_login": "vaxerski",
"committed_at": "2026-07-16T21:44:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0cf705600f450bd8c890ff4a8c856829e1e44a39",
"body": "* presentation: associate feedback with committed surface state\n\n* presentation: avoid shared ownership for feedback state\n\n* presentation: format feedback ownership declarations\n\n* presentation: release destroyed feedback resources\n\n* presentation: own feedbacks uniquely\n\n* presentation: format feedback ownership update\n\n---------\n\nCo-authored-by: Pppp1116 <ACCOUNT1_NOREPLY>",
"is_bot": false,
"headline": "presentation: associate feedback with committed surface state (#15243)",
"author_name": "NotPppp1116",
"author_login": null,
"committed_at": "2026-07-16T18:13:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "82baeb5e925bf838ac0fa4e1c613125d3854dafa",
"body": "* render: handle explicit sync fallback safely\n\n* render: avoid blocking explicit sync fallback\n\n* ci: retry flaky Hyprland VM tests\n\n* render: avoid blocking explicit sync fallback\n\n---------\n\nCo-authored-by: Pppp1116 <pcaiadoguerreiro@gmail.com>\nCo-authored-by: Pppp1116 <ACCOUNT1_NOREPLY>",
"is_bot": false,
"headline": "render: handle explicit sync fallback safely (#14986)",
"author_name": "NotPppp1116",
"author_login": null,
"committed_at": "2026-07-16T18:12:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "83cd85b3d57c9da1bcec80a46b7eec3514a344a9",
"body": "* init: gain real-time through rtkit\n\n* init: use sdbus to talk with rtkit\n\n* init: simplify\n\n* ci: add sdbus-cpp dependency\n\n* init: add HAS_RTKIT def",
"is_bot": false,
"headline": "init: gain real-time through rtkit (#15411)",
"author_name": "André Silva",
"author_login": "andresilva",
"committed_at": "2026-07-16T18:11:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b5003998788d16c4d121a8a323972f192ee85efb",
"body": "after 254d6bae775258b554e1d3a4a853f3bc244190d9 fadeouts now live in\nfadingOutState() instead of the normal containers, so add SC_FADEOUT and\niterate the new fadingOutState() and block solitary for fadeouts.",
"is_bot": false,
"headline": "renderer: block solitary on fadeouts (#15428)",
"author_name": "Tom Englund",
"author_login": "gulafaran",
"committed_at": "2026-07-16T10:02:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ee773e85e484febf73a416c20d3f0a08b402b1e3",
"body": "glDrawBuffers is per FBO state, but it was only set when mirroring was\nfirst enabled on whatever work buffer happened to be mainFB that frame.\nsince work buffers rotate other FBO's kept default single draw buffer.\n\nmove the draw buffer selection into internalAlloc so it always follows\nthe mirror attachment.",
"is_bot": false,
"headline": "renderer: fix mirror draw buffers on rotating work buffers (#15427)",
"author_name": "Tom Englund",
"author_login": "gulafaran",
"committed_at": "2026-07-16T10:01:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "031579e722ef23f61541b6c6e3d7b6f479940eea",
"body": "invalid_format check was only done in the create handler and missed\ncreate_immed, move it into verify() instead so it catches both.",
"is_bot": false,
"headline": "dmabuf: ensure both create and create_immed verify v4 (#15424)",
"author_name": "Tom Englund",
"author_login": "gulafaran",
"committed_at": "2026-07-16T10:00:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "11c38d62fab54ed00c4f5f8b81d4322bb55cb29e",
"body": "there are a few random crashes reported with master, safeguard two\npotential nullptr derefs. and remove a unusued PNODE.",
"is_bot": false,
"headline": "algo/master: avoid nullptr dereferences (#15422)",
"author_name": "Tom Englund",
"author_login": "gulafaran",
"committed_at": "2026-07-16T09:57:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a97a2850c8b14744dd3d545bbb8bacebf65d1e01",
"body": "verify path returned early without cleanup(), which made it destruct\nto late and call CWorkspaceAlgoMatcher thats already destroyed.",
"is_bot": false,
"headline": "core: fix --verify-config crash (#15418)",
"author_name": "Tom Englund",
"author_login": "gulafaran",
"committed_at": "2026-07-16T09:50:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "26dbbb4f69a7752d702cc9bbc7ce52e0677b239b",
"body": null,
"is_bot": false,
"headline": "renderer: allow blurring of the session lock surface (#15283)",
"author_name": "Roman Gundarin",
"author_login": "NamorNiradnug",
"committed_at": "2026-07-16T09:21:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0b0d7ede2192ae515638890037890bdecca6eba2",
"body": "Co-authored-by: Gerben Meijer <infernix@gmail.com>\nCo-authored-by: Emerson Matos <emegson@live.com>\nCo-authored-by: Mihai Fufezan <mihai@fufexan.net>\nCo-authored-by: Ashley Stonham <reddrop@reddrop.net>\nCo-authored-by: extra-salad <87635414+extra-salad@users.noreply.github.com>",
"is_bot": false,
"headline": "input-capture: impl protocol (#7919)",
"author_name": "Gwilherm Folliot",
"author_login": "3l0w",
"committed_at": "2026-07-15T21:56:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d7fc7240f4efd0abac1c1f23f09b78b30b4e0782",
"body": "when lease is destroyed the destroy listener nullptr deref m_lease, and\nall it uses it for is logging the fd number. capture the fd by value to\navoid crashing.",
"is_bot": false,
"headline": "protocols: avoid crash in lease (#15417)",
"author_name": "Tom Englund",
"author_login": "gulafaran",
"committed_at": "2026-07-15T12:32:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "338bdbb323a29d8c486758329a140e928b03de5c",
"body": "* dwindle: avoid crashing on expired weakptr\n\npTarget can be expired when toggling a tiled window to floating during a\ndrag move that triggers removeTarget -> recalculate -> calculateWorkspace\nbefore the dead node has been cleaned up.\n\n* hyprtester: wait for enabled monitor\n\nwithout waiting for enabled monitor we can race the tests and call focus\non non enabled monitors.",
"is_bot": false,
"headline": "dwindle: avoid crashing on expired weakptr (#15415)",
"author_name": "Tom Englund",
"author_login": "gulafaran",
"committed_at": "2026-07-15T12:31:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0f6f2792e41034e8f0fafeb5b436b288185e96e8",
"body": "* popup: fix crash on destroyed xdg surface resource\n\nthe xdg_surface can be destroyed before the xdg_popup, so CPopup::onDestroy\nhasnt run yet and the popup is still in its parents m_children with m_wlSurface set.\n\nif guard it in popupTreeExtents.\n\n* popup: safe guard bad resource\n\npopups can be fading out while the resource is dead, ifguard it and\nreturn m_lastPos if thats the case.",
"is_bot": false,
"headline": "desktop/popup: fix crash on destroy (#15416)",
"author_name": "Tom Englund",
"author_login": "gulafaran",
"committed_at": "2026-07-15T12:30:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "79bc0ca16e7cca40c247a9200634d150fa8193d1",
"body": "* groups: add groupbar disable_when_only option\n\n* groups: improve `groups` test\n\n`groups_disable_when_only` test fails because it checks windows sizes after\n`disable_when_only` option changed. Changing option currently don't\ntrigger window size update.\n\nSame problem with `groups` test, but it worke\n[…]\ne sizes.\n\n* groups: fix `disable_when_only` and `groups` tests\n\nREFRESH_LAYOUTS is not required 'cause REFRESH_WINDOW_STATES will\ntrigger update of window position too.\n\n* groups: fix groupbar drawing",
"is_bot": false,
"headline": "groups: add groupbar disable_when_only option (#15009)",
"author_name": "feelamee",
"author_login": "feelamee",
"committed_at": "2026-07-14T15:32:22Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "f2eafdf1057ffbd513e1238ddcb5262237825aff",
"body": "Co-authored-by: Pppp1116 <ACCOUNT1_NOREPLY>",
"is_bot": false,
"headline": "hyprctl: handle partial IPC transfers (#15408)",
"author_name": "NotPppp1116",
"author_login": null,
"committed_at": "2026-07-14T15:32:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6984188eb0c004c9c813b0ed8ff3bd2051370726",
"body": "Co-authored-by: Pppp1116 <ACCOUNT1_NOREPLY>",
"is_bot": false,
"headline": "xwayland: guard unknown selection events (#15409)",
"author_name": "NotPppp1116",
"author_login": null,
"committed_at": "2026-07-14T13:23:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e0d9283897724403ea8574b3ed419d2678a39231",
"body": null,
"is_bot": false,
"headline": "config: fix cycle_next using nonexist layoutmsg for prev (#15396)",
"author_name": "Dregu",
"author_login": "Dregu",
"committed_at": "2026-07-14T10:45:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "30588bec768b2c6e8895b4b36a89e663a6151656",
"body": "use the current row and the SHM stride when calculating copy offsets,\nthe previous code calculated the copy offset incorrectly by always using\nthe first damaged row and by assuming each row as only as wide as the\ndamaged region.",
"is_bot": false,
"headline": "protocols: fix SHM cursor partial damage copy (#15399)",
"author_name": "Tom Englund",
"author_login": "gulafaran",
"committed_at": "2026-07-14T09:46:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d371ad27606d021f2337be4642015e78c458350c",
"body": "* config: fix initial workspace tracking\n\nprevious refactor over to Executor missed m_isLaunchingExecOnce meaning\nany hl.exec_cmd(hyprlauncher) got the token of 1337 month duration at\nthe first launched workspace, so the initial launch of things gets that\ntoken and opens on the wrong workspace.\n\nadd\n[…]\nedle counting also missed the final partial chunk if the read\nfailed to read 512 bytes but still read a chunk.\n\n* hyprtester: fix monitor rule\n\nID's are unreliable. try to parse it directly from name.",
"is_bot": false,
"headline": "config: fix initial workspace tracking (#15395)",
"author_name": "Tom Englund",
"author_login": "gulafaran",
"committed_at": "2026-07-14T09:45:55Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "e7996dc9bd790e8d66dac66b4a46f24969224d5e",
"body": null,
"is_bot": false,
"headline": "desktop: remove using directives, move to geometric functions (#15402)",
"author_name": "Vaxry",
"author_login": "vaxerski",
"committed_at": "2026-07-14T09:35:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ed11458bbcd15a7f223c002a7a418cd3218b0ee7",
"body": null,
"is_bot": false,
"headline": "README: update showcase",
"author_name": "Vaxry",
"author_login": "vaxerski",
"committed_at": "2026-07-14T09:35:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b348ff780c24a7ed7e1df61a85317054037469ec",
"body": "…988)\"\n\nThis reverts commit 5033ab954baa17d3cd41fba43a40f2de2e586a80.\n\nBad cursor on transformed.",
"is_bot": false,
"headline": "cursor: revert \"transform hardware cursors within content bounds (#14…",
"author_name": "Vaxry",
"author_login": "vaxerski",
"committed_at": "2026-07-14T09:10:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "30983d6ff0ed5fc614daf3178ad311aa45f8d9e1",
"body": null,
"is_bot": false,
"headline": "splashes: add 5th comp winner's splash",
"author_name": "Vaxry",
"author_login": "vaxerski",
"committed_at": "2026-07-14T06:46:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "402eceea96ae77869d9ce9eb6c4dc088065936ab",
"body": "* Fix protocol null dereference paths\n\n* protocol: align image description state assignment\n\n---------\n\nCo-authored-by: Pppp1116 <ACCOUNT1_NOREPLY>",
"is_bot": false,
"headline": "protocols: fix protocol null dereference paths (#15275)",
"author_name": "NotPppp1116",
"author_login": null,
"committed_at": "2026-07-13T18:47:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5033ab954baa17d3cd41fba43a40f2de2e586a80",
"body": "* cursor: transform hardware cursors within content bounds\n\n* cursor: transform hotspot as a pixel\n\n---------\n\nCo-authored-by: Pppp1116 <pcaiadoguerreiro@gmail.com>\nCo-authored-by: Pppp1116 <ACCOUNT1_NOREPLY>",
"is_bot": false,
"headline": "cursor: transform hardware cursors within content bounds (#14988)",
"author_name": "NotPppp1116",
"author_login": null,
"committed_at": "2026-07-13T18:44:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2c3ed5f66e1c6cda7d12e6ded8f25eff7acecd5c",
"body": "Co-authored-by: Pppp1116 <ACCOUNT1_NOREPLY>",
"is_bot": false,
"headline": "window: cache process environment lookups (#15264)",
"author_name": "NotPppp1116",
"author_login": null,
"committed_at": "2026-07-13T18:43:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1eebdac3566a662b7a694177b935a79a9d7f70d0",
"body": "fixes https://github.com/hyprwm/Hyprland/issues/15020",
"is_bot": false,
"headline": "config/lua: add lua-driven custom live gestures (#15393)",
"author_name": "Vaxry",
"author_login": "vaxerski",
"committed_at": "2026-07-13T18:42:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2633ecff398ef311a85e3ac8aee58fdb8c5e6751",
"body": "this skips proper recalcs for windows on the old space. No other algo does this.\n\nfixes #13456",
"is_bot": false,
"headline": "algo/dwindle: do not remove node before assigning (#15373)",
"author_name": "Vaxry",
"author_login": "vaxerski",
"committed_at": "2026-07-13T16:37:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "50d301d34a82e2edf7458eea8ab741c927690152",
"body": "…bal replace (#15351)\n\n* core/output: don't destroy bound wl_output resources on same-name global replace\n\nWhen a monitor is unplugged and replugged quickly (e.g. an external screen\nlosing power for a second), the new monitor's wl_output global replaces the\nold defunct one in PROTO::outputs by name.\n[…]\nmment\n\nReword per review: these globals are gone-but-not-yet-unref'd-by-all-clients,\nnot necessarily replaced.\n\n* clang-format\n\n* clang-format\n\n---------\n\nCo-authored-by: Titosy <dev.titosy@gmail.com>",
"is_bot": false,
"headline": "core/output: don't destroy bound wl_output resources on same-name glo…",
"author_name": "Titosy Razafimbelo",
"author_login": "titosymanankasina",
"committed_at": "2026-07-13T13:02:21Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "2b6f6cb831b1400e0dc33294888174553b95294a",
"body": "…yout (#15382)\n\n* update window input-ability and update work area before setting window pos to ensure the correct window size is obtained.\n\n* Test",
"is_bot": false,
"headline": "layout/monocle: fix `w[tv1]` workspace rule not working on monocle la…",
"author_name": "erStarr",
"author_login": "erstarr",
"committed_at": "2026-07-13T07:27:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7d90874c9676fa02647c282c580743c7785564c6",
"body": "Problem: The blurprepare intermediate used an 80-nit range but HDR\npixels can be much brighter. A 200-nit pixel was encoded as:\n\n (200/80)^(1/2.2) = 1.52\n\nwhich would get clamped to 1 causing clipping.\n\nSolution: Use the workbuffer's configured max luminance (1000, for\nexample) for the range so t\n[…]\nare/blurFinish.\n\nNote: KDE somewhat similarly uses gamma 2.2 encoding where 1.0 == max\nluminance of monitor:\nhttps://zamundaaa.github.io/wayland/2024/11/02/hdr-and-color-management-in-kwin-part-4.html",
"is_bot": false,
"headline": "renderer/cm: fix blur clipping with HDR (#15371)",
"author_name": "Ryan Holt",
"author_login": "ryanpholt",
"committed_at": "2026-07-13T07:21:32Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "8684c154ae86b55fc8bd6451190a3dbd5565cf67",
"body": "paths like enableMirror internalAllocs a new framebuffer in begin()\nwhich means the previously bound currenfFB is reset to 0. if guard it at\nend of alloc and restore the previously fb instead of setting it to 0.\n\nthere is also codepaths where manually allocated CFLFramebuffers are\ncreated renderbuff\n[…]\nable to read it. bind GL_FRAMEBUFFER in those cases in bind()\n\nand same on release() can be called mid frame on temp buffers deleting\nthe framebuffer and binding 0 while we still want currentFB bound.",
"is_bot": false,
"headline": "glframebuffer: fix spurious incomplete framebuffer errors (#15380)",
"author_name": "Tom Englund",
"author_login": "gulafaran",
"committed_at": "2026-07-13T07:20:03Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "f4b9c1ab240f5c5d2b5a2e659113361e476772a5",
"body": "* fix test passing only inconsistently - use acceptsInput to test since `visible` and `hidden` are unreliable\n\n* comment fix\n\n* remove residual sync calls",
"is_bot": false,
"headline": "Tests/scroll: fix window hiding test passing inconsistently (#15384)",
"author_name": "erStarr",
"author_login": "erstarr",
"committed_at": "2026-07-12T18:30:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c4cfe0e830dbac770fc58acceab357799cb615ba",
"body": "if previous display manager set a hwcursor and never clears it, we wont\nclear it until we actually set a new hw cursor ourself, so add\ninitialPlaneCleared and clear it once on start. the !CROSSES if case\nonly clears it if we have actually set it ourself.\n\nif software cursor has been rendered and it now doesnt intersect with\nthe monitor, clear it out once, guarded by swRendered.",
"is_bot": false,
"headline": "pointer: fix two stale cursor images clearings (#15376)",
"author_name": "Tom Englund",
"author_login": "gulafaran",
"committed_at": "2026-07-12T15:49:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f25f2ff04863adff016625d3d6a68885b3da1d83",
"body": "this perm is sensitive, but for this one it should be ok",
"is_bot": false,
"headline": "ci: fix codeownersplus (#15383)",
"author_name": "Vaxry",
"author_login": "vaxerski",
"committed_at": "2026-07-12T15:40:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e3ece119921261a17959e17ff38e493c9a37ad7a",
"body": "…nitors (#15374)",
"is_bot": false,
"headline": "config/actions: unfocus last window on changeWorkspace when moving mo…",
"author_name": "Vaxry",
"author_login": "vaxerski",
"committed_at": "2026-07-12T15:20:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ef18043b5ce913256c336c063147e120afd2abb1",
"body": "State::monitorState() is destroyed before the renderer during compositor\nexit and render pass elements can keep the layersurface alive until the\nrenderer dies. causing a nullptr deref in ~CLayerSurface() , if guard it\nand return early.",
"is_bot": false,
"headline": "layersurface: dont nullptr deref on compositor cleanup (#15379)",
"author_name": "Tom Englund",
"author_login": "gulafaran",
"committed_at": "2026-07-12T14:24:01Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 100,
"commits_last_year": 1341,
"latest_release_at": "2026-07-27T16:37:57Z",
"latest_release_tag": "v0.56.1",
"releases_from_tags": false,
"days_since_last_push": 0,
"active_weeks_last_year": 52,
"days_since_latest_release": 1,
"mean_days_between_releases": 16.2
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": false,
"health_percentage": 75,
"has_issue_template": false,
"has_code_of_conduct": true,
"has_pull_request_template": true
},
"ecosystem": {
"packages": []
},
"popularity": {
"forks": 1900,
"stars": 37616,
"watchers": 138,
"fork_history": {
"days": [
{
"date": "2025-02-09",
"count": 2
},
{
"date": "2025-02-12",
"count": 3
},
{
"date": "2025-02-14",
"count": 1
},
{
"date": "2025-02-15",
"count": 1
},
{
"date": "2025-02-16",
"count": 3
},
{
"date": "2025-02-17",
"count": 4
},
{
"date": "2025-02-18",
"count": 14
},
{
"date": "2025-02-22",
"count": 1
},
{
"date": "2025-02-23",
"count": 1
},
{
"date": "2025-02-25",
"count": 1
},
{
"date": "2025-02-26",
"count": 2
},
{
"date": "2025-02-27",
"count": 1
},
{
"date": "2025-03-01",
"count": 1
},
{
"date": "2025-03-05",
"count": 3
},
{
"date": "2025-03-06",
"count": 2
},
{
"date": "2025-03-10",
"count": 1
},
{
"date": "2025-03-12",
"count": 1
},
{
"date": "2025-03-13",
"count": 1
},
{
"date": "2025-03-15",
"count": 1
},
{
"date": "2025-03-16",
"count": 2
},
{
"date": "2025-03-18",
"count": 1
},
{
"date": "2025-03-20",
"count": 2
},
{
"date": "2025-03-21",
"count": 1
},
{
"date": "2025-03-23",
"count": 3
},
{
"date": "2025-03-25",
"count": 3
},
{
"date": "2025-03-26",
"count": 1
},
{
"date": "2025-03-27",
"count": 2
},
{
"date": "2025-03-29",
"count": 1
},
{
"date": "2025-03-30",
"count": 1
},
{
"date": "2025-03-31",
"count": 1
},
{
"date": "2025-04-01",
"count": 1
},
{
"date": "2025-04-03",
"count": 2
},
{
"date": "2025-04-06",
"count": 1
},
{
"date": "2025-04-07",
"count": 2
},
{
"date": "2025-04-08",
"count": 1
},
{
"date": "2025-04-09",
"count": 1
},
{
"date": "2025-04-10",
"count": 2
},
{
"date": "2025-04-11",
"count": 1
},
{
"date": "2025-04-12",
"count": 1
},
{
"date": "2025-04-15",
"count": 1
},
{
"date": "2025-04-16",
"count": 2
},
{
"date": "2025-04-18",
"count": 1
},
{
"date": "2025-04-19",
"count": 1
},
{
"date": "2025-04-20",
"count": 1
},
{
"date": "2025-04-23",
"count": 1
},
{
"date": "2025-04-24",
"count": 1
},
{
"date": "2025-04-27",
"count": 3
},
{
"date": "2025-04-28",
"count": 1
},
{
"date": "2025-04-29",
"count": 2
},
{
"date": "2025-05-01",
"count": 2
},
{
"date": "2025-05-02",
"count": 1
},
{
"date": "2025-05-03",
"count": 3
},
{
"date": "2025-05-04",
"count": 1
},
{
"date": "2025-05-05",
"count": 1
},
{
"date": "2025-05-06",
"count": 1
},
{
"date": "2025-05-11",
"count": 1
},
{
"date": "2025-05-12",
"count": 1
},
{
"date": "2025-05-13",
"count": 2
},
{
"date": "2025-05-14",
"count": 1
},
{
"date": "2025-05-18",
"count": 1
},
{
"date": "2025-05-19",
"count": 2
},
{
"date": "2025-05-21",
"count": 1
},
{
"date": "2025-05-22",
"count": 1
},
{
"date": "2025-05-24",
"count": 2
},
{
"date": "2025-05-25",
"count": 1
},
{
"date": "2025-05-27",
"count": 2
},
{
"date": "2025-05-28",
"count": 1
},
{
"date": "2025-05-29",
"count": 1
},
{
"date": "2025-05-30",
"count": 2
},
{
"date": "2025-05-31",
"count": 1
},
{
"date": "2025-06-01",
"count": 1
},
{
"date": "2025-06-02",
"count": 1
},
{
"date": "2025-06-03",
"count": 1
},
{
"date": "2025-06-04",
"count": 1
},
{
"date": "2025-06-05",
"count": 4
},
{
"date": "2025-06-06",
"count": 1
},
{
"date": "2025-06-07",
"count": 2
},
{
"date": "2025-06-09",
"count": 1
},
{
"date": "2025-06-10",
"count": 2
},
{
"date": "2025-06-11",
"count": 2
},
{
"date": "2025-06-12",
"count": 1
},
{
"date": "2025-06-17",
"count": 1
},
{
"date": "2025-06-18",
"count": 3
},
{
"date": "2025-06-20",
"count": 1
},
{
"date": "2025-06-21",
"count": 2
},
{
"date": "2025-06-22",
"count": 1
},
{
"date": "2025-06-23",
"count": 1
},
{
"date": "2025-06-24",
"count": 3
},
{
"date": "2025-06-25",
"count": 1
},
{
"date": "2025-06-26",
"count": 5
},
{
"date": "2025-06-27",
"count": 2
},
{
"date": "2025-06-30",
"count": 2
},
{
"date": "2025-07-02",
"count": 1
},
{
"date": "2025-07-03",
"count": 2
},
{
"date": "2025-07-05",
"count": 1
},
{
"date": "2025-07-06",
"count": 1
},
{
"date": "2025-07-07",
"count": 2
},
{
"date": "2025-07-08",
"count": 2
},
{
"date": "2025-07-10",
"count": 1
},
{
"date": "2025-07-12",
"count": 1
},
{
"date": "2025-07-13",
"count": 2
},
{
"date": "2025-07-15",
"count": 1
},
{
"date": "2025-07-17",
"count": 4
},
{
"date": "2025-07-18",
"count": 6
},
{
"date": "2025-07-19",
"count": 19
},
{
"date": "2025-07-20",
"count": 15
},
{
"date": "2025-07-21",
"count": 14
},
{
"date": "2025-07-22",
"count": 4
},
{
"date": "2025-07-23",
"count": 5
},
{
"date": "2025-07-24",
"count": 6
},
{
"date": "2025-07-25",
"count": 3
},
{
"date": "2025-07-27",
"count": 1
},
{
"date": "2025-07-28",
"count": 3
},
{
"date": "2025-07-29",
"count": 4
},
{
"date": "2025-07-30",
"count": 1
},
{
"date": "2025-07-31",
"count": 4
},
{
"date": "2025-08-01",
"count": 1
},
{
"date": "2025-08-02",
"count": 2
},
{
"date": "2025-08-03",
"count": 2
},
{
"date": "2025-08-04",
"count": 2
},
{
"date": "2025-08-05",
"count": 1
},
{
"date": "2025-08-06",
"count": 4
},
{
"date": "2025-08-07",
"count": 3
},
{
"date": "2025-08-08",
"count": 2
},
{
"date": "2025-08-09",
"count": 2
},
{
"date": "2025-08-10",
"count": 1
},
{
"date": "2025-08-11",
"count": 4
},
{
"date": "2025-08-12",
"count": 1
},
{
"date": "2025-08-13",
"count": 5
},
{
"date": "2025-08-14",
"count": 2
},
{
"date": "2025-08-15",
"count": 1
},
{
"date": "2025-08-17",
"count": 4
},
{
"date": "2025-08-18",
"count": 5
},
{
"date": "2025-08-19",
"count": 4
},
{
"date": "2025-08-20",
"count": 1
},
{
"date": "2025-08-21",
"count": 1
},
{
"date": "2025-08-22",
"count": 5
},
{
"date": "2025-08-23",
"count": 8
},
{
"date": "2025-08-24",
"count": 3
},
{
"date": "2025-08-25",
"count": 4
},
{
"date": "2025-08-26",
"count": 3
},
{
"date": "2025-08-27",
"count": 4
},
{
"date": "2025-08-28",
"count": 2
},
{
"date": "2025-08-29",
"count": 4
},
{
"date": "2025-08-30",
"count": 2
},
{
"date": "2025-09-01",
"count": 2
},
{
"date": "2025-09-02",
"count": 1
},
{
"date": "2025-09-05",
"count": 2
},
{
"date": "2025-09-06",
"count": 2
},
{
"date": "2025-09-08",
"count": 3
},
{
"date": "2025-09-09",
"count": 2
},
{
"date": "2025-09-10",
"count": 1
},
{
"date": "2025-09-11",
"count": 3
},
{
"date": "2025-09-12",
"count": 2
},
{
"date": "2025-09-15",
"count": 2
},
{
"date": "2025-09-16",
"count": 1
},
{
"date": "2025-09-17",
"count": 1
},
{
"date": "2025-09-18",
"count": 3
},
{
"date": "2025-09-19",
"count": 2
},
{
"date": "2025-09-22",
"count": 3
},
{
"date": "2025-09-24",
"count": 3
},
{
"date": "2025-09-25",
"count": 3
},
{
"date": "2025-09-26",
"count": 2
},
{
"date": "2025-09-27",
"count": 3
},
{
"date": "2025-09-28",
"count": 1
},
{
"date": "2025-09-29",
"count": 2
},
{
"date": "2025-10-01",
"count": 1
},
{
"date": "2025-10-02",
"count": 1
},
{
"date": "2025-10-04",
"count": 1
},
{
"date": "2025-10-05",
"count": 1
},
{
"date": "2025-10-06",
"count": 2
},
{
"date": "2025-10-08",
"count": 3
},
{
"date": "2025-10-09",
"count": 3
},
{
"date": "2025-10-11",
"count": 3
},
{
"date": "2025-10-12",
"count": 1
},
{
"date": "2025-10-14",
"count": 2
},
{
"date": "2025-10-16",
"count": 1
},
{
"date": "2025-10-17",
"count": 1
},
{
"date": "2025-10-19",
"count": 1
},
{
"date": "2025-10-21",
"count": 1
},
{
"date": "2025-10-22",
"count": 1
},
{
"date": "2025-10-25",
"count": 1
},
{
"date": "2025-10-30",
"count": 2
},
{
"date": "2025-11-01",
"count": 1
},
{
"date": "2025-11-02",
"count": 1
},
{
"date": "2025-11-03",
"count": 1
},
{
"date": "2025-11-04",
"count": 1
},
{
"date": "2025-11-05",
"count": 1
},
{
"date": "2025-11-06",
"count": 1
},
{
"date": "2025-11-08",
"count": 2
},
{
"date": "2025-11-09",
"count": 2
},
{
"date": "2025-11-10",
"count": 1
},
{
"date": "2025-11-11",
"count": 3
},
{
"date": "2025-11-12",
"count": 2
},
{
"date": "2025-11-13",
"count": 2
},
{
"date": "2025-11-14",
"count": 1
},
{
"date": "2025-11-15",
"count": 4
},
{
"date": "2025-11-16",
"count": 19
},
{
"date": "2025-11-17",
"count": 8
},
{
"date": "2025-11-18",
"count": 4
},
{
"date": "2025-11-19",
"count": 1
},
{
"date": "2025-11-22",
"count": 2
},
{
"date": "2025-11-23",
"count": 2
},
{
"date": "2025-11-24",
"count": 4
},
{
"date": "2025-11-25",
"count": 2
},
{
"date": "2025-11-26",
"count": 3
},
{
"date": "2025-11-28",
"count": 3
},
{
"date": "2025-11-29",
"count": 2
},
{
"date": "2025-11-30",
"count": 1
},
{
"date": "2025-12-01",
"count": 1
},
{
"date": "2025-12-03",
"count": 1
},
{
"date": "2025-12-05",
"count": 6
},
{
"date": "2025-12-06",
"count": 2
},
{
"date": "2025-12-07",
"count": 2
},
{
"date": "2025-12-08",
"count": 2
},
{
"date": "2025-12-09",
"count": 3
},
{
"date": "2025-12-11",
"count": 2
},
{
"date": "2025-12-12",
"count": 2
},
{
"date": "2025-12-13",
"count": 1
},
{
"date": "2025-12-14",
"count": 2
},
{
"date": "2025-12-15",
"count": 3
},
{
"date": "2025-12-16",
"count": 2
},
{
"date": "2025-12-17",
"count": 2
},
{
"date": "2025-12-18",
"count": 1
},
{
"date": "2025-12-19",
"count": 1
},
{
"date": "2025-12-20",
"count": 1
},
{
"date": "2025-12-21",
"count": 3
},
{
"date": "2025-12-22",
"count": 2
},
{
"date": "2025-12-23",
"count": 1
},
{
"date": "2025-12-24",
"count": 2
},
{
"date": "2025-12-25",
"count": 1
},
{
"date": "2025-12-26",
"count": 1
},
{
"date": "2025-12-29",
"count": 2
},
{
"date": "2025-12-31",
"count": 5
},
{
"date": "2026-01-01",
"count": 1
},
{
"date": "2026-01-02",
"count": 2
},
{
"date": "2026-01-03",
"count": 1
},
{
"date": "2026-01-04",
"count": 2
},
{
"date": "2026-01-06",
"count": 2
},
{
"date": "2026-01-08",
"count": 3
},
{
"date": "2026-01-09",
"count": 1
},
{
"date": "2026-01-11",
"count": 3
},
{
"date": "2026-01-12",
"count": 1
},
{
"date": "2026-01-13",
"count": 1
},
{
"date": "2026-01-15",
"count": 3
},
{
"date": "2026-01-16",
"count": 2
},
{
"date": "2026-01-17",
"count": 2
},
{
"date": "2026-01-18",
"count": 1
},
{
"date": "2026-01-19",
"count": 6
},
{
"date": "2026-01-20",
"count": 3
},
{
"date": "2026-01-21",
"count": 2
},
{
"date": "2026-01-23",
"count": 1
},
{
"date": "2026-01-24",
"count": 4
},
{
"date": "2026-01-25",
"count": 4
},
{
"date": "2026-01-27",
"count": 5
},
{
"date": "2026-01-29",
"count": 2
},
{
"date": "2026-01-30",
"count": 4
},
{
"date": "2026-01-31",
"count": 2
},
{
"date": "2026-02-01",
"count": 1
},
{
"date": "2026-02-02",
"count": 1
},
{
"date": "2026-02-03",
"count": 1
},
{
"date": "2026-02-06",
"count": 1
},
{
"date": "2026-02-08",
"count": 2
},
{
"date": "2026-02-09",
"count": 2
},
{
"date": "2026-02-10",
"count": 2
},
{
"date": "2026-02-11",
"count": 5
},
{
"date": "2026-02-12",
"count": 3
},
{
"date": "2026-02-13",
"count": 1
},
{
"date": "2026-02-14",
"count": 1
},
{
"date": "2026-02-15",
"count": 1
},
{
"date": "2026-02-16",
"count": 2
},
{
"date": "2026-02-17",
"count": 1
},
{
"date": "2026-02-19",
"count": 2
},
{
"date": "2026-02-21",
"count": 1
},
{
"date": "2026-02-23",
"count": 3
},
{
"date": "2026-02-24",
"count": 1
},
{
"date": "2026-02-25",
"count": 1
},
{
"date": "2026-02-26",
"count": 2
},
{
"date": "2026-02-27",
"count": 1
},
{
"date": "2026-02-28",
"count": 2
},
{
"date": "2026-03-01",
"count": 3
},
{
"date": "2026-03-02",
"count": 3
},
{
"date": "2026-03-03",
"count": 4
},
{
"date": "2026-03-04",
"count": 5
},
{
"date": "2026-03-05",
"count": 2
},
{
"date": "2026-03-06",
"count": 3
},
{
"date": "2026-03-07",
"count": 1
},
{
"date": "2026-03-08",
"count": 2
},
{
"date": "2026-03-09",
"count": 1
},
{
"date": "2026-03-10",
"count": 2
},
{
"date": "2026-03-11",
"count": 9
},
{
"date": "2026-03-13",
"count": 2
},
{
"date": "2026-03-14",
"count": 2
},
{
"date": "2026-03-15",
"count": 1
},
{
"date": "2026-03-18",
"count": 2
},
{
"date": "2026-03-19",
"count": 4
},
{
"date": "2026-03-21",
"count": 1
},
{
"date": "2026-03-22",
"count": 3
},
{
"date": "2026-03-23",
"count": 2
},
{
"date": "2026-03-24",
"count": 4
},
{
"date": "2026-03-26",
"count": 3
},
{
"date": "2026-03-27",
"count": 5
},
{
"date": "2026-03-28",
"count": 4
},
{
"date": "2026-03-29",
"count": 1
},
{
"date": "2026-03-30",
"count": 2
},
{
"date": "2026-03-31",
"count": 1
},
{
"date": "2026-04-01",
"count": 2
},
{
"date": "2026-04-02",
"count": 3
},
{
"date": "2026-04-03",
"count": 2
},
{
"date": "2026-04-04",
"count": 2
},
{
"date": "2026-04-06",
"count": 3
},
{
"date": "2026-04-07",
"count": 3
},
{
"date": "2026-04-08",
"count": 1
},
{
"date": "2026-04-09",
"count": 2
},
{
"date": "2026-04-11",
"count": 2
},
{
"date": "2026-04-12",
"count": 2
},
{
"date": "2026-04-13",
"count": 2
},
{
"date": "2026-04-14",
"count": 2
},
{
"date": "2026-04-15",
"count": 3
},
{
"date": "2026-04-16",
"count": 1
},
{
"date": "2026-04-17",
"count": 2
},
{
"date": "2026-04-18",
"count": 1
},
{
"date": "2026-04-19",
"count": 2
},
{
"date": "2026-04-20",
"count": 2
},
{
"date": "2026-04-21",
"count": 1
},
{
"date": "2026-04-22",
"count": 3
},
{
"date": "2026-04-24",
"count": 2
},
{
"date": "2026-04-25",
"count": 3
},
{
"date": "2026-04-26",
"count": 1
},
{
"date": "2026-04-27",
"count": 2
},
{
"date": "2026-04-28",
"count": 2
},
{
"date": "2026-04-29",
"count": 1
},
{
"date": "2026-04-30",
"count": 1
},
{
"date": "2026-05-01",
"count": 4
},
{
"date": "2026-05-02",
"count": 4
},
{
"date": "2026-05-04",
"count": 2
},
{
"date": "2026-05-05",
"count": 1
},
{
"date": "2026-05-06",
"count": 2
},
{
"date": "2026-05-07",
"count": 2
},
{
"date": "2026-05-08",
"count": 2
},
{
"date": "2026-05-09",
"count": 2
},
{
"date": "2026-05-10",
"count": 2
},
{
"date": "2026-05-11",
"count": 6
},
{
"date": "2026-05-12",
"count": 4
},
{
"date": "2026-05-13",
"count": 3
},
{
"date": "2026-05-14",
"count": 5
},
{
"date": "2026-05-15",
"count": 3
},
{
"date": "2026-05-16",
"count": 4
},
{
"date": "2026-05-17",
"count": 5
},
{
"date": "2026-05-18",
"count": 8
},
{
"date": "2026-05-19",
"count": 1
},
{
"date": "2026-05-20",
"count": 4
},
{
"date": "2026-05-21",
"count": 1
},
{
"date": "2026-05-22",
"count": 6
},
{
"date": "2026-05-23",
"count": 1
},
{
"date": "2026-05-24",
"count": 5
},
{
"date": "2026-05-25",
"count": 1
},
{
"date": "2026-05-26",
"count": 2
},
{
"date": "2026-05-27",
"count": 2
},
{
"date": "2026-05-28",
"count": 3
},
{
"date": "2026-05-29",
"count": 1
},
{
"date": "2026-05-30",
"count": 3
},
{
"date": "2026-05-31",
"count": 3
},
{
"date": "2026-06-01",
"count": 4
},
{
"date": "2026-06-02",
"count": 1
},
{
"date": "2026-06-03",
"count": 2
},
{
"date": "2026-06-04",
"count": 2
},
{
"date": "2026-06-05",
"count": 3
},
{
"date": "2026-06-06",
"count": 1
},
{
"date": "2026-06-07",
"count": 2
},
{
"date": "2026-06-08",
"count": 3
},
{
"date": "2026-06-09",
"count": 1
},
{
"date": "2026-06-10",
"count": 1
},
{
"date": "2026-06-11",
"count": 2
},
{
"date": "2026-06-12",
"count": 2
},
{
"date": "2026-06-13",
"count": 1
},
{
"date": "2026-06-14",
"count": 1
},
{
"date": "2026-06-15",
"count": 1
},
{
"date": "2026-06-16",
"count": 2
},
{
"date": "2026-06-17",
"count": 4
},
{
"date": "2026-06-18",
"count": 1
},
{
"date": "2026-06-19",
"count": 1
},
{
"date": "2026-06-21",
"count": 3
},
{
"date": "2026-06-22",
"count": 2
},
{
"date": "2026-06-23",
"count": 1
},
{
"date": "2026-06-24",
"count": 2
},
{
"date": "2026-06-25",
"count": 2
},
{
"date": "2026-06-26",
"count": 3
},
{
"date": "2026-06-27",
"count": 2
},
{
"date": "2026-06-28",
"count": 2
},
{
"date": "2026-06-29",
"count": 5
},
{
"date": "2026-06-30",
"count": 3
},
{
"date": "2026-07-02",
"count": 2
},
{
"date": "2026-07-03",
"count": 1
},
{
"date": "2026-07-04",
"count": 3
},
{
"date": "2026-07-05",
"count": 4
},
{
"date": "2026-07-06",
"count": 1
},
{
"date": "2026-07-07",
"count": 2
},
{
"date": "2026-07-08",
"count": 4
},
{
"date": "2026-07-09",
"count": 3
},
{
"date": "2026-07-10",
"count": 2
},
{
"date": "2026-07-11",
"count": 1
},
{
"date": "2026-07-12",
"count": 2
},
{
"date": "2026-07-13",
"count": 2
},
{
"date": "2026-07-15",
"count": 1
},
{
"date": "2026-07-16",
"count": 4
},
{
"date": "2026-07-17",
"count": 1
},
{
"date": "2026-07-19",
"count": 6
},
{
"date": "2026-07-20",
"count": 4
},
{
"date": "2026-07-21",
"count": 6
},
{
"date": "2026-07-22",
"count": 11
},
{
"date": "2026-07-23",
"count": 8
},
{
"date": "2026-07-24",
"count": 5
},
{
"date": "2026-07-25",
"count": 4
},
{
"date": "2026-07-26",
"count": 1
},
{
"date": "2026-07-27",
"count": 6
},
{
"date": "2026-07-28",
"count": 4
},
{
"date": "2026-07-29",
"count": 3
}
],
"complete": false,
"collected": 1000,
"total_forks": 1900
},
"star_history": null,
"open_issues_and_prs": 185
},
"ai_readiness": {
"has_nix": true,
"example_dirs": [
"example"
],
"has_llms_txt": false,
"has_dockerfile": false,
"has_mcp_signal": false,
"bootstrap_files": [
"Makefile",
"hyprtester/plugin/Makefile"
],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [],
"toolchain_manifests": [],
"largest_source_bytes": 194708,
"source_files_sampled": 887,
"oversized_source_files": 13,
"agent_instruction_files": [
"AGENTS.md"
],
"agent_instruction_max_bytes": 3145
},
"dependencies": {
"manifests": [],
"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": [],
"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": 137,
"merged_prs": 2854,
"open_issues": 48,
"closed_ratio": 0.994,
"closed_issues": 7637,
"closed_unmerged_prs": 517
},
"bus_factor": 1,
"bot_contributors": 0,
"top_contributors": [
{
"type": "User",
"login": "vaxerski",
"commits": 4640,
"avatar_url": "https://avatars.githubusercontent.com/u/43317083?v=4"
},
{
"type": "User",
"login": "fufexan",
"commits": 376,
"avatar_url": "https://avatars.githubusercontent.com/u/36706276?v=4"
},
{
"type": "User",
"login": "gulafaran",
"commits": 183,
"avatar_url": "https://avatars.githubusercontent.com/u/773455?v=4"
},
{
"type": "User",
"login": "MightyPlaza",
"commits": 92,
"avatar_url": "https://avatars.githubusercontent.com/u/123664421?v=4"
},
{
"type": "User",
"login": "UjinT34",
"commits": 87,
"avatar_url": "https://avatars.githubusercontent.com/u/41110182?v=4"
},
{
"type": "User",
"login": "thejch",
"commits": 69,
"avatar_url": "https://avatars.githubusercontent.com/u/66577496?v=4"
},
{
"type": "User",
"login": "ikalco",
"commits": 58,
"avatar_url": "https://avatars.githubusercontent.com/u/73481042?v=4"
},
{
"type": "User",
"login": "Dickby",
"commits": 56,
"avatar_url": "https://avatars.githubusercontent.com/u/10100765?v=4"
},
{
"type": "User",
"login": "outfoxxed",
"commits": 48,
"avatar_url": "https://avatars.githubusercontent.com/u/83010835?v=4"
},
{
"type": "User",
"login": "memchr",
"commits": 47,
"avatar_url": "https://avatars.githubusercontent.com/u/118117622?v=4"
}
],
"contributors_sampled": 100,
"top_contributor_share": 0.691
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"ci.yaml",
"close-issues.yml",
"codeownersplus.yml",
"labeler.yml",
"man-update.yaml",
"nix-ci.yml",
"nix-test.yml",
"nix-update-inputs.yml",
"release.yaml",
"security-checks.yml",
"translation-ai-check.yml",
"vouch-prs.yml"
],
"has_docs_dir": true,
"linter_configs": [],
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [],
"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": null,
"reason": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": 10,
"reason": "20 out of 20 merged PRs checked by a CI test -- score normalized to 10",
"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": 4,
"reason": "Found 13/30 approved changesets -- score normalized to 4",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 10,
"reason": "project has 39 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": 0,
"reason": "no update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 0,
"reason": "project is not 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": 10,
"reason": "30 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 10",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
},
{
"name": "Packaging",
"score": null,
"reason": "packaging workflow not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
},
{
"name": "Pinned-Dependencies",
"score": 0,
"reason": "dependency not pinned by hash detected -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 10,
"reason": "SAST tool is run on all commits",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
},
{
"name": "Security-Policy",
"score": 3,
"reason": "security policy file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
},
{
"name": "Signed-Releases",
"score": 0,
"reason": "Project has not signed or included provenance with any releases.",
"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": 10,
"reason": "0 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "924a35735ebadd67c8a078042060fe7e6ba7e060",
"ran_at": "2026-07-29T04:08:31Z",
"aggregate_score": 5.4,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": true,
"has_dependabot_config": false
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": "2026-07-28T22:30:31Z",
"oldest_open_prs": [
{
"number": 6446,
"created_at": "2024-06-12T15:01:50Z",
"last_comment_at": "2025-11-09T13:12:56Z",
"last_comment_author": "moetayuko"
},
{
"number": 9054,
"created_at": "2025-01-13T20:16:35Z",
"last_comment_at": "2025-07-28T07:57:00Z",
"last_comment_author": "Natr1x"
},
{
"number": 9198,
"created_at": "2025-01-27T22:28:25Z",
"last_comment_at": "2025-01-27T22:45:14Z",
"last_comment_author": "user111111111111111111111111111111111"
},
{
"number": 9428,
"created_at": "2025-02-17T17:37:20Z",
"last_comment_at": "2025-05-10T02:49:23Z",
"last_comment_author": "opensourcecheemsburgers"
},
{
"number": 9479,
"created_at": "2025-02-24T10:55:35Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 9939,
"created_at": "2025-04-06T19:28:47Z",
"last_comment_at": "2025-04-07T06:20:05Z",
"last_comment_author": "fufexan"
},
{
"number": 10020,
"created_at": "2025-04-09T23:59:23Z",
"last_comment_at": "2025-08-26T11:50:59Z",
"last_comment_author": "UjinT34"
},
{
"number": 10031,
"created_at": "2025-04-10T15:55:15Z",
"last_comment_at": "2025-04-10T16:31:28Z",
"last_comment_author": "qnxt"
},
{
"number": 10186,
"created_at": "2025-04-27T02:29:31Z",
"last_comment_at": "2025-07-07T16:59:55Z",
"last_comment_author": "faukah"
},
{
"number": 10300,
"created_at": "2025-05-06T08:18:38Z",
"last_comment_at": "2025-07-31T10:41:43Z",
"last_comment_author": "UjinT34"
},
{
"number": 10727,
"created_at": "2025-06-13T03:52:33Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 10733,
"created_at": "2025-06-13T16:20:22Z",
"last_comment_at": "2025-06-17T18:24:04Z",
"last_comment_author": "vaxerski"
},
{
"number": 10740,
"created_at": "2025-06-14T06:56:55Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 10796,
"created_at": "2025-06-20T05:08:48Z",
"last_comment_at": "2025-06-29T18:47:19Z",
"last_comment_author": "vaxerski"
},
{
"number": 10799,
"created_at": "2025-06-20T12:54:02Z",
"last_comment_at": "2025-06-21T11:02:53Z",
"last_comment_author": "carabistouflette"
},
{
"number": 10827,
"created_at": "2025-06-24T04:19:23Z",
"last_comment_at": "2025-07-01T18:56:16Z",
"last_comment_author": "vaxerski"
},
{
"number": 10918,
"created_at": "2025-07-03T16:26:32Z",
"last_comment_at": "2025-07-17T13:46:15Z",
"last_comment_author": "henriquealrs"
},
{
"number": 10973,
"created_at": "2025-07-08T21:39:49Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 10976,
"created_at": "2025-07-09T05:54:42Z",
"last_comment_at": "2025-07-09T08:28:25Z",
"last_comment_author": "vaxerski"
},
{
"number": 11101,
"created_at": "2025-07-19T13:12:23Z",
"last_comment_at": "2025-07-22T07:30:00Z",
"last_comment_author": "fxzzi"
}
],
"last_merged_pr_at": "2026-07-28T11:12:08Z",
"ci_last_conclusion": "SKIPPED",
"oldest_open_issues": [
{
"number": 8424,
"created_at": "2024-11-11T13:10:12Z",
"last_comment_at": "2026-04-26T23:05:14Z",
"last_comment_author": "vaxerski"
},
{
"number": 9064,
"created_at": "2025-01-14T20:07:00Z",
"last_comment_at": "2026-05-29T12:24:34Z",
"last_comment_author": "UjinT34"
},
{
"number": 9854,
"created_at": "2025-04-05T17:49:56Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 9894,
"created_at": "2025-04-06T00:06:00Z",
"last_comment_at": "2025-12-31T21:21:15Z",
"last_comment_author": "TheWoomy27"
},
{
"number": 9931,
"created_at": "2025-04-06T17:31:53Z",
"last_comment_at": "2025-04-07T10:44:23Z",
"last_comment_author": "vaxerski"
},
{
"number": 9969,
"created_at": "2025-04-07T10:28:26Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 9975,
"created_at": "2025-04-07T11:00:46Z",
"last_comment_at": "2025-04-13T02:54:19Z",
"last_comment_author": null
},
{
"number": 9981,
"created_at": "2025-04-07T18:09:30Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 9987,
"created_at": "2025-04-07T19:12:40Z",
"last_comment_at": "2026-04-15T00:53:18Z",
"last_comment_author": "crthpl"
},
{
"number": 10147,
"created_at": "2025-04-22T21:10:44Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 10148,
"created_at": "2025-04-22T21:15:54Z",
"last_comment_at": "2025-06-03T19:44:58Z",
"last_comment_author": "vaxerski"
},
{
"number": 10196,
"created_at": "2025-04-27T23:27:05Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 10352,
"created_at": "2025-05-09T12:50:37Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 10421,
"created_at": "2025-05-15T09:34:02Z",
"last_comment_at": "2025-10-09T20:02:59Z",
"last_comment_author": "alerque"
},
{
"number": 10453,
"created_at": "2025-05-17T13:12:52Z",
"last_comment_at": "2026-04-19T13:23:04Z",
"last_comment_author": "thkinh"
},
{
"number": 10456,
"created_at": "2025-05-17T13:30:04Z",
"last_comment_at": "2026-07-10T16:52:40Z",
"last_comment_author": "vaxerski"
},
{
"number": 10472,
"created_at": "2025-05-18T17:40:05Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 10488,
"created_at": "2025-05-20T13:41:56Z",
"last_comment_at": "2026-01-08T14:43:18Z",
"last_comment_author": "onion108"
},
{
"number": 10489,
"created_at": "2025-05-20T13:47:24Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 10490,
"created_at": "2025-05-20T13:49:57Z",
"last_comment_at": null,
"last_comment_author": null
}
]
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/hyprwm/Hyprland",
"host": "github.com",
"name": "Hyprland",
"owner": "hyprwm"
},
"metrics": {
"overall": {
"key": "overall",
"band": "good",
"name": "Overall health",
"note": null,
"notes": [],
"value": 77,
"inputs": {
"security": 54,
"vitality": 96,
"community": 85,
"governance": 65,
"engineering": 81
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "excellent",
"name": "Vitality",
"value": 96,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "excellent",
"name": "Development activity",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"commits_last_year": 1341,
"human_commit_share": 1,
"days_since_last_push": 0,
"active_weeks_last_year": 52
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 0 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "push_recency",
"params": {
"days": 0
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "52/52 weeks with commits",
"points": 36,
"status": "met",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 52
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "1341 commits in the last year",
"points": 18,
"status": "met",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 1341
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "30 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 10",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "excellent",
"name": "Release discipline",
"note": null,
"notes": [],
"value": 90,
"inputs": {
"releases_count": 100,
"latest_release_tag": "v0.56.1",
"releases_from_tags": false,
"days_since_latest_release": 1,
"mean_days_between_releases": 16.2
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "100 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 100
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 1 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 1
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~16.2 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 16.2
}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "Project has not signed or included provenance with any releases.",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "abandonment",
"band": "excellent",
"name": "Abandonment",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"cap": null,
"state": "maintained",
"guards": [],
"signals": [],
"red_flag": false,
"multiplier_pct": 100,
"declared_reason": null,
"unverified_reason": null,
"unanswered_open_prs": null,
"unanswered_open_issues": null,
"days_since_last_merged_pr": null,
"days_since_last_human_commit": 4,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "last human commit 4 days ago",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_maintained",
"params": {
"days": 4
}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "excellent",
"name": "Community & Adoption",
"value": 85,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "excellent",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 97,
"inputs": {
"forks": 1900,
"stars": 37616,
"watchers": 138,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "37,616 stars",
"points": 60,
"status": "met",
"details": [
{
"code": "stars",
"params": {
"count": 37616
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "1,900 forks",
"points": 25,
"status": "met",
"details": [
{
"code": "forks",
"params": {
"count": 1900
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "138 watchers",
"points": 11.9,
"status": "partial",
"details": [
{
"code": "watchers",
"params": {
"count": 138
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "good",
"name": "Community health",
"note": null,
"notes": [],
"value": 72,
"inputs": {
"has_readme": true,
"has_license": true,
"has_contributing": false,
"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": 0,
"status": "missed",
"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": 65,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "at_risk",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 40,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 100,
"top_contributor_share": 0.691
},
"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 69% of commits",
"points": 7,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 69
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "100 contributors",
"points": 13.5,
"status": "met",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 100
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 39 contributing companies or organizations",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "excellent",
"name": "Issue & PR responsiveness",
"note": null,
"notes": [],
"value": 85,
"inputs": {
"merged_prs": 2854,
"open_issues": 48,
"closed_issues": 7637,
"issue_closed_ratio": 0.994,
"closed_unmerged_prs": 517
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "99% of issues closed",
"points": 46.5,
"status": "partial",
"details": [
{
"code": "issues_closed_share",
"params": {
"share": 99
}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "2854/3371 decided PRs merged",
"points": 32.4,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 2854,
"decided": 3371
}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 13/30 approved changesets -- score normalized to 4",
"points": 6,
"status": "partial",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "good",
"name": "Ownership & stewardship",
"note": null,
"notes": [],
"value": 75,
"inputs": {
"followers": 2893,
"owner_type": "Organization",
"is_verified": null,
"owner_login": "hyprwm",
"public_repos": 41,
"account_age_days": 1499
},
"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,893 followers of hyprwm",
"points": 24.9,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 2893,
"login": "hyprwm"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "41 public repos, account ~4 yr old",
"points": 20,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 41
}
},
{
"code": "account_age_years",
"params": {
"years": 4
}
}
],
"max_points": 25
}
]
}
],
"description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
},
{
"key": "engineering",
"band": "good",
"name": "Engineering Quality",
"value": 81,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "moderate",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 68,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "12 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 12
}
}
],
"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": 0,
"status": "missed",
"details": [],
"max_points": 16
},
{
"key": "pre_commit_hooks",
"name": "Pre-commit hooks",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 9.6
},
{
"key": "editorconfig",
"name": ".editorconfig",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.4
},
{
"key": "openssf_scorecard_ci_tests",
"name": "OpenSSF Scorecard: CI-Tests",
"detail": "20 out of 20 merged PRs checked by a CI test -- score normalized to 10",
"points": 20,
"status": "met",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "excellent",
"name": "Documentation",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"topics": [
"wayland",
"wayland-compositor",
"compositor",
"cpp26"
],
"has_wiki": true,
"homepage": "https://hypr.land",
"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://hypr.land",
"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": "4 topics",
"points": 10,
"status": "met",
"details": [
{
"code": "topics_count",
"params": {
"count": 4
}
}
],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "moderate",
"name": "Security",
"value": 54,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "moderate",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): Branch-Protection, Packaging. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"branch_protection",
"packaging"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 54,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 16,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 2,
"scorecard_aggregate": 5.4
},
"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": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "20 out of 20 merged PRs checked by a CI test -- score normalized to 10",
"points": 2.5,
"status": "met",
"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 13/30 approved changesets -- score normalized to 4",
"points": 3,
"status": "partial",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 39 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": "no update tool detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is not fuzzed",
"points": 0,
"status": "missed",
"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": "30 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 10",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "packaging",
"name": "Packaging",
"detail": "packaging workflow not detected",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 5
},
{
"key": "pinned_dependencies",
"name": "Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "sast",
"name": "SAST",
"detail": "SAST tool is run on all commits",
"points": 5,
"status": "met",
"details": [],
"max_points": 5
},
{
"key": "security_policy",
"name": "Security-Policy",
"detail": "security policy file detected",
"points": 1.5,
"status": "partial",
"details": [],
"max_points": 5
},
{
"key": "signed_releases",
"name": "Signed-Releases",
"detail": "Project has not signed or included provenance with any releases.",
"points": 0,
"status": "missed",
"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": "0 existing vulnerabilities detected",
"points": 7.5,
"status": "met",
"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"
],
"commit_weight_rule": {
"min_commits": 50,
"min_commit_share": 0.1
},
"review_only_matches": 0,
"below_threshold_exposures": [],
"assessed_self_published_locations": 6
},
"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": "good",
"name": "AI Readiness",
"value": 71,
"weight": 0,
"metrics": [
{
"key": "ai_agent_context",
"band": "excellent",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 85,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 0.91,
"agent_instruction_files": [
"AGENTS.md"
],
"agent_instruction_max_bytes": 3145
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "AGENTS.md",
"points": 45,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "AGENTS.md"
}
}
],
"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": "91 of 100 human commits state their intent (structured subject or explanatory body)",
"points": 40,
"status": "met",
"details": [
{
"code": "legible_history",
"params": {
"legible": 91,
"sampled": 100
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "moderate",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 61,
"inputs": {
"has_nix": true,
"has_tests": true,
"lockfiles": [],
"has_dockerfile": false,
"typed_language": true,
"bootstrap_files": [
"Makefile",
"hyprtester/plugin/Makefile"
],
"has_devcontainer": false,
"has_linter_config": false,
"typecheck_configs": [],
"agent_commit_share": 0,
"toolchain_manifests": [],
"dependency_bot_commit_share": 0
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": "Makefile, hyprtester/plugin/Makefile",
"points": 18,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "Makefile, hyprtester/plugin/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": 0,
"status": "missed",
"details": [],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": "C++ (statically typed)",
"points": 11,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "C++"
}
}
],
"max_points": 11
},
{
"key": "reproducible_environment",
"name": "Reproducible environment",
"detail": "Nix",
"points": 10,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "Nix"
}
}
],
"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": "no automated dependency updates observed",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_dependency_automation",
"params": {}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "excellent",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 99,
"inputs": {
"primary_language": "C++",
"largest_source_bytes": 194708,
"source_files_sampled": 887,
"oversized_source_files": 13
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "C++ (statically typed)",
"points": 45,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "C++"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "13/887 source files over 60KB",
"points": 54.2,
"status": "partial",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 887,
"oversized": 13
}
}
],
"max_points": 55
}
]
},
{
"key": "ai_interfaces",
"band": "at_risk",
"name": "Machine-readable interfaces",
"note": null,
"notes": [],
"value": 40,
"inputs": {
"example_dirs": [
"example"
],
"has_mcp_signal": false,
"api_schema_files": []
},
"components": [
{
"key": "api_schema_openapi_graphql_proto",
"name": "API schema (OpenAPI/GraphQL/proto)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 40
},
{
"key": "mcp_server",
"name": "MCP server",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 20
},
{
"key": "runnable_examples",
"name": "Runnable examples",
"detail": "example",
"points": 40,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "example"
}
}
],
"max_points": 40
}
]
}
],
"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.14.0"
},
"warnings": [
"Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token"
],
"report_type": "repository",
"generated_at": "2026-07-29T04:08:57.997770Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/h/hyprwm/Hyprland.svg",
"full_name": "hyprwm/Hyprland",
"license_state": "standard",
"license_spdx": "BSD-3-Clause"
}