{"adoption": {"forks": 400, "observed_at": "2026-08-28T04:05:57.572827+00:00", "stars": 1943}, "canonical_url": "https://ross.abutalabs.com/products/adbkeyboard", "card": {"archived": false, "artifact_type": "application", "description": "Android Virtual Keyboard Input via ADB (Useful for Test Automation)", "domain": ["mobile-development", "developer-tools", "testing"], "enriched": true, "function": ["testing", "workflow-automation", "cli"], "health_score": 96, "homepage": null, "language": "Java", "license": "GPL-2.0", "license_family": "copyleft", "maturity": "active", "member_repos": ["senzhk/ADBKeyBoard"], "name": "senzhk/ADBKeyBoard", "platform": ["cli"], "pushed_at": "2026-08-09T04:10:41+00:00", "repo": "senzhk/ADBKeyBoard", "stars": 1943, "tags": ["adb", "android-testing", "virtual-keyboard", "ime", "unicode-input", "test-automation", "appium", "automation", "android"], "topics": [], "urls": [], "use_cases": ["send unicode text to android device via adb", "automate text input in android ui tests", "type chinese or other non-ascii characters over adb", "input text into emulator for appium tests", "send keyevent codes like delete via broadcast intent", "replace manual typing during android device automation"], "what_it_is": "ADBKeyBoard is an Android virtual keyboard (IME) that receives text input commands via ADB broadcast intents. It enables sending arbitrary Unicode text and key events to Android devices and emulators, which the built-in 'input' shell command cannot do.", "when_to_avoid": ["you only need ASCII text input, which 'adb shell input text' already handles", "you need a keyboard for daily human use rather than automation", "your target device cannot install third-party IMEs due to security policy"], "when_to_choose": ["you need to send unicode or CJK text to an Android device over ADB", "you are building Android UI test automation that requires text input", "the built-in 'adb shell input text' command fails on non-ASCII strings"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/adbkeyboard", "repo": "senzhk/ADBKeyBoard", "role": "main", "score": 83}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:57.572827+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:08:02.927264+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a39ec6d23e5c741fedbc04aeed3859ccf5dd6a7b4a7672e87d5c6e0910236240", "fetched_at": "2026-08-28T04:05:57.572827+00:00", "kind": "readme", "missing": false, "url": "https://github.com/senzhk/ADBKeyBoard"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:57.572827+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:08:02.927264+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a39ec6d23e5c741fedbc04aeed3859ccf5dd6a7b4a7672e87d5c6e0910236240", "fetched_at": "2026-08-28T04:05:57.572827+00:00", "kind": "readme", "missing": false, "url": "https://github.com/senzhk/ADBKeyBoard"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:08:02.927264+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a39ec6d23e5c741fedbc04aeed3859ccf5dd6a7b4a7672e87d5c6e0910236240", "fetched_at": "2026-08-28T04:05:57.572827+00:00", "kind": "readme", "missing": false, "url": "https://github.com/senzhk/ADBKeyBoard"}], "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:05:57.572827+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:57.572827+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:57.572827+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:08:02.927264+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a39ec6d23e5c741fedbc04aeed3859ccf5dd6a7b4a7672e87d5c6e0910236240", "fetched_at": "2026-08-28T04:05:57.572827+00:00", "kind": "readme", "missing": false, "url": "https://github.com/senzhk/ADBKeyBoard"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:57.572827+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:57.572827+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:08:02.927264+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a39ec6d23e5c741fedbc04aeed3859ccf5dd6a7b4a7672e87d5c6e0910236240", "fetched_at": "2026-08-28T04:05:57.572827+00:00", "kind": "readme", "missing": false, "url": "https://github.com/senzhk/ADBKeyBoard"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:57.572827+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:57.572827+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:57.572827+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:08:02.927264+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a39ec6d23e5c741fedbc04aeed3859ccf5dd6a7b4a7672e87d5c6e0910236240", "fetched_at": "2026-08-28T04:05:57.572827+00:00", "kind": "readme", "missing": false, "url": "https://github.com/senzhk/ADBKeyBoard"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:57.572827+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:57.572827+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:08:02.927264+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a39ec6d23e5c741fedbc04aeed3859ccf5dd6a7b4a7672e87d5c6e0910236240", "fetched_at": "2026-08-28T04:05:57.572827+00:00", "kind": "readme", "missing": false, "url": "https://github.com/senzhk/ADBKeyBoard"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:08:02.927264+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a39ec6d23e5c741fedbc04aeed3859ccf5dd6a7b4a7672e87d5c6e0910236240", "fetched_at": "2026-08-28T04:05:57.572827+00:00", "kind": "readme", "missing": false, "url": "https://github.com/senzhk/ADBKeyBoard"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:08:02.927264+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a39ec6d23e5c741fedbc04aeed3859ccf5dd6a7b4a7672e87d5c6e0910236240", "fetched_at": "2026-08-28T04:05:57.572827+00:00", "kind": "readme", "missing": false, "url": "https://github.com/senzhk/ADBKeyBoard"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:08:02.927264+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a39ec6d23e5c741fedbc04aeed3859ccf5dd6a7b4a7672e87d5c6e0910236240", "fetched_at": "2026-08-28T04:05:57.572827+00:00", "kind": "readme", "missing": false, "url": "https://github.com/senzhk/ADBKeyBoard"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 96, "longevity": 100, "rhythm": 56}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["prerelease_only"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 4744, "days_push": 24, "days_rel": 132, "gap_med": 102, "n_releases_24m": 2}, "score": 83, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}