{"adoption": {"forks": 83, "observed_at": "2026-08-28T04:04:43.815664+00:00", "stars": 1437}, "canonical_url": "https://ross.abutalabs.com/products/functional-frontend-architecture", "card": {"archived": false, "artifact_type": "framework", "description": "A functional frontend framework.", "domain": ["web-development", "frontend"], "enriched": true, "function": ["frontend-framework", "state-management", "templating"], "health_score": 20, "homepage": null, "language": "JavaScript", "license": "MIT", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["paldepind/functional-frontend-architecture"], "name": "paldepind/functional-frontend-architecture", "platform": ["browser"], "pushed_at": "2019-07-02T08:08:39+00:00", "repo": "paldepind/functional-frontend-architecture", "stars": 1437, "tags": ["elm-architecture", "virtual-dom", "frp", "functional-programming", "snabbdom", "unidirectional-data-flow", "time-travel-debugging", "javascript", "nodejs"], "topics": [], "urls": [], "use_cases": ["build a frontend app with the Elm architecture in JavaScript", "learn how unidirectional data flow frameworks work internally", "write frontend apps with pure functions and minimal mutation", "implement time-travel debugging and serializable state", "explore FRP-based state handling with Flyd", "study a minimal alternative to React/Redux"], "what_it_is": "A minimal JavaScript framework implementing the Elm architecture: a single immutable state tree, pure update functions, actions, and a virtual DOM view layer built on Snabbdom. It doubles as documentation of the architecture, with examples ranging from counters to TodoMVC and FRP integration via Flyd.", "when_to_avoid": ["you need a production framework with an active community and ecosystem", "you require TypeScript support or modern tooling out of the box", "the project has seen no releases since 2019 and is effectively dormant"], "when_to_choose": ["you want a tiny, functional, Elm-style architecture without React", "you value testability through pure functions and inspectable state", "you're learning how virtual DOM and unidirectional architectures are implemented"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/functional-frontend-architecture", "repo": "paldepind/functional-frontend-architecture", "role": "main", "score": 32}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:43.815664+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T04:36:45.032925+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "dfc1626a00a6224ba4e595acdb80ab5ada5407b3fa32fb1b25c45dbba3755348", "fetched_at": "2026-08-28T04:04:43.815664+00:00", "kind": "readme", "missing": false, "url": "https://github.com/paldepind/functional-frontend-architecture"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:43.815664+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T04:36:45.032925+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "dfc1626a00a6224ba4e595acdb80ab5ada5407b3fa32fb1b25c45dbba3755348", "fetched_at": "2026-08-28T04:04:43.815664+00:00", "kind": "readme", "missing": false, "url": "https://github.com/paldepind/functional-frontend-architecture"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T04:36:45.032925+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "dfc1626a00a6224ba4e595acdb80ab5ada5407b3fa32fb1b25c45dbba3755348", "fetched_at": "2026-08-28T04:04:43.815664+00:00", "kind": "readme", "missing": false, "url": "https://github.com/paldepind/functional-frontend-architecture"}], "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:04:43.815664+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:43.815664+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:43.815664+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T04:36:45.032925+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "dfc1626a00a6224ba4e595acdb80ab5ada5407b3fa32fb1b25c45dbba3755348", "fetched_at": "2026-08-28T04:04:43.815664+00:00", "kind": "readme", "missing": false, "url": "https://github.com/paldepind/functional-frontend-architecture"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:43.815664+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:43.815664+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T04:36:45.032925+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "dfc1626a00a6224ba4e595acdb80ab5ada5407b3fa32fb1b25c45dbba3755348", "fetched_at": "2026-08-28T04:04:43.815664+00:00", "kind": "readme", "missing": false, "url": "https://github.com/paldepind/functional-frontend-architecture"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:43.815664+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:43.815664+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:43.815664+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T04:36:45.032925+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "dfc1626a00a6224ba4e595acdb80ab5ada5407b3fa32fb1b25c45dbba3755348", "fetched_at": "2026-08-28T04:04:43.815664+00:00", "kind": "readme", "missing": false, "url": "https://github.com/paldepind/functional-frontend-architecture"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:43.815664+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:43.815664+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T04:36:45.032925+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "dfc1626a00a6224ba4e595acdb80ab5ada5407b3fa32fb1b25c45dbba3755348", "fetched_at": "2026-08-28T04:04:43.815664+00:00", "kind": "readme", "missing": false, "url": "https://github.com/paldepind/functional-frontend-architecture"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T04:36:45.032925+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "dfc1626a00a6224ba4e595acdb80ab5ada5407b3fa32fb1b25c45dbba3755348", "fetched_at": "2026-08-28T04:04:43.815664+00:00", "kind": "readme", "missing": false, "url": "https://github.com/paldepind/functional-frontend-architecture"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T04:36:45.032925+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "dfc1626a00a6224ba4e595acdb80ab5ada5407b3fa32fb1b25c45dbba3755348", "fetched_at": "2026-08-28T04:04:43.815664+00:00", "kind": "readme", "missing": false, "url": "https://github.com/paldepind/functional-frontend-architecture"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T04:36:45.032925+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "dfc1626a00a6224ba4e595acdb80ab5ada5407b3fa32fb1b25c45dbba3755348", "fetched_at": "2026-08-28T04:04:43.815664+00:00", "kind": "readme", "missing": false, "url": "https://github.com/paldepind/functional-frontend-architecture"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 4127, "days_push": 2619, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 32, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}