{"adoption": {"forks": 108, "observed_at": "2026-09-03T02:15:14.984944+00:00", "stars": 1029}, "canonical_url": "https://ross.abutalabs.com/products/hydralab", "card": {"archived": false, "artifact_type": "framework", "description": "Intelligent cloud testing made easy.", "domain": ["testing", "mobile-development", "developer-tools"], "enriched": true, "function": ["testing", "e2e-testing", "deployment", "developer-tools"], "health_score": 94, "homepage": null, "language": "Java", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["microsoft/HydraLab"], "name": "microsoft/HydraLab", "platform": ["windows", "cross-platform", "self-hosted"], "pushed_at": "2026-09-03T01:45:34+00:00", "repo": "microsoft/HydraLab", "stars": 1029, "tags": ["device-farm", "cloud-testing", "appium", "espresso", "xctest", "test-orchestration", "spring-boot", "smart-exploratory-testing", "automation", "android", "ios", "docker", "web-server"], "topics": ["testing", "mobile-development", "testing-framework", "cross-platform", "test-automation", "spring-boot", "developer-tools", "e2e-testing", "ui-testing", "azure", "platform-engineering", "cloud-testing", "performance-testing", "chatgpt", "testgpt", "device-farm"], "urls": [], "use_cases": ["set up a self-hosted mobile device farm for automated testing", "run Appium and Espresso tests on real devices in the cloud", "manage and schedule tests across a pool of Android and iOS devices", "run smart exploratory and monkey tests without writing test cases", "visualize test results from distributed test agents", "build an internal cloud testing platform on spare devices"], "what_it_is": "Hydra Lab is a Microsoft open-source framework for building your own cloud testing infrastructure with a center-agent distributed design for managing test devices and tasks. It supports Appium, Espresso, XCTest, and Maestro across Android, iOS, Windows, and browser platforms, plus case-free smart exploratory testing.", "when_to_avoid": ["you only need simple local unit tests without device orchestration", "you prefer a fully managed cloud testing service with no infrastructure to maintain", "your testing is limited to backend/API testing with no UI or mobile component"], "when_to_choose": ["you need a self-hosted alternative to commercial device farms like Firebase Test Lab or BrowserStack", "you have physical devices/machines you want to pool into a shared test lab", "you need cross-platform mobile test automation with centralized device management", "you want case-free exploratory testing to complement scripted tests"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/hydralab", "repo": "microsoft/HydraLab", "role": "main", "score": 76}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-09-03T02:15:14.984944+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T07:07:47.750558+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a34bb945e0bc71b2d12f6cebfddf4929851df203bb6a6921b6f96b1a06d33dfb", "fetched_at": "2026-09-03T02:15:14.984944+00:00", "kind": "readme", "missing": false, "url": "https://github.com/microsoft/HydraLab"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-09-03T02:15:14.984944+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T07:07:47.750558+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a34bb945e0bc71b2d12f6cebfddf4929851df203bb6a6921b6f96b1a06d33dfb", "fetched_at": "2026-09-03T02:15:14.984944+00:00", "kind": "readme", "missing": false, "url": "https://github.com/microsoft/HydraLab"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T07:07:47.750558+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a34bb945e0bc71b2d12f6cebfddf4929851df203bb6a6921b6f96b1a06d33dfb", "fetched_at": "2026-09-03T02:15:14.984944+00:00", "kind": "readme", "missing": false, "url": "https://github.com/microsoft/HydraLab"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-09-03T02:15:14.984944+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-09-03T02:15:14.984944+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-09-03T02:15:14.984944+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T07:07:47.750558+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a34bb945e0bc71b2d12f6cebfddf4929851df203bb6a6921b6f96b1a06d33dfb", "fetched_at": "2026-09-03T02:15:14.984944+00:00", "kind": "readme", "missing": false, "url": "https://github.com/microsoft/HydraLab"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-09-03T02:15:14.984944+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-09-03T02:15:14.984944+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T07:07:47.750558+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a34bb945e0bc71b2d12f6cebfddf4929851df203bb6a6921b6f96b1a06d33dfb", "fetched_at": "2026-09-03T02:15:14.984944+00:00", "kind": "readme", "missing": false, "url": "https://github.com/microsoft/HydraLab"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-09-03T02:15:14.984944+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-09-03T02:15:14.984944+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-09-03T02:15:14.984944+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T07:07:47.750558+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a34bb945e0bc71b2d12f6cebfddf4929851df203bb6a6921b6f96b1a06d33dfb", "fetched_at": "2026-09-03T02:15:14.984944+00:00", "kind": "readme", "missing": false, "url": "https://github.com/microsoft/HydraLab"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-09-03T02:15:14.984944+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-09-03T02:15:14.984944+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T07:07:47.750558+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a34bb945e0bc71b2d12f6cebfddf4929851df203bb6a6921b6f96b1a06d33dfb", "fetched_at": "2026-09-03T02:15:14.984944+00:00", "kind": "readme", "missing": false, "url": "https://github.com/microsoft/HydraLab"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T07:07:47.750558+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a34bb945e0bc71b2d12f6cebfddf4929851df203bb6a6921b6f96b1a06d33dfb", "fetched_at": "2026-09-03T02:15:14.984944+00:00", "kind": "readme", "missing": false, "url": "https://github.com/microsoft/HydraLab"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T07:07:47.750558+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a34bb945e0bc71b2d12f6cebfddf4929851df203bb6a6921b6f96b1a06d33dfb", "fetched_at": "2026-09-03T02:15:14.984944+00:00", "kind": "readme", "missing": false, "url": "https://github.com/microsoft/HydraLab"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T07:07:47.750558+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a34bb945e0bc71b2d12f6cebfddf4929851df203bb6a6921b6f96b1a06d33dfb", "fetched_at": "2026-09-03T02:15:14.984944+00:00", "kind": "readme", "missing": false, "url": "https://github.com/microsoft/HydraLab"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 100, "longevity": 100, "rhythm": 31}, "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": 1588, "days_push": 0, "days_rel": 380, "gap_med": 76, "n_releases_24m": 4}, "score": 76, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 3, "stale_scrape": false}}