{"adoption": {"forks": 23, "observed_at": "2026-08-28T04:04:13.323661+00:00", "stars": 1277}, "canonical_url": "https://ross.abutalabs.com/products/bidc", "card": {"archived": false, "artifact_type": "library", "description": "Bidirectional Channels for JavaScript", "domain": ["web-development", "frontend", "developer-tools", "apis"], "enriched": true, "function": ["rpc", "message-queue", "serialization", "websocket"], "health_score": 70, "homepage": null, "language": "TypeScript", "license": null, "license_family": "other", "maturity": "active", "member_repos": ["vercel/bidc"], "name": "vercel/bidc", "platform": ["browser"], "pushed_at": "2025-12-16T11:11:14+00:00", "repo": "vercel/bidc", "stars": 1277, "tags": ["postmessage", "iframe-communication", "web-workers", "async-messaging", "bidirectional-channels", "nodejs", "javascript", "typescript"], "topics": ["async", "channels", "iframe", "javascript", "messaging", "rpc", "worker"], "urls": [], "use_cases": ["communicate between parent window and iframe with promises", "send messages between a web worker and main thread", "rpc-style method calls across javascript contexts", "transfer complex data types like maps and arraybuffers between contexts", "maintain channel connections when an iframe reloads", "handle concurrent async messages between browser contexts"], "what_it_is": "BIDC is a TypeScript library providing bidirectional channels for asynchronous communication between JavaScript execution contexts such as iframes, web workers, and service workers. It improves on raw postMessage with automatic handshakes, complex data type transfer, and first-class Promise/async function support via a custom streaming protocol.", "when_to_avoid": ["you only need simple one-way fire-and-forget postMessage", "you need communication over the network or between separate machines", "your contexts are not JavaScript (e.g., native or cross-language messaging)", "you require a library with an explicit open-source license for legal reasons"], "when_to_choose": ["you need structured two-way messaging between iframes, workers, or service workers", "you want promises and async functions to work across postMessage boundaries", "you need automatic handshake, reconnection, and message buffering", "you want typed rpc-style calls in TypeScript"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/bidc", "repo": "vercel/bidc", "role": "main", "score": 44}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:13.323661+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T05:02:52.570347+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "81a85d901911b73fbd7363b5d45f3f9b63017e76a006288cb04c54dbdd4ccaf1", "fetched_at": "2026-08-28T04:04:13.323661+00:00", "kind": "readme", "missing": false, "url": "https://github.com/vercel/bidc"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:13.323661+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T05:02:52.570347+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "81a85d901911b73fbd7363b5d45f3f9b63017e76a006288cb04c54dbdd4ccaf1", "fetched_at": "2026-08-28T04:04:13.323661+00:00", "kind": "readme", "missing": false, "url": "https://github.com/vercel/bidc"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T05:02:52.570347+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "81a85d901911b73fbd7363b5d45f3f9b63017e76a006288cb04c54dbdd4ccaf1", "fetched_at": "2026-08-28T04:04:13.323661+00:00", "kind": "readme", "missing": false, "url": "https://github.com/vercel/bidc"}], "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:13.323661+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:13.323661+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:13.323661+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T05:02:52.570347+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "81a85d901911b73fbd7363b5d45f3f9b63017e76a006288cb04c54dbdd4ccaf1", "fetched_at": "2026-08-28T04:04:13.323661+00:00", "kind": "readme", "missing": false, "url": "https://github.com/vercel/bidc"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:13.323661+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:13.323661+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T05:02:52.570347+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "81a85d901911b73fbd7363b5d45f3f9b63017e76a006288cb04c54dbdd4ccaf1", "fetched_at": "2026-08-28T04:04:13.323661+00:00", "kind": "readme", "missing": false, "url": "https://github.com/vercel/bidc"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:13.323661+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:13.323661+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:13.323661+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T05:02:52.570347+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "81a85d901911b73fbd7363b5d45f3f9b63017e76a006288cb04c54dbdd4ccaf1", "fetched_at": "2026-08-28T04:04:13.323661+00:00", "kind": "readme", "missing": false, "url": "https://github.com/vercel/bidc"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:13.323661+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:13.323661+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T05:02:52.570347+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "81a85d901911b73fbd7363b5d45f3f9b63017e76a006288cb04c54dbdd4ccaf1", "fetched_at": "2026-08-28T04:04:13.323661+00:00", "kind": "readme", "missing": false, "url": "https://github.com/vercel/bidc"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T05:02:52.570347+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "81a85d901911b73fbd7363b5d45f3f9b63017e76a006288cb04c54dbdd4ccaf1", "fetched_at": "2026-08-28T04:04:13.323661+00:00", "kind": "readme", "missing": false, "url": "https://github.com/vercel/bidc"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T05:02:52.570347+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "81a85d901911b73fbd7363b5d45f3f9b63017e76a006288cb04c54dbdd4ccaf1", "fetched_at": "2026-08-28T04:04:13.323661+00:00", "kind": "readme", "missing": false, "url": "https://github.com/vercel/bidc"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T05:02:52.570347+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "81a85d901911b73fbd7363b5d45f3f9b63017e76a006288cb04c54dbdd4ccaf1", "fetched_at": "2026-08-28T04:04:13.323661+00:00", "kind": "readme", "missing": false, "url": "https://github.com/vercel/bidc"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 57, "longevity": 28, "rhythm": 37}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_license"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 394, "days_push": 260, "days_rel": 260, "gap_med": 109, "n_releases_24m": 2}, "score": 44, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}