原始 JSON 报告 机器可读
{
"data": {
"repo": {
"topics": [
"litejs",
"framework",
"server"
],
"is_fork": false,
"size_kb": 339,
"has_wiki": true,
"homepage": "https://litejs.com",
"languages": {
"JavaScript": 103422
},
"pushed_at": "2026-07-20T16:23:56Z",
"created_at": "2020-11-27T14:20:18Z",
"owner_type": "Organization",
"updated_at": "2026-07-20T16:18:06Z",
"description": "Server side for LiteJS full-stack framework ",
"is_archived": false,
"is_disabled": false,
"license_spdx": null,
"default_branch": "main",
"license_spdx_raw": null,
"primary_language": "JavaScript",
"significant_languages": [
"JavaScript"
]
},
"owner": {
"blog": "https://litejs.com/",
"name": "LiteJS",
"type": "Organization",
"login": "litejs",
"company": null,
"location": "Estonia",
"followers": 10,
"avatar_url": "https://avatars.githubusercontent.com/u/3809611?v=4",
"created_at": "2013-03-08T14:32:58Z",
"is_verified": null,
"public_repos": 30,
"account_age_days": 4888
},
"license": {
"state": "absent",
"spdx_id": null,
"raw_spdx": null,
"file_present": false,
"scorecard_found": false,
"profile_has_license": false
},
"activity": {
"releases": [
{
"tag": "v25.1.1",
"kind": "patch",
"published_at": "2026-07-20T16:23:56Z"
},
{
"tag": "v25.1.0",
"kind": "minor",
"published_at": "2025-01-01T12:55:33Z"
},
{
"tag": "v24.0.0-rc.8",
"kind": "prerelease",
"published_at": "2024-05-13T20:31:27Z"
},
{
"tag": "v24.0.0-rc.7",
"kind": "prerelease",
"published_at": "2024-01-05T10:15:28Z"
}
],
"recent_commits": [
{
"oid": "a27ef33d019f2f35a88f74261f19c19485cc0946",
"body": "Fixes:\n\n - static: Fix root boundary path traversal (Lauri Rooden)",
"is_bot": false,
"headline": "Release v25.1.1",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2026-07-20T16:16:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "490ab1303a33938ff749873231bea7562a0e91c6",
"body": "Sibling directory with same prefix as static root passed the boundary check.\nEg. static with root /www/root folder /www/rootSecret could be accessed.\n\nFixes GHSA-m9j4-89fv-xg74",
"is_bot": false,
"headline": "static: Fix root boundary path traversal",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2026-07-20T15:50:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e630956643fe93ffa0c2e568ca55b194e2f43e66",
"body": "New Features:\n\n - Add type utility functions (Lauri Rooden)\n\nEnhancements:\n\n - Upgrade libs (Lauri Rooden)",
"is_bot": false,
"headline": "Release v25.1.0",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2025-01-01T12:53:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "942cdc4689fd4625d9ea481fdbdf90406704d6a5",
"body": null,
"is_bot": false,
"headline": "Upgrade libs",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2025-01-01T12:49:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fe1c41b31f92fd3499e8ad6bb8524aa4d62c564e",
"body": null,
"is_bot": false,
"headline": "Add type utility functions",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2024-11-21T12:02:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6f3bf9fa1b359a4cddbf18c261dcb46d95ec565f",
"body": "-- git fetch;git merge-base --is-ancestor @{upstream} HEAD\n\n-- rm -rf node_modules;npm install\nadded 2 packages, and audited 3 packages in 2s\n\nfound 0 vulnerabilities\n\n-- lj lint\n# Lint OK 1 files\n\n-- npm outdated\n\n-- ! git rev-parse -q --verify v24.0.0-rc.8\n\n-- lj build\nNothing to build, use --out=build/index.html\n\n-- lj test --brief test/index.js\n# pass 39/39 [5440/5440] in 202 ms at 23:29:05",
"is_bot": false,
"headline": "Release v24.0.0-rc.8",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2024-05-13T20:29:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bcb73fe2c82cc887e82448d8b72e231a9ab2b8c4",
"body": null,
"is_bot": false,
"headline": "server: Cleanup",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2024-05-13T20:11:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6cda582019cae6d87d02ac678e3e58004d7f349d",
"body": null,
"is_bot": false,
"headline": "server: Bind `use`",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2024-05-13T20:11:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "71fc2785a77a355c295393aa86d35b315732c44a",
"body": null,
"is_bot": false,
"headline": "ci: Install jshint in workflow",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2024-05-13T19:52:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "db3093ae72c0e45760b013d38561981f0fe7093d",
"body": null,
"is_bot": false,
"headline": "ci: Verify release tag signature",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2024-05-13T19:42:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "48225dc3928f002506ebd9e046796e30ab870ad4",
"body": null,
"is_bot": false,
"headline": "Extract router from ui",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2024-05-13T18:44:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6ec5b708318df3c0334148dedab0ec39a85d0275",
"body": "-- npm outdated\nPackage Current Wanted Latest Location Depended by\n@litejs/cli 23.3.3 23.9.0 23.12.0 node_modules/@litejs/cli litejs\n\n-- npm outdated -g jshint c8\nPackage Current Wanted Latest Location Depended by\nc8 7.13.0 9.0.0 9.0.0 node_modules/c8 lib\n\n-- ! git rev-parse -q --verify v24.0.0-rc.7\n\n-- lj test --brief test/index.js\n# pass 37/37 [5432/5432] in 185 ms at 12:01:29",
"is_bot": false,
"headline": "Release v24.0.0-rc.7",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2024-01-05T10:13:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ea595cb9d3218cbc110788327d7876b8eda8ec9d",
"body": null,
"is_bot": false,
"headline": "util: Add fast case if cidr === ip in ipInNet",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2024-01-05T09:45:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "24c4e1e5eeaa1817ff74e05332a4cb5d5ef1453c",
"body": null,
"is_bot": false,
"headline": "util: Accept cidr /32 in ipInNet",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2023-12-11T07:26:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bdfb4b9d7578e279b6972a787b64456a287d7d89",
"body": null,
"is_bot": false,
"headline": "util: Add uuid5, return Uint8Array as uuid",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2023-12-04T21:07:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0b9e137f6d28ec6f8b7750b209524d92aa42c5c3",
"body": null,
"is_bot": false,
"headline": "Cleanup",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2023-12-01T15:48:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "be7f688d24a6b6dd66ae9fb9f92398a618bc88d9",
"body": null,
"is_bot": false,
"headline": "Fix headers",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2023-11-10T20:41:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f59a7678f2bd2b18745e736e9f54d4fda22cb0f7",
"body": null,
"is_bot": false,
"headline": "Fix using protoHeader",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2023-11-10T20:17:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6986a42e22d5a6a38aa3928d7c6f6e46f0497e24",
"body": null,
"is_bot": false,
"headline": "server: Improve setCookie to override existing cookie",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2023-11-10T17:44:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7fcb39bcfa6477561bd344a327a9acfbad7d275c",
"body": null,
"is_bot": false,
"headline": "server: Add req.protocol/secure/rootUrl",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2023-11-10T16:35:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "637bca24748bbbceadcea2784c3f0f6d532efbe7",
"body": null,
"is_bot": false,
"headline": "server: Use Clear-Site-Data for Cookie fixation",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2023-11-10T16:34:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "791e41f57db539a631346a84715859690a3ef3f6",
"body": null,
"is_bot": false,
"headline": "server: Fill opts.error on createServer",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2023-11-05T10:59:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8147342115532136a029bd7993baea642af0c882",
"body": null,
"is_bot": false,
"headline": "! server: Change res.link attribute order",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2023-11-05T10:53:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b59c612ddcaf98801b34fcff8e73e4ad705fefca",
"body": null,
"is_bot": false,
"headline": "server: Handle HEAD as GET",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2023-11-05T10:39:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3216a78ec374eb0341d00a07fc73a691ac96f099",
"body": null,
"is_bot": false,
"headline": "server: Fix merging headers",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2023-11-05T10:32:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "05ea33f15aac2f02760d3ad92971bff4906711ff",
"body": null,
"is_bot": false,
"headline": "server: Fill defaultOpts.error with node error statuses",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2023-11-05T08:53:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bd4ddadc8d8d63ea5f753e093be76f696e21b95b",
"body": null,
"is_bot": false,
"headline": "server: Remove Content-Length: 0 from 204, 205, 304",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2023-11-04T20:18:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3441ea054a43d7a8fba601a7098c7f01a8855b7a",
"body": null,
"is_bot": false,
"headline": "server: Use http module status codes",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2023-11-04T20:13:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "26f818efcbf411c5b892ed769a6a1ff928831ec8",
"body": null,
"is_bot": false,
"headline": "server: Handle number in sendError",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2023-11-04T19:58:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4b48f4ab4f0587d2aa49a03a502689dcfe53e1c6",
"body": null,
"is_bot": false,
"headline": "content: Use path.join for savePath",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2023-11-04T16:15:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6d057a45e935e8101b27b508c803c25cfae97870",
"body": null,
"is_bot": false,
"headline": "Mention three pagages in Readme",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2023-11-04T14:06:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f4f2d8a583f1ca29d47d1c73ca0fc258fbba85f1",
"body": null,
"is_bot": false,
"headline": "Remove lineEmitter",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2023-11-04T09:58:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f7e37848c729ecd14cee6d09335b0a57aefe4a5b",
"body": null,
"is_bot": false,
"headline": "Remove fs.copyFile shim",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2023-11-04T09:53:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "385936f66c37f075af83b7c28d0eb8587932aa05",
"body": null,
"is_bot": false,
"headline": "! Separate server and content conf",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2023-11-03T14:16:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "668110607a955ef9433747eba0d8212f240ddc0c",
"body": "-- npm outdated\n\n-- npm outdated -g jshint c8\nPackage Current Wanted Latest Location Depended by\nc8 7.12.0 8.0.1 8.0.1 node_modules/c8 lib\njshint 2.13.5 2.13.6 2.13.6 node_modules/jshint lib\n\n-- ! git rev-parse -q --verify v24.0.0-rc.1\n\n-- lj test --brief test/index.js\n# pass 30/30 [5402/5402] in 183 ms at 10:22:27",
"is_bot": false,
"headline": "Release v24.0.0-rc.1",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2023-11-03T08:22:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0799204f8f897273b2f9225b541a715943663ccd",
"body": null,
"is_bot": false,
"headline": "Cleanup",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2023-11-02T11:44:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f583f67850a979813bf2825f16a0a0ea828c9c94",
"body": null,
"is_bot": false,
"headline": "Remove i18n.js",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2023-11-01T18:33:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a38f4f837f94bc4ef903c96b0f0c0ca479add470",
"body": null,
"is_bot": false,
"headline": "Remove json.js",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2023-11-01T18:33:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c7df17a226ececbee593cfee1a1076ac3f491994",
"body": null,
"is_bot": false,
"headline": "Remove readBody middleware",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2023-11-01T17:57:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "37018c39c3ea9dabd98cb909558bdf4edb4adb6d",
"body": null,
"is_bot": false,
"headline": "Use native path module",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2023-11-01T17:57:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "58140f5ecbd7f5399b96f7df804900d9678006d4",
"body": null,
"is_bot": false,
"headline": "Rename app.static to litejs.createStatic",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2023-11-01T17:57:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "76a5451d0b892e4e62c4adb6e1afe0fab4ae909a",
"body": null,
"is_bot": false,
"headline": "Rename exports.server to exports.createServer",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2023-11-01T17:57:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "00b02ee0b6bbba0c8bde3760387c7a94db744385",
"body": null,
"is_bot": false,
"headline": "Remove iotjs shims",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2023-11-01T17:57:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "812f0c3839c91fa24ad237df1ffa5908c88f4d7f",
"body": null,
"is_bot": false,
"headline": "server: Fix rangeRe",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2023-06-17T21:31:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "148d752e73d82a26206514889706619b414bfb71",
"body": "-- npm outdated\n\n-- npm outdated -g jshint c8\n\n-- ! git rev-parse -q --verify v23.3.0\n\n-- lj test --brief test/index.js\nskip 24 - it should set global timezone\nskip 25 - it should set one time timezone\n# pass 62/62 [7092/7092] in 227 ms at 11:33:26\n# skip 2",
"is_bot": false,
"headline": "Release v23.3.0",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2023-03-23T09:33:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a1a9f18bd3647c0784dd9476afed3ce7ca828a14",
"body": null,
"is_bot": false,
"headline": "server: Fix cache maxAge",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2023-03-23T08:37:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6a15a8b7a314dcb579ff5be6d49d802161dd9bbb",
"body": null,
"is_bot": false,
"headline": "Catch unlinkSync",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2023-01-24T15:04:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7e26d0fc4f38e821f6d1574c4334a09f838151ae",
"body": null,
"is_bot": false,
"headline": "server: Modernise mime types",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2023-01-23T16:13:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "396bd7c0cd70d0f979ca9139cbd1813e78de54d5",
"body": null,
"is_bot": false,
"headline": "Improve test coverage",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2023-01-23T16:09:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "838b083c10b03d3924a2b96939be25ecbd2ae2ca",
"body": null,
"is_bot": false,
"headline": "Fix lint errors",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2023-01-23T14:26:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "62a0281f4dd5c3d5941f0009bd506aa240bef4b7",
"body": "-- git fetch;git merge-base --is-ancestor @{upstream} HEAD\n\n-- rm -rf node_modules;npm install\nadded 1 package, and audited 2 packages in 558ms\n\nfound 0 vulnerabilities\n\n-- npm outdated\n\n-- npm outdated -g @litejs/cli jscpd jshint c8\n\n-- ! git rev-parse -q --verify v22.12.0\n\n-- lj test --brief test/index.js\nskip 24 - it should set global timezone\nskip 25 - it should set one time timezone\n# pass 62/62 [7090/7090] in 224 ms at 18:07:18\n# skip 2",
"is_bot": false,
"headline": "Release v22.12.0",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2022-12-28T16:07:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "02f8ef762916e873cab3b82bba7f902b96a91bf3",
"body": null,
"is_bot": false,
"headline": "i18n: Handle '0' as 0 in number format",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2022-12-28T15:56:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9a4451302e7494f4561baa3dedcc747f895e07d4",
"body": null,
"is_bot": false,
"headline": "json: Add more tests",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2022-12-28T14:22:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e09aa8e239f9a8f350a6ee6d63bb1d79d5d62395",
"body": null,
"is_bot": false,
"headline": "Improve numRe",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2022-11-06T18:45:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1c5de507dde8723787ee094e43a7fd40ed28fb71",
"body": null,
"is_bot": false,
"headline": "Run CodeQL in workflow",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2022-11-06T18:34:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1cc495bedc01b42577f4b3850d86531f5d0b2e48",
"body": null,
"is_bot": false,
"headline": "Remove .github/FUNDING.yml",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2022-11-06T10:42:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "dd6fa6dffac7d7c86d50e99fd21027288fce4315",
"body": "-- git fetch;git merge-base --is-ancestor @{upstream} HEAD\n\n-- rm -rf node_modules;npm install\nup to date, audited 1 package in 186ms\n\nfound 0 vulnerabilities\n\n-- npm outdated\n\n-- npm outdated -g @litejs/cli jscpd jshint c8\n\n-- ! git rev-parse -q --verify v22.8.0\n\n-- lj test\nengine\n ✔ it should par\n[…]\need:12345 #59 [5/5]\n ✔ it should have lineEmitter #60 [2/2]\n ✔ it should resolve numbers #61 [32/32]\n ✔ it should have wait #62 [4/4]\n1..62\n# pass 62/62 [7075/7075] in 202 ms at 19:16:45\n# skip 2",
"is_bot": false,
"headline": "Release v22.8.0",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2022-08-31T16:16:52Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "acef657642471abc78cc0af1d64250b7fafacd9e",
"body": null,
"is_bot": false,
"headline": "json: Add `R` for relative time",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2022-08-31T16:07:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5ed5999b87cd522fada8dbe196a43d9121f8f225",
"body": null,
"is_bot": false,
"headline": "events: Reduce writes in loop",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2022-08-10T17:11:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bf8da56668569cdaccf081e0c1c5f0e26a0f8e0b",
"body": "-- git fetch;git merge-base --is-ancestor @{upstream} HEAD\n\n-- rm -rf node_modules;npm install\nup to date, audited 1 package in 182ms\n\nfound 0 vulnerabilities\n\n-- npm outdated\n\n-- npm outdated -g @litejs/cli jscpd jshint c8\n\n-- ! git rev-parse -q --verify v22.7.0\n\n-- lj test\nengine\n ✔ it should par\n[…]\need:12345 #59 [5/5]\n ✔ it should have lineEmitter #60 [2/2]\n ✔ it should resolve numbers #61 [32/32]\n ✔ it should have wait #62 [4/4]\n1..62\n# pass 62/62 [7061/7061] in 201 ms at 22:29:29\n# skip 2",
"is_bot": false,
"headline": "Release v22.7.0",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2022-07-18T19:29:34Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "1201eac009539816ac3f9e93af4ca64ab5138901",
"body": null,
"is_bot": false,
"headline": "json: Pass parameters to subqueries",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2022-07-18T19:29:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c016114ee86c89f5bdb2b4730798d83023786f05",
"body": "-- git fetch;git merge-base --is-ancestor @{upstream} HEAD\n\n-- rm -rf node_modules;npm install\nup to date, audited 1 package in 189ms\n\nfound 0 vulnerabilities\n\n-- npm outdated\n\n-- npm outdated -g @litejs/cli jscpd jshint c8\n\n-- ! git rev-parse -q --verify v22.5.0\n\n-- lj test\nengine\n ✔ it should par\n[…]\need:12345 #59 [5/5]\n ✔ it should have lineEmitter #60 [2/2]\n ✔ it should resolve numbers #61 [32/32]\n ✔ it should have wait #62 [4/4]\n1..62\n# pass 62/62 [7061/7061] in 208 ms at 23:26:05\n# skip 2",
"is_bot": false,
"headline": "Release v22.5.0",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2022-05-27T20:26:20Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "1526846527d508b000749f45b2434fef834e3864",
"body": null,
"is_bot": false,
"headline": "json: Add shallow clone of all changed paths to previous map",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2022-05-27T20:23:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "332282fadb56dd399b8c47a9c6b3fed87fc2a25c",
"body": null,
"is_bot": false,
"headline": "test: Separate true and false JSON.isObject() tests",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2022-05-21T20:28:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b9b283abe479bb97604840e14ef230a3fad42fb0",
"body": null,
"is_bot": false,
"headline": "Use pathFn directly in JSON.tr()",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2022-05-21T20:28:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "dcdb58e857a8f9b184a130c5b19d64bed809f9cd",
"body": null,
"is_bot": false,
"headline": "Use `===` in JSON.clone()",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2022-05-21T20:28:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "538812a72c9a43caffff41e5b3155feb092aab8e",
"body": null,
"is_bot": false,
"headline": "Apply linter rules",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2022-04-29T20:33:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8136ea08df358faa9f23095cec6b1971ad4c07e2",
"body": null,
"is_bot": false,
"headline": "ci: Install jshint",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2021-11-05T19:56:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ddaf4096e5bbc5315915bbbdb07eecffcfee3597",
"body": null,
"is_bot": false,
"headline": "Cleanup",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2021-11-03T16:46:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "46a8dcde81a1af0937572784ebc5fe541e178d43",
"body": "-- git fetch;git merge-base --is-ancestor @{upstream} HEAD\n\n-- jshint *.js\n\n-- rm -rf node_modules;npm install\nup to date, audited 1 package in 242ms\n\nfound 0 vulnerabilities\n\n-- npm outdated\n\n-- npm outdated -g @litejs/cli uglify-js jshint c8\n\n-- ! git rev-parse -q --verify v21.11.0\n\n-- lj test --brief\nskip 24 - it should set global timezone\nskip 25 - it should set one time timezone\n# pass 62/62 [7056/7056] in 234 ms at 22:30:25\n# skip 2",
"is_bot": false,
"headline": "Release 21.11.0",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2021-11-02T20:30:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "45737ea582eccf5714ae72e377f0489e9ac96572",
"body": null,
"is_bot": false,
"headline": "Use c8 for coverage",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2021-11-02T20:21:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fb9525e80ce90d0eabf26501bb8d9a8cc1ec23d1",
"body": null,
"is_bot": false,
"headline": "log: Add no-color option",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2021-11-02T20:03:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "142a43986dbcf89131de90a5df98d23c30ccd416",
"body": null,
"is_bot": false,
"headline": "server: Move defaultOpts to start of file",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2021-10-20T17:26:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4797c00ae2dc6f83cc8c8f5d58e2852efd97aac3",
"body": null,
"is_bot": false,
"headline": "Do not log env.DEBUG by default",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2021-09-24T11:41:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "030e15bab4d88a5c1448fe309b7aa7d0a6130f71",
"body": null,
"is_bot": false,
"headline": "server: Set mimeType for string bodys",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2021-08-26T09:05:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b18a5d55bc83bf19306e9eb6ee606028ecee42ad",
"body": "Handle this on app layer\napp\n.post(\"/pub\", ...)\n.use(litejs.static(\"/pub\", {fallthrough: false}))",
"is_bot": false,
"headline": "server: Drop otherMethod option from createStatic",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2021-08-26T08:41:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "860ea046409e4ab9f283c700e4570b7cb0ad7e1d",
"body": null,
"is_bot": false,
"headline": "server: Add fallthrough option to createStatic",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2021-08-26T08:41:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "37bf5a82dc2d04573b0f8a6b3fc1dbed1b49ed40",
"body": null,
"is_bot": false,
"headline": "server: Do not send body with status 205",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2021-08-24T15:45:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "126f7c536e8f691d2d8b5b841bd2a3892b90a9e9",
"body": null,
"is_bot": false,
"headline": "server: Take sendError from opts.catch",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2021-08-24T15:45:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "86f9e944debe6878e1333621f0633afb6acf1eaf",
"body": null,
"is_bot": false,
"headline": "server: Expose createApp.static",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2021-08-24T09:46:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9f0078b7777cee7ac935584831165a9b719d9863",
"body": null,
"is_bot": false,
"headline": "server: Use req.socket instead of req.connection",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2021-08-18T08:46:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d8c9f9f51031697531fc71afe8ee9dfb6fbd5601",
"body": null,
"is_bot": false,
"headline": "log: Move time to end of line",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2021-08-17T13:44:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4f2513c990c3c1911257f6f8be31cded5db04c83",
"body": "-- git fetch;git merge-base --is-ancestor @{upstream} HEAD\n\n-- jshint *.js\n\n-- rm -rf node_modules;npm install\nup to date, audited 1 package in 222ms\n\nfound 0 vulnerabilities\n\n-- npm outdated\n\n-- npm outdated -g @litejs/cli uglify-js jshint nyc\nPackage Current Wanted Latest Location \n[…]\n\n\n-- ! git rev-parse -q --verify v21.8.0\n\n-- lj test --brief\nskip 24 - it should set global timezone\nskip 25 - it should set one time timezone\n# pass 62/62 [7056/7056] in 227 ms at 14:18:13\n# skip 2",
"is_bot": false,
"headline": "Release 21.8.0",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2021-08-13T11:18:14Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "3e0fdb582d749837806a0d2538ea3bdaeeaa4c41",
"body": null,
"is_bot": false,
"headline": "Use buf.readUInt8() for iotjs",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2021-08-13T11:17:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1689215b732f04577f723e435125a259719c645c",
"body": null,
"is_bot": false,
"headline": "Add fs.copyFile polyfill for iotjs",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2021-08-13T10:36:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "feaa04e339fc8f1ce4c7fedbab736507a9876293",
"body": null,
"is_bot": false,
"headline": "i18n: Reuse variables to remove uglify-js warnings",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2021-07-09T10:28:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1d65582c9a54ca678cd2197ed828529c6959ff72",
"body": null,
"is_bot": false,
"headline": "i18n: Accept more chars for values in pick",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2021-07-02T10:11:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fd37087b5da6ca4670827a1e259ac01b6e6d128d",
"body": "-- git fetch;git merge-base --is-ancestor @{upstream} HEAD\n\n-- jshint *.js\n\n-- rm -rf node_modules;npm install\nup to date, audited 1 package in 179ms\n\nfound 0 vulnerabilities\n\n-- npm outdated\n\n-- npm outdated -g @litejs/cli uglify-js jshint nyc\nPackage Current Wanted Latest Location \n[…]\n\n\n-- ! git rev-parse -q --verify v21.6.0\n\n-- lj test --brief\nskip 22 - it should set global timezone\nskip 23 - it should set one time timezone\n# pass 62/62 [7052/7052] in 201 ms at 15:46:08\n# skip 2",
"is_bot": false,
"headline": "Release 21.6.0",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2021-06-28T12:46:08Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "89c853a99b6247a0b545f7a24679e78bd186a20c",
"body": null,
"is_bot": false,
"headline": "i18n: Test word type before return",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2021-06-28T12:44:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f6fca176b21edef4f9f70a48704db46623452904",
"body": null,
"is_bot": false,
"headline": "i18n: Accept object in map extension",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2021-06-28T12:18:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e87eab47b6930f88bdddf526911f18a11766ad4d",
"body": null,
"is_bot": false,
"headline": "accept: Reduce the number of writes",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2021-05-14T12:29:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "58b950ce3a8f589182adc1a3aa413d9b3d400971",
"body": null,
"is_bot": false,
"headline": "i18n: Replace `#` with pick value",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2021-05-06T08:06:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "03fe092fd75675af4f0344f2503b44df6e28b2c0",
"body": null,
"is_bot": false,
"headline": "util: Accept number range in rand",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2021-04-29T09:36:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "62b8ea8a018f42b701278512d133015803d750f8",
"body": null,
"is_bot": false,
"headline": "accept: Handle only string inputs",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2021-04-29T08:05:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "55eef8aa589e27e4a6dd76d3fc17572484e271b4",
"body": "-- git fetch;git merge-base --is-ancestor @{upstream} HEAD\n\n-- jshint *.js\n\n-- rm -rf node_modules;npm install\nup to date, audited 1 package in 175ms\n\nfound 0 vulnerabilities\n\n-- npm outdated\n\n-- npm outdated -g @litejs/cli uglify-js jshint nyc\nPackage Current Wanted Latest Location \n[…]\n.3.1\n@litejs/cli 21.3.0\nuglify-js 3.13.1\n\n-- lj test --brief\nskip 22 - it should set global timezone\nskip 23 - it should set one time timezone\n# pass 62/62 [7039/7039] in 198 ms at 16:27:46\n# skip 2",
"is_bot": false,
"headline": "Release 21.3.1",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2021-03-22T14:27:46Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "120b6b55e60e76635ded081d085315663257033b",
"body": null,
"is_bot": false,
"headline": "content: Clear files on response close",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2021-03-22T14:13:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1a8317047dc2614a2cff450f21e34b5f64888b52",
"body": null,
"is_bot": false,
"headline": "content: Fix partial write",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2021-03-22T14:13:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d7fa949279f8e0e92f6374487f66121c64dea711",
"body": "-- git fetch;git merge-base --is-ancestor @{upstream} HEAD\n\n-- jshint *.js\n\n-- rm -rf node_modules;npm install\nup to date in 0.866s\nfound 0 vulnerabilities\n\n-- npm outdated\n\n-- npm outdated -g @litejs/cli uglify-js jshint nyc\n\n-- lj build\n# Build litejs@21.3.0\n@litejs/cli 21.3.0\nuglify-js 3.13.1\n\n-- lj test --brief\nskip 22 - it should set global timezone\nskip 23 - it should set one time timezone\n# pass 62/62 [7039/7039] in 190 ms at 14:20:40\n# skip 2",
"is_bot": false,
"headline": "Release 21.3.0",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2021-03-18T12:20:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9fbc19291360f2d8ad8b5145bfb73941960feb56",
"body": null,
"is_bot": false,
"headline": "static: Add otherMethod and index options",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2021-03-17T16:03:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a687c1ab094d1e49e54fdc28d4c7825df831b493",
"body": null,
"is_bot": false,
"headline": "util: Accept any single-char unit, eg. kB, km",
"author_name": "Lauri Rooden",
"author_login": "lauriro",
"committed_at": "2021-03-17T10:38:40Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 4,
"commits_last_year": 2,
"latest_release_at": "2026-07-20T16:23:56Z",
"latest_release_tag": "v25.1.1",
"releases_from_tags": false,
"days_since_last_push": 6,
"active_weeks_last_year": 1,
"days_since_latest_release": 6,
"mean_days_between_releases": 309.1
},
"community": {
"has_readme": true,
"has_license": false,
"has_description": true,
"has_contributing": true,
"health_percentage": 50,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "litejs",
"exists": true,
"license": "MIT",
"keywords": [
"litejs",
"framework",
"http",
"server",
"content negotiation",
"accept",
"multipart",
"uploads",
"form-data"
],
"ecosystem": "npm",
"matches_repo": true,
"registry_url": "https://www.npmjs.com/package/litejs",
"is_deprecated": false,
"latest_version": "25.1.1",
"repository_url": "https://github.com/litejs/litejs",
"versions_count": 215,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": 1,
"monthly_downloads": 2865,
"first_published_at": "2013-09-27T18:33:53.548000Z",
"latest_published_at": "2026-07-20T16:17:49.522000Z",
"latest_version_yanked": null,
"days_since_latest_publish": 6
}
]
},
"popularity": {
"forks": 2,
"stars": 20,
"watchers": 4,
"fork_history": {
"days": [
{
"date": "2021-08-18",
"count": 1
},
{
"date": "2026-04-13",
"count": 1
}
],
"complete": true,
"collected": 2,
"total_forks": 2
},
"star_history": null,
"open_issues_and_prs": 0
},
"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": [],
"toolchain_manifests": [],
"largest_source_bytes": 15632,
"source_files_sampled": 25,
"oversized_source_files": 0,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"dependencies": {
"manifests": [
"package.json"
],
"advisories": {
"error": null,
"scope": "repository_graph",
"source": "osv",
"findings": [],
"collected": true,
"malicious": [],
"truncated": false,
"by_severity": {},
"advisory_count": 0,
"affected_count": 0,
"assessed_count": 1,
"malicious_count": 0,
"assessed_package": null,
"unassessed_count": 0,
"direct_affected_count": 0
},
"ecosystems": [
"npm"
],
"dependencies": [],
"all_dependencies": {
"error": null,
"source": "github-sbom",
"packages": [
{
"name": "@litejs/cli",
"direct": false,
"version": "25.1.0",
"ecosystem": "npm"
}
],
"collected": true,
"truncated": false,
"total_count": 1,
"direct_count": 0,
"indirect_count": 1
}
},
"maintainership": {
"issues": {
"open_prs": 0,
"merged_prs": 0,
"open_issues": 0,
"closed_ratio": null,
"closed_issues": 0,
"closed_unmerged_prs": 0
},
"bus_factor": 1,
"bot_contributors": 0,
"top_contributors": [
{
"type": "User",
"login": "lauriro",
"commits": 291,
"avatar_url": "https://avatars.githubusercontent.com/u/142360?v=4"
}
],
"contributors_sampled": 1,
"top_contributor_share": 1
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"test.yml"
],
"has_docs_dir": false,
"linter_configs": [],
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [],
"scorecard": {
"checks": [
{
"name": "Binary-Artifacts",
"score": 10,
"reason": "no binaries found in the repo",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
},
{
"name": "Branch-Protection",
"score": null,
"reason": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": null,
"reason": "no pull request found",
"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": 0,
"reason": "Found 0/30 approved changesets -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 3,
"reason": "project has 1 contributing companies or organizations -- score normalized to 3",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": 10,
"reason": "no dangerous workflow patterns detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
},
{
"name": "Dependency-Update-Tool",
"score": 0,
"reason": "no update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 0,
"reason": "project is not fuzzed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
},
{
"name": "License",
"score": 0,
"reason": "license file not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 1,
"reason": "2 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 1",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
},
{
"name": "Packaging",
"score": null,
"reason": "packaging workflow not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
},
{
"name": "Pinned-Dependencies",
"score": 0,
"reason": "dependency not pinned by hash detected -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 10,
"reason": "SAST tool detected: CodeQL",
"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": 0,
"reason": "detected GitHub workflow tokens with excessive permissions",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
},
{
"name": "Vulnerabilities",
"score": 10,
"reason": "0 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "a27ef33d019f2f35a88f74261f19c19485cc0946",
"ran_at": "2026-07-27T05:08:33Z",
"aggregate_score": 4.4,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": false,
"has_dependabot_config": false
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": "2026-07-20T16:21:14Z",
"oldest_open_prs": [],
"last_merged_pr_at": null,
"ci_last_conclusion": "SUCCESS",
"oldest_open_issues": []
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/litejs/litejs",
"host": "github.com",
"name": "litejs",
"owner": "litejs"
},
"metrics": {
"overall": {
"key": "overall",
"band": "moderate",
"name": "Overall health",
"note": null,
"notes": [],
"value": 51,
"inputs": {
"security": 55,
"vitality": 59,
"community": 39,
"governance": 39,
"engineering": 66
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "moderate",
"name": "Vitality",
"value": 59,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "at_risk",
"name": "Development activity",
"note": null,
"notes": [],
"value": 42,
"inputs": {
"commits_last_year": 2,
"human_commit_share": 1,
"days_since_last_push": 6,
"active_weeks_last_year": 1
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 6 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "push_recency",
"params": {
"days": 6
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "1/52 weeks with commits",
"points": 0.7,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 1
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "2 commits in the last year",
"points": 4.3,
"status": "partial",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 2
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "2 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 1",
"points": 1,
"status": "partial",
"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": 84,
"inputs": {
"releases_count": 4,
"latest_release_tag": "v25.1.1",
"releases_from_tags": false,
"days_since_latest_release": 6,
"mean_days_between_releases": 309.1
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "4 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 4
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 6 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 6
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~309.1 days",
"points": 12.6,
"status": "partial",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 309.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": 6,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "last human commit 6 days ago",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_maintained",
"params": {
"days": 6
}
}
],
"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": 39,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "critical",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 23,
"inputs": {
"forks": 2,
"stars": 20,
"watchers": 4,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "20 stars",
"points": 20.7,
"status": "partial",
"details": [
{
"code": "stars",
"params": {
"count": 20
}
}
],
"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": "4 watchers",
"points": 2.7,
"status": "partial",
"details": [
{
"code": "watchers",
"params": {
"count": 4
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "at_risk",
"name": "Community health",
"note": null,
"notes": [],
"value": 45,
"inputs": {
"has_readme": true,
"has_license": false,
"has_contributing": true,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 22.5,
"status": "met",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "no license file detected",
"points": 0,
"status": "missed",
"details": [
{
"code": "license_absent",
"params": {}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 18,
"status": "met",
"details": [],
"max_points": 18
},
{
"key": "code_of_conduct",
"name": "Code of conduct",
"detail": null,
"points": 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": 0,
"status": "missed",
"details": [],
"max_points": 6.3
}
]
},
{
"key": "ecosystem_adoption",
"band": "moderate",
"name": "Ecosystem adoption (downloads)",
"note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"registry_dependents"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 58,
"inputs": {
"packages": [
"litejs"
],
"dependents": null,
"ecosystems": "npm",
"total_downloads": null,
"monthly_downloads": 2865
},
"components": [
{
"key": "monthly_downloads",
"name": "Monthly downloads",
"detail": "2,865 downloads/month across npm",
"points": 46.1,
"status": "partial",
"details": [
{
"code": "downloads_monthly",
"params": {
"count": 2865,
"ecosystems": "npm"
}
}
],
"max_points": 80
},
{
"key": "registry_dependents",
"name": "Registry dependents",
"detail": "not reported by this ecosystem",
"points": 0,
"status": "excluded",
"details": [
{
"code": "not_reported_by_this_ecosystem",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "at_risk",
"name": "Sustainability & Governance",
"value": 39,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "critical",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 13,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 1,
"top_contributor_share": 1
},
"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 100% of commits",
"points": 0,
"status": "missed",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 100
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "1 contributors",
"points": 1.4,
"status": "partial",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 1
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 1 contributing companies or organizations -- score normalized to 3",
"points": 3,
"status": "partial",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "critical",
"name": "Issue & PR responsiveness",
"note": "Excluded from scoring (no data or not applicable): Issue resolution, PR acceptance. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"issue_resolution",
"pr_acceptance"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 1,
"inputs": {
"merged_prs": 0,
"open_issues": 0,
"closed_issues": 0,
"issue_closed_ratio": null,
"closed_unmerged_prs": 0
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "no issues or no data",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_issues_or_data",
"params": {}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "no decided pull requests or no data",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_decided_prs_or_data",
"params": {}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 0/30 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "moderate",
"name": "Ownership & stewardship",
"note": null,
"notes": [],
"value": 60,
"inputs": {
"followers": 10,
"owner_type": "Organization",
"is_verified": null,
"owner_login": "litejs",
"public_repos": 30,
"account_age_days": 4888
},
"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": "10 followers of litejs",
"points": 7.5,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 10,
"login": "litejs"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "30 public repos, account ~13 yr old",
"points": 22.9,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 30
}
},
{
"code": "account_age_years",
"params": {
"years": 13
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "excellent",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"litejs"
],
"ecosystems": "npm",
"any_deprecated": false,
"min_days_since_publish": 6
},
"components": [
{
"key": "published_resolvable",
"name": "Published & resolvable",
"detail": "1 package(s) on npm",
"points": 25,
"status": "met",
"details": [
{
"code": "packages_published",
"params": {
"count": 1,
"ecosystems": "npm"
}
}
],
"max_points": 25
},
{
"key": "publish_recency",
"name": "Publish recency",
"detail": "latest publish 6 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 6
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "215 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 215
}
}
],
"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": 66,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "moderate",
"name": "Engineering practices",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_ci_tests"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 60,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "1 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 1
}
}
],
"max_points": 24
},
{
"key": "tests_present",
"name": "Tests present",
"detail": null,
"points": 24,
"status": "met",
"details": [],
"max_points": 24
},
{
"key": "linter_config",
"name": "Linter config",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 16
},
{
"key": "pre_commit_hooks",
"name": "Pre-commit hooks",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 9.6
},
{
"key": "editorconfig",
"name": ".editorconfig",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.4
},
{
"key": "openssf_scorecard_ci_tests",
"name": "OpenSSF Scorecard: CI-Tests",
"detail": "no pull request found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "good",
"name": "Documentation",
"note": null,
"notes": [],
"value": 75,
"inputs": {
"topics": [
"litejs",
"framework",
"server"
],
"has_wiki": true,
"homepage": "https://litejs.com",
"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://litejs.com",
"points": 15,
"status": "met",
"details": [],
"max_points": 15
},
{
"key": "repository_description",
"name": "Repository description",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "topics",
"name": "Topics",
"detail": "3 topics",
"points": 10,
"status": "met",
"details": [
{
"code": "topics_count",
"params": {
"count": 3
}
}
],
"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": 55,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "at_risk",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): Branch-Protection, CI-Tests, Packaging, Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"branch_protection",
"ci_tests",
"packaging",
"signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 44,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 14,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 4,
"scorecard_aggregate": 4.4
},
"components": [
{
"key": "binary_artifacts",
"name": "Binary-Artifacts",
"detail": "no binaries found in the repo",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "branch_protection",
"name": "Branch-Protection",
"detail": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "no pull request found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"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 0/30 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 1 contributing companies or organizations -- score normalized to 3",
"points": 0.8,
"status": "partial",
"details": [],
"max_points": 2.5
},
{
"key": "dangerous_workflow",
"name": "Dangerous-Workflow",
"detail": "no dangerous workflow patterns detected",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "dependency_update_tool",
"name": "Dependency-Update-Tool",
"detail": "no update tool detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is not fuzzed",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "license",
"name": "License",
"detail": "license file not detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "2 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 1",
"points": 0.8,
"status": "partial",
"details": [],
"max_points": 7.5
},
{
"key": "packaging",
"name": "Packaging",
"detail": "packaging workflow not detected",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 5
},
{
"key": "pinned_dependencies",
"name": "Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "sast",
"name": "SAST",
"detail": "SAST tool detected: CodeQL",
"points": 5,
"status": "met",
"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": "detected GitHub workflow tokens with excessive permissions",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "vulnerabilities",
"name": "Vulnerabilities",
"detail": "0 existing vulnerabilities detected",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "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 1 resolved dependencies against OSV. 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": 1
}
},
{
"code": "advisories_repo_graph_caveat",
"params": {}
},
{
"code": "advisories_reachability",
"params": {}
}
],
"value": 100,
"inputs": {
"source": "osv",
"advisories": 0,
"affected_packages": 0,
"assessed_packages": 1,
"unassessed_packages": 0,
"affected_by_severity": "none",
"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": 1,
"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": 3
},
"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": 31,
"weight": 0,
"metrics": [
{
"key": "ai_agent_context",
"band": "at_risk",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 32,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 0.6,
"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": "60 of 100 human commits state their intent (structured subject or explanatory body)",
"points": 32,
"status": "partial",
"details": [
{
"code": "legible_history",
"params": {
"legible": 60,
"sampled": 100
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "critical",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 22,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [],
"has_dockerfile": false,
"typed_language": false,
"bootstrap_files": [],
"has_devcontainer": false,
"has_linter_config": false,
"typecheck_configs": [],
"agent_commit_share": 0,
"toolchain_manifests": [],
"dependency_bot_commit_share": 0
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "automated_tests",
"name": "Automated tests",
"detail": null,
"points": 22,
"status": "met",
"details": [],
"max_points": 22
},
{
"key": "lint_format_config",
"name": "Lint / format config",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 11
},
{
"key": "reproducible_environment",
"name": "Reproducible environment",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "no agent-authored commits among the last 100",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_agent_authored_commits",
"params": {
"sampled": 100
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "no automated dependency updates observed",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_dependency_automation",
"params": {}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "moderate",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 55,
"inputs": {
"primary_language": "JavaScript",
"largest_source_bytes": 15632,
"source_files_sampled": 25,
"oversized_source_files": 0
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "JavaScript without a type-check config",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_typecheck_config_language",
"params": {
"language": "JavaScript"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "0/25 source files over 60KB",
"points": 55,
"status": "met",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 25,
"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-27T05:08:37.828818Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/l/litejs/litejs.svg",
"full_name": "litejs/litejs",
"license_state": "absent",
"license_spdx": null
}