{"adoption": {"forks": 291, "observed_at": "2026-08-28T04:06:13.943644+00:00", "stars": 2106}, "canonical_url": "https://ross.abutalabs.com/products/mountebank", "card": {"archived": false, "artifact_type": "cli-tool", "description": "Over the wire test doubles", "domain": ["testing", "developer-tools", "apis", "microservices"], "enriched": true, "function": ["testing", "mocking", "http-server", "cli"], "health_score": 97, "homepage": null, "language": "JavaScript", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["mountebank-testing/mountebank"], "name": "mountebank-testing/mountebank", "platform": ["cross-platform", "cli"], "pushed_at": "2026-08-23T03:15:33+00:00", "repo": "mountebank-testing/mountebank", "stars": 2106, "tags": ["service-virtualization", "test-doubles", "stubbing", "protocol-mocking", "record-playback", "nodejs"], "topics": ["mountebank", "service-virtualization", "test-automation", "testing", "test-framework", "microservices-testing", "mocking", "stubbing"], "urls": [], "use_cases": ["stub http apis for integration tests", "mock downstream microservices during testing", "virtualize grpc and tcp services", "record and replay api responses via proxying", "verify that my service made expected calls to dependencies", "performance test against a lightweight mock server"], "what_it_is": "Mountebank is an open-source service virtualization tool that creates over-the-wire test doubles for many protocols including HTTP, TCP, gRPC, SMTP, and websockets. It supports stubbing with advanced predicates, mock verification, JavaScript injection, and record-playback proxying.", "when_to_avoid": ["you only need simple in-process mocks in a unit test framework", "you need a maintained-by-vendor tool, since the project is mid-transition to a new organization"], "when_to_choose": ["you need protocol-diverse service virtualization without commercial licensing", "you test microservices with many downstream dependencies", "you need record-playback proxying or advanced predicate matching"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/mountebank", "repo": "mountebank-testing/mountebank", "role": "main", "score": 84}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:06:13.943644+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:54:00.062215+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3f823288efd7635c4fa1a974e69c9b745d63edf82ce80330687ca0c50aeb6eb6", "fetched_at": "2026-08-28T04:06:13.943644+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mountebank-testing/mountebank"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:06:13.943644+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:54:00.062215+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3f823288efd7635c4fa1a974e69c9b745d63edf82ce80330687ca0c50aeb6eb6", "fetched_at": "2026-08-28T04:06:13.943644+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mountebank-testing/mountebank"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:54:00.062215+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3f823288efd7635c4fa1a974e69c9b745d63edf82ce80330687ca0c50aeb6eb6", "fetched_at": "2026-08-28T04:06:13.943644+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mountebank-testing/mountebank"}], "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:13.943644+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:06:13.943644+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:06:13.943644+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:54:00.062215+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3f823288efd7635c4fa1a974e69c9b745d63edf82ce80330687ca0c50aeb6eb6", "fetched_at": "2026-08-28T04:06:13.943644+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mountebank-testing/mountebank"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:06:13.943644+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:06:13.943644+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:54:00.062215+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3f823288efd7635c4fa1a974e69c9b745d63edf82ce80330687ca0c50aeb6eb6", "fetched_at": "2026-08-28T04:06:13.943644+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mountebank-testing/mountebank"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:06:13.943644+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:06:13.943644+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:06:13.943644+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:54:00.062215+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3f823288efd7635c4fa1a974e69c9b745d63edf82ce80330687ca0c50aeb6eb6", "fetched_at": "2026-08-28T04:06:13.943644+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mountebank-testing/mountebank"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:06:13.943644+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:06:13.943644+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:54:00.062215+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3f823288efd7635c4fa1a974e69c9b745d63edf82ce80330687ca0c50aeb6eb6", "fetched_at": "2026-08-28T04:06:13.943644+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mountebank-testing/mountebank"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:54:00.062215+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3f823288efd7635c4fa1a974e69c9b745d63edf82ce80330687ca0c50aeb6eb6", "fetched_at": "2026-08-28T04:06:13.943644+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mountebank-testing/mountebank"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:54:00.062215+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3f823288efd7635c4fa1a974e69c9b745d63edf82ce80330687ca0c50aeb6eb6", "fetched_at": "2026-08-28T04:06:13.943644+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mountebank-testing/mountebank"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:54:00.062215+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3f823288efd7635c4fa1a974e69c9b745d63edf82ce80330687ca0c50aeb6eb6", "fetched_at": "2026-08-28T04:06:13.943644+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mountebank-testing/mountebank"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 100, "rhythm": 55}, "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": 4694, "days_push": 10, "days_rel": 140, "gap_med": 105.5, "n_releases_24m": 3}, "score": 84, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}