Informe JSON sin procesar legible por máquina
{
"data": {
"repo": {
"topics": [],
"is_fork": false,
"size_kb": 125,
"has_wiki": true,
"homepage": null,
"languages": {
"Go": 103848
},
"pushed_at": "2026-07-19T13:30:46Z",
"created_at": "2026-05-25T19:43:57Z",
"owner_type": "User",
"updated_at": "2026-07-24T20:58:31Z",
"description": "purego api on a top of goffi",
"is_archived": false,
"is_disabled": false,
"license_spdx": "BSD-3-Clause",
"default_branch": "main",
"license_spdx_raw": "BSD-3-Clause",
"primary_language": "Go",
"significant_languages": [
"Go"
]
},
"owner": {
"blog": "http://40in.2g0.ru/",
"name": null,
"type": "User",
"login": "unxed",
"company": null,
"location": null,
"followers": 47,
"avatar_url": "https://avatars.githubusercontent.com/u/1151423?v=4",
"created_at": "2011-10-25T18:28:37Z",
"is_verified": null,
"public_repos": 90,
"account_age_days": 5388
},
"license": {
"state": "standard",
"spdx_id": "BSD-3-Clause",
"raw_spdx": "BSD-3-Clause",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v0.1.11",
"kind": "patch",
"published_at": "2026-07-19T13:30:28Z"
},
{
"tag": "v0.1.10",
"kind": "patch",
"published_at": "2026-06-16T16:50:38Z"
},
{
"tag": "v0.1.8",
"kind": "patch",
"published_at": "2026-05-29T15:55:41Z"
},
{
"tag": "v0.1.7",
"kind": "patch",
"published_at": "2026-05-29T01:02:43Z"
},
{
"tag": "v0.1.6",
"kind": "patch",
"published_at": "2026-05-28T23:37:24Z"
},
{
"tag": "v0.1.5",
"kind": "patch",
"published_at": "2026-05-28T20:40:48Z"
},
{
"tag": "v0.1.4",
"kind": "patch",
"published_at": "2026-05-28T20:00:36Z"
},
{
"tag": "v0.1.3",
"kind": "patch",
"published_at": "2026-05-28T19:38:11Z"
},
{
"tag": "v0.1.2",
"kind": "patch",
"published_at": "2026-05-28T15:33:25Z"
},
{
"tag": "v0.1.1",
"kind": "patch",
"published_at": "2026-05-26T09:49:21Z"
},
{
"tag": "v0.1.0",
"kind": "minor",
"published_at": "2026-05-25T19:49:35Z"
}
],
"recent_commits": [
{
"oid": "50a402150525095e71864f1a46414964377902cb",
"body": "…nction signature.",
"is_bot": false,
"headline": "Fix build errors caused by goffi v0.6.0 breaking change in ffi.CallFu…",
"author_name": "Ivan Sorokin",
"author_login": "unxed",
"committed_at": "2026-07-19T13:30:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4d384ba7a207cb60a02a206dc028c4a7464dbaa7",
"body": null,
"is_bot": false,
"headline": "Update goffi",
"author_name": "Ivan Sorokin",
"author_login": "unxed",
"committed_at": "2026-06-16T16:50:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "593bde98be8358f9b6f10c37331fdeded202f75e",
"body": null,
"is_bot": false,
"headline": "Update README.md",
"author_name": "Ivan Sorokin",
"author_login": "unxed",
"committed_at": "2026-05-29T19:37:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4507547b9b6b796d3864d929fe8c7e1c2f891d71",
"body": null,
"is_bot": false,
"headline": "Cosmetic",
"author_name": "Ivan Sorokin",
"author_login": "unxed",
"committed_at": "2026-05-29T15:55:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2684bf2103972826d63b5e430c10726e8d25ba8d",
"body": "…ed contexts and cached call interfaces.\n\nThis change dramatically reduces overhead and allocations across all core execution paths of the library. For SyscallN, we introduce a global cache of pre-prepared CallInterface structures for any argument count up to 32, combined with a sync.Pool monolithic\n[…]\ned SyscallN latency of 262 ns/op (with exactly 2 allocations), bringing the library’s CGO-free performance close to or exceeding the original purego implementation without requiring raw assembly code.",
"is_bot": false,
"headline": "Optimize SyscallN and RegisterFunc execution paths on Unix using pool…",
"author_name": "Ivan Sorokin",
"author_login": "unxed",
"committed_at": "2026-05-29T15:50:30Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "252634e079361a74b34c3d073254209707d52053",
"body": "…locations.\n\nThis change optimizes the slow-path (reflect.MakeFunc) of function registrations in purego.go by pre-allocating critical argument slices and keep-alive tracking buffers on the stack. The slice buffers for ffiArgs and keepAlive are replaced with local 16-element stack arrays, eliminating heap allocations for typical non-variadic calls.",
"is_bot": false,
"headline": "Optimize pureffi function registration and call pathways to reduce al…",
"author_name": "Ivan Sorokin",
"author_login": "unxed",
"committed_at": "2026-05-29T15:26:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "07b1ad1ed24bd2c6e2b26962b089e66afc9b8af0",
"body": "…y usage of different pathways.\n\nSame test for the original purego also was implemented to compare results with ease.",
"is_bot": false,
"headline": "A new benchmark suite has been added to measure the latency and memor…",
"author_name": "Ivan Sorokin",
"author_login": "unxed",
"committed_at": "2026-05-29T15:23:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f1f605669715d5c574ab364b7ff5c715a07254d4",
"body": null,
"is_bot": false,
"headline": "Minor",
"author_name": "Ivan Sorokin",
"author_login": "unxed",
"committed_at": "2026-05-28T23:42:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bb5ae9a73d8652fd86df0c921af9e0d484a8373f",
"body": null,
"is_bot": false,
"headline": "More tests",
"author_name": "Ivan Sorokin",
"author_login": "unxed",
"committed_at": "2026-05-28T23:37:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "60e65c68885181aee5c513c8facd376c0d63fa36",
"body": null,
"is_bot": false,
"headline": "More tests",
"author_name": "Ivan Sorokin",
"author_login": "unxed",
"committed_at": "2026-05-28T23:36:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "16f1cf3a457531dd30900e854d12b41f55922e8b",
"body": null,
"is_bot": false,
"headline": "Add missing structs.HostLayout",
"author_name": "Ivan Sorokin",
"author_login": "unxed",
"committed_at": "2026-05-28T23:25:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "861a7c7ab0e0a485bbd9f49c9f4468e2c4419364",
"body": null,
"is_bot": false,
"headline": "Minor",
"author_name": "Ivan Sorokin",
"author_login": "unxed",
"committed_at": "2026-05-28T20:55:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "31723bbedb04f63798d391b2f7cdc844f6fffeef",
"body": "…ions.\n\nThis change updates the key Objective-C boundary data structures, including objc_super, blockDescriptor, and blockLayout, by adding the structs.HostLayout field introduced in Go 1.23. Doing so instructs the compiler to guarantee that these memory layouts strictly match the host platform's na\n[…]\nches. The corresponding source files have been updated with imports of the standard structs package to enforce this design contract reliably.\n\nSee also: https://github.com/ebitengine/purego/issues/259",
"is_bot": false,
"headline": "Integrate structs.HostLayout in Objective-C runtime and block definit…",
"author_name": "Ivan Sorokin",
"author_login": "unxed",
"committed_at": "2026-05-28T20:40:48Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "3ef94fbbd73a00f25aaec276186183e6b25a74c5",
"body": "…error return types.\n\nThis update extends RegisterFunc to allow function signatures with up to two return values where the last or sole return is an error. To prevent goroutine migration during thread-local storage accesses, the execution thread is locked using LockOSThread when an error return is r\n[…]\nspatch for these functions and introduces a suite of tests to verify correct errno propagation during valid executions and numeric overflows.\n\nSee also: https://github.com/ebitengine/purego/issues/244",
"is_bot": false,
"headline": "Add support for capturing C errno values in RegisterFunc by allowing …",
"author_name": "Ivan Sorokin",
"author_login": "unxed",
"committed_at": "2026-05-28T20:37:53Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "dcdc2409462b8d147a4ceca4ce99af71ec92a710",
"body": "… execution context to optimize RegisterFunc allocations.\n\nThis change introduces the public CString (malloc-backed) and GoString APIs to match the Go C package. It also migrates the RegisterFunc fast path to a sync.Pool-backed context (fastCallContext) inside genfastfunc.go and the pre-generated zz\n[…]\nGoString, and fast-path allocations, verifying that the FFI boundary remains robustly optimized.\n\nSee also:\nhttps://github.com/ebitengine/purego/issues/121\nhttps://github.com/go-webgpu/goffi/issues/54",
"is_bot": false,
"headline": "Implement CString and GoString functions alongside a pooled fast-path…",
"author_name": "Ivan Sorokin",
"author_login": "unxed",
"committed_at": "2026-05-28T20:26:51Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "2787bdf02a91aba8673be7bf160cf870a9247a24",
"body": "… fallback layers to enable zero-allocation FFI calls.\n\nThis change introduces the genfastfunc.go generator and pre-generating the optimized zz_fast_func.go. Supported signatures (up to 15 integer or pointer arguments, with optional trailing or interleaved float32/float64 parameters) bypass reflect.\n[…]\n reflection dispatch using zz_fast_func_fallback.go. Miscellaneous trailing newline warnings across multiple files have also been cleaned up.\n\nSee also: https://github.com/ebitengine/purego/issues/399",
"is_bot": false,
"headline": "Integrate the RegisterFunc fast-path code generator and pre-generated…",
"author_name": "Ivan Sorokin",
"author_login": "unxed",
"committed_at": "2026-05-28T20:00:36Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "71976b7ba63a72444d7ae668adc976d8a3028705",
"body": null,
"is_bot": false,
"headline": "Minor",
"author_name": "Ivan Sorokin",
"author_login": "unxed",
"committed_at": "2026-05-28T19:39:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f20d85550cbcdade4500755ae222c23c61a54c36",
"body": "This change allows fixed-size Go arrays to be used as top-level arguments in FFI calls by treating them as pointers to match C array decay semantics. The type conversion logic now maps reflect.Array to a pointer descriptor for function signatures, while the argument packing process extracts the arra\n[…]\nmains pinned in memory for the duration of the C function call, maintaining safety and compatibility with the original purego implementation.\n\nSee also: https://github.com/ebitengine/purego/issues/420",
"is_bot": false,
"headline": "Implement support for fixed-size array arguments in RegisterFunc.",
"author_name": "Ivan Sorokin",
"author_login": "unxed",
"committed_at": "2026-05-28T19:38:11Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "d7cfba79360b560afd34dbdc35ca3de35c10b1ca",
"body": null,
"is_bot": false,
"headline": "Update goffi",
"author_name": "Ivan Sorokin",
"author_login": "unxed",
"committed_at": "2026-05-28T15:33:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "98a25bab2b5a3cb031c52af302141e27ec3c2823",
"body": null,
"is_bot": false,
"headline": "Fix some issues found by go-webgpu/goffi team",
"author_name": "Ivan Sorokin",
"author_login": "unxed",
"committed_at": "2026-05-26T09:49:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "475f3ca9c9f6d48fd05f87d4d78543a2b5831620",
"body": null,
"is_bot": false,
"headline": "Cosmetic",
"author_name": "Ivan Sorokin",
"author_login": "unxed",
"committed_at": "2026-05-26T06:10:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "86d9f157cde7c28ca322f72a290e06dcad76dc2b",
"body": null,
"is_bot": false,
"headline": "Minor",
"author_name": "Ivan Sorokin",
"author_login": "unxed",
"committed_at": "2026-05-26T00:12:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "27f7618115b0ad35128c53847608e7d7a1d733eb",
"body": null,
"is_bot": false,
"headline": "Cosmetic",
"author_name": "Ivan Sorokin",
"author_login": "unxed",
"committed_at": "2026-05-25T20:31:36Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8fde4ba19f90cc4e7e8e9a6eebc8aa32af818aaf",
"body": null,
"is_bot": false,
"headline": "More tests",
"author_name": "Ivan Sorokin",
"author_login": "unxed",
"committed_at": "2026-05-25T20:29:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f2867525375495169d15463cff15338ab9c8776c",
"body": null,
"is_bot": false,
"headline": "Minor",
"author_name": "Ivan Sorokin",
"author_login": "unxed",
"committed_at": "2026-05-25T19:49:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "116e2ab6e60b687b17691d229c4ff779e2c0532b",
"body": null,
"is_bot": false,
"headline": "Added readme",
"author_name": "Ivan Sorokin",
"author_login": "unxed",
"committed_at": "2026-05-25T19:48:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c3d9f93b9d40ad3f25b06498315b6ac2ab157afa",
"body": "More tests",
"is_bot": false,
"headline": "Some ffi polishing",
"author_name": "Ivan Sorokin",
"author_login": "unxed",
"committed_at": "2026-05-25T19:46:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "78b72e18dee2c45609b8c57dafc16a8b890ff31c",
"body": null,
"is_bot": false,
"headline": "Initial upload",
"author_name": "Ivan Sorokin",
"author_login": "unxed",
"committed_at": "2026-05-25T19:44:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c4bef882ff116644366a944346b62b4b9ecba1c8",
"body": null,
"is_bot": false,
"headline": "Initial commit",
"author_name": "unxed",
"author_login": "unxed",
"committed_at": "2026-05-25T19:43:57Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 11,
"commits_last_year": 29,
"latest_release_at": "2026-07-19T13:30:28Z",
"latest_release_tag": "v0.1.11",
"releases_from_tags": true,
"days_since_last_push": 7,
"active_weeks_last_year": 3,
"days_since_latest_release": 7,
"mean_days_between_releases": 6
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": false,
"health_percentage": 42,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "github.com/ebitengine/purego",
"exists": true,
"license": null,
"keywords": [],
"ecosystem": "go",
"matches_repo": false,
"registry_url": "https://pkg.go.dev/github.com/ebitengine/purego",
"is_deprecated": false,
"latest_version": "v0.10.2",
"repository_url": "https://github.com/ebitengine/purego",
"versions_count": 86,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": null,
"latest_published_at": "2026-07-18T15:09:28Z",
"latest_version_yanked": null,
"days_since_latest_publish": 8
}
]
},
"popularity": {
"forks": 0,
"stars": 7,
"watchers": 0,
"fork_history": {
"days": [],
"complete": true,
"collected": 0,
"total_forks": 0
},
"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": [
"go.mod",
"purego_original_bench/go.mod"
],
"largest_source_bytes": 154250,
"source_files_sampled": 32,
"oversized_source_files": 1,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"dependencies": {
"manifests": [
"go.mod",
"purego_original_bench/go.mod"
],
"advisories": {
"error": null,
"scope": null,
"source": null,
"findings": [],
"collected": false,
"malicious": [],
"truncated": false,
"by_severity": {},
"advisory_count": 0,
"affected_count": 0,
"assessed_count": 0,
"malicious_count": 0,
"assessed_package": null,
"unassessed_count": 0,
"direct_affected_count": 0
},
"ecosystems": [
"go"
],
"dependencies": [
{
"name": "github.com/go-webgpu/goffi",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.6.0"
},
{
"name": "github.com/ebitengine/purego",
"manifest": "purego_original_bench/go.mod",
"ecosystem": "go",
"version_constraint": "v0.8.0"
}
],
"all_dependencies": {
"error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
"source": null,
"packages": [],
"collected": false,
"truncated": false,
"total_count": null,
"direct_count": null,
"indirect_count": null
}
},
"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": "unxed",
"commits": 29,
"avatar_url": "https://avatars.githubusercontent.com/u/1151423?v=4"
}
],
"contributors_sampled": 1,
"top_contributor_share": 1
},
"quality_signals": {
"has_ci": false,
"has_tests": true,
"ci_workflows": [],
"has_docs_dir": false,
"linter_configs": [],
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [
"go.sum"
],
"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": 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/29 approved changesets -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 0,
"reason": "project has 0 contributing companies or organizations -- score normalized to 0",
"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": 0,
"reason": "no update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 0,
"reason": "project is not fuzzed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
},
{
"name": "License",
"score": 10,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 0,
"reason": "project was created within the last 90 days. Please review its contents carefully",
"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": "no SAST tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
},
{
"name": "Security-Policy",
"score": 0,
"reason": "security policy file not 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": 10,
"reason": "0 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "50a402150525095e71864f1a46414964377902cb",
"ran_at": "2026-07-26T23:03:54Z",
"aggregate_score": 2.6,
"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": null,
"oldest_open_prs": [],
"last_merged_pr_at": null,
"ci_last_conclusion": null,
"oldest_open_issues": []
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/unxed/pureffi",
"host": "github.com",
"name": "pureffi",
"owner": "unxed"
},
"metrics": {
"overall": {
"key": "overall",
"band": "at_risk",
"name": "Overall health",
"note": null,
"notes": [],
"value": 37,
"inputs": {
"security": 26,
"vitality": 66,
"community": 30,
"governance": 22,
"engineering": 38
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "moderate",
"name": "Vitality",
"value": 66,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "moderate",
"name": "Development activity",
"note": null,
"notes": [],
"value": 51,
"inputs": {
"commits_last_year": 29,
"human_commit_share": 1,
"days_since_last_push": 7,
"active_weeks_last_year": 3
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 7 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "push_recency",
"params": {
"days": 7
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "3/52 weeks with commits",
"points": 2.1,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 3
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "29 commits in the last year",
"points": 13.3,
"status": "partial",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 29
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "project was created within the last 90 days. Please review its contents carefully",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "excellent",
"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": 88,
"inputs": {
"releases_count": 11,
"latest_release_tag": "v0.1.11",
"releases_from_tags": true,
"days_since_latest_release": 7,
"mean_days_between_releases": 6
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "11 version tags (no GitHub releases)",
"points": 16.2,
"status": "partial",
"details": [
{
"code": "version_tags_no_releases",
"params": {
"count": 11
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 7 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 7
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~6 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 6
}
}
],
"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": "unverified",
"guards": [],
"signals": [],
"red_flag": false,
"multiplier_pct": 100,
"declared_reason": null,
"unverified_reason": "repository_too_young",
"unanswered_open_prs": null,
"unanswered_open_issues": null,
"days_since_last_merged_pr": null,
"days_since_last_human_commit": null,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "maintenance record not established from the collected data",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_unverified",
"params": {}
}
],
"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": 30,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "critical",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 13,
"inputs": {
"forks": 0,
"stars": 7,
"watchers": 0,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "7 stars",
"points": 12.6,
"status": "partial",
"details": [
{
"code": "stars",
"params": {
"count": 7
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "0 forks",
"points": 0,
"status": "missed",
"details": [
{
"code": "forks",
"params": {
"count": 0
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "0 watchers",
"points": 0,
"status": "missed",
"details": [
{
"code": "watchers",
"params": {
"count": 0
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "moderate",
"name": "Community health",
"note": null,
"notes": [],
"value": 50,
"inputs": {
"has_readme": true,
"has_license": true,
"has_contributing": false,
"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": "recognized license (BSD-3-Clause)",
"points": 22.5,
"status": "met",
"details": [
{
"code": "license_standard",
"params": {}
},
{
"code": "license_spdx",
"params": {
"spdx": "BSD-3-Clause"
}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "code_of_conduct",
"name": "Code of conduct",
"detail": null,
"points": 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
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "critical",
"name": "Sustainability & Governance",
"value": 22,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "critical",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 10,
"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 0 contributing companies or organizations -- score normalized to 0",
"points": 0,
"status": "missed",
"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/29 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "moderate",
"name": "Ownership & stewardship",
"note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"verified_domain"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 59,
"inputs": {
"followers": 47,
"owner_type": "User",
"is_verified": null,
"owner_login": "unxed",
"public_repos": 90,
"account_age_days": 5388
},
"components": [
{
"key": "ownership_backing",
"name": "Ownership backing",
"detail": "personal (user) account",
"points": 10,
"status": "partial",
"details": [
{
"code": "owner_personal",
"params": {}
}
],
"max_points": 30
},
{
"key": "verified_domain",
"name": "Verified domain",
"detail": "not applicable to user accounts",
"points": 0,
"status": "excluded",
"details": [
{
"code": "not_applicable_to_user_accounts",
"params": {}
}
],
"max_points": 20
},
{
"key": "owner_reach",
"name": "Owner reach",
"detail": "47 followers of unxed",
"points": 12.1,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 47,
"login": "unxed"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "90 public repos, account ~14 yr old",
"points": 25,
"status": "met",
"details": [
{
"code": "public_repos",
"params": {
"count": 90
}
},
{
"code": "account_age_years",
"params": {
"years": 14
}
}
],
"max_points": 25
}
]
}
],
"description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
},
{
"key": "engineering",
"band": "at_risk",
"name": "Engineering Quality",
"value": 38,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "at_risk",
"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": 30,
"inputs": {
"has_ci": false,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"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": "moderate",
"name": "Documentation",
"note": null,
"notes": [],
"value": 50,
"inputs": {
"topics": [],
"has_wiki": true,
"homepage": null,
"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": null,
"points": 0,
"status": "missed",
"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": null,
"points": 0,
"status": "missed",
"details": [],
"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": "critical",
"name": "Security",
"value": 26,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "critical",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): CI-Tests, Dangerous-Workflow, Packaging, Pinned-Dependencies, Signed-Releases, Token-Permissions. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"ci_tests",
"dangerous_workflow",
"packaging",
"pinned_dependencies",
"signed_releases",
"token_permissions"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 26,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 12,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 6,
"scorecard_aggregate": 2.6
},
"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": "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/29 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 0 contributing companies or organizations -- score normalized to 0",
"points": 0,
"status": "missed",
"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": "no update tool detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is not fuzzed",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "license",
"name": "License",
"detail": "license file detected",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "project was created within the last 90 days. Please review its contents carefully",
"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": "no SAST tool detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "security_policy",
"name": "Security-Policy",
"detail": "security policy file not detected",
"points": 0,
"status": "missed",
"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": "0 existing vulnerabilities detected",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
}
]
}
],
"description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
},
{
"key": "ai_readiness",
"band": "moderate",
"name": "AI Readiness",
"value": 52,
"weight": 0,
"metrics": [
{
"key": "ai_agent_context",
"band": "critical",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 15,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 0.276,
"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": "8 of 29 human commits state their intent (structured subject or explanatory body)",
"points": 14.7,
"status": "partial",
"details": [
{
"code": "legible_history",
"params": {
"legible": 8,
"sampled": 29
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "moderate",
"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": 62,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [
"go.sum"
],
"has_dockerfile": false,
"typed_language": true,
"bootstrap_files": [],
"has_devcontainer": false,
"has_linter_config": false,
"typecheck_configs": [],
"agent_commit_share": 0,
"toolchain_manifests": [
"go.mod",
"purego_original_bench/go.mod"
],
"dependency_bot_commit_share": 0
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": "go.mod, purego_original_bench/go.mod (toolchain convention, no task runner)",
"points": 12.6,
"status": "partial",
"details": [
{
"code": "toolchain_convention",
"params": {
"files": "go.mod, purego_original_bench/go.mod"
}
}
],
"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": "Go (statically typed)",
"points": 11,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "Go"
}
}
],
"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 29",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_agent_authored_commits",
"params": {
"sampled": 29
}
}
],
"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": "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": 98,
"inputs": {
"primary_language": "Go",
"largest_source_bytes": 154250,
"source_files_sampled": 32,
"oversized_source_files": 1
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "Go (statically typed)",
"points": 45,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "Go"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "1/32 source files over 60KB",
"points": 53.3,
"status": "partial",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 32,
"oversized": 1
}
}
],
"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",
"go package 'github.com/ebitengine/purego' points at a different repository (https://github.com/ebitengine/purego); excluded from ecosystem scoring",
"GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
],
"report_type": "repository",
"generated_at": "2026-07-26T23:03:58.771628Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/u/unxed/pureffi.svg",
"full_name": "unxed/pureffi",
"license_state": "standard",
"license_spdx": "BSD-3-Clause"
}