{"adoption": {"forks": 147, "observed_at": "2026-08-28T04:06:41.690620+00:00", "stars": 2368}, "canonical_url": "https://ross.abutalabs.com/products/remix-utils", "card": {"archived": false, "artifact_type": "library", "description": "A set of utility functions and types to use with Remix.run", "domain": ["web-development", "backend", "frontend", "developer-tools"], "enriched": true, "function": ["concurrency", "auth", "middleware", "developer-tools", "monitoring"], "health_score": 96, "homepage": "https://sergiodxa.github.io/remix-utils/", "language": "TypeScript", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["sergiodxa/remix-utils"], "name": "sergiodxa/remix-utils", "platform": ["browser"], "pushed_at": "2026-08-01T10:02:49+00:00", "repo": "sergiodxa/remix-utils", "stars": 2368, "tags": ["remix", "react-router", "react", "typescript", "utility-library", "promise-helpers", "csrf", "jwt", "server-timing", "shadcn-registry", "nodejs", "web-server"], "topics": [], "urls": [], "use_cases": ["run multiple promises in parallel inside a Remix loader", "add a timeout to a fetch call in a React Router app", "protect form submissions with CSRF tokens in Remix", "create and verify JWTs in a React Router application", "get the client IP address from a Remix request", "parse the Accept-Language header to detect a user's locale", "emit Server-Timing headers to profile Remix loaders", "render a component only on the client in Remix"], "what_it_is": "Remix Utils is a TypeScript collection of utility functions and types for building web apps with Remix and React Router, covering areas like promise handling, JWT auth, CSRF protection, timeouts, IP detection, and server timing. It ships as an npm package and is also distributed through a shadcn registry so individual utilities can be installed on demand with their optional dependencies.", "when_to_avoid": ["Your project doesn't use Remix or React Router, since most utilities assume their request/response model", "You're still on React Router v7 and can't upgrade, because v10 requires React Router v8", "You need a general-purpose utility belt like lodash rather than web-framework-specific helpers"], "when_to_choose": ["You're building an app with Remix or React Router and want battle-tested helpers for loaders, actions, and components", "You prefer cherry-picking small, modular utilities with optional dependencies instead of a heavy framework", "You need common web app helpers (CSRF, JWT, timeouts, IP parsing) with TypeScript types included"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/remix-utils", "repo": "sergiodxa/remix-utils", "role": "main", "score": 94}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:06:41.690620+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:35:56.685922+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c230de32d9423d1e83602e885a7ed01d104ae72d249423a0987839dc23d0b805", "fetched_at": "2026-08-28T04:06:41.690620+00:00", "kind": "readme", "missing": false, "url": "https://github.com/sergiodxa/remix-utils"}, {"content_hash": "dc9d4a8b3782dfcf376206c29502786627c3221ae7213dd85ffeae3dacee4124", "fetched_at": "2026-08-29T10:16:35.720916+00:00", "kind": "homepage", "missing": false, "url": "https://sergiodxa.github.io/remix-utils/"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:06:41.690620+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:35:56.685922+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c230de32d9423d1e83602e885a7ed01d104ae72d249423a0987839dc23d0b805", "fetched_at": "2026-08-28T04:06:41.690620+00:00", "kind": "readme", "missing": false, "url": "https://github.com/sergiodxa/remix-utils"}, {"content_hash": "dc9d4a8b3782dfcf376206c29502786627c3221ae7213dd85ffeae3dacee4124", "fetched_at": "2026-08-29T10:16:35.720916+00:00", "kind": "homepage", "missing": false, "url": "https://sergiodxa.github.io/remix-utils/"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:35:56.685922+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c230de32d9423d1e83602e885a7ed01d104ae72d249423a0987839dc23d0b805", "fetched_at": "2026-08-28T04:06:41.690620+00:00", "kind": "readme", "missing": false, "url": "https://github.com/sergiodxa/remix-utils"}, {"content_hash": "dc9d4a8b3782dfcf376206c29502786627c3221ae7213dd85ffeae3dacee4124", "fetched_at": "2026-08-29T10:16:35.720916+00:00", "kind": "homepage", "missing": false, "url": "https://sergiodxa.github.io/remix-utils/"}], "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:06:41.690620+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:06:41.690620+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:06:41.690620+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:35:56.685922+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c230de32d9423d1e83602e885a7ed01d104ae72d249423a0987839dc23d0b805", "fetched_at": "2026-08-28T04:06:41.690620+00:00", "kind": "readme", "missing": false, "url": "https://github.com/sergiodxa/remix-utils"}, {"content_hash": "dc9d4a8b3782dfcf376206c29502786627c3221ae7213dd85ffeae3dacee4124", "fetched_at": "2026-08-29T10:16:35.720916+00:00", "kind": "homepage", "missing": false, "url": "https://sergiodxa.github.io/remix-utils/"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:06:41.690620+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:06:41.690620+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:35:56.685922+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c230de32d9423d1e83602e885a7ed01d104ae72d249423a0987839dc23d0b805", "fetched_at": "2026-08-28T04:06:41.690620+00:00", "kind": "readme", "missing": false, "url": "https://github.com/sergiodxa/remix-utils"}, {"content_hash": "dc9d4a8b3782dfcf376206c29502786627c3221ae7213dd85ffeae3dacee4124", "fetched_at": "2026-08-29T10:16:35.720916+00:00", "kind": "homepage", "missing": false, "url": "https://sergiodxa.github.io/remix-utils/"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:06:41.690620+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:06:41.690620+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:06:41.690620+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:35:56.685922+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c230de32d9423d1e83602e885a7ed01d104ae72d249423a0987839dc23d0b805", "fetched_at": "2026-08-28T04:06:41.690620+00:00", "kind": "readme", "missing": false, "url": "https://github.com/sergiodxa/remix-utils"}, {"content_hash": "dc9d4a8b3782dfcf376206c29502786627c3221ae7213dd85ffeae3dacee4124", "fetched_at": "2026-08-29T10:16:35.720916+00:00", "kind": "homepage", "missing": false, "url": "https://sergiodxa.github.io/remix-utils/"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:06:41.690620+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:06:41.690620+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:35:56.685922+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c230de32d9423d1e83602e885a7ed01d104ae72d249423a0987839dc23d0b805", "fetched_at": "2026-08-28T04:06:41.690620+00:00", "kind": "readme", "missing": false, "url": "https://github.com/sergiodxa/remix-utils"}, {"content_hash": "dc9d4a8b3782dfcf376206c29502786627c3221ae7213dd85ffeae3dacee4124", "fetched_at": "2026-08-29T10:16:35.720916+00:00", "kind": "homepage", "missing": false, "url": "https://sergiodxa.github.io/remix-utils/"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:35:56.685922+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c230de32d9423d1e83602e885a7ed01d104ae72d249423a0987839dc23d0b805", "fetched_at": "2026-08-28T04:06:41.690620+00:00", "kind": "readme", "missing": false, "url": "https://github.com/sergiodxa/remix-utils"}, {"content_hash": "dc9d4a8b3782dfcf376206c29502786627c3221ae7213dd85ffeae3dacee4124", "fetched_at": "2026-08-29T10:16:35.720916+00:00", "kind": "homepage", "missing": false, "url": "https://sergiodxa.github.io/remix-utils/"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:35:56.685922+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c230de32d9423d1e83602e885a7ed01d104ae72d249423a0987839dc23d0b805", "fetched_at": "2026-08-28T04:06:41.690620+00:00", "kind": "readme", "missing": false, "url": "https://github.com/sergiodxa/remix-utils"}, {"content_hash": "dc9d4a8b3782dfcf376206c29502786627c3221ae7213dd85ffeae3dacee4124", "fetched_at": "2026-08-29T10:16:35.720916+00:00", "kind": "homepage", "missing": false, "url": "https://sergiodxa.github.io/remix-utils/"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:35:56.685922+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c230de32d9423d1e83602e885a7ed01d104ae72d249423a0987839dc23d0b805", "fetched_at": "2026-08-28T04:06:41.690620+00:00", "kind": "readme", "missing": false, "url": "https://github.com/sergiodxa/remix-utils"}, {"content_hash": "dc9d4a8b3782dfcf376206c29502786627c3221ae7213dd85ffeae3dacee4124", "fetched_at": "2026-08-29T10:16:35.720916+00:00", "kind": "homepage", "missing": false, "url": "https://sergiodxa.github.io/remix-utils/"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 95, "longevity": 100, "rhythm": 89}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 1948, "days_push": 32, "days_rel": 74, "gap_med": 5, "n_releases_24m": 20}, "score": 94, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}