{"adoption": {"forks": 67, "observed_at": "2026-09-03T02:15:12.648745+00:00", "stars": 1142}, "canonical_url": "https://ross.abutalabs.com/products/hazelgrove-hazel", "card": {"archived": false, "artifact_type": "application", "description": "Hazel, a live functional programming environment with typed holes", "domain": ["programming-languages", "developer-tools", "text-editors", "education"], "enriched": true, "function": ["editor", "interpreter", "type-system", "programming-language"], "health_score": 93, "homepage": "http://hazel.org/", "language": "Reason", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["hazelgrove/hazel"], "name": "hazelgrove/hazel", "platform": ["browser", "cross-platform"], "pushed_at": "2026-09-02T22:03:42+00:00", "repo": "hazelgrove/hazel", "stars": 1142, "tags": ["typed-holes", "functional-programming", "live-programming", "reasonml", "ocaml", "research-project", "web-based-ide", "web-server"], "topics": ["editor", "functional-programming", "ocaml", "elm", "reasonml", "holes"], "urls": [], "use_cases": ["experiment with typed-hole-driven development in a functional language", "try a live programming environment that runs incomplete programs", "explore research on semantic foundations for program editors", "teach type theory and functional programming interactively", "edit functional programs without ever hitting invalid editor states"], "what_it_is": "Hazel is a web-based live functional programming environment for an Elm/ML-like language built around typed holes, allowing typechecking, editing, and even running incomplete programs. It is a research project implemented in Reason/OCaml and compiled to the browser, with no meaningless editor states.", "when_to_avoid": ["you need a production-ready IDE for mainstream languages", "you want a stable tool with long-term ecosystem support", "you need offline desktop tooling or integration with existing compilers"], "when_to_choose": ["you want to experiment with or contribute to research on typed holes and live programming", "you need an environment that gives feedback on incomplete or erroneous programs", "you are teaching or learning functional programming with immediate type feedback"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/hazelgrove-hazel", "repo": "hazelgrove/hazel", "role": "main", "score": 68}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-09-03T02:15:12.648745+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:35:30.694099+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d43c38fe5250c32febc1be7039bcb05dd7ed64bf369a4ce0eab2a635fec7bdea", "fetched_at": "2026-09-03T02:15:12.648745+00:00", "kind": "readme", "missing": false, "url": "https://github.com/hazelgrove/hazel"}, {"content_hash": "c166b9f3334745882965515f2cef5423f049ae42355c3afa928dd3b6efb3c6d9", "fetched_at": "2026-08-29T12:40:40.764077+00:00", "kind": "homepage", "missing": false, "url": "http://hazel.org/"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-09-03T02:15:12.648745+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:35:30.694099+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d43c38fe5250c32febc1be7039bcb05dd7ed64bf369a4ce0eab2a635fec7bdea", "fetched_at": "2026-09-03T02:15:12.648745+00:00", "kind": "readme", "missing": false, "url": "https://github.com/hazelgrove/hazel"}, {"content_hash": "c166b9f3334745882965515f2cef5423f049ae42355c3afa928dd3b6efb3c6d9", "fetched_at": "2026-08-29T12:40:40.764077+00:00", "kind": "homepage", "missing": false, "url": "http://hazel.org/"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:35:30.694099+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d43c38fe5250c32febc1be7039bcb05dd7ed64bf369a4ce0eab2a635fec7bdea", "fetched_at": "2026-09-03T02:15:12.648745+00:00", "kind": "readme", "missing": false, "url": "https://github.com/hazelgrove/hazel"}, {"content_hash": "c166b9f3334745882965515f2cef5423f049ae42355c3afa928dd3b6efb3c6d9", "fetched_at": "2026-08-29T12:40:40.764077+00:00", "kind": "homepage", "missing": false, "url": "http://hazel.org/"}], "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:12.648745+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-09-03T02:15:12.648745+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-09-03T02:15:12.648745+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:35:30.694099+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d43c38fe5250c32febc1be7039bcb05dd7ed64bf369a4ce0eab2a635fec7bdea", "fetched_at": "2026-09-03T02:15:12.648745+00:00", "kind": "readme", "missing": false, "url": "https://github.com/hazelgrove/hazel"}, {"content_hash": "c166b9f3334745882965515f2cef5423f049ae42355c3afa928dd3b6efb3c6d9", "fetched_at": "2026-08-29T12:40:40.764077+00:00", "kind": "homepage", "missing": false, "url": "http://hazel.org/"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-09-03T02:15:12.648745+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-09-03T02:15:12.648745+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:35:30.694099+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d43c38fe5250c32febc1be7039bcb05dd7ed64bf369a4ce0eab2a635fec7bdea", "fetched_at": "2026-09-03T02:15:12.648745+00:00", "kind": "readme", "missing": false, "url": "https://github.com/hazelgrove/hazel"}, {"content_hash": "c166b9f3334745882965515f2cef5423f049ae42355c3afa928dd3b6efb3c6d9", "fetched_at": "2026-08-29T12:40:40.764077+00:00", "kind": "homepage", "missing": false, "url": "http://hazel.org/"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-09-03T02:15:12.648745+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-09-03T02:15:12.648745+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-09-03T02:15:12.648745+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:35:30.694099+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d43c38fe5250c32febc1be7039bcb05dd7ed64bf369a4ce0eab2a635fec7bdea", "fetched_at": "2026-09-03T02:15:12.648745+00:00", "kind": "readme", "missing": false, "url": "https://github.com/hazelgrove/hazel"}, {"content_hash": "c166b9f3334745882965515f2cef5423f049ae42355c3afa928dd3b6efb3c6d9", "fetched_at": "2026-08-29T12:40:40.764077+00:00", "kind": "homepage", "missing": false, "url": "http://hazel.org/"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-09-03T02:15:12.648745+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-09-03T02:15:12.648745+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:35:30.694099+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d43c38fe5250c32febc1be7039bcb05dd7ed64bf369a4ce0eab2a635fec7bdea", "fetched_at": "2026-09-03T02:15:12.648745+00:00", "kind": "readme", "missing": false, "url": "https://github.com/hazelgrove/hazel"}, {"content_hash": "c166b9f3334745882965515f2cef5423f049ae42355c3afa928dd3b6efb3c6d9", "fetched_at": "2026-08-29T12:40:40.764077+00:00", "kind": "homepage", "missing": false, "url": "http://hazel.org/"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:35:30.694099+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d43c38fe5250c32febc1be7039bcb05dd7ed64bf369a4ce0eab2a635fec7bdea", "fetched_at": "2026-09-03T02:15:12.648745+00:00", "kind": "readme", "missing": false, "url": "https://github.com/hazelgrove/hazel"}, {"content_hash": "c166b9f3334745882965515f2cef5423f049ae42355c3afa928dd3b6efb3c6d9", "fetched_at": "2026-08-29T12:40:40.764077+00:00", "kind": "homepage", "missing": false, "url": "http://hazel.org/"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:35:30.694099+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d43c38fe5250c32febc1be7039bcb05dd7ed64bf369a4ce0eab2a635fec7bdea", "fetched_at": "2026-09-03T02:15:12.648745+00:00", "kind": "readme", "missing": false, "url": "https://github.com/hazelgrove/hazel"}, {"content_hash": "c166b9f3334745882965515f2cef5423f049ae42355c3afa928dd3b6efb3c6d9", "fetched_at": "2026-08-29T12:40:40.764077+00:00", "kind": "homepage", "missing": false, "url": "http://hazel.org/"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:35:30.694099+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d43c38fe5250c32febc1be7039bcb05dd7ed64bf369a4ce0eab2a635fec7bdea", "fetched_at": "2026-09-03T02:15:12.648745+00:00", "kind": "readme", "missing": false, "url": "https://github.com/hazelgrove/hazel"}, {"content_hash": "c166b9f3334745882965515f2cef5423f049ae42355c3afa928dd3b6efb3c6d9", "fetched_at": "2026-08-29T12:40:40.764077+00:00", "kind": "homepage", "missing": false, "url": "http://hazel.org/"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 100, "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": 3506, "days_push": 0, "days_rel": 422, "gap_med": null, "n_releases_24m": 1}, "score": 68, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 3, "stale_scrape": false}}