{"adoption": {"forks": 85, "observed_at": "2026-09-03T02:15:13.110918+00:00", "stars": 1143}, "canonical_url": "https://ross.abutalabs.com/products/hk", "card": {"archived": false, "artifact_type": "cli-tool", "description": "git hooks and project lints", "domain": ["developer-tools", "version-control"], "enriched": true, "function": ["linter", "developer-tools", "cli", "concurrency", "version-control"], "health_score": 100, "homepage": "https://hk.jdx.dev", "language": "Rust", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["jdx/hk"], "name": "jdx/hk", "platform": ["windows", "cli", "rust"], "pushed_at": "2026-09-02T22:05:53+00:00", "repo": "jdx/hk", "stars": 1143, "tags": ["git-hooks", "linting", "code-formatting", "pre-commit", "pkl-configuration", "parallel-execution", "mise-integration", "command-line", "automation", "linux", "macos"], "topics": [], "urls": [], "use_cases": ["manage git hooks for a project", "run linters and formatters in parallel on pre-commit", "prevent linters from racing when editing the same files", "safely handle partially staged files in pre-commit hooks", "set up global git hooks across all repositories", "run project lint checks in CI"], "what_it_is": "hk is a fast, language-agnostic git hook manager and project linter written in Rust. It runs linters and formatters concurrently with read/write file locking to prevent race conditions, and uses typed Pkl configuration with built-in definitions for common tools.", "when_to_avoid": ["you need a hook manager with a large plugin ecosystem or broad community adoption", "you prefer YAML/JSON configuration over Pkl", "you only need simple sequential hook scripts", "you are on Git older than 2.54 and dislike legacy script shims"], "when_to_choose": ["you need fast, parallel git hook execution with safe file locking", "you want built-in configurations for common linters like prettier or eslint", "you use mise and want integrated tool management", "you need robust stashing of unstaged changes during fix hooks"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/hk", "repo": "jdx/hk", "role": "main", "score": 84}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-09-03T02:15:13.110918+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:41:58.612981+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a7efefba46a2c34c3b4694faf0eb13cb16d17000d10caabc1cab2e2cb1bd66ba", "fetched_at": "2026-09-03T02:15:13.110918+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jdx/hk"}, {"content_hash": "b7737dd12794c2d94c59d5234c198c2bcb482bbf0043d6bda9d2dd513728af9b", "fetched_at": "2026-08-29T12:45:47.279291+00:00", "kind": "homepage", "missing": false, "url": "https://hk.jdx.dev"}, {"content_hash": "b20c3c7c141cd3ddac777ddf1f4c13c81d1603587afa39e298aa184cc96d156e", "fetched_at": "2026-08-29T12:45:47.281742+00:00", "kind": "site_page", "missing": false, "url": "https://hk.jdx.dev/cli/install.html"}, {"content_hash": "eaf8f6de8afb75f482135e8e9e7e9d201a8b1726280c2b354396b096cfc57531", "fetched_at": "2026-08-29T12:45:47.283460+00:00", "kind": "site_page", "missing": false, "url": "https://hk.jdx.dev/cli/uninstall.html"}, {"content_hash": "c415bdaa617f3f0d12b90544e23354ec143d875949ec4bcf44bff4e177aa0b2a", "fetched_at": "2026-08-29T12:45:47.285069+00:00", "kind": "site_page", "missing": false, "url": "https://hk.jdx.dev/about.html"}, {"content_hash": "7cfa6b645b8a7933ea9c892e9bfeaf257b600c695f05bb1316fede748ab60c2c", "fetched_at": "2026-08-29T12:45:47.286612+00:00", "kind": "registry_crates", "missing": false, "url": "https://crates.io/api/v1/crates/hk"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-09-03T02:15:13.110918+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:41:58.612981+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a7efefba46a2c34c3b4694faf0eb13cb16d17000d10caabc1cab2e2cb1bd66ba", "fetched_at": "2026-09-03T02:15:13.110918+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jdx/hk"}, {"content_hash": "b7737dd12794c2d94c59d5234c198c2bcb482bbf0043d6bda9d2dd513728af9b", "fetched_at": "2026-08-29T12:45:47.279291+00:00", "kind": "homepage", "missing": false, "url": "https://hk.jdx.dev"}, {"content_hash": "b20c3c7c141cd3ddac777ddf1f4c13c81d1603587afa39e298aa184cc96d156e", "fetched_at": "2026-08-29T12:45:47.281742+00:00", "kind": "site_page", "missing": false, "url": "https://hk.jdx.dev/cli/install.html"}, {"content_hash": "eaf8f6de8afb75f482135e8e9e7e9d201a8b1726280c2b354396b096cfc57531", "fetched_at": "2026-08-29T12:45:47.283460+00:00", "kind": "site_page", "missing": false, "url": "https://hk.jdx.dev/cli/uninstall.html"}, {"content_hash": "c415bdaa617f3f0d12b90544e23354ec143d875949ec4bcf44bff4e177aa0b2a", "fetched_at": "2026-08-29T12:45:47.285069+00:00", "kind": "site_page", "missing": false, "url": "https://hk.jdx.dev/about.html"}, {"content_hash": "7cfa6b645b8a7933ea9c892e9bfeaf257b600c695f05bb1316fede748ab60c2c", "fetched_at": "2026-08-29T12:45:47.286612+00:00", "kind": "registry_crates", "missing": false, "url": "https://crates.io/api/v1/crates/hk"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:41:58.612981+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a7efefba46a2c34c3b4694faf0eb13cb16d17000d10caabc1cab2e2cb1bd66ba", "fetched_at": "2026-09-03T02:15:13.110918+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jdx/hk"}, {"content_hash": "b7737dd12794c2d94c59d5234c198c2bcb482bbf0043d6bda9d2dd513728af9b", "fetched_at": "2026-08-29T12:45:47.279291+00:00", "kind": "homepage", "missing": false, "url": "https://hk.jdx.dev"}, {"content_hash": "b20c3c7c141cd3ddac777ddf1f4c13c81d1603587afa39e298aa184cc96d156e", "fetched_at": "2026-08-29T12:45:47.281742+00:00", "kind": "site_page", "missing": false, "url": "https://hk.jdx.dev/cli/install.html"}, {"content_hash": "eaf8f6de8afb75f482135e8e9e7e9d201a8b1726280c2b354396b096cfc57531", "fetched_at": "2026-08-29T12:45:47.283460+00:00", "kind": "site_page", "missing": false, "url": "https://hk.jdx.dev/cli/uninstall.html"}, {"content_hash": "c415bdaa617f3f0d12b90544e23354ec143d875949ec4bcf44bff4e177aa0b2a", "fetched_at": "2026-08-29T12:45:47.285069+00:00", "kind": "site_page", "missing": false, "url": "https://hk.jdx.dev/about.html"}, {"content_hash": "7cfa6b645b8a7933ea9c892e9bfeaf257b600c695f05bb1316fede748ab60c2c", "fetched_at": "2026-08-29T12:45:47.286612+00:00", "kind": "registry_crates", "missing": false, "url": "https://crates.io/api/v1/crates/hk"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-09-03T02:15:13.110918+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-09-03T02:15:13.110918+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-09-03T02:15:13.110918+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:41:58.612981+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a7efefba46a2c34c3b4694faf0eb13cb16d17000d10caabc1cab2e2cb1bd66ba", "fetched_at": "2026-09-03T02:15:13.110918+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jdx/hk"}, {"content_hash": "b7737dd12794c2d94c59d5234c198c2bcb482bbf0043d6bda9d2dd513728af9b", "fetched_at": "2026-08-29T12:45:47.279291+00:00", "kind": "homepage", "missing": false, "url": "https://hk.jdx.dev"}, {"content_hash": "b20c3c7c141cd3ddac777ddf1f4c13c81d1603587afa39e298aa184cc96d156e", "fetched_at": "2026-08-29T12:45:47.281742+00:00", "kind": "site_page", "missing": false, "url": "https://hk.jdx.dev/cli/install.html"}, {"content_hash": "eaf8f6de8afb75f482135e8e9e7e9d201a8b1726280c2b354396b096cfc57531", "fetched_at": "2026-08-29T12:45:47.283460+00:00", "kind": "site_page", "missing": false, "url": "https://hk.jdx.dev/cli/uninstall.html"}, {"content_hash": "c415bdaa617f3f0d12b90544e23354ec143d875949ec4bcf44bff4e177aa0b2a", "fetched_at": "2026-08-29T12:45:47.285069+00:00", "kind": "site_page", "missing": false, "url": "https://hk.jdx.dev/about.html"}, {"content_hash": "7cfa6b645b8a7933ea9c892e9bfeaf257b600c695f05bb1316fede748ab60c2c", "fetched_at": "2026-08-29T12:45:47.286612+00:00", "kind": "registry_crates", "missing": false, "url": "https://crates.io/api/v1/crates/hk"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-09-03T02:15:13.110918+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-09-03T02:15:13.110918+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:41:58.612981+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a7efefba46a2c34c3b4694faf0eb13cb16d17000d10caabc1cab2e2cb1bd66ba", "fetched_at": "2026-09-03T02:15:13.110918+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jdx/hk"}, {"content_hash": "b7737dd12794c2d94c59d5234c198c2bcb482bbf0043d6bda9d2dd513728af9b", "fetched_at": "2026-08-29T12:45:47.279291+00:00", "kind": "homepage", "missing": false, "url": "https://hk.jdx.dev"}, {"content_hash": "b20c3c7c141cd3ddac777ddf1f4c13c81d1603587afa39e298aa184cc96d156e", "fetched_at": "2026-08-29T12:45:47.281742+00:00", "kind": "site_page", "missing": false, "url": "https://hk.jdx.dev/cli/install.html"}, {"content_hash": "eaf8f6de8afb75f482135e8e9e7e9d201a8b1726280c2b354396b096cfc57531", "fetched_at": "2026-08-29T12:45:47.283460+00:00", "kind": "site_page", "missing": false, "url": "https://hk.jdx.dev/cli/uninstall.html"}, {"content_hash": "c415bdaa617f3f0d12b90544e23354ec143d875949ec4bcf44bff4e177aa0b2a", "fetched_at": "2026-08-29T12:45:47.285069+00:00", "kind": "site_page", "missing": false, "url": "https://hk.jdx.dev/about.html"}, {"content_hash": "7cfa6b645b8a7933ea9c892e9bfeaf257b600c695f05bb1316fede748ab60c2c", "fetched_at": "2026-08-29T12:45:47.286612+00:00", "kind": "registry_crates", "missing": false, "url": "https://crates.io/api/v1/crates/hk"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-09-03T02:15:13.110918+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-09-03T02:15:13.110918+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-09-03T02:15:13.110918+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:41:58.612981+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a7efefba46a2c34c3b4694faf0eb13cb16d17000d10caabc1cab2e2cb1bd66ba", "fetched_at": "2026-09-03T02:15:13.110918+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jdx/hk"}, {"content_hash": "b7737dd12794c2d94c59d5234c198c2bcb482bbf0043d6bda9d2dd513728af9b", "fetched_at": "2026-08-29T12:45:47.279291+00:00", "kind": "homepage", "missing": false, "url": "https://hk.jdx.dev"}, {"content_hash": "b20c3c7c141cd3ddac777ddf1f4c13c81d1603587afa39e298aa184cc96d156e", "fetched_at": "2026-08-29T12:45:47.281742+00:00", "kind": "site_page", "missing": false, "url": "https://hk.jdx.dev/cli/install.html"}, {"content_hash": "eaf8f6de8afb75f482135e8e9e7e9d201a8b1726280c2b354396b096cfc57531", "fetched_at": "2026-08-29T12:45:47.283460+00:00", "kind": "site_page", "missing": false, "url": "https://hk.jdx.dev/cli/uninstall.html"}, {"content_hash": "c415bdaa617f3f0d12b90544e23354ec143d875949ec4bcf44bff4e177aa0b2a", "fetched_at": "2026-08-29T12:45:47.285069+00:00", "kind": "site_page", "missing": false, "url": "https://hk.jdx.dev/about.html"}, {"content_hash": "7cfa6b645b8a7933ea9c892e9bfeaf257b600c695f05bb1316fede748ab60c2c", "fetched_at": "2026-08-29T12:45:47.286612+00:00", "kind": "registry_crates", "missing": false, "url": "https://crates.io/api/v1/crates/hk"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-09-03T02:15:13.110918+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-09-03T02:15:13.110918+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:41:58.612981+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a7efefba46a2c34c3b4694faf0eb13cb16d17000d10caabc1cab2e2cb1bd66ba", "fetched_at": "2026-09-03T02:15:13.110918+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jdx/hk"}, {"content_hash": "b7737dd12794c2d94c59d5234c198c2bcb482bbf0043d6bda9d2dd513728af9b", "fetched_at": "2026-08-29T12:45:47.279291+00:00", "kind": "homepage", "missing": false, "url": "https://hk.jdx.dev"}, {"content_hash": "b20c3c7c141cd3ddac777ddf1f4c13c81d1603587afa39e298aa184cc96d156e", "fetched_at": "2026-08-29T12:45:47.281742+00:00", "kind": "site_page", "missing": false, "url": "https://hk.jdx.dev/cli/install.html"}, {"content_hash": "eaf8f6de8afb75f482135e8e9e7e9d201a8b1726280c2b354396b096cfc57531", "fetched_at": "2026-08-29T12:45:47.283460+00:00", "kind": "site_page", "missing": false, "url": "https://hk.jdx.dev/cli/uninstall.html"}, {"content_hash": "c415bdaa617f3f0d12b90544e23354ec143d875949ec4bcf44bff4e177aa0b2a", "fetched_at": "2026-08-29T12:45:47.285069+00:00", "kind": "site_page", "missing": false, "url": "https://hk.jdx.dev/about.html"}, {"content_hash": "7cfa6b645b8a7933ea9c892e9bfeaf257b600c695f05bb1316fede748ab60c2c", "fetched_at": "2026-08-29T12:45:47.286612+00:00", "kind": "registry_crates", "missing": false, "url": "https://crates.io/api/v1/crates/hk"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:41:58.612981+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a7efefba46a2c34c3b4694faf0eb13cb16d17000d10caabc1cab2e2cb1bd66ba", "fetched_at": "2026-09-03T02:15:13.110918+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jdx/hk"}, {"content_hash": "b7737dd12794c2d94c59d5234c198c2bcb482bbf0043d6bda9d2dd513728af9b", "fetched_at": "2026-08-29T12:45:47.279291+00:00", "kind": "homepage", "missing": false, "url": "https://hk.jdx.dev"}, {"content_hash": "b20c3c7c141cd3ddac777ddf1f4c13c81d1603587afa39e298aa184cc96d156e", "fetched_at": "2026-08-29T12:45:47.281742+00:00", "kind": "site_page", "missing": false, "url": "https://hk.jdx.dev/cli/install.html"}, {"content_hash": "eaf8f6de8afb75f482135e8e9e7e9d201a8b1726280c2b354396b096cfc57531", "fetched_at": "2026-08-29T12:45:47.283460+00:00", "kind": "site_page", "missing": false, "url": "https://hk.jdx.dev/cli/uninstall.html"}, {"content_hash": "c415bdaa617f3f0d12b90544e23354ec143d875949ec4bcf44bff4e177aa0b2a", "fetched_at": "2026-08-29T12:45:47.285069+00:00", "kind": "site_page", "missing": false, "url": "https://hk.jdx.dev/about.html"}, {"content_hash": "7cfa6b645b8a7933ea9c892e9bfeaf257b600c695f05bb1316fede748ab60c2c", "fetched_at": "2026-08-29T12:45:47.286612+00:00", "kind": "registry_crates", "missing": false, "url": "https://crates.io/api/v1/crates/hk"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:41:58.612981+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a7efefba46a2c34c3b4694faf0eb13cb16d17000d10caabc1cab2e2cb1bd66ba", "fetched_at": "2026-09-03T02:15:13.110918+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jdx/hk"}, {"content_hash": "b7737dd12794c2d94c59d5234c198c2bcb482bbf0043d6bda9d2dd513728af9b", "fetched_at": "2026-08-29T12:45:47.279291+00:00", "kind": "homepage", "missing": false, "url": "https://hk.jdx.dev"}, {"content_hash": "b20c3c7c141cd3ddac777ddf1f4c13c81d1603587afa39e298aa184cc96d156e", "fetched_at": "2026-08-29T12:45:47.281742+00:00", "kind": "site_page", "missing": false, "url": "https://hk.jdx.dev/cli/install.html"}, {"content_hash": "eaf8f6de8afb75f482135e8e9e7e9d201a8b1726280c2b354396b096cfc57531", "fetched_at": "2026-08-29T12:45:47.283460+00:00", "kind": "site_page", "missing": false, "url": "https://hk.jdx.dev/cli/uninstall.html"}, {"content_hash": "c415bdaa617f3f0d12b90544e23354ec143d875949ec4bcf44bff4e177aa0b2a", "fetched_at": "2026-08-29T12:45:47.285069+00:00", "kind": "site_page", "missing": false, "url": "https://hk.jdx.dev/about.html"}, {"content_hash": "7cfa6b645b8a7933ea9c892e9bfeaf257b600c695f05bb1316fede748ab60c2c", "fetched_at": "2026-08-29T12:45:47.286612+00:00", "kind": "registry_crates", "missing": false, "url": "https://crates.io/api/v1/crates/hk"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:41:58.612981+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a7efefba46a2c34c3b4694faf0eb13cb16d17000d10caabc1cab2e2cb1bd66ba", "fetched_at": "2026-09-03T02:15:13.110918+00:00", "kind": "readme", "missing": false, "url": "https://github.com/jdx/hk"}, {"content_hash": "b7737dd12794c2d94c59d5234c198c2bcb482bbf0043d6bda9d2dd513728af9b", "fetched_at": "2026-08-29T12:45:47.279291+00:00", "kind": "homepage", "missing": false, "url": "https://hk.jdx.dev"}, {"content_hash": "b20c3c7c141cd3ddac777ddf1f4c13c81d1603587afa39e298aa184cc96d156e", "fetched_at": "2026-08-29T12:45:47.281742+00:00", "kind": "site_page", "missing": false, "url": "https://hk.jdx.dev/cli/install.html"}, {"content_hash": "eaf8f6de8afb75f482135e8e9e7e9d201a8b1726280c2b354396b096cfc57531", "fetched_at": "2026-08-29T12:45:47.283460+00:00", "kind": "site_page", "missing": false, "url": "https://hk.jdx.dev/cli/uninstall.html"}, {"content_hash": "c415bdaa617f3f0d12b90544e23354ec143d875949ec4bcf44bff4e177aa0b2a", "fetched_at": "2026-08-29T12:45:47.285069+00:00", "kind": "site_page", "missing": false, "url": "https://hk.jdx.dev/about.html"}, {"content_hash": "7cfa6b645b8a7933ea9c892e9bfeaf257b600c695f05bb1316fede748ab60c2c", "fetched_at": "2026-08-29T12:45:47.286612+00:00", "kind": "registry_crates", "missing": false, "url": "https://crates.io/api/v1/crates/hk"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 100, "longevity": 41, "rhythm": 88}, "computed_at": "2026-09-03T02:39:23.370411+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 584, "days_push": 0, "days_rel": 3, "gap_med": 1.0, "n_releases_24m": 141}, "score": 84, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 3, "stale_scrape": false}}