{"adoption": {"forks": 181, "observed_at": "2026-08-28T04:03:53.239302+00:00", "stars": 1179}, "canonical_url": "https://ross.abutalabs.com/products/hactool", "card": {"archived": false, "artifact_type": "cli-tool", "description": "hactool is a tool to view information about, decrypt, and extract common file formats for the Nintendo Switch, especially Nintendo Content Archives.", "domain": ["reverse-engineering", "gaming-tools", "files"], "enriched": true, "function": ["cli", "parser", "cryptography", "file-system", "reverse-engineering"], "health_score": 20, "homepage": null, "language": "C", "license": "ISC", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["SciresM/hactool"], "name": "SciresM/hactool", "platform": ["windows", "cli", "cross-platform"], "pushed_at": "2023-12-04T13:39:54+00:00", "repo": "SciresM/hactool", "stars": 1179, "tags": ["nintendo-switch", "nca", "romfs", "exefs", "xci", "homebrew", "decryption", "firmware-tools", "command-line", "linux", "macos"], "topics": [], "urls": [], "use_cases": ["extract romfs contents from a switch nca file", "decrypt nintendo content archives", "view info about an xci or nsp file", "verify hashes and signatures of switch files", "unpack exefs and pfs0 archives", "dump program permissions from npdm or kip1 to json", "decrypt with development keys for switch research"], "what_it_is": "hactool is a C command-line tool for inspecting, decrypting, and extracting common Nintendo Switch file formats such as NCA, XCI, PFS0, RomFS, and HFS0 archives. It supports hash/signature verification, development and retail keys, and per-section extraction of Switch content archives.", "when_to_avoid": ["you need a graphical interface for browsing Switch files", "you want to build or run Switch software rather than analyze its files", "you need support for other consoles' formats"], "when_to_choose": ["you need to inspect or extract Nintendo Switch file formats from the command line", "you want a scriptable tool for NCA, RomFS, ExeFS, or XCI decryption", "you are doing Switch reverse engineering or homebrew development"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/hactool", "repo": "SciresM/hactool", "role": "main", "score": 23}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:03:53.239302+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:25:26.977898+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e29eb74b1e657dfdd2eb96d5bd67a421ea1e1d7508d0a5f7d68f7e763a60b232", "fetched_at": "2026-08-28T04:03:53.239302+00:00", "kind": "readme", "missing": false, "url": "https://github.com/SciresM/hactool"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:03:53.239302+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:25:26.977898+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e29eb74b1e657dfdd2eb96d5bd67a421ea1e1d7508d0a5f7d68f7e763a60b232", "fetched_at": "2026-08-28T04:03:53.239302+00:00", "kind": "readme", "missing": false, "url": "https://github.com/SciresM/hactool"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:25:26.977898+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e29eb74b1e657dfdd2eb96d5bd67a421ea1e1d7508d0a5f7d68f7e763a60b232", "fetched_at": "2026-08-28T04:03:53.239302+00:00", "kind": "readme", "missing": false, "url": "https://github.com/SciresM/hactool"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:03:53.239302+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:03:53.239302+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:03:53.239302+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:25:26.977898+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e29eb74b1e657dfdd2eb96d5bd67a421ea1e1d7508d0a5f7d68f7e763a60b232", "fetched_at": "2026-08-28T04:03:53.239302+00:00", "kind": "readme", "missing": false, "url": "https://github.com/SciresM/hactool"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:03:53.239302+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:03:53.239302+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:25:26.977898+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e29eb74b1e657dfdd2eb96d5bd67a421ea1e1d7508d0a5f7d68f7e763a60b232", "fetched_at": "2026-08-28T04:03:53.239302+00:00", "kind": "readme", "missing": false, "url": "https://github.com/SciresM/hactool"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:03:53.239302+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:03:53.239302+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:03:53.239302+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:25:26.977898+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e29eb74b1e657dfdd2eb96d5bd67a421ea1e1d7508d0a5f7d68f7e763a60b232", "fetched_at": "2026-08-28T04:03:53.239302+00:00", "kind": "readme", "missing": false, "url": "https://github.com/SciresM/hactool"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:03:53.239302+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:03:53.239302+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:25:26.977898+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e29eb74b1e657dfdd2eb96d5bd67a421ea1e1d7508d0a5f7d68f7e763a60b232", "fetched_at": "2026-08-28T04:03:53.239302+00:00", "kind": "readme", "missing": false, "url": "https://github.com/SciresM/hactool"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:25:26.977898+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e29eb74b1e657dfdd2eb96d5bd67a421ea1e1d7508d0a5f7d68f7e763a60b232", "fetched_at": "2026-08-28T04:03:53.239302+00:00", "kind": "readme", "missing": false, "url": "https://github.com/SciresM/hactool"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:25:26.977898+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e29eb74b1e657dfdd2eb96d5bd67a421ea1e1d7508d0a5f7d68f7e763a60b232", "fetched_at": "2026-08-28T04:03:53.239302+00:00", "kind": "readme", "missing": false, "url": "https://github.com/SciresM/hactool"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:25:26.977898+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "e29eb74b1e657dfdd2eb96d5bd67a421ea1e1d7508d0a5f7d68f7e763a60b232", "fetched_at": "2026-08-28T04:03:53.239302+00:00", "kind": "readme", "missing": false, "url": "https://github.com/SciresM/hactool"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3143, "days_push": 1003, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 23, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}