{"adoption": {"forks": 184, "observed_at": "2026-08-28T04:04:05.209004+00:00", "stars": 1236}, "canonical_url": "https://ross.abutalabs.com/products/webext-redux", "card": {"archived": false, "artifact_type": "library", "description": "A set of utilities for building Redux applications in Web Extensions.", "domain": ["browser-extensions", "frontend", "web-development"], "enriched": true, "function": ["state-management", "middleware", "developer-tools"], "health_score": 33, "homepage": null, "language": "JavaScript", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["tshaddix/webext-redux"], "name": "tshaddix/webext-redux", "platform": ["browser-extension"], "pushed_at": "2025-02-18T21:38:09+00:00", "repo": "tshaddix/webext-redux", "stars": 1236, "tags": ["redux", "web-extension", "chrome-extension", "proxy-store", "background-script", "javascript", "nodejs"], "topics": ["chrome-extension", "redux", "redux-application", "redux-store", "web-extension", "react-chrome-redux", "react-chrome-extension"], "urls": [], "use_cases": ["share a single Redux store across a browser extension's background page and UI components", "dispatch Redux actions from a popup or content script to the background script", "sync extension state between content scripts, popups, and the service worker", "use react-redux with a proxy store in a Chrome extension popup", "apply Redux middleware to a proxy store in a web extension", "handle service worker restarts in a Manifest V3 extension with a central store"], "what_it_is": "webext-redux is a JavaScript library providing utilities for building Redux-powered web browser extensions. It lets the background page hold the Redux store while popups and content scripts use a proxy store that dispatches actions and receives state updates over the extension messaging channel.", "when_to_avoid": ["your extension is simple enough that plain messaging APIs suffice", "you use a state management library other than Redux", "you are building a regular web app rather than a browser extension"], "when_to_choose": ["you are building a Chrome/Firefox web extension and want Redux as the single source of truth", "your extension has multiple UI surfaces (popup, options page, content scripts) that need shared state", "you want to reuse existing Redux tooling like react-redux and middleware in an extension"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/webext-redux", "repo": "tshaddix/webext-redux", "role": "main", "score": 26}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:05.209004+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T08:22:01.409754+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "899c894c1359349a82d9844f8e6a0a97c16364e83caa78cfeb53ad26fbe8b680", "fetched_at": "2026-08-28T04:04:05.209004+00:00", "kind": "readme", "missing": false, "url": "https://github.com/tshaddix/webext-redux"}, {"content_hash": "10bdcbd2dbb9ed145c5ceff8ca5e36f3a9e4330010288451ed1472fa3f50eae2", "fetched_at": "2026-08-29T12:21:17.478670+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/webext-redux"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:05.209004+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T08:22:01.409754+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "899c894c1359349a82d9844f8e6a0a97c16364e83caa78cfeb53ad26fbe8b680", "fetched_at": "2026-08-28T04:04:05.209004+00:00", "kind": "readme", "missing": false, "url": "https://github.com/tshaddix/webext-redux"}, {"content_hash": "10bdcbd2dbb9ed145c5ceff8ca5e36f3a9e4330010288451ed1472fa3f50eae2", "fetched_at": "2026-08-29T12:21:17.478670+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/webext-redux"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T08:22:01.409754+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "899c894c1359349a82d9844f8e6a0a97c16364e83caa78cfeb53ad26fbe8b680", "fetched_at": "2026-08-28T04:04:05.209004+00:00", "kind": "readme", "missing": false, "url": "https://github.com/tshaddix/webext-redux"}, {"content_hash": "10bdcbd2dbb9ed145c5ceff8ca5e36f3a9e4330010288451ed1472fa3f50eae2", "fetched_at": "2026-08-29T12:21:17.478670+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/webext-redux"}], "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:05.209004+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:05.209004+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:05.209004+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T08:22:01.409754+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "899c894c1359349a82d9844f8e6a0a97c16364e83caa78cfeb53ad26fbe8b680", "fetched_at": "2026-08-28T04:04:05.209004+00:00", "kind": "readme", "missing": false, "url": "https://github.com/tshaddix/webext-redux"}, {"content_hash": "10bdcbd2dbb9ed145c5ceff8ca5e36f3a9e4330010288451ed1472fa3f50eae2", "fetched_at": "2026-08-29T12:21:17.478670+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/webext-redux"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:05.209004+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:05.209004+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T08:22:01.409754+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "899c894c1359349a82d9844f8e6a0a97c16364e83caa78cfeb53ad26fbe8b680", "fetched_at": "2026-08-28T04:04:05.209004+00:00", "kind": "readme", "missing": false, "url": "https://github.com/tshaddix/webext-redux"}, {"content_hash": "10bdcbd2dbb9ed145c5ceff8ca5e36f3a9e4330010288451ed1472fa3f50eae2", "fetched_at": "2026-08-29T12:21:17.478670+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/webext-redux"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:05.209004+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:05.209004+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:05.209004+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T08:22:01.409754+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "899c894c1359349a82d9844f8e6a0a97c16364e83caa78cfeb53ad26fbe8b680", "fetched_at": "2026-08-28T04:04:05.209004+00:00", "kind": "readme", "missing": false, "url": "https://github.com/tshaddix/webext-redux"}, {"content_hash": "10bdcbd2dbb9ed145c5ceff8ca5e36f3a9e4330010288451ed1472fa3f50eae2", "fetched_at": "2026-08-29T12:21:17.478670+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/webext-redux"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:05.209004+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:05.209004+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T08:22:01.409754+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "899c894c1359349a82d9844f8e6a0a97c16364e83caa78cfeb53ad26fbe8b680", "fetched_at": "2026-08-28T04:04:05.209004+00:00", "kind": "readme", "missing": false, "url": "https://github.com/tshaddix/webext-redux"}, {"content_hash": "10bdcbd2dbb9ed145c5ceff8ca5e36f3a9e4330010288451ed1472fa3f50eae2", "fetched_at": "2026-08-29T12:21:17.478670+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/webext-redux"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T08:22:01.409754+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "899c894c1359349a82d9844f8e6a0a97c16364e83caa78cfeb53ad26fbe8b680", "fetched_at": "2026-08-28T04:04:05.209004+00:00", "kind": "readme", "missing": false, "url": "https://github.com/tshaddix/webext-redux"}, {"content_hash": "10bdcbd2dbb9ed145c5ceff8ca5e36f3a9e4330010288451ed1472fa3f50eae2", "fetched_at": "2026-08-29T12:21:17.478670+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/webext-redux"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T08:22:01.409754+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "899c894c1359349a82d9844f8e6a0a97c16364e83caa78cfeb53ad26fbe8b680", "fetched_at": "2026-08-28T04:04:05.209004+00:00", "kind": "readme", "missing": false, "url": "https://github.com/tshaddix/webext-redux"}, {"content_hash": "10bdcbd2dbb9ed145c5ceff8ca5e36f3a9e4330010288451ed1472fa3f50eae2", "fetched_at": "2026-08-29T12:21:17.478670+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/webext-redux"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T08:22:01.409754+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "899c894c1359349a82d9844f8e6a0a97c16364e83caa78cfeb53ad26fbe8b680", "fetched_at": "2026-08-28T04:04:05.209004+00:00", "kind": "readme", "missing": false, "url": "https://github.com/tshaddix/webext-redux"}, {"content_hash": "10bdcbd2dbb9ed145c5ceff8ca5e36f3a9e4330010288451ed1472fa3f50eae2", "fetched_at": "2026-08-29T12:21:17.478670+00:00", "kind": "registry_npm", "missing": false, "url": "https://registry.npmjs.org/webext-redux"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 7, "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": 3876, "days_push": 561, "days_rel": 673, "gap_med": null, "n_releases_24m": 1}, "score": 26, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}