{"adoption": {"forks": 125, "observed_at": "2026-08-28T04:08:54.584111+00:00", "stars": 4582}, "canonical_url": "https://ross.abutalabs.com/products/gritql", "card": {"archived": false, "artifact_type": "cli-tool", "description": "GritQL is a query language for searching, linting, and modifying code.", "domain": ["developer-tools", "parsers"], "enriched": true, "function": ["search-engine", "parser", "linter", "developer-tools"], "health_score": 97, "homepage": "https://docs.grit.io/", "language": "Rust", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["biomejs/gritql"], "name": "biomejs/gritql", "platform": ["windows", "cli", "rust"], "pushed_at": "2026-08-16T03:41:31+00:00", "repo": "biomejs/gritql", "stars": 4582, "tags": ["gritql", "codemod", "tree-sitter", "code-search", "code-transformation", "ast-query", "refactoring", "custom-linting", "command-line", "automation", "linux", "macos"], "topics": ["ast", "codemod", "javascript", "linter", "refactoring", "rust", "search", "tree-sitter"], "urls": [], "use_cases": ["find all console.log calls in a codebase", "rewrite console.log to winston.log across a repo", "migrate React class components to hooks", "convert Cypress tests to Playwright", "enforce team-specific lint rules in CI", "automate large-scale API migrations", "remove imports from a specific package"], "what_it_is": "GritQL is a declarative query language and Rust-based CLI for searching, linting, and rewriting source code using pattern matching over ASTs. It supports many target languages (JavaScript/TypeScript, Python, Java, Terraform, Rust, Go, SQL, and more) and includes auto-fix, custom lint enforcement, and a shareable pattern library.", "when_to_avoid": ["you only need simple regex find-and-replace", "your target language is not among the supported tree-sitter grammars", "you need a GUI-based refactoring tool"], "when_to_choose": ["you need to search or refactor code across millions of lines", "you want codemods without learning each language's AST APIs", "you need custom lint rules with auto-fix in CI", "you want reusable, shareable code search patterns"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/gritql", "repo": "biomejs/gritql", "role": "main", "score": 80}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:08:54.584111+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T18:19:53.392227+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4572fc907b4cf4a0fded6b73cb0345159a434b1c7d5a366eb7171f949c03b50d", "fetched_at": "2026-08-28T04:08:54.584111+00:00", "kind": "readme", "missing": false, "url": "https://github.com/biomejs/gritql"}, {"content_hash": "e195da36900a1d011183ef837797c56520703312ab5331113db185620b00ac6d", "fetched_at": "2026-08-29T09:05:09.338128+00:00", "kind": "homepage", "missing": false, "url": "https://docs.grit.io/"}, {"content_hash": "82740f574b663965422b4b4f0ae82059ae881ca11535d729cdfa9795d1b6a6fa", "fetched_at": "2026-08-29T09:05:09.340711+00:00", "kind": "site_page", "missing": false, "url": "https://docs.grit.io/language/overview"}, {"content_hash": "7c768e87c3eaaaabe5516f69dd2835ccb55909be731978d3f62b031b380338db", "fetched_at": "2026-08-29T09:05:09.342521+00:00", "kind": "site_page", "missing": false, "url": "https://docs.grit.io/cli/quickstart"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:08:54.584111+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T18:19:53.392227+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4572fc907b4cf4a0fded6b73cb0345159a434b1c7d5a366eb7171f949c03b50d", "fetched_at": "2026-08-28T04:08:54.584111+00:00", "kind": "readme", "missing": false, "url": "https://github.com/biomejs/gritql"}, {"content_hash": "e195da36900a1d011183ef837797c56520703312ab5331113db185620b00ac6d", "fetched_at": "2026-08-29T09:05:09.338128+00:00", "kind": "homepage", "missing": false, "url": "https://docs.grit.io/"}, {"content_hash": "82740f574b663965422b4b4f0ae82059ae881ca11535d729cdfa9795d1b6a6fa", "fetched_at": "2026-08-29T09:05:09.340711+00:00", "kind": "site_page", "missing": false, "url": "https://docs.grit.io/language/overview"}, {"content_hash": "7c768e87c3eaaaabe5516f69dd2835ccb55909be731978d3f62b031b380338db", "fetched_at": "2026-08-29T09:05:09.342521+00:00", "kind": "site_page", "missing": false, "url": "https://docs.grit.io/cli/quickstart"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T18:19:53.392227+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4572fc907b4cf4a0fded6b73cb0345159a434b1c7d5a366eb7171f949c03b50d", "fetched_at": "2026-08-28T04:08:54.584111+00:00", "kind": "readme", "missing": false, "url": "https://github.com/biomejs/gritql"}, {"content_hash": "e195da36900a1d011183ef837797c56520703312ab5331113db185620b00ac6d", "fetched_at": "2026-08-29T09:05:09.338128+00:00", "kind": "homepage", "missing": false, "url": "https://docs.grit.io/"}, {"content_hash": "82740f574b663965422b4b4f0ae82059ae881ca11535d729cdfa9795d1b6a6fa", "fetched_at": "2026-08-29T09:05:09.340711+00:00", "kind": "site_page", "missing": false, "url": "https://docs.grit.io/language/overview"}, {"content_hash": "7c768e87c3eaaaabe5516f69dd2835ccb55909be731978d3f62b031b380338db", "fetched_at": "2026-08-29T09:05:09.342521+00:00", "kind": "site_page", "missing": false, "url": "https://docs.grit.io/cli/quickstart"}], "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:08:54.584111+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:08:54.584111+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:08:54.584111+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T18:19:53.392227+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4572fc907b4cf4a0fded6b73cb0345159a434b1c7d5a366eb7171f949c03b50d", "fetched_at": "2026-08-28T04:08:54.584111+00:00", "kind": "readme", "missing": false, "url": "https://github.com/biomejs/gritql"}, {"content_hash": "e195da36900a1d011183ef837797c56520703312ab5331113db185620b00ac6d", "fetched_at": "2026-08-29T09:05:09.338128+00:00", "kind": "homepage", "missing": false, "url": "https://docs.grit.io/"}, {"content_hash": "82740f574b663965422b4b4f0ae82059ae881ca11535d729cdfa9795d1b6a6fa", "fetched_at": "2026-08-29T09:05:09.340711+00:00", "kind": "site_page", "missing": false, "url": "https://docs.grit.io/language/overview"}, {"content_hash": "7c768e87c3eaaaabe5516f69dd2835ccb55909be731978d3f62b031b380338db", "fetched_at": "2026-08-29T09:05:09.342521+00:00", "kind": "site_page", "missing": false, "url": "https://docs.grit.io/cli/quickstart"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:08:54.584111+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:08:54.584111+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T18:19:53.392227+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4572fc907b4cf4a0fded6b73cb0345159a434b1c7d5a366eb7171f949c03b50d", "fetched_at": "2026-08-28T04:08:54.584111+00:00", "kind": "readme", "missing": false, "url": "https://github.com/biomejs/gritql"}, {"content_hash": "e195da36900a1d011183ef837797c56520703312ab5331113db185620b00ac6d", "fetched_at": "2026-08-29T09:05:09.338128+00:00", "kind": "homepage", "missing": false, "url": "https://docs.grit.io/"}, {"content_hash": "82740f574b663965422b4b4f0ae82059ae881ca11535d729cdfa9795d1b6a6fa", "fetched_at": "2026-08-29T09:05:09.340711+00:00", "kind": "site_page", "missing": false, "url": "https://docs.grit.io/language/overview"}, {"content_hash": "7c768e87c3eaaaabe5516f69dd2835ccb55909be731978d3f62b031b380338db", "fetched_at": "2026-08-29T09:05:09.342521+00:00", "kind": "site_page", "missing": false, "url": "https://docs.grit.io/cli/quickstart"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:08:54.584111+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:08:54.584111+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:08:54.584111+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T18:19:53.392227+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4572fc907b4cf4a0fded6b73cb0345159a434b1c7d5a366eb7171f949c03b50d", "fetched_at": "2026-08-28T04:08:54.584111+00:00", "kind": "readme", "missing": false, "url": "https://github.com/biomejs/gritql"}, {"content_hash": "e195da36900a1d011183ef837797c56520703312ab5331113db185620b00ac6d", "fetched_at": "2026-08-29T09:05:09.338128+00:00", "kind": "homepage", "missing": false, "url": "https://docs.grit.io/"}, {"content_hash": "82740f574b663965422b4b4f0ae82059ae881ca11535d729cdfa9795d1b6a6fa", "fetched_at": "2026-08-29T09:05:09.340711+00:00", "kind": "site_page", "missing": false, "url": "https://docs.grit.io/language/overview"}, {"content_hash": "7c768e87c3eaaaabe5516f69dd2835ccb55909be731978d3f62b031b380338db", "fetched_at": "2026-08-29T09:05:09.342521+00:00", "kind": "site_page", "missing": false, "url": "https://docs.grit.io/cli/quickstart"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:08:54.584111+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:08:54.584111+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T18:19:53.392227+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4572fc907b4cf4a0fded6b73cb0345159a434b1c7d5a366eb7171f949c03b50d", "fetched_at": "2026-08-28T04:08:54.584111+00:00", "kind": "readme", "missing": false, "url": "https://github.com/biomejs/gritql"}, {"content_hash": "e195da36900a1d011183ef837797c56520703312ab5331113db185620b00ac6d", "fetched_at": "2026-08-29T09:05:09.338128+00:00", "kind": "homepage", "missing": false, "url": "https://docs.grit.io/"}, {"content_hash": "82740f574b663965422b4b4f0ae82059ae881ca11535d729cdfa9795d1b6a6fa", "fetched_at": "2026-08-29T09:05:09.340711+00:00", "kind": "site_page", "missing": false, "url": "https://docs.grit.io/language/overview"}, {"content_hash": "7c768e87c3eaaaabe5516f69dd2835ccb55909be731978d3f62b031b380338db", "fetched_at": "2026-08-29T09:05:09.342521+00:00", "kind": "site_page", "missing": false, "url": "https://docs.grit.io/cli/quickstart"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T18:19:53.392227+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4572fc907b4cf4a0fded6b73cb0345159a434b1c7d5a366eb7171f949c03b50d", "fetched_at": "2026-08-28T04:08:54.584111+00:00", "kind": "readme", "missing": false, "url": "https://github.com/biomejs/gritql"}, {"content_hash": "e195da36900a1d011183ef837797c56520703312ab5331113db185620b00ac6d", "fetched_at": "2026-08-29T09:05:09.338128+00:00", "kind": "homepage", "missing": false, "url": "https://docs.grit.io/"}, {"content_hash": "82740f574b663965422b4b4f0ae82059ae881ca11535d729cdfa9795d1b6a6fa", "fetched_at": "2026-08-29T09:05:09.340711+00:00", "kind": "site_page", "missing": false, "url": "https://docs.grit.io/language/overview"}, {"content_hash": "7c768e87c3eaaaabe5516f69dd2835ccb55909be731978d3f62b031b380338db", "fetched_at": "2026-08-29T09:05:09.342521+00:00", "kind": "site_page", "missing": false, "url": "https://docs.grit.io/cli/quickstart"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T18:19:53.392227+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4572fc907b4cf4a0fded6b73cb0345159a434b1c7d5a366eb7171f949c03b50d", "fetched_at": "2026-08-28T04:08:54.584111+00:00", "kind": "readme", "missing": false, "url": "https://github.com/biomejs/gritql"}, {"content_hash": "e195da36900a1d011183ef837797c56520703312ab5331113db185620b00ac6d", "fetched_at": "2026-08-29T09:05:09.338128+00:00", "kind": "homepage", "missing": false, "url": "https://docs.grit.io/"}, {"content_hash": "82740f574b663965422b4b4f0ae82059ae881ca11535d729cdfa9795d1b6a6fa", "fetched_at": "2026-08-29T09:05:09.340711+00:00", "kind": "site_page", "missing": false, "url": "https://docs.grit.io/language/overview"}, {"content_hash": "7c768e87c3eaaaabe5516f69dd2835ccb55909be731978d3f62b031b380338db", "fetched_at": "2026-08-29T09:05:09.342521+00:00", "kind": "site_page", "missing": false, "url": "https://docs.grit.io/cli/quickstart"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T18:19:53.392227+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "4572fc907b4cf4a0fded6b73cb0345159a434b1c7d5a366eb7171f949c03b50d", "fetched_at": "2026-08-28T04:08:54.584111+00:00", "kind": "readme", "missing": false, "url": "https://github.com/biomejs/gritql"}, {"content_hash": "e195da36900a1d011183ef837797c56520703312ab5331113db185620b00ac6d", "fetched_at": "2026-08-29T09:05:09.338128+00:00", "kind": "homepage", "missing": false, "url": "https://docs.grit.io/"}, {"content_hash": "82740f574b663965422b4b4f0ae82059ae881ca11535d729cdfa9795d1b6a6fa", "fetched_at": "2026-08-29T09:05:09.340711+00:00", "kind": "site_page", "missing": false, "url": "https://docs.grit.io/language/overview"}, {"content_hash": "7c768e87c3eaaaabe5516f69dd2835ccb55909be731978d3f62b031b380338db", "fetched_at": "2026-08-29T09:05:09.342521+00:00", "kind": "site_page", "missing": false, "url": "https://docs.grit.io/cli/quickstart"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 98, "longevity": 64, "rhythm": 65}, "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": 908, "days_push": 17, "days_rel": 156, "gap_med": 1.0, "n_releases_24m": 73}, "score": 80, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}