{"adoption": {"forks": 151, "observed_at": "2026-09-01T02:14:06.309156+00:00", "stars": 1115}, "canonical_url": "https://ross.abutalabs.com/products/reflex-frp-reflex", "card": {"archived": false, "artifact_type": "library", "description": "Interactive programs without callbacks or side-effects. Functional Reactive Programming (FRP) uses composable events and time-varying values to describe interactive systems as pure functions. Just like other pure functional code, functional reactive code is easier to get right on the first try, maintain, and reuse.", "domain": ["web-development", "cross-platform", "programming-languages"], "enriched": true, "function": ["state-management", "concurrency", "developer-tools"], "health_score": 95, "homepage": "https://reflex-frp.org", "language": "Haskell", "license": "BSD-3-Clause", "license_family": "permissive", "maturity": "active", "member_repos": ["reflex-frp/reflex"], "name": "reflex-frp/reflex", "platform": ["cross-platform"], "pushed_at": "2026-08-29T15:37:48+00:00", "repo": "reflex-frp/reflex", "stars": 1115, "tags": ["frp", "haskell", "reactive-programming", "events", "time-varying-values", "deterministic", "functional-reactive-programming", "web-server", "desktop", "mobile"], "topics": ["haskell", "reactive", "reflex-frp", "functional-reactive-programming", "frp"], "urls": [], "use_cases": ["write interactive programs without callbacks or side-effects", "build self-updating user interfaces in Haskell", "model time-varying data and event streams reactively", "develop cross-platform apps (web, mobile, desktop) in one codebase", "reduce bugs in event-driven code with pure functional reactive design", "build single-page web apps with reflex-dom on top of Reflex"], "what_it_is": "Reflex is a Haskell library providing a fully-deterministic, higher-order Functional Reactive Programming (FRP) interface with an efficient engine implementing it. It lets developers describe interactive systems as pure functions using composable events and time-varying values, without callbacks or side-effects.", "when_to_avoid": ["your team does not know Haskell or functional programming", "you need a quick JavaScript/TypeScript frontend with a large ecosystem", "your project is simple enough that FRP abstractions add unnecessary complexity", "you need non-deterministic or imperative event handling"], "when_to_choose": ["you program in Haskell and want deterministic, composable handling of events and dynamic values", "you want to build highly interactive UIs (e.g., with reflex-dom or Obelisk) without callback spaghetti", "you need one Haskell codebase across web, mobile, and desktop", "you value maintainability and reusability of reactive code"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/reflex-frp-reflex", "repo": "reflex-frp/reflex", "role": "main", "score": 79}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-09-01T02:14:06.309156+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:42:11.831676+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "db85eeb993c06edfc0943288e6d3f23eb87a76246ea1ba0353d51692304255cd", "fetched_at": "2026-09-01T02:14:06.309156+00:00", "kind": "readme", "missing": false, "url": "https://github.com/reflex-frp/reflex"}, {"content_hash": "36ae7a711f52d595dc32cfca04b020c07556f7d9d8ffd66b056a2bc7b717174e", "fetched_at": "2026-08-29T12:45:58.394278+00:00", "kind": "homepage", "missing": false, "url": "https://reflex-frp.org"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-09-01T02:14:06.309156+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:42:11.831676+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "db85eeb993c06edfc0943288e6d3f23eb87a76246ea1ba0353d51692304255cd", "fetched_at": "2026-09-01T02:14:06.309156+00:00", "kind": "readme", "missing": false, "url": "https://github.com/reflex-frp/reflex"}, {"content_hash": "36ae7a711f52d595dc32cfca04b020c07556f7d9d8ffd66b056a2bc7b717174e", "fetched_at": "2026-08-29T12:45:58.394278+00:00", "kind": "homepage", "missing": false, "url": "https://reflex-frp.org"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:42:11.831676+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "db85eeb993c06edfc0943288e6d3f23eb87a76246ea1ba0353d51692304255cd", "fetched_at": "2026-09-01T02:14:06.309156+00:00", "kind": "readme", "missing": false, "url": "https://github.com/reflex-frp/reflex"}, {"content_hash": "36ae7a711f52d595dc32cfca04b020c07556f7d9d8ffd66b056a2bc7b717174e", "fetched_at": "2026-08-29T12:45:58.394278+00:00", "kind": "homepage", "missing": false, "url": "https://reflex-frp.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-01T02:14:06.309156+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-09-01T02:14:06.309156+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-09-01T02:14:06.309156+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:42:11.831676+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "db85eeb993c06edfc0943288e6d3f23eb87a76246ea1ba0353d51692304255cd", "fetched_at": "2026-09-01T02:14:06.309156+00:00", "kind": "readme", "missing": false, "url": "https://github.com/reflex-frp/reflex"}, {"content_hash": "36ae7a711f52d595dc32cfca04b020c07556f7d9d8ffd66b056a2bc7b717174e", "fetched_at": "2026-08-29T12:45:58.394278+00:00", "kind": "homepage", "missing": false, "url": "https://reflex-frp.org"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-09-01T02:14:06.309156+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-09-01T02:14:06.309156+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:42:11.831676+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "db85eeb993c06edfc0943288e6d3f23eb87a76246ea1ba0353d51692304255cd", "fetched_at": "2026-09-01T02:14:06.309156+00:00", "kind": "readme", "missing": false, "url": "https://github.com/reflex-frp/reflex"}, {"content_hash": "36ae7a711f52d595dc32cfca04b020c07556f7d9d8ffd66b056a2bc7b717174e", "fetched_at": "2026-08-29T12:45:58.394278+00:00", "kind": "homepage", "missing": false, "url": "https://reflex-frp.org"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-09-01T02:14:06.309156+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-09-01T02:14:06.309156+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-09-01T02:14:06.309156+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:42:11.831676+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "db85eeb993c06edfc0943288e6d3f23eb87a76246ea1ba0353d51692304255cd", "fetched_at": "2026-09-01T02:14:06.309156+00:00", "kind": "readme", "missing": false, "url": "https://github.com/reflex-frp/reflex"}, {"content_hash": "36ae7a711f52d595dc32cfca04b020c07556f7d9d8ffd66b056a2bc7b717174e", "fetched_at": "2026-08-29T12:45:58.394278+00:00", "kind": "homepage", "missing": false, "url": "https://reflex-frp.org"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-09-01T02:14:06.309156+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-09-01T02:14:06.309156+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:42:11.831676+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "db85eeb993c06edfc0943288e6d3f23eb87a76246ea1ba0353d51692304255cd", "fetched_at": "2026-09-01T02:14:06.309156+00:00", "kind": "readme", "missing": false, "url": "https://github.com/reflex-frp/reflex"}, {"content_hash": "36ae7a711f52d595dc32cfca04b020c07556f7d9d8ffd66b056a2bc7b717174e", "fetched_at": "2026-08-29T12:45:58.394278+00:00", "kind": "homepage", "missing": false, "url": "https://reflex-frp.org"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:42:11.831676+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "db85eeb993c06edfc0943288e6d3f23eb87a76246ea1ba0353d51692304255cd", "fetched_at": "2026-09-01T02:14:06.309156+00:00", "kind": "readme", "missing": false, "url": "https://github.com/reflex-frp/reflex"}, {"content_hash": "36ae7a711f52d595dc32cfca04b020c07556f7d9d8ffd66b056a2bc7b717174e", "fetched_at": "2026-08-29T12:45:58.394278+00:00", "kind": "homepage", "missing": false, "url": "https://reflex-frp.org"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:42:11.831676+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "db85eeb993c06edfc0943288e6d3f23eb87a76246ea1ba0353d51692304255cd", "fetched_at": "2026-09-01T02:14:06.309156+00:00", "kind": "readme", "missing": false, "url": "https://github.com/reflex-frp/reflex"}, {"content_hash": "36ae7a711f52d595dc32cfca04b020c07556f7d9d8ffd66b056a2bc7b717174e", "fetched_at": "2026-08-29T12:45:58.394278+00:00", "kind": "homepage", "missing": false, "url": "https://reflex-frp.org"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:42:11.831676+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "db85eeb993c06edfc0943288e6d3f23eb87a76246ea1ba0353d51692304255cd", "fetched_at": "2026-09-01T02:14:06.309156+00:00", "kind": "readme", "missing": false, "url": "https://github.com/reflex-frp/reflex"}, {"content_hash": "36ae7a711f52d595dc32cfca04b020c07556f7d9d8ffd66b056a2bc7b717174e", "fetched_at": "2026-08-29T12:45:58.394278+00:00", "kind": "homepage", "missing": false, "url": "https://reflex-frp.org"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 100, "longevity": 100, "rhythm": 41}, "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": 4315, "days_push": 4, "days_rel": 317, "gap_med": 70.0, "n_releases_24m": 5}, "score": 79, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 5, "stale_scrape": false}}