Raw JSON report machine-readable
{
"data": {
"repo": {
"topics": [
"flarum",
"flagrow",
"linguist",
"translation-key",
"translation"
],
"is_fork": false,
"size_kb": 1496,
"has_wiki": true,
"homepage": "https://discuss.flarum.org/d/7026",
"languages": {
"PHP": 30617,
"Less": 6104,
"JavaScript": 53,
"TypeScript": 82505
},
"pushed_at": "2026-06-23T22:19:05Z",
"created_at": "2017-10-05T00:12:52Z",
"owner_type": "Organization",
"updated_at": "2026-06-10T22:17:10Z",
"description": "Customize Flarum translations with ease",
"is_archived": false,
"is_disabled": false,
"license_spdx": "MIT",
"default_branch": "2.x",
"license_spdx_raw": "MIT",
"primary_language": "TypeScript",
"significant_languages": [
"TypeScript",
"PHP"
]
},
"owner": {
"blog": "https://friendsofflarum.org",
"name": "Friends of Flarum",
"type": "Organization",
"login": "FriendsOfFlarum",
"company": null,
"location": null,
"followers": 101,
"avatar_url": "https://avatars.githubusercontent.com/u/43339973?v=4",
"created_at": "2018-09-17T11:10:19Z",
"is_verified": null,
"public_repos": 105,
"account_age_days": 2866
},
"license": {
"state": "standard",
"spdx_id": "MIT",
"raw_spdx": "MIT",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "2.0.0-beta.1",
"kind": "prerelease",
"published_at": "2026-03-06T10:52:27Z"
},
{
"tag": "1.1.6",
"kind": "patch",
"published_at": "2025-10-03T21:31:06Z"
},
{
"tag": "1.1.5",
"kind": "patch",
"published_at": "2025-01-17T10:02:39Z"
},
{
"tag": "1.1.4",
"kind": "patch",
"published_at": "2025-01-15T09:53:44Z"
},
{
"tag": "1.1.3",
"kind": "patch",
"published_at": "2025-01-10T09:33:58Z"
},
{
"tag": "1.1.2",
"kind": "patch",
"published_at": "2023-11-12T12:33:48Z"
},
{
"tag": "1.1.1",
"kind": "patch",
"published_at": "2023-03-22T18:01:38Z"
},
{
"tag": "1.1.0",
"kind": "minor",
"published_at": "2022-12-14T19:01:50Z"
},
{
"tag": "1.0.4",
"kind": "patch",
"published_at": "2022-04-06T00:53:42Z"
},
{
"tag": "1.0.3",
"kind": "patch",
"published_at": "2021-10-06T10:21:52Z"
},
{
"tag": "1.0.2",
"kind": "patch",
"published_at": "2021-09-29T11:38:50Z"
},
{
"tag": "1.0.0",
"kind": "major",
"published_at": "2021-05-29T07:08:13Z"
},
{
"tag": "0.6.0",
"kind": "minor",
"published_at": "2021-03-21T17:52:24Z"
},
{
"tag": "0.5.1",
"kind": "patch",
"published_at": "2021-03-09T21:55:14Z"
},
{
"tag": "0.4.6",
"kind": "patch",
"published_at": "2021-01-06T13:51:30Z"
},
{
"tag": "0.5.0",
"kind": "minor",
"published_at": "2020-12-17T00:48:16Z"
}
],
"recent_commits": [
{
"oid": "76c1d6ae21b05012e53a4f5536aa9d761adce265",
"body": "Bumps [picomatch](https://github.com/micromatch/picomatch) from 2.3.1 to 2.3.2.\n- [Release notes](https://github.com/micromatch/picomatch/releases)\n- [Changelog](https://github.com/micromatch/picomatch/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/micromatch/picomatch/compare/2.3.1...2.3.\n[…]\ntch\n dependency-version: 2.3.2\n dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "Bump picomatch from 2.3.1 to 2.3.2 in /js (#58)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-03-25T23:03:50Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "3c7c1ae2f2fc481ee2c85769b4356087cdbaddb4",
"body": "Includes transpiled JS/TS, and Typescript declaration files (typings).\n\n[skip ci]",
"is_bot": false,
"headline": "Bundled output for commit 526a5005a92b3b2c147a9183265016584e90825e",
"author_name": "flarum-bot",
"author_login": "flarum-bot",
"committed_at": "2026-03-06T10:48:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "526a5005a92b3b2c147a9183265016584e90825e",
"body": "* chore(2.0): code formatting with prettier\n\nStart by formatting your code with Prettier.\n\n* chore(2.0): update dependencies\n\nUpdate dependencies to Flarum 2.0 compatible versions.\n\n* chore(2.0): update infrastructure\n\nUpdate the extension infrastructure\n\n* chore(2.0): misc frontend changes\n\nMiscell\n[…]\nn\n\n* chore(2.0): `LESS` code changes\n\nMany variables have been renamed to light/dark specific names and most are now used as CSS variables instead.\n\n* chore: Flarum 2.0 upgrade\n\n* chore: ts conversion",
"is_bot": false,
"headline": "chore: Flarum 2.0 upgrade (#57)",
"author_name": "IanM",
"author_login": "imorland",
"committed_at": "2026-03-06T10:47:33Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "3dfcb1a7c70e1a047b8b33be00a909c6a3f04dcb",
"body": "Includes transpiled JS/TS, and Typescript declaration files (typings).\n\n[skip ci]",
"is_bot": false,
"headline": "Bundled output for commit 0791275807638f4da560b6d1b5930314179200cd",
"author_name": "flarum-bot",
"author_login": "flarum-bot",
"committed_at": "2026-03-06T08:43:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0791275807638f4da560b6d1b5930314179200cd",
"body": "Bumps [webpack](https://github.com/webpack/webpack) from 5.102.0 to 5.104.1.\n- [Release notes](https://github.com/webpack/webpack/releases)\n- [Changelog](https://github.com/webpack/webpack/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/webpack/webpack/compare/v5.102.0...v5.104.1)\n\n---\nupdate\n[…]\nency-version: 5.104.1\n dependency-type: direct:development\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "Bump webpack from 5.102.0 to 5.104.1 in /js (#56)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-03-06T08:43:12Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "ed70fb1f2dc903cf4e51a18c0df5f508ebc2e0cb",
"body": "Bumps @isaacs/brace-expansion from 5.0.0 to 5.0.1.\n\n---\nupdated-dependencies:\n- dependency-name: \"@isaacs/brace-expansion\"\n dependency-version: 5.0.1\n dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "Bump @isaacs/brace-expansion from 5.0.0 to 5.0.1 in /js (#55)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-03-06T08:43:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4fa5b50a2b7cbf8077874bfaaa009a76fe97a986",
"body": "Bumps [lodash](https://github.com/lodash/lodash) from 4.17.21 to 4.17.23.\n- [Release notes](https://github.com/lodash/lodash/releases)\n- [Commits](https://github.com/lodash/lodash/compare/4.17.21...4.17.23)\n\n---\nupdated-dependencies:\n- dependency-name: lodash\n dependency-version: 4.17.23\n dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "Bump lodash from 4.17.21 to 4.17.23 in /js (#54)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2026-03-06T08:42:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b759cd9d9ff127bcd1a844024739372fb15130e3",
"body": null,
"is_bot": false,
"headline": "Change main_git_branch from master to 1.x",
"author_name": "IanM",
"author_login": "imorland",
"committed_at": "2026-03-06T08:39:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bd71d446ed16084e6eb658274499b92f1d4edee3",
"body": null,
"is_bot": false,
"headline": "chore: add release notification",
"author_name": "IanM",
"author_login": "imorland",
"committed_at": "2026-02-15T20:33:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "560ba7fa55b70d95065284945318349842e9bffd",
"body": "Includes transpiled JS/TS, and Typescript declaration files (typings).\n\n[skip ci]",
"is_bot": false,
"headline": "Bundled output for commit 799b64ffa77126961b87ca724ff8bca01062ff9a",
"author_name": "flarum-bot",
"author_login": "flarum-bot",
"committed_at": "2025-10-03T21:29:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "799b64ffa77126961b87ca724ff8bca01062ff9a",
"body": "* chore: target 1.x flows\n\n* chore: remove flagrow upgrade\n\n* chore: make our lifes easier with LICENCSE\n\n* chore: switch to yarn\n\n* chore: refresh of package.json\n\n* chore: add tsconfig\n\n* chore: low IQ ts refactor\n\n* `.git..` config updates\n\n* chore\n\n* chore: mediocre IQ TS refactor",
"is_bot": false,
"headline": "chore: repo maintenance (#53)",
"author_name": "Davide Iadeluca",
"author_login": "DavideIadeluca",
"committed_at": "2025-10-03T21:28:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4bf313e36425228f59ad87bc6c3281880fcb2753",
"body": null,
"is_bot": false,
"headline": "feat: extensibility of merged strings (#52)",
"author_name": "IanM",
"author_login": "imorland",
"committed_at": "2025-01-17T10:01:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fb5356b8aea2b875d0810d581f85868eecf5081b",
"body": "* feat: list strings merged default and custom\r\n\r\n* fix: refs not translated correctly, improve performance",
"is_bot": false,
"headline": "feat: list strings merged default and custom (#51)",
"author_name": "IanM",
"author_login": "imorland",
"committed_at": "2025-01-15T09:51:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "81d90558f12a6cef34374233646e49fc77c8254f",
"body": "…ot default (#50)",
"is_bot": false,
"headline": "fix: en translations not displayed in default string api when en is n…",
"author_name": "IanM",
"author_login": "imorland",
"committed_at": "2025-01-10T09:32:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2dd913a30b1e6a5c0e15a245947888f5f9d3b4f2",
"body": "Bumps [cross-spawn](https://github.com/moxystudio/node-cross-spawn) from 7.0.3 to 7.0.6.\r\n- [Changelog](https://github.com/moxystudio/node-cross-spawn/blob/master/CHANGELOG.md)\r\n- [Commits](https://github.com/moxystudio/node-cross-spawn/compare/v7.0.3...v7.0.6)\r\n\r\n---\r\nupdated-dependencies:\r\n- dependency-name: cross-spawn\r\n dependency-type: indirect\r\n...\r\n\r\nSigned-off-by: dependabot[bot] <support@github.com>\r\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "Bump cross-spawn from 7.0.3 to 7.0.6 in /js (#49)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2025-01-10T08:00:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5101a6739cf264b0ef41e6f6c9dd6b64b263c068",
"body": "Bumps [webpack](https://github.com/webpack/webpack) from 5.89.0 to 5.94.0.\r\n- [Release notes](https://github.com/webpack/webpack/releases)\r\n- [Commits](https://github.com/webpack/webpack/compare/v5.89.0...v5.94.0)\r\n\r\n---\r\nupdated-dependencies:\r\n- dependency-name: webpack\r\n dependency-type: direct:production\r\n...\r\n\r\nSigned-off-by: dependabot[bot] <support@github.com>\r\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "Bump webpack from 5.89.0 to 5.94.0 in /js (#48)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2024-10-04T09:02:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f019b774dafd72b1d91b0b2d83c137c73e7b1ab0",
"body": null,
"is_bot": false,
"headline": "Create CODEOWNERS",
"author_name": "IanM",
"author_login": "imorland",
"committed_at": "2024-10-04T09:02:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "da67b8cbf426f6a41aca442de409d9b38da924a0",
"body": "Bumps [ws](https://github.com/websockets/ws) from 7.5.9 to 7.5.10.\r\n- [Release notes](https://github.com/websockets/ws/releases)\r\n- [Commits](https://github.com/websockets/ws/compare/7.5.9...7.5.10)\r\n\r\n---\r\nupdated-dependencies:\r\n- dependency-name: ws\r\n dependency-type: indirect\r\n...\r\n\r\nSigned-off-by: dependabot[bot] <support@github.com>\r\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "Bump ws from 7.5.9 to 7.5.10 in /js (#46)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2024-06-19T04:46:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f8ad36746aba0038fe12e605322427e75b8c7fa7",
"body": "Includes transpiled JS/TS, and Typescript declaration files (typings).\n\n[skip ci]",
"is_bot": false,
"headline": "Bundled output for commit 6e13bcd3f7d9a7b43ad8e89ac7d37920fca33517",
"author_name": "flarum-bot",
"author_login": "flarum-bot",
"committed_at": "2023-11-12T12:32:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6e13bcd3f7d9a7b43ad8e89ac7d37920fca33517",
"body": "* chore: enable phpstan\r\n\r\n* fix: phpstan complaints\r\n\r\n* chore: bump js deps\r\n\r\n* chore: prettier",
"is_bot": false,
"headline": "chore: enable phpstan, apply fixes, bump js, format (#45)",
"author_name": "IanM",
"author_login": "imorland",
"committed_at": "2023-11-12T12:31:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ec54cf7b33cb097e79878080dc62e8a66fcd1b0f",
"body": "Includes transpiled JS/TS.\n\n[skip ci]",
"is_bot": false,
"headline": "Bundled output for commit 1ffde0391ea34325ea94d5fb6885e66652bb4ad4",
"author_name": "flarum-bot",
"author_login": "flarum-bot",
"committed_at": "2023-03-22T18:01:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1ffde0391ea34325ea94d5fb6885e66652bb4ad4",
"body": null,
"is_bot": false,
"headline": "Update build.yml",
"author_name": "IanM",
"author_login": "imorland",
"committed_at": "2023-03-22T18:00:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "68a934b40f636f10cd4a215cfb2299b9c00a285f",
"body": "* Make it possible to filter string keys by prefix and do not require admin role in that case\r\n\r\n* Add permission for viewing string keys\r\n\r\n* Use `RequestUtil::getActor($request)`",
"is_bot": false,
"headline": "Add prefix filter (& permission to view string keys) (#43)",
"author_name": "Rafael Horvat",
"author_login": "iPurpl3x",
"committed_at": "2023-03-22T17:59:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "77ea048232f2e94842bada99edb27d46fe2c5612",
"body": "Bumps [webpack](https://github.com/webpack/webpack) from 5.75.0 to 5.76.0.\r\n- [Release notes](https://github.com/webpack/webpack/releases)\r\n- [Commits](https://github.com/webpack/webpack/compare/v5.75.0...v5.76.0)\r\n\r\n---\r\nupdated-dependencies:\r\n- dependency-name: webpack\r\n dependency-type: direct:production\r\n...\r\n\r\nSigned-off-by: dependabot[bot] <support@github.com>\r\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "Bump webpack from 5.75.0 to 5.76.0 in /js (#42)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2023-03-15T09:06:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8806f81ed892c6c0c740e2ef4557745424ba17a9",
"body": "Bumps [json5](https://github.com/json5/json5) from 2.2.1 to 2.2.3.\r\n- [Release notes](https://github.com/json5/json5/releases)\r\n- [Changelog](https://github.com/json5/json5/blob/main/CHANGELOG.md)\r\n- [Commits](https://github.com/json5/json5/compare/v2.2.1...v2.2.3)\r\n\r\n---\r\nupdated-dependencies:\r\n- dependency-name: json5\r\n dependency-type: indirect\r\n...\r\n\r\nSigned-off-by: dependabot[bot] <support@github.com>\r\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "Bump json5 from 2.2.1 to 2.2.3 in /js (#41)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2023-03-15T09:06:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "06c3fc8e94a507b97fafb5d025ed561008055cb3",
"body": null,
"is_bot": false,
"headline": "Update dependencies and compile JS",
"author_name": "Clark Winkelmann",
"author_login": "clarkwinkelmann",
"committed_at": "2022-12-14T18:55:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "86aa10ff64472fc96592a87b1031299fc13eeff8",
"body": "Apply translations immediately in debug mode",
"is_bot": false,
"headline": "Merge pull request #38 from FriendsOfFlarum/cw/no-clear-cache-in-debug",
"author_name": "Clark Winkelmann",
"author_login": "clarkwinkelmann",
"committed_at": "2022-12-14T18:48:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a9bfd9a6ae4f919c95e6140c62d406e3ae47386a",
"body": "Always load and show English translations",
"is_bot": false,
"headline": "Merge pull request #37 from FriendsOfFlarum/cw/always-load-english",
"author_name": "Clark Winkelmann",
"author_login": "clarkwinkelmann",
"committed_at": "2022-12-14T18:47:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a4413b434e8e5732b2cd83dfda38898c889fbb4d",
"body": null,
"is_bot": false,
"headline": "Update import code",
"author_name": "Clark Winkelmann",
"author_login": "clarkwinkelmann",
"committed_at": "2022-10-19T03:15:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b79b0d8da6e3e716c656be26747c2b0f539b45d0",
"body": "Remove cache clear banner in debug mode",
"is_bot": false,
"headline": "Apply translations immediately in debug mode",
"author_name": "Clark Winkelmann",
"author_login": "clarkwinkelmann",
"committed_at": "2022-10-19T03:06:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9b9bb0e84c655997b2c277c191352095992a85e4",
"body": null,
"is_bot": false,
"headline": "Apply English translations when English is only used as fallback",
"author_name": "Clark Winkelmann",
"author_login": "clarkwinkelmann",
"committed_at": "2022-10-19T02:02:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b8a43f875f0a37fe9407c48b19c1aadf2b430f6c",
"body": "Removes the need to enable English language pack to see all translations",
"is_bot": false,
"headline": "Always load and show English translations",
"author_name": "Clark Winkelmann",
"author_login": "clarkwinkelmann",
"committed_at": "2022-10-19T01:41:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "46a1ae646c72ff8212535e52b79d266ee73a78c3",
"body": null,
"is_bot": false,
"headline": "Update dependencies and move to Webpack 5",
"author_name": "Clark Winkelmann",
"author_login": "clarkwinkelmann",
"committed_at": "2022-04-06T00:51:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "dfdcc0f37c86d5cde41cdb7e636cf006090cd4d7",
"body": "Add compatibility with flamarkt backoffice (for exports)",
"is_bot": false,
"headline": "Merge pull request #34 from glowingblue/backoffice-compat",
"author_name": "Clark Winkelmann",
"author_login": "clarkwinkelmann",
"committed_at": "2022-04-06T00:45:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "92be52b1f5f421a29e2de16b77c90fd23e981a28",
"body": null,
"is_bot": false,
"headline": "Add compatibility with flamarkt backoffice (for exports)",
"author_name": "Rafael Horvat",
"author_login": "iPurpl3x",
"committed_at": "2022-04-05T16:26:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b41f817b3e48daa6cf0cc458311cf3ee4bb4e1c9",
"body": null,
"is_bot": false,
"headline": "Fixed API serializing the key instead of an empty string (#32)",
"author_name": "Rafael Horvat",
"author_login": "iPurpl3x",
"committed_at": "2021-10-06T10:18:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8c8b75cb9f7be3d1a681aef93b0d51b782e43464",
"body": "… Key (#31)",
"is_bot": false,
"headline": "Added API endpoints to get a single StringKey or Strings for a single…",
"author_name": "Rafael Horvat",
"author_login": "iPurpl3x",
"committed_at": "2021-09-29T11:37:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "da4c01b20baed43b503cfe0f6ad000d1235c133a",
"body": null,
"is_bot": false,
"headline": "Update js deps",
"author_name": "Ian Morland",
"author_login": "imorland",
"committed_at": "2021-09-24T05:44:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "93c1255c82a4c8cc195bc5bf0c761b4a1cb5bdd1",
"body": "* Fixed class name\r\n\r\n* Added exports so that other extensions can re-use or customize elements of Linguist.",
"is_bot": false,
"headline": "Exports (#30)",
"author_name": "Rafael Horvat",
"author_login": "iPurpl3x",
"committed_at": "2021-09-24T05:41:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "287de9661bef6683f73333c91a2a180982f7a7f5",
"body": "* Update for Flarum 1.0\r\n\r\n* Add clear cache message after an import",
"is_bot": false,
"headline": "Flarum 1.0 update (#28)",
"author_name": "Clark Winkelmann",
"author_login": "clarkwinkelmann",
"committed_at": "2021-05-29T07:04:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5ed8cec6067b328c9078a31dce6c9947564244e4",
"body": "Bumps [browserslist](https://github.com/browserslist/browserslist) from 4.16.3 to 4.16.6.\r\n- [Release notes](https://github.com/browserslist/browserslist/releases)\r\n- [Changelog](https://github.com/browserslist/browserslist/blob/main/CHANGELOG.md)\r\n- [Commits](https://github.com/browserslist/browserslist/compare/4.16.3...4.16.6)\r\n\r\nSigned-off-by: dependabot[bot] <support@github.com>\r\n\r\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "Bump browserslist from 4.16.3 to 4.16.6 in /js (#27)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2021-05-26T07:28:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "afd8fecfc7fc8f6a03852719a1f39f38f1ff0b41",
"body": "Bumps [ssri](https://github.com/npm/ssri) from 6.0.1 to 6.0.2.\r\n- [Release notes](https://github.com/npm/ssri/releases)\r\n- [Changelog](https://github.com/npm/ssri/blob/v6.0.2/CHANGELOG.md)\r\n- [Commits](https://github.com/npm/ssri/compare/v6.0.1...v6.0.2)\r\n\r\nSigned-off-by: dependabot[bot] <support@github.com>\r\n\r\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "Bump ssri from 6.0.1 to 6.0.2 in /js (#26)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2021-05-11T15:31:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7cd1bde62ee0b7fdade933a348f10c4a531878f3",
"body": null,
"is_bot": false,
"headline": "Update for Flarum beta 16",
"author_name": "Clark Winkelmann",
"author_login": "clarkwinkelmann",
"committed_at": "2021-03-21T17:21:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "64afea64176f0a87770905d1477dd61360c11599",
"body": null,
"is_bot": false,
"headline": "Update javascript dependencies",
"author_name": "Clark Winkelmann",
"author_login": "clarkwinkelmann",
"committed_at": "2021-03-09T21:49:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c4dd6a697147fd2e22835591cfa7df13fe1dea95",
"body": null,
"is_bot": false,
"headline": "Fix includeOriginals option not working without namespace",
"author_name": "Clark Winkelmann",
"author_login": "clarkwinkelmann",
"committed_at": "2021-03-09T21:49:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b48a5371d8cd15abd87a27c22fd6e3c1a18adc8a",
"body": null,
"is_bot": false,
"headline": "Improve responsiveness",
"author_name": "Clark Winkelmann",
"author_login": "clarkwinkelmann",
"committed_at": "2021-03-09T21:38:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "06026ab246a8430094dd9b336b4fef88148a4223",
"body": null,
"is_bot": false,
"headline": "Add mass delete feature",
"author_name": "Clark Winkelmann",
"author_login": "clarkwinkelmann",
"committed_at": "2021-03-09T17:05:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4d5041ab0d42389ccde0fc08f9a69def15071a4c",
"body": null,
"is_bot": false,
"headline": "Allow selecting multiple locales in filter",
"author_name": "Clark Winkelmann",
"author_login": "clarkwinkelmann",
"committed_at": "2021-03-09T16:35:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5e425b3924096c4dddf6b1442dc835d2d6dd42cc",
"body": null,
"is_bot": false,
"headline": "Use namespace in export file name",
"author_name": "Clark Winkelmann",
"author_login": "clarkwinkelmann",
"committed_at": "2021-03-09T16:11:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a810b2b9c1f83593adb34297d3a353aa4e67bffa",
"body": "Improve coverage by frontend to group non-admin",
"is_bot": false,
"headline": "Add frontend filter",
"author_name": "Clark Winkelmann",
"author_login": "clarkwinkelmann",
"committed_at": "2021-03-09T16:07:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "624c5369578ef82f7e27211d3d8ad04bd076a32a",
"body": null,
"is_bot": false,
"headline": "Export and import feature",
"author_name": "Clark Winkelmann",
"author_login": "clarkwinkelmann",
"committed_at": "2021-03-09T12:05:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "410595d43f7ebf75c154f026b629dee5af1c77b8",
"body": "Replace extension list with namespace list",
"is_bot": false,
"headline": "Add coverage feature",
"author_name": "Clark Winkelmann",
"author_login": "clarkwinkelmann",
"committed_at": "2021-03-09T09:43:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1f1ceca2cd165a94bfb6dba3650d01ece08f468e",
"body": "…kip ci]",
"is_bot": false,
"headline": "Bundled output for commit a1a8d6844b9cb7beda88b9271538ae135b174ea8 [s…",
"author_name": "flarum-bot",
"author_login": "flarum-bot",
"committed_at": "2020-12-17T00:47:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a1a8d6844b9cb7beda88b9271538ae135b174ea8",
"body": "* Update for beta 15 admin ux\r\n\r\n* Remove unsed strings\r\n\r\n* Fix enabled extension check\r\n\r\nCo-authored-by: Clark Winkelmann <clark.winkelmann@gmail.com>",
"is_bot": false,
"headline": "Update for beta 15 admin ux (#24)",
"author_name": "Ian Morland",
"author_login": "imorland",
"committed_at": "2020-12-17T00:46:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "535de9b6dbd6c0d0d1206dd3f24a70f3c2d2f284",
"body": null,
"is_bot": false,
"headline": "Add build action",
"author_name": "Ian Morland",
"author_login": "imorland",
"committed_at": "2020-12-15T23:00:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d75f30a3c8ca585d66efd931b0cc79587dcff0f1",
"body": null,
"is_bot": false,
"headline": "Better multi-line handling, fixes #22",
"author_name": "Clark Winkelmann",
"author_login": "clarkwinkelmann",
"committed_at": "2020-12-11T00:15:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f998aa0072076749b71c12423f18ea4774787288",
"body": null,
"is_bot": false,
"headline": "Add new filter to find strings without any translation at all",
"author_name": "Clark Winkelmann",
"author_login": "clarkwinkelmann",
"committed_at": "2020-11-03T22:31:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c9b6295d4b7e15a5a2e3bf7625dc9e5110bcbf83",
"body": null,
"is_bot": false,
"headline": "Update for Flarum beta 14",
"author_name": "Clark Winkelmann",
"author_login": "clarkwinkelmann",
"committed_at": "2020-11-03T21:26:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ca04e1d80dc951d4b899c8af04b824e67911870e",
"body": null,
"is_bot": false,
"headline": "Update javascript dependencies and remove log call",
"author_name": "Clark Winkelmann",
"author_login": "clarkwinkelmann",
"committed_at": "2020-09-14T17:28:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "53332b981428d2ae092cf4cf2726a5933ac8564a",
"body": null,
"is_bot": false,
"headline": "Fix search breaking on null translations and use Arr:: helper class",
"author_name": "Clark Winkelmann",
"author_login": "clarkwinkelmann",
"committed_at": "2020-09-14T17:28:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1ef614d8e023aa69637c825ac546b1fdb0fba223",
"body": null,
"is_bot": false,
"headline": "Allow installation on beta 12 and next as per recommended constraints",
"author_name": "Clark Winkelmann",
"author_login": "clarkwinkelmann",
"committed_at": "2020-03-04T14:44:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d6953dfc00351a8ba34d7f6e988f5436b0575727",
"body": null,
"is_bot": false,
"headline": "Fix typo in class name, replace yarn with npm and update dependencies",
"author_name": "Clark Winkelmann",
"author_login": "clarkwinkelmann",
"committed_at": "2020-01-09T15:40:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e0142784f1030bf8a8df39b007af3b66e6757a8a",
"body": "…le-extensions\n\nProvide explanation message for extensions that can't be used as filter",
"is_bot": false,
"headline": "Merge pull request #17 from FriendsOfFlarum/explanation-for-unavailab…",
"author_name": "Clark Winkelmann",
"author_login": "clarkwinkelmann",
"committed_at": "2019-10-22T13:38:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "652e5e352fd8a81cb6171902d5c8b88dd1c354dd",
"body": "Follows #14 and #16",
"is_bot": false,
"headline": "Provide explanation message for extensions that can't be used as filter",
"author_name": "Clark Winkelmann",
"author_login": "clarkwinkelmann",
"committed_at": "2019-10-22T13:36:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "30c54585362b1ed656281ba3cd71c9e7c27fef0d",
"body": null,
"is_bot": false,
"headline": "Update README",
"author_name": "Clark Winkelmann",
"author_login": "clarkwinkelmann",
"committed_at": "2019-09-22T20:48:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2f139a41c15441b00fe68a55510bfa0a88114592",
"body": null,
"is_bot": false,
"headline": "Build dist files",
"author_name": "Clark Winkelmann",
"author_login": "clarkwinkelmann",
"committed_at": "2019-09-22T20:36:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d418fb8c706e23752bd2a4c6e40f03a15772049c",
"body": null,
"is_bot": false,
"headline": "Allow case-insensitive search",
"author_name": "Clark Winkelmann",
"author_login": "clarkwinkelmann",
"committed_at": "2019-09-22T20:35:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "57ec220e53dc48f8b4dde6053b75790b8a7a2c6b",
"body": null,
"is_bot": false,
"headline": "Suggest clearing the cache to the user",
"author_name": "Clark Winkelmann",
"author_login": "clarkwinkelmann",
"committed_at": "2019-09-22T20:17:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "609ee8d1ba408832668d771c8b3a50a18213b2b9",
"body": null,
"is_bot": false,
"headline": "Make it work with beta 9+ translation registration and locale cache",
"author_name": "Clark Winkelmann",
"author_login": "clarkwinkelmann",
"committed_at": "2019-09-22T19:35:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ede413d7d6fb9c31d12820cc30ca5cf4efa2d95d",
"body": null,
"is_bot": false,
"headline": "Move to FriendsOfFlarum namespace",
"author_name": "Clark Winkelmann",
"author_login": "clarkwinkelmann",
"committed_at": "2019-09-22T17:41:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1758ed6fb4cc3e21b10ec3a2247ab86626ccef5f",
"body": null,
"is_bot": false,
"headline": "Fix yaml formatting",
"author_name": "Clark Winkelmann",
"author_login": "clarkwinkelmann",
"committed_at": "2019-04-14T19:09:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0a3f70474bfea24dd6f2c2a99c78b4e52b173f85",
"body": "German translations",
"is_bot": false,
"headline": "Merge pull request #9 from glowingblue/german-translations",
"author_name": "Clark Winkelmann",
"author_login": "clarkwinkelmann",
"committed_at": "2019-04-14T19:01:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "030753ff788cc6c60136f9a4a59a5b667057bdcc",
"body": null,
"is_bot": false,
"headline": "correct german translations",
"author_name": "Manuel Rohrbach",
"author_login": "manurohr",
"committed_at": "2019-04-08T14:08:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "aeb18774e4975ab161d236fb609472b894551a61",
"body": null,
"is_bot": false,
"headline": "add german translations",
"author_name": "Manuel Rohrbach",
"author_login": "manurohr",
"committed_at": "2019-04-08T14:03:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cb2c4dab3c787f528e2fe2e619a34a85f60ae557",
"body": null,
"is_bot": false,
"headline": "Rename bootstrap.php to extend.php",
"author_name": "Clark Winkelmann",
"author_login": "clarkwinkelmann",
"committed_at": "2018-12-07T19:44:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e31fccc61859c188a6b7569588cb8e1acdc62d99",
"body": null,
"is_bot": false,
"headline": "Update requirements",
"author_name": "Clark Winkelmann",
"author_login": "clarkwinkelmann",
"committed_at": "2018-11-29T16:26:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5194719ea485a4726bb4b83e7341d0bf1cb12aca",
"body": null,
"is_bot": false,
"headline": "Use a new strategy to load custom string or get only default strings",
"author_name": "Clark Winkelmann",
"author_login": "clarkwinkelmann",
"committed_at": "2018-11-29T16:23:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7ae09ac203ec1d350859223a4f0ae1a4918486cf",
"body": null,
"is_bot": false,
"headline": "Use yarn and run build command",
"author_name": "Clark Winkelmann",
"author_login": "clarkwinkelmann",
"committed_at": "2018-11-29T16:22:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "707ccc9466141a247ba13e23d31860e95f7d15f9",
"body": null,
"is_bot": false,
"headline": "Update for beta 8",
"author_name": "David Sevilla",
"author_login": "dsevillamartin",
"committed_at": "2018-08-11T15:22:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "72c438b85b6d649614f2e8dfc1b8ea672bbe6653",
"body": null,
"is_bot": false,
"headline": "Update README",
"author_name": "Clark Winkelmann",
"author_login": "clarkwinkelmann",
"committed_at": "2018-06-10T20:29:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4fe420674adac5fc8ec01847c9a33f0b41ed8fc3",
"body": null,
"is_bot": false,
"headline": "New translations user interface",
"author_name": "Clark Winkelmann",
"author_login": "clarkwinkelmann",
"committed_at": "2018-06-10T20:20:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "55e5b6ac6bd78e644fcd7fcd8237bfcecce9ec0c",
"body": null,
"is_bot": false,
"headline": "Merge branch 'KazeroG-patch-1'",
"author_name": "Clark Winkelmann",
"author_login": "clarkwinkelmann",
"committed_at": "2018-05-01T02:32:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "675ee7dba6b57831663c870374faeffc53a6ecab",
"body": "translate to FRench",
"is_bot": false,
"headline": "Create fr.yml",
"author_name": "KazeroG",
"author_login": "adryserage",
"committed_at": "2018-04-30T22:52:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f1e5efe2c8c1bbb2bc3af66f0f60496edb074e83",
"body": null,
"is_bot": false,
"headline": "Fix license capitalization for Packagist",
"author_name": "Clark Winkelmann",
"author_login": "clarkwinkelmann",
"committed_at": "2018-02-01T16:21:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c300c47651ff69306439c5827dd43b2936a67468",
"body": null,
"is_bot": false,
"headline": "Update migration so index key size is < 767 bytes. Fixes #2",
"author_name": "Clark Winkelmann",
"author_login": "clarkwinkelmann",
"committed_at": "2017-10-17T22:43:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3f98bb2a3114254b90145f433a6edb6c23872d25",
"body": null,
"is_bot": false,
"headline": "Reduce locale column length to keep index size small",
"author_name": "Clark Winkelmann",
"author_login": "clarkwinkelmann",
"committed_at": "2017-10-05T19:59:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "443166b3d89179d5b1e22d51173aafb133837229",
"body": null,
"is_bot": false,
"headline": "Update README",
"author_name": "Clark Winkelmann",
"author_login": "clarkwinkelmann",
"committed_at": "2017-10-05T18:54:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9eaf7478ca2b88b4203ded955bf1d633cd024e77",
"body": null,
"is_bot": false,
"headline": "First commit",
"author_name": "Clark Winkelmann",
"author_login": "clarkwinkelmann",
"committed_at": "2017-10-05T00:12:03Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 16,
"commits_last_year": 11,
"latest_release_at": "2026-03-06T10:52:27Z",
"latest_release_tag": "2.0.0-beta.1",
"releases_from_tags": false,
"days_since_last_push": 30,
"active_weeks_last_year": 4,
"days_since_latest_release": 139,
"mean_days_between_releases": 179.1
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": false,
"health_percentage": 62,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": true
},
"ecosystem": {
"packages": [
{
"name": "fof/linguist",
"exists": true,
"license": "MIT",
"keywords": [
"translation",
"locale",
"extension",
"flarum"
],
"ecosystem": "packagist",
"matches_repo": true,
"registry_url": "https://packagist.org/packages/fof/linguist",
"is_deprecated": false,
"latest_version": "2.0.0-beta.1",
"repository_url": "https://github.com/FriendsOfFlarum/linguist",
"versions_count": 29,
"total_downloads": 113696,
"dependents_count": 4,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": 2251,
"first_published_at": null,
"latest_published_at": "2026-03-06T10:48:21Z",
"latest_version_yanked": null,
"days_since_latest_publish": 139
}
]
},
"popularity": {
"forks": 2,
"stars": 15,
"watchers": 3,
"fork_history": {
"days": [
{
"date": "2019-07-09",
"count": 1
},
{
"date": "2026-04-10",
"count": 1
}
],
"complete": true,
"collected": 2,
"total_forks": 2
},
"star_history": null,
"open_issues_and_prs": 8
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [],
"has_llms_txt": false,
"has_dockerfile": false,
"has_mcp_signal": false,
"bootstrap_files": [],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [
"js/tsconfig.json"
],
"toolchain_manifests": [],
"largest_source_bytes": 28068,
"source_files_sampled": 53,
"oversized_source_files": 0,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"dependencies": {
"manifests": [
"composer.json",
"js/package.json"
],
"advisories": {
"error": null,
"scope": "repository_graph",
"source": "osv",
"findings": [
{
"name": "@babel/plugin-transform-modules-systemjs",
"direct": false,
"version": "7.29.0",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 8.2,
"advisory_ids": [
"GHSA-fv7c-fp4j-7gwp"
],
"fixed_version": "8.0.0-alpha.13",
"advisory_count": 1,
"oldest_advisory_days": 76
},
{
"name": "brace-expansion",
"direct": false,
"version": "1.1.12",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-3jxr-9vmj-r5cp",
"GHSA-f886-m6hf-6m8v"
],
"fixed_version": "5.0.7",
"advisory_count": 2,
"oldest_advisory_days": 119
},
{
"name": "brace-expansion",
"direct": false,
"version": "5.0.4",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-3jxr-9vmj-r5cp",
"GHSA-f886-m6hf-6m8v",
"GHSA-jxxr-4gwj-5jf2"
],
"fixed_version": "5.0.7",
"advisory_count": 3,
"oldest_advisory_days": 119
},
{
"name": "fast-uri",
"direct": false,
"version": "3.1.0",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-4c8g-83qw-93j6",
"GHSA-q3j6-qgpj-74h6",
"GHSA-v2hh-gcrm-f6hx",
"GHSA-v39h-62p7-jpjc"
],
"fixed_version": "4.1.1",
"advisory_count": 4,
"oldest_advisory_days": 76
},
{
"name": "lodash",
"direct": false,
"version": "4.17.23",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 8.1,
"advisory_ids": [
"GHSA-f23m-r3pf-42rh",
"GHSA-r5fr-rjxr-66jc"
],
"fixed_version": "4.18.0",
"advisory_count": 2,
"oldest_advisory_days": 112
},
{
"name": "ws",
"direct": false,
"version": "7.5.10",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-96hv-2xvq-fx4p"
],
"fixed_version": "8.21.0",
"advisory_count": 1,
"oldest_advisory_days": 38
},
{
"name": "@babel/core",
"direct": false,
"version": "7.29.0",
"severity": "low",
"ecosystem": "npm",
"cvss_score": 3.2,
"advisory_ids": [
"GHSA-4x5r-pxfx-6jf8"
],
"fixed_version": "8.0.0-rc.6",
"advisory_count": 1,
"oldest_advisory_days": 38
}
],
"collected": true,
"malicious": [],
"truncated": false,
"by_severity": {
"low": 1,
"high": 6
},
"advisory_count": 14,
"affected_count": 7,
"assessed_count": 392,
"malicious_count": 0,
"assessed_package": null,
"unassessed_count": 4,
"direct_affected_count": 0
},
"ecosystems": [
"npm",
"packagist"
],
"dependencies": [
{
"name": "flarum/core",
"manifest": "composer.json",
"ecosystem": "packagist",
"version_constraint": "^2.0.0"
},
{
"name": "symfony/yaml",
"manifest": "composer.json",
"ecosystem": "packagist",
"version_constraint": "^7.0"
}
],
"all_dependencies": {
"error": null,
"source": "github-sbom",
"packages": [
{
"name": "flarum/core",
"direct": true,
"version": null,
"ecosystem": "packagist"
},
{
"name": "symfony/yaml",
"direct": true,
"version": null,
"ecosystem": "packagist"
},
{
"name": "@babel/code-frame",
"direct": false,
"version": "7.29.0",
"ecosystem": "npm"
},
{
"name": "@babel/compat-data",
"direct": false,
"version": "7.29.0",
"ecosystem": "npm"
},
{
"name": "@babel/core",
"direct": false,
"version": "7.29.0",
"ecosystem": "npm"
},
{
"name": "@babel/generator",
"direct": false,
"version": "7.29.1",
"ecosystem": "npm"
},
{
"name": "@babel/helper-annotate-as-pure",
"direct": false,
"version": "7.27.3",
"ecosystem": "npm"
},
{
"name": "@babel/helper-compilation-targets",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/helper-create-class-features-plugin",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/helper-create-regexp-features-plugin",
"direct": false,
"version": "7.28.5",
"ecosystem": "npm"
},
{
"name": "@babel/helper-define-polyfill-provider",
"direct": false,
"version": "0.6.6",
"ecosystem": "npm"
},
{
"name": "@babel/helper-globals",
"direct": false,
"version": "7.28.0",
"ecosystem": "npm"
},
{
"name": "@babel/helper-member-expression-to-functions",
"direct": false,
"version": "7.28.5",
"ecosystem": "npm"
},
{
"name": "@babel/helper-module-imports",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/helper-module-transforms",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/helper-optimise-call-expression",
"direct": false,
"version": "7.27.1",
"ecosystem": "npm"
},
{
"name": "@babel/helper-plugin-utils",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/helper-remap-async-to-generator",
"direct": false,
"version": "7.27.1",
"ecosystem": "npm"
},
{
"name": "@babel/helper-replace-supers",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/helper-skip-transparent-expression-wrappers",
"direct": false,
"version": "7.27.1",
"ecosystem": "npm"
},
{
"name": "@babel/helper-string-parser",
"direct": false,
"version": "7.27.1",
"ecosystem": "npm"
},
{
"name": "@babel/helper-validator-identifier",
"direct": false,
"version": "7.28.5",
"ecosystem": "npm"
},
{
"name": "@babel/helper-validator-option",
"direct": false,
"version": "7.27.1",
"ecosystem": "npm"
},
{
"name": "@babel/helper-wrap-function",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/helpers",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/parser",
"direct": false,
"version": "7.29.0",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-bugfix-firefox-class-in-computed-class-key",
"direct": false,
"version": "7.28.5",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-bugfix-safari-class-field-initializer-scope",
"direct": false,
"version": "7.27.1",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression",
"direct": false,
"version": "7.27.1",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining",
"direct": false,
"version": "7.27.1",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-proposal-class-properties",
"direct": false,
"version": "7.18.6",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-proposal-private-methods",
"direct": false,
"version": "7.18.6",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-proposal-private-property-in-object",
"direct": false,
"version": "7.21.0-placeholder-for-preset-env.2",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-import-assertions",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-import-attributes",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-jsx",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-typescript",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-syntax-unicode-sets-regex",
"direct": false,
"version": "7.18.6",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-arrow-functions",
"direct": false,
"version": "7.27.1",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-async-generator-functions",
"direct": false,
"version": "7.29.0",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-async-to-generator",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-block-scoped-functions",
"direct": false,
"version": "7.27.1",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-block-scoping",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-class-properties",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-class-static-block",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-classes",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-computed-properties",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-destructuring",
"direct": false,
"version": "7.28.5",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-dotall-regex",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-duplicate-keys",
"direct": false,
"version": "7.27.1",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-duplicate-named-capturing-groups-regex",
"direct": false,
"version": "7.29.0",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-dynamic-import",
"direct": false,
"version": "7.27.1",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-explicit-resource-management",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-exponentiation-operator",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-export-namespace-from",
"direct": false,
"version": "7.27.1",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-for-of",
"direct": false,
"version": "7.27.1",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-function-name",
"direct": false,
"version": "7.27.1",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-json-strings",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-literals",
"direct": false,
"version": "7.27.1",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-logical-assignment-operators",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-member-expression-literals",
"direct": false,
"version": "7.27.1",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-modules-amd",
"direct": false,
"version": "7.27.1",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-modules-commonjs",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-modules-systemjs",
"direct": false,
"version": "7.29.0",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-modules-umd",
"direct": false,
"version": "7.27.1",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-named-capturing-groups-regex",
"direct": false,
"version": "7.29.0",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-new-target",
"direct": false,
"version": "7.27.1",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-nullish-coalescing-operator",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-numeric-separator",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-object-assign",
"direct": false,
"version": "7.27.1",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-object-rest-spread",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-object-super",
"direct": false,
"version": "7.27.1",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-optional-catch-binding",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-optional-chaining",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-parameters",
"direct": false,
"version": "7.27.7",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-private-methods",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-private-property-in-object",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-property-literals",
"direct": false,
"version": "7.27.1",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-react-display-name",
"direct": false,
"version": "7.28.0",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-react-jsx",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-react-jsx-development",
"direct": false,
"version": "7.27.1",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-react-pure-annotations",
"direct": false,
"version": "7.27.1",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-regenerator",
"direct": false,
"version": "7.29.0",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-regexp-modifiers",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-reserved-words",
"direct": false,
"version": "7.27.1",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-runtime",
"direct": false,
"version": "7.29.0",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-shorthand-properties",
"direct": false,
"version": "7.27.1",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-spread",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-sticky-regex",
"direct": false,
"version": "7.27.1",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-template-literals",
"direct": false,
"version": "7.27.1",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-typeof-symbol",
"direct": false,
"version": "7.27.1",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-typescript",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-unicode-escapes",
"direct": false,
"version": "7.27.1",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-unicode-property-regex",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-unicode-regex",
"direct": false,
"version": "7.27.1",
"ecosystem": "npm"
},
{
"name": "@babel/plugin-transform-unicode-sets-regex",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/preset-env",
"direct": false,
"version": "7.29.0",
"ecosystem": "npm"
},
{
"name": "@babel/preset-modules",
"direct": false,
"version": "0.1.6-no-external-plugins",
"ecosystem": "npm"
},
{
"name": "@babel/preset-react",
"direct": false,
"version": "7.28.5",
"ecosystem": "npm"
},
{
"name": "@babel/preset-typescript",
"direct": false,
"version": "7.28.5",
"ecosystem": "npm"
},
{
"name": "@babel/runtime",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/template",
"direct": false,
"version": "7.28.6",
"ecosystem": "npm"
},
{
"name": "@babel/traverse",
"direct": false,
"version": "7.29.0",
"ecosystem": "npm"
},
{
"name": "@babel/types",
"direct": false,
"version": "7.29.0",
"ecosystem": "npm"
},
{
"name": "@colors/colors",
"direct": false,
"version": "1.5.0",
"ecosystem": "npm"
},
{
"name": "@discoveryjs/json-ext",
"direct": false,
"version": "0.5.7",
"ecosystem": "npm"
},
{
"name": "@flarum/prettier-config",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "@hypnosphi/create-react-context",
"direct": false,
"version": "0.3.1",
"ecosystem": "npm"
},
{
"name": "@jridgewell/gen-mapping",
"direct": false,
"version": "0.3.13",
"ecosystem": "npm"
},
{
"name": "@jridgewell/remapping",
"direct": false,
"version": "2.3.5",
"ecosystem": "npm"
},
{
"name": "@jridgewell/resolve-uri",
"direct": false,
"version": "3.1.2",
"ecosystem": "npm"
},
{
"name": "@jridgewell/source-map",
"direct": false,
"version": "0.3.11",
"ecosystem": "npm"
},
{
"name": "@jridgewell/sourcemap-codec",
"direct": false,
"version": "1.5.5",
"ecosystem": "npm"
},
{
"name": "@jridgewell/trace-mapping",
"direct": false,
"version": "0.3.31",
"ecosystem": "npm"
},
{
"name": "@nodelib/fs.scandir",
"direct": false,
"version": "2.1.5",
"ecosystem": "npm"
},
{
"name": "@nodelib/fs.stat",
"direct": false,
"version": "2.0.5",
"ecosystem": "npm"
},
{
"name": "@nodelib/fs.walk",
"direct": false,
"version": "1.2.8",
"ecosystem": "npm"
},
{
"name": "@polka/url",
"direct": false,
"version": "1.0.0-next.29",
"ecosystem": "npm"
},
{
"name": "@semantic-ui-react/event-stack",
"direct": false,
"version": "3.1.3",
"ecosystem": "npm"
},
{
"name": "@stardust-ui/react-component-event-listener",
"direct": false,
"version": "0.38.0",
"ecosystem": "npm"
},
{
"name": "@stardust-ui/react-component-ref",
"direct": false,
"version": "0.38.0",
"ecosystem": "npm"
},
{
"name": "@types/eslint",
"direct": false,
"version": "9.6.1",
"ecosystem": "npm"
},
{
"name": "@types/eslint-scope",
"direct": false,
"version": "3.7.7",
"ecosystem": "npm"
},
{
"name": "@types/estree",
"direct": false,
"version": "1.0.8",
"ecosystem": "npm"
},
{
"name": "@types/jquery",
"direct": false,
"version": "3.5.34",
"ecosystem": "npm"
},
{
"name": "@types/json-schema",
"direct": false,
"version": "7.0.15",
"ecosystem": "npm"
},
{
"name": "@types/mithril",
"direct": false,
"version": "2.2.7",
"ecosystem": "npm"
},
{
"name": "@types/node",
"direct": false,
"version": "25.3.5",
"ecosystem": "npm"
},
{
"name": "@types/sizzle",
"direct": false,
"version": "2.3.10",
"ecosystem": "npm"
},
{
"name": "@types/throttle-debounce",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "@webassemblyjs/ast",
"direct": false,
"version": "1.14.1",
"ecosystem": "npm"
},
{
"name": "@webassemblyjs/floating-point-hex-parser",
"direct": false,
"version": "1.13.2",
"ecosystem": "npm"
},
{
"name": "@webassemblyjs/helper-api-error",
"direct": false,
"version": "1.13.2",
"ecosystem": "npm"
},
{
"name": "@webassemblyjs/helper-buffer",
"direct": false,
"version": "1.14.1",
"ecosystem": "npm"
},
{
"name": "@webassemblyjs/helper-numbers",
"direct": false,
"version": "1.13.2",
"ecosystem": "npm"
},
{
"name": "@webassemblyjs/helper-wasm-bytecode",
"direct": false,
"version": "1.13.2",
"ecosystem": "npm"
},
{
"name": "@webassemblyjs/helper-wasm-section",
"direct": false,
"version": "1.14.1",
"ecosystem": "npm"
},
{
"name": "@webassemblyjs/ieee754",
"direct": false,
"version": "1.13.2",
"ecosystem": "npm"
},
{
"name": "@webassemblyjs/leb128",
"direct": false,
"version": "1.13.2",
"ecosystem": "npm"
},
{
"name": "@webassemblyjs/utf8",
"direct": false,
"version": "1.13.2",
"ecosystem": "npm"
},
{
"name": "@webassemblyjs/wasm-edit",
"direct": false,
"version": "1.14.1",
"ecosystem": "npm"
},
{
"name": "@webassemblyjs/wasm-gen",
"direct": false,
"version": "1.14.1",
"ecosystem": "npm"
},
{
"name": "@webassemblyjs/wasm-opt",
"direct": false,
"version": "1.14.1",
"ecosystem": "npm"
},
{
"name": "@webassemblyjs/wasm-parser",
"direct": false,
"version": "1.14.1",
"ecosystem": "npm"
},
{
"name": "@webassemblyjs/wast-printer",
"direct": false,
"version": "1.14.1",
"ecosystem": "npm"
},
{
"name": "@webpack-cli/configtest",
"direct": false,
"version": "1.2.0",
"ecosystem": "npm"
},
{
"name": "@webpack-cli/info",
"direct": false,
"version": "1.5.0",
"ecosystem": "npm"
},
{
"name": "@webpack-cli/serve",
"direct": false,
"version": "1.7.0",
"ecosystem": "npm"
},
{
"name": "@xtuc/ieee754",
"direct": false,
"version": "1.2.0",
"ecosystem": "npm"
},
{
"name": "@xtuc/long",
"direct": false,
"version": "4.2.2",
"ecosystem": "npm"
},
{
"name": "acorn",
"direct": false,
"version": "8.16.0",
"ecosystem": "npm"
},
{
"name": "acorn-import-phases",
"direct": false,
"version": "1.0.4",
"ecosystem": "npm"
},
{
"name": "acorn-walk",
"direct": false,
"version": "8.3.5",
"ecosystem": "npm"
},
{
"name": "ajv",
"direct": false,
"version": "6.14.0",
"ecosystem": "npm"
},
{
"name": "ajv",
"direct": false,
"version": "8.18.0",
"ecosystem": "npm"
},
{
"name": "ajv-formats",
"direct": false,
"version": "2.1.1",
"ecosystem": "npm"
},
{
"name": "ajv-keywords",
"direct": false,
"version": "3.5.2",
"ecosystem": "npm"
},
{
"name": "ajv-keywords",
"direct": false,
"version": "5.1.0",
"ecosystem": "npm"
},
{
"name": "ansi-regex",
"direct": false,
"version": "5.0.1",
"ecosystem": "npm"
},
{
"name": "ansi-styles",
"direct": false,
"version": "4.3.0",
"ecosystem": "npm"
},
{
"name": "babel-loader",
"direct": false,
"version": "9.2.1",
"ecosystem": "npm"
},
{
"name": "babel-plugin-polyfill-corejs2",
"direct": false,
"version": "0.4.15",
"ecosystem": "npm"
},
{
"name": "babel-plugin-polyfill-corejs3",
"direct": false,
"version": "0.13.0",
"ecosystem": "npm"
},
{
"name": "babel-plugin-polyfill-corejs3",
"direct": false,
"version": "0.14.0",
"ecosystem": "npm"
},
{
"name": "babel-plugin-polyfill-regenerator",
"direct": false,
"version": "0.6.6",
"ecosystem": "npm"
},
{
"name": "balanced-match",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "balanced-match",
"direct": false,
"version": "4.0.4",
"ecosystem": "npm"
},
{
"name": "baseline-browser-mapping",
"direct": false,
"version": "2.10.0",
"ecosystem": "npm"
},
{
"name": "big.js",
"direct": false,
"version": "5.2.2",
"ecosystem": "npm"
},
{
"name": "brace-expansion",
"direct": false,
"version": "1.1.12",
"ecosystem": "npm"
},
{
"name": "brace-expansion",
"direct": false,
"version": "5.0.4",
"ecosystem": "npm"
},
{
"name": "braces",
"direct": false,
"version": "3.0.3",
"ecosystem": "npm"
},
{
"name": "browserslist",
"direct": false,
"version": "4.28.1",
"ecosystem": "npm"
},
{
"name": "buffer-from",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "call-bind",
"direct": false,
"version": "1.0.8",
"ecosystem": "npm"
},
{
"name": "call-bind-apply-helpers",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "call-bound",
"direct": false,
"version": "1.0.4",
"ecosystem": "npm"
},
{
"name": "caniuse-lite",
"direct": false,
"version": "1.0.30001777",
"ecosystem": "npm"
},
{
"name": "chalk",
"direct": false,
"version": "4.1.2",
"ecosystem": "npm"
},
{
"name": "chrome-trace-event",
"direct": false,
"version": "1.0.4",
"ecosystem": "npm"
},
{
"name": "classnames",
"direct": false,
"version": "2.5.1",
"ecosystem": "npm"
},
{
"name": "cli-table3",
"direct": false,
"version": "0.6.5",
"ecosystem": "npm"
},
{
"name": "clone-deep",
"direct": false,
"version": "4.0.1",
"ecosystem": "npm"
},
{
"name": "color-convert",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "color-name",
"direct": false,
"version": "1.1.4",
"ecosystem": "npm"
},
{
"name": "colorette",
"direct": false,
"version": "2.0.20",
"ecosystem": "npm"
},
{
"name": "commander",
"direct": false,
"version": "2.20.3",
"ecosystem": "npm"
},
{
"name": "commander",
"direct": false,
"version": "5.1.0",
"ecosystem": "npm"
},
{
"name": "commander",
"direct": false,
"version": "7.2.0",
"ecosystem": "npm"
},
{
"name": "common-path-prefix",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "concat-map",
"direct": false,
"version": "0.0.1",
"ecosystem": "npm"
},
{
"name": "convert-source-map",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "core-js-compat",
"direct": false,
"version": "3.48.0",
"ecosystem": "npm"
},
{
"name": "cross-spawn",
"direct": false,
"version": "7.0.6",
"ecosystem": "npm"
},
{
"name": "dayjs",
"direct": false,
"version": "1.11.19",
"ecosystem": "npm"
},
{
"name": "debounce",
"direct": false,
"version": "1.2.1",
"ecosystem": "npm"
},
{
"name": "debug",
"direct": false,
"version": "4.4.3",
"ecosystem": "npm"
},
{
"name": "deep-equal",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "define-data-property",
"direct": false,
"version": "1.1.4",
"ecosystem": "npm"
},
{
"name": "define-properties",
"direct": false,
"version": "1.2.1",
"ecosystem": "npm"
},
{
"name": "dunder-proto",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "duplexer",
"direct": false,
"version": "0.1.2",
"ecosystem": "npm"
},
{
"name": "electron-to-chromium",
"direct": false,
"version": "1.5.307",
"ecosystem": "npm"
},
{
"name": "emoji-regex",
"direct": false,
"version": "8.0.0",
"ecosystem": "npm"
},
{
"name": "emojis-list",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "enhanced-resolve",
"direct": false,
"version": "5.20.0",
"ecosystem": "npm"
},
{
"name": "envinfo",
"direct": false,
"version": "7.21.0",
"ecosystem": "npm"
},
{
"name": "es-define-property",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "es-errors",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "es-module-lexer",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "es-object-atoms",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "escalade",
"direct": false,
"version": "3.2.0",
"ecosystem": "npm"
},
{
"name": "escape-string-regexp",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "eslint-scope",
"direct": false,
"version": "5.1.1",
"ecosystem": "npm"
},
{
"name": "esrecurse",
"direct": false,
"version": "4.3.0",
"ecosystem": "npm"
},
{
"name": "estraverse",
"direct": false,
"version": "4.3.0",
"ecosystem": "npm"
},
{
"name": "estraverse",
"direct": false,
"version": "5.3.0",
"ecosystem": "npm"
},
{
"name": "esutils",
"direct": false,
"version": "2.0.3",
"ecosystem": "npm"
},
{
"name": "events",
"direct": false,
"version": "3.3.0",
"ecosystem": "npm"
},
{
"name": "exenv",
"direct": false,
"version": "1.2.2",
"ecosystem": "npm"
},
{
"name": "fast-deep-equal",
"direct": false,
"version": "3.1.3",
"ecosystem": "npm"
},
{
"name": "fast-glob",
"direct": false,
"version": "3.3.3",
"ecosystem": "npm"
},
{
"name": "fast-json-stable-stringify",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "fast-uri",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "fastest-levenshtein",
"direct": false,
"version": "1.0.16",
"ecosystem": "npm"
},
{
"name": "fastq",
"direct": false,
"version": "1.20.1",
"ecosystem": "npm"
},
{
"name": "fill-range",
"direct": false,
"version": "7.1.1",
"ecosystem": "npm"
},
{
"name": "find-cache-dir",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "find-up",
"direct": false,
"version": "4.1.0",
"ecosystem": "npm"
},
{
"name": "find-up",
"direct": false,
"version": "6.3.0",
"ecosystem": "npm"
},
{
"name": "flarum-tsconfig",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "flarum-webpack-config",
"direct": false,
"version": "3.0.3",
"ecosystem": "npm"
},
{
"name": "flat",
"direct": false,
"version": "5.0.2",
"ecosystem": "npm"
},
{
"name": "fs.realpath",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "function-bind",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "functions-have-names",
"direct": false,
"version": "1.2.3",
"ecosystem": "npm"
},
{
"name": "gensync",
"direct": false,
"version": "1.0.0-beta.2",
"ecosystem": "npm"
},
{
"name": "get-intrinsic",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "get-proto",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "glob",
"direct": false,
"version": "7.2.3",
"ecosystem": "npm"
},
{
"name": "glob-parent",
"direct": false,
"version": "5.1.2",
"ecosystem": "npm"
},
{
"name": "glob-to-regexp",
"direct": false,
"version": "0.4.1",
"ecosystem": "npm"
},
{
"name": "gopd",
"direct": false,
"version": "1.2.0",
"ecosystem": "npm"
},
{
"name": "graceful-fs",
"direct": false,
"version": "4.2.11",
"ecosystem": "npm"
},
{
"name": "gud",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "gzip-size",
"direct": false,
"version": "6.0.0",
"ecosystem": "npm"
},
{
"name": "has-flag",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "has-property-descriptors",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "has-symbols",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "has-tostringtag",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "hasown",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "html-escaper",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "import-local",
"direct": false,
"version": "3.2.0",
"ecosystem": "npm"
},
{
"name": "inflight",
"direct": false,
"version": "1.0.6",
"ecosystem": "npm"
},
{
"name": "inherits",
"direct": false,
"version": "2.0.4",
"ecosystem": "npm"
},
{
"name": "interpret",
"direct": false,
"version": "2.2.0",
"ecosystem": "npm"
},
{
"name": "is-arguments",
"direct": false,
"version": "1.2.0",
"ecosystem": "npm"
},
{
"name": "is-core-module",
"direct": false,
"version": "2.16.1",
"ecosystem": "npm"
},
{
"name": "is-date-object",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "is-extglob",
"direct": false,
"version": "2.1.1",
"ecosystem": "npm"
},
{
"name": "is-fullwidth-code-point",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "is-glob",
"direct": false,
"version": "4.0.3",
"ecosystem": "npm"
},
{
"name": "is-number",
"direct": false,
"version": "7.0.0",
"ecosystem": "npm"
},
{
"name": "is-plain-object",
"direct": false,
"version": "2.0.4",
"ecosystem": "npm"
},
{
"name": "is-regex",
"direct": false,
"version": "1.2.1",
"ecosystem": "npm"
},
{
"name": "isexe",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "isobject",
"direct": false,
"version": "3.0.1",
"ecosystem": "npm"
},
{
"name": "jest-worker",
"direct": false,
"version": "27.5.1",
"ecosystem": "npm"
},
{
"name": "js-tokens",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "jsesc",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "json-parse-even-better-errors",
"direct": false,
"version": "2.3.1",
"ecosystem": "npm"
},
{
"name": "json-schema-traverse",
"direct": false,
"version": "0.4.1",
"ecosystem": "npm"
},
{
"name": "json-schema-traverse",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "json5",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "json5",
"direct": false,
"version": "2.2.3",
"ecosystem": "npm"
},
{
"name": "keyboard-key",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "kind-of",
"direct": false,
"version": "6.0.3",
"ecosystem": "npm"
},
{
"name": "loader-runner",
"direct": false,
"version": "4.3.1",
"ecosystem": "npm"
},
{
"name": "loader-utils",
"direct": false,
"version": "1.4.2",
"ecosystem": "npm"
},
{
"name": "locate-path",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "locate-path",
"direct": false,
"version": "7.2.0",
"ecosystem": "npm"
},
{
"name": "lodash",
"direct": false,
"version": "4.17.23",
"ecosystem": "npm"
},
{
"name": "lodash.debounce",
"direct": false,
"version": "4.0.8",
"ecosystem": "npm"
},
{
"name": "loose-envify",
"direct": false,
"version": "1.4.0",
"ecosystem": "npm"
},
{
"name": "lru-cache",
"direct": false,
"version": "5.1.1",
"ecosystem": "npm"
},
{
"name": "math-intrinsics",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "merge-stream",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "merge2",
"direct": false,
"version": "1.4.1",
"ecosystem": "npm"
},
{
"name": "micromatch",
"direct": false,
"version": "4.0.8",
"ecosystem": "npm"
},
{
"name": "mime-db",
"direct": false,
"version": "1.52.0",
"ecosystem": "npm"
},
{
"name": "mime-types",
"direct": false,
"version": "2.1.35",
"ecosystem": "npm"
},
{
"name": "minimatch",
"direct": false,
"version": "10.2.4",
"ecosystem": "npm"
},
{
"name": "minimatch",
"direct": false,
"version": "3.1.5",
"ecosystem": "npm"
},
{
"name": "minimist",
"direct": false,
"version": "1.2.8",
"ecosystem": "npm"
},
{
"name": "mrmime",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "ms",
"direct": false,
"version": "2.1.3",
"ecosystem": "npm"
},
{
"name": "ncp",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "neo-async",
"direct": false,
"version": "2.6.2",
"ecosystem": "npm"
},
{
"name": "node-releases",
"direct": false,
"version": "2.0.36",
"ecosystem": "npm"
},
{
"name": "normalize-path",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "object-assign",
"direct": false,
"version": "4.1.1",
"ecosystem": "npm"
},
{
"name": "object-is",
"direct": false,
"version": "1.1.6",
"ecosystem": "npm"
},
{
"name": "object-keys",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "once",
"direct": false,
"version": "1.4.0",
"ecosystem": "npm"
},
{
"name": "opener",
"direct": false,
"version": "1.5.2",
"ecosystem": "npm"
},
{
"name": "p-limit",
"direct": false,
"version": "2.3.0",
"ecosystem": "npm"
},
{
"name": "p-limit",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "p-locate",
"direct": false,
"version": "4.1.0",
"ecosystem": "npm"
},
{
"name": "p-locate",
"direct": false,
"version": "6.0.0",
"ecosystem": "npm"
},
{
"name": "p-try",
"direct": false,
"version": "2.2.0",
"ecosystem": "npm"
},
{
"name": "path-exists",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "path-exists",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "path-is-absolute",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "path-key",
"direct": false,
"version": "3.1.1",
"ecosystem": "npm"
},
{
"name": "path-parse",
"direct": false,
"version": "1.0.7",
"ecosystem": "npm"
},
{
"name": "picocolors",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "picomatch",
"direct": false,
"version": "2.3.2",
"ecosystem": "npm"
},
{
"name": "pkg-dir",
"direct": false,
"version": "4.2.0",
"ecosystem": "npm"
},
{
"name": "pkg-dir",
"direct": false,
"version": "7.0.0",
"ecosystem": "npm"
},
{
"name": "popper.js",
"direct": false,
"version": "1.16.1",
"ecosystem": "npm"
},
{
"name": "prettier",
"direct": false,
"version": "3.8.1",
"ecosystem": "npm"
},
{
"name": "prop-types",
"direct": false,
"version": "15.8.1",
"ecosystem": "npm"
},
{
"name": "punycode",
"direct": false,
"version": "2.3.1",
"ecosystem": "npm"
},
{
"name": "queue-microtask",
"direct": false,
"version": "1.2.3",
"ecosystem": "npm"
},
{
"name": "react",
"direct": false,
"version": "16.14.0",
"ecosystem": "npm"
},
{
"name": "react-dom",
"direct": false,
"version": "16.14.0",
"ecosystem": "npm"
},
{
"name": "react-is",
"direct": false,
"version": "16.13.1",
"ecosystem": "npm"
},
{
"name": "react-popper",
"direct": false,
"version": "1.3.11",
"ecosystem": "npm"
},
{
"name": "rechoir",
"direct": false,
"version": "0.7.1",
"ecosystem": "npm"
},
{
"name": "regenerate",
"direct": false,
"version": "1.4.2",
"ecosystem": "npm"
},
{
"name": "regenerate-unicode-properties",
"direct": false,
"version": "10.2.2",
"ecosystem": "npm"
},
{
"name": "regexp.prototype.flags",
"direct": false,
"version": "1.5.4",
"ecosystem": "npm"
},
{
"name": "regexpu-core",
"direct": false,
"version": "6.4.0",
"ecosystem": "npm"
},
{
"name": "regjsgen",
"direct": false,
"version": "0.8.0",
"ecosystem": "npm"
},
{
"name": "regjsparser",
"direct": false,
"version": "0.13.0",
"ecosystem": "npm"
},
{
"name": "require-from-string",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "resolve",
"direct": false,
"version": "1.22.11",
"ecosystem": "npm"
},
{
"name": "resolve-cwd",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "resolve-from",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "reusify",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "rimraf",
"direct": false,
"version": "3.0.2",
"ecosystem": "npm"
},
{
"name": "run-parallel",
"direct": false,
"version": "1.2.0",
"ecosystem": "npm"
},
{
"name": "scheduler",
"direct": false,
"version": "0.19.1",
"ecosystem": "npm"
},
{
"name": "schema-utils",
"direct": false,
"version": "3.3.0",
"ecosystem": "npm"
},
{
"name": "schema-utils",
"direct": false,
"version": "4.3.3",
"ecosystem": "npm"
},
{
"name": "semantic-ui-react",
"direct": false,
"version": "0.88.2",
"ecosystem": "npm"
},
{
"name": "semver",
"direct": false,
"version": "6.3.1",
"ecosystem": "npm"
},
{
"name": "set-function-length",
"direct": false,
"version": "1.2.2",
"ecosystem": "npm"
},
{
"name": "set-function-name",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "shallow-clone",
"direct": false,
"version": "3.0.1",
"ecosystem": "npm"
},
{
"name": "shallowequal",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "shebang-command",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "shebang-regex",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "sirv",
"direct": false,
"version": "2.0.4",
"ecosystem": "npm"
},
{
"name": "source-map",
"direct": false,
"version": "0.6.1",
"ecosystem": "npm"
},
{
"name": "source-map-support",
"direct": false,
"version": "0.5.21",
"ecosystem": "npm"
},
{
"name": "string-width",
"direct": false,
"version": "4.2.3",
"ecosystem": "npm"
},
{
"name": "strip-ansi",
"direct": false,
"version": "6.0.1",
"ecosystem": "npm"
},
{
"name": "supports-color",
"direct": false,
"version": "7.2.0",
"ecosystem": "npm"
},
{
"name": "supports-color",
"direct": false,
"version": "8.1.1",
"ecosystem": "npm"
},
{
"name": "supports-preserve-symlinks-flag",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "tapable",
"direct": false,
"version": "2.3.0",
"ecosystem": "npm"
},
{
"name": "terser",
"direct": false,
"version": "5.46.0",
"ecosystem": "npm"
},
{
"name": "terser-webpack-plugin",
"direct": false,
"version": "5.3.17",
"ecosystem": "npm"
},
{
"name": "to-regex-range",
"direct": false,
"version": "5.0.1",
"ecosystem": "npm"
},
{
"name": "totalist",
"direct": false,
"version": "3.0.1",
"ecosystem": "npm"
},
{
"name": "tslib",
"direct": false,
"version": "1.14.1",
"ecosystem": "npm"
},
{
"name": "tslib",
"direct": false,
"version": "2.8.1",
"ecosystem": "npm"
},
{
"name": "tsutils",
"direct": false,
"version": "3.21.0",
"ecosystem": "npm"
},
{
"name": "type-coverage-core",
"direct": false,
"version": "2.29.7",
"ecosystem": "npm"
},
{
"name": "typed-styles",
"direct": false,
"version": "0.0.7",
"ecosystem": "npm"
},
{
"name": "typescript",
"direct": false,
"version": "4.9.5",
"ecosystem": "npm"
},
{
"name": "typescript-coverage-report",
"direct": false,
"version": "0.6.4",
"ecosystem": "npm"
},
{
"name": "undici-types",
"direct": false,
"version": "7.18.2",
"ecosystem": "npm"
},
{
"name": "unicode-canonical-property-names-ecmascript",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "unicode-match-property-ecmascript",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "unicode-match-property-value-ecmascript",
"direct": false,
"version": "2.2.1",
"ecosystem": "npm"
},
{
"name": "unicode-property-aliases-ecmascript",
"direct": false,
"version": "2.2.0",
"ecosystem": "npm"
},
{
"name": "update-browserslist-db",
"direct": false,
"version": "1.2.3",
"ecosystem": "npm"
},
{
"name": "uri-js",
"direct": false,
"version": "4.4.1",
"ecosystem": "npm"
},
{
"name": "warning",
"direct": false,
"version": "4.0.3",
"ecosystem": "npm"
},
{
"name": "watchpack",
"direct": false,
"version": "2.5.1",
"ecosystem": "npm"
},
{
"name": "webpack",
"direct": false,
"version": "5.105.4",
"ecosystem": "npm"
},
{
"name": "webpack-bundle-analyzer",
"direct": false,
"version": "4.10.2",
"ecosystem": "npm"
},
{
"name": "webpack-cli",
"direct": false,
"version": "4.10.0",
"ecosystem": "npm"
},
{
"name": "webpack-merge",
"direct": false,
"version": "5.10.0",
"ecosystem": "npm"
},
{
"name": "webpack-sources",
"direct": false,
"version": "3.3.4",
"ecosystem": "npm"
},
{
"name": "which",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "wildcard",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "wrappy",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "ws",
"direct": false,
"version": "7.5.10",
"ecosystem": "npm"
},
{
"name": "yallist",
"direct": false,
"version": "3.1.1",
"ecosystem": "npm"
},
{
"name": "yocto-queue",
"direct": false,
"version": "1.2.2",
"ecosystem": "npm"
},
{
"name": "flarum/phpstan",
"direct": false,
"version": null,
"ecosystem": "packagist"
},
{
"name": "flarum/testing",
"direct": false,
"version": null,
"ecosystem": "packagist"
}
],
"collected": true,
"truncated": false,
"total_count": 396,
"direct_count": 2,
"indirect_count": 394
}
},
"maintainership": {
"issues": {
"open_prs": 6,
"merged_prs": 30,
"open_issues": 2,
"closed_ratio": 0.875,
"closed_issues": 14,
"closed_unmerged_prs": 14
},
"bus_factor": 1,
"bot_contributors": 1,
"top_contributors": [
{
"type": "User",
"login": "clarkwinkelmann",
"commits": 49,
"avatar_url": "https://avatars.githubusercontent.com/u/5264300?v=4"
},
{
"type": "User",
"login": "imorland",
"commits": 12,
"avatar_url": "https://avatars.githubusercontent.com/u/16573496?v=4"
},
{
"type": "User",
"login": "flarum-bot",
"commits": 6,
"avatar_url": "https://avatars.githubusercontent.com/u/39334649?v=4"
},
{
"type": "User",
"login": "iPurpl3x",
"commits": 5,
"avatar_url": "https://avatars.githubusercontent.com/u/18526076?v=4"
},
{
"type": "User",
"login": "manurohr",
"commits": 2,
"avatar_url": "https://avatars.githubusercontent.com/u/38522534?v=4"
},
{
"type": "User",
"login": "dsevillamartin",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/6401250?v=4"
},
{
"type": "User",
"login": "DavideIadeluca",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/146922689?v=4"
},
{
"type": "User",
"login": "adryserage",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/17680194?v=4"
}
],
"contributors_sampled": 8,
"top_contributor_share": 0.636
},
"quality_signals": {
"has_ci": true,
"has_tests": false,
"ci_workflows": [
"backend.yml",
"flarum-release-notification.yml",
"frontend.yml"
],
"has_docs_dir": false,
"linter_configs": [
"phpstan.neon"
],
"has_editorconfig": true,
"has_linter_config": true,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [
"yarn.lock"
],
"scorecard": {
"checks": [
{
"name": "Binary-Artifacts",
"score": 10,
"reason": "no binaries found in the repo",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
},
{
"name": "Branch-Protection",
"score": 0,
"reason": "branch protection not enabled on development/release branches",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": 3,
"reason": "6 out of 18 merged PRs checked by a CI test -- score normalized to 3",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
},
{
"name": "CII-Best-Practices",
"score": 0,
"reason": "no effort to earn an OpenSSF best practices badge detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
},
{
"name": "Code-Review",
"score": 1,
"reason": "Found 3/19 approved changesets -- score normalized to 1",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 10,
"reason": "project has 15 contributing companies or organizations",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": null,
"reason": "no workflows found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
},
{
"name": "Dependency-Update-Tool",
"score": 10,
"reason": "update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 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": 0,
"reason": "0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
},
{
"name": "Packaging",
"score": null,
"reason": "packaging workflow not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
},
{
"name": "Pinned-Dependencies",
"score": null,
"reason": "no dependencies found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 0,
"reason": "SAST tool is not run on all commits -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
},
{
"name": "Security-Policy",
"score": 10,
"reason": "security policy file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
},
{
"name": "Signed-Releases",
"score": null,
"reason": "no releases found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
},
{
"name": "Token-Permissions",
"score": null,
"reason": "No tokens found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
},
{
"name": "Vulnerabilities",
"score": 0,
"reason": "12 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "76c1d6ae21b05012e53a4f5536aa9d761adce265",
"ran_at": "2026-07-23T22:39:32Z",
"aggregate_score": 3.8,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": false,
"has_dependabot_config": false
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": "2026-06-24T00:21:27Z",
"oldest_open_prs": [
{
"number": 59,
"created_at": "2026-04-10T03:27:16Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 61,
"created_at": "2026-04-14T14:31:09Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 62,
"created_at": "2026-04-14T14:31:34Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 63,
"created_at": "2026-05-09T00:33:01Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 64,
"created_at": "2026-05-09T17:41:14Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 65,
"created_at": "2026-06-23T22:19:06Z",
"last_comment_at": null,
"last_comment_author": null
}
],
"last_merged_pr_at": "2026-03-25T23:03:50Z",
"ci_last_conclusion": "FAILURE",
"oldest_open_issues": [
{
"number": 47,
"created_at": "2024-07-10T13:45:39Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 66,
"created_at": "2026-06-27T18:06:24Z",
"last_comment_at": null,
"last_comment_author": null
}
]
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/FriendsOfFlarum/linguist",
"host": "github.com",
"name": "linguist",
"owner": "FriendsOfFlarum"
},
"metrics": {
"overall": {
"key": "overall",
"band": "moderate",
"name": "Overall health",
"note": null,
"notes": [],
"value": 55,
"inputs": {
"security": 50,
"vitality": 54,
"community": 40,
"governance": 66,
"engineering": 61
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "moderate",
"name": "Vitality",
"value": 54,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "at_risk",
"name": "Development activity",
"note": null,
"notes": [],
"value": 41,
"inputs": {
"commits_last_year": 11,
"human_commit_share": 0.875,
"days_since_last_push": 30,
"active_weeks_last_year": 4
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 30 days ago",
"points": 28.8,
"status": "partial",
"details": [
{
"code": "push_recency",
"params": {
"days": 30
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "4/52 weeks with commits",
"points": 2.8,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 4
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "11 commits in the last year",
"points": 9.7,
"status": "partial",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 11
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "good",
"name": "Release discipline",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 74,
"inputs": {
"releases_count": 16,
"latest_release_tag": "2.0.0-beta.1",
"releases_from_tags": false,
"days_since_latest_release": 139,
"mean_days_between_releases": 179.1
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "16 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 16
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 139 days ago",
"points": 27,
"status": "partial",
"details": [
{
"code": "release_recency",
"params": {
"days": 139
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~179.1 days",
"points": 12.6,
"status": "partial",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 179.1
}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"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": 139,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "last human commit 139 days ago",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_maintained",
"params": {
"days": 139
}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "at_risk",
"name": "Community & Adoption",
"value": 40,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "critical",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 20,
"inputs": {
"forks": 2,
"stars": 15,
"watchers": 3,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "15 stars",
"points": 18.6,
"status": "partial",
"details": [
{
"code": "stars",
"params": {
"count": 15
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "2 forks",
"points": 0,
"status": "missed",
"details": [
{
"code": "forks",
"params": {
"count": 2
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "3 watchers",
"points": 1.7,
"status": "partial",
"details": [
{
"code": "watchers",
"params": {
"count": 3
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "moderate",
"name": "Community health",
"note": null,
"notes": [],
"value": 57,
"inputs": {
"has_readme": true,
"has_license": true,
"has_contributing": false,
"has_issue_template": false,
"has_code_of_conduct": false,
"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 (MIT)",
"points": 22.5,
"status": "met",
"details": [
{
"code": "license_standard",
"params": {}
},
{
"code": "license_spdx",
"params": {
"spdx": "MIT"
}
}
],
"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": 0,
"status": "missed",
"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
}
]
},
{
"key": "ecosystem_adoption",
"band": "at_risk",
"name": "Ecosystem adoption (downloads)",
"note": null,
"notes": [],
"value": 49,
"inputs": {
"packages": [
"fof/linguist"
],
"dependents": 4,
"ecosystems": "packagist",
"total_downloads": 113696,
"monthly_downloads": 2251
},
"components": [
{
"key": "monthly_downloads",
"name": "Monthly downloads",
"detail": "2,251 downloads/month across packagist",
"points": 44.7,
"status": "partial",
"details": [
{
"code": "downloads_monthly",
"params": {
"count": 2251,
"ecosystems": "packagist"
}
}
],
"max_points": 80
},
{
"key": "registry_dependents",
"name": "Registry dependents",
"detail": "4 packages depend on it",
"points": 4.7,
"status": "partial",
"details": [
{
"code": "registry_dependents",
"params": {
"count": 4
}
}
],
"max_points": 20
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "moderate",
"name": "Sustainability & Governance",
"value": 66,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "at_risk",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 38,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 8,
"top_contributor_share": 0.636
},
"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 64% of commits",
"points": 8.2,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 64
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "8 contributors",
"points": 10.8,
"status": "partial",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 8
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 15 contributing companies or organizations",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "moderate",
"name": "Issue & PR responsiveness",
"note": null,
"notes": [],
"value": 68,
"inputs": {
"merged_prs": 30,
"open_issues": 2,
"closed_issues": 14,
"issue_closed_ratio": 0.875,
"closed_unmerged_prs": 14
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "88% of issues closed",
"points": 40.9,
"status": "partial",
"details": [
{
"code": "issues_closed_share",
"params": {
"share": 88
}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "30/44 decided PRs merged",
"points": 26.1,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 30,
"decided": 44
}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 3/19 approved changesets -- score normalized to 1",
"points": 1.5,
"status": "partial",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "moderate",
"name": "Ownership & stewardship",
"note": null,
"notes": [],
"value": 69,
"inputs": {
"followers": 101,
"owner_type": "Organization",
"is_verified": null,
"owner_login": "FriendsOfFlarum",
"public_repos": 105,
"account_age_days": 2866
},
"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": "101 followers of FriendsOfFlarum",
"points": 14.4,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 101,
"login": "FriendsOfFlarum"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "105 public repos, account ~7 yr old",
"points": 25,
"status": "met",
"details": [
{
"code": "public_repos",
"params": {
"count": 105
}
},
{
"code": "account_age_years",
"params": {
"years": 7
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "excellent",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"fof/linguist"
],
"ecosystems": "packagist",
"any_deprecated": false,
"min_days_since_publish": 139
},
"components": [
{
"key": "published_resolvable",
"name": "Published & resolvable",
"detail": "1 package(s) on packagist",
"points": 25,
"status": "met",
"details": [
{
"code": "packages_published",
"params": {
"count": 1,
"ecosystems": "packagist"
}
}
],
"max_points": 25
},
{
"key": "publish_recency",
"name": "Publish recency",
"detail": "latest publish 139 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 139
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "29 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 29
}
}
],
"max_points": 20
},
{
"key": "not_deprecated",
"name": "Not deprecated",
"detail": "active, not deprecated or yanked",
"points": 20,
"status": "met",
"details": [
{
"code": "package_not_deprecated",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
},
{
"key": "engineering",
"band": "moderate",
"name": "Engineering Quality",
"value": 61,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "moderate",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 52,
"inputs": {
"has_ci": true,
"has_tests": false,
"has_editorconfig": true,
"has_linter_config": true,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "3 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 3
}
}
],
"max_points": 24
},
{
"key": "tests_present",
"name": "Tests present",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 24
},
{
"key": "linter_config",
"name": "Linter config",
"detail": "phpstan.neon",
"points": 16,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "phpstan.neon"
}
}
],
"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": 6.4,
"status": "met",
"details": [],
"max_points": 6.4
},
{
"key": "openssf_scorecard_ci_tests",
"name": "OpenSSF Scorecard: CI-Tests",
"detail": "6 out of 18 merged PRs checked by a CI test -- score normalized to 3",
"points": 6,
"status": "partial",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "good",
"name": "Documentation",
"note": null,
"notes": [],
"value": 75,
"inputs": {
"topics": [
"flarum",
"flagrow",
"linguist",
"translation-key",
"translation"
],
"has_wiki": true,
"homepage": "https://discuss.flarum.org/d/7026",
"has_readme": true,
"has_docs_dir": false,
"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": 0,
"status": "missed",
"details": [],
"max_points": 25
},
{
"key": "documentation_homepage_site",
"name": "Documentation / homepage site",
"detail": "https://discuss.flarum.org/d/7026",
"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": "5 topics",
"points": 10,
"status": "met",
"details": [
{
"code": "topics_count",
"params": {
"count": 5
}
}
],
"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": 50,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "at_risk",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): Dangerous-Workflow, Packaging, Pinned-Dependencies, Signed-Releases, Token-Permissions. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"dangerous_workflow",
"packaging",
"pinned_dependencies",
"signed_releases",
"token_permissions"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 38,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 13,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 5,
"scorecard_aggregate": 3.8
},
"components": [
{
"key": "binary_artifacts",
"name": "Binary-Artifacts",
"detail": "no binaries found in the repo",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "branch_protection",
"name": "Branch-Protection",
"detail": "branch protection not enabled on development/release branches",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "6 out of 18 merged PRs checked by a CI test -- score normalized to 3",
"points": 0.8,
"status": "partial",
"details": [],
"max_points": 2.5
},
{
"key": "cii_best_practices",
"name": "CII-Best-Practices",
"detail": "no effort to earn an OpenSSF best practices badge detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "code_review",
"name": "Code-Review",
"detail": "Found 3/19 approved changesets -- score normalized to 1",
"points": 0.8,
"status": "partial",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 15 contributing companies or organizations",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "dangerous_workflow",
"name": "Dangerous-Workflow",
"detail": "no workflows found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
},
{
"key": "dependency_update_tool",
"name": "Dependency-Update-Tool",
"detail": "update tool detected",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is 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": "0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "packaging",
"name": "Packaging",
"detail": "packaging workflow not detected",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 5
},
{
"key": "pinned_dependencies",
"name": "Pinned-Dependencies",
"detail": "no dependencies found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 5
},
{
"key": "sast",
"name": "SAST",
"detail": "SAST tool is not run on all commits -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "security_policy",
"name": "Security-Policy",
"detail": "security policy file detected",
"points": 5,
"status": "met",
"details": [],
"max_points": 5
},
{
"key": "signed_releases",
"name": "Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "token_permissions",
"name": "Token-Permissions",
"detail": "No tokens found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "vulnerabilities",
"name": "Vulnerabilities",
"detail": "12 existing vulnerabilities detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "dependency_advisories",
"band": "excellent",
"name": "Dependency advisories",
"note": "Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories, No advisories left outstanding. Remaining weights renormalized. Matched 392 resolved dependencies against OSV; 4 could not be assessed (no resolved version, an unsupported ecosystem, or beyond the reported package list). This repository publishes no package the index resolves, so the repository dependency graph was assessed instead. That graph mixes development and test pins with shipped dependencies, so only the declared runtime dependencies are scored; transitive findings are reported as context and excluded from the score. Reachability is not analyzed.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"indirect_dependencies_free_of_known_advisories",
"no_advisories_left_outstanding"
]
}
},
{
"code": "weights_renormalized",
"params": {}
},
{
"code": "advisories_scope_repository",
"params": {
"assessed": 392
}
},
{
"code": "advisories_unassessed",
"params": {
"count": 4
}
},
{
"code": "advisories_repo_graph_caveat",
"params": {}
},
{
"code": "advisories_reachability",
"params": {}
}
],
"value": 100,
"inputs": {
"source": "osv",
"advisories": 14,
"affected_packages": 7,
"assessed_packages": 392,
"unassessed_packages": 4,
"affected_by_severity": "high 6, low 1",
"direct_affected_packages": 0
},
"components": [
{
"key": "direct_dependencies_free_of_known_advisories",
"name": "Direct dependencies free of known advisories",
"detail": "no direct dependency carries a known advisory",
"points": 35,
"status": "met",
"details": [
{
"code": "no_direct_advisories",
"params": {}
}
],
"max_points": 35
},
{
"key": "indirect_dependencies_free_of_known_advisories",
"name": "Indirect dependencies free of known advisories",
"detail": "transitive set not separable from development and test dependencies in this scope",
"points": 0,
"status": "excluded",
"details": [
{
"code": "advisories_scope_not_separable",
"params": {}
}
],
"max_points": 25
},
{
"key": "no_advisories_left_outstanding",
"name": "No advisories left outstanding",
"detail": "no advisory carries a publication date",
"points": 0,
"status": "excluded",
"details": [
{
"code": "advisories_no_publication_date",
"params": {}
}
],
"max_points": 40
}
]
},
{
"key": "malicious_dependencies",
"band": "excellent",
"name": "Malicious dependencies",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"source": "osv",
"meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
"packages": [],
"red_flag": false,
"assessed_packages": 392,
"malicious_packages": 0,
"direct_malicious_packages": 0,
"withdrawn_malicious_packages": 0,
"installable_malicious_packages": 0
},
"components": [
{
"key": "no_dependency_reported_as_a_malicious_package",
"name": "No dependency reported as a malicious package",
"detail": "no dependency is reported as a malicious package",
"points": 100,
"status": "met",
"details": [
{
"code": "no_malicious_dependencies",
"params": {}
}
],
"max_points": 100
}
]
},
{
"key": "high_risk_jurisdiction_exposure",
"band": "excellent",
"name": "High-Risk Jurisdiction Exposure",
"note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
"notes": [
{
"code": "jurisdiction_evidence_limits",
"params": {}
}
],
"value": 100,
"inputs": {
"meaning": "self-published location evidence; not nationality or citizenship",
"red_flag": false,
"exposures": [],
"policy_countries": [
"Russia",
"Iran",
"North Korea"
],
"review_only_matches": 0,
"assessed_self_published_locations": 15
},
"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": "at_risk",
"name": "AI Readiness",
"value": 44,
"weight": 0,
"metrics": [
{
"key": "ai_agent_context",
"band": "critical",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 16,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 0.299,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "no CLAUDE.md / AGENTS.md / editor rules",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_agent_instructions",
"params": {}
}
],
"max_points": 45
},
{
"key": "machine_readable_docs_llms_txt",
"name": "Machine-readable docs (llms.txt)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "legible_commit_history",
"name": "Legible commit history",
"detail": "23 of 77 human commits state their intent (structured subject or explanatory body)",
"points": 15.9,
"status": "partial",
"details": [
{
"code": "legible_history",
"params": {
"legible": 23,
"sampled": 77
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "at_risk",
"name": "Verify loop (build / test / typecheck)",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Pinned-Dependencies. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_pinned_dependencies"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 44,
"inputs": {
"has_nix": false,
"has_tests": false,
"lockfiles": [
"yarn.lock"
],
"has_dockerfile": false,
"typed_language": true,
"bootstrap_files": [],
"has_devcontainer": false,
"has_linter_config": true,
"typecheck_configs": [
"js/tsconfig.json"
],
"agent_commit_share": 0,
"toolchain_manifests": [],
"dependency_bot_commit_share": 0.125
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "automated_tests",
"name": "Automated tests",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 22
},
{
"key": "lint_format_config",
"name": "Lint / format config",
"detail": "phpstan.neon",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "phpstan.neon"
}
}
],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": "js/tsconfig.json",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "js/tsconfig.json"
}
}
],
"max_points": 11
},
{
"key": "reproducible_environment",
"name": "Reproducible environment",
"detail": "lockfile",
"points": 10,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "lockfile"
}
}
],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "no agent-authored commits among the last 88",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_agent_authored_commits",
"params": {
"sampled": 88
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "11 of the last 88 commits are automated dependency updates",
"points": 8,
"status": "met",
"details": [
{
"code": "dependency_bot_commits",
"params": {
"count": 11,
"sampled": 88
}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "no dependencies found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "excellent",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"primary_language": "TypeScript",
"largest_source_bytes": 28068,
"source_files_sampled": 53,
"oversized_source_files": 0
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "TypeScript (statically typed)",
"points": 45,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "TypeScript"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "0/53 source files over 60KB",
"points": 55,
"status": "met",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 53,
"oversized": 0
}
}
],
"max_points": 55
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
}
],
"metrics_version": "1.13.0"
},
"warnings": [
"Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token"
],
"report_type": "repository",
"generated_at": "2026-07-23T22:39:56.576073Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/f/FriendsOfFlarum/linguist.svg",
"full_name": "FriendsOfFlarum/linguist",
"license_state": "standard",
"license_spdx": "MIT"
}