{"adoption": {"forks": 386, "observed_at": "2026-08-28T04:07:09.167572+00:00", "stars": 2668}, "canonical_url": "https://ross.abutalabs.com/products/pymobiledevice3", "card": {"archived": false, "artifact_type": "library", "description": "Pure python3 implementation for working with iDevices (iPhone, etc...).", "domain": ["developer-tools", "mobile-development", "apple-ecosystem", "security"], "enriched": true, "function": ["developer-tools", "cli", "sdk", "networking", "file-system", "logging", "backup", "workflow-automation"], "health_score": 100, "homepage": "https://doronz88.github.io/pymobiledevice3/", "language": "Python", "license": "GPL-3.0", "license_family": "copyleft", "maturity": "active", "member_repos": ["doronz88/pymobiledevice3"], "name": "doronz88/pymobiledevice3", "platform": ["python", "cli", "cross-platform", "windows"], "pushed_at": "2026-08-26T19:23:07+00:00", "repo": "doronz88/pymobiledevice3", "stars": 2668, "tags": ["ios", "iphone", "ipad", "usbmux", "lockdown", "afc", "libimobiledevice", "device-automation", "syslog", "webinspector", "firmware", "dfu-recovery", "pcap-sniffing", "claude-code-plugin", "command-line", "automation", "macos", "linux"], "topics": ["afc", "instruments", "lockdown-services", "python", "libimobiledevice", "ios", "usbmux", "lockdownd", "protocol", "python3"], "urls": [], "use_cases": ["list connected iPhones and iPads from a script", "stream syslog/oslog from an iOS device", "browse and transfer files on an iPhone via AFC", "install, uninstall, and list apps on an iOS device", "collect crash reports from an iPhone", "automate iOS devices over WebInspector", "put an iPhone into recovery or DFU mode and update firmware", "backup and restore an iOS device programmatically"], "what_it_is": "A pure Python 3 implementation for interacting with iOS devices (iPhone, iPad) over USB and network, providing both a CLI tool and a Python API. It covers device discovery, syslog streaming, app/profile management, AFC file access, backups, crash reports, network sniffing, firmware/recovery workflows, and iOS 17+ developer tunnels.", "when_to_avoid": ["you need a polished GUI for managing iPhones", "you only need simple media sync like iTunes provides", "you require jailbreak or exploit functionality - this works within Apple's service protocols", "you need Android device support"], "when_to_choose": ["you need to script or automate interactions with iOS devices from Python", "you want a cross-platform alternative to libimobiledevice without native dependencies", "you need low-level access to lockdown services, usbmux, or iDevice protocol internals", "you're building iOS device tooling, testing harnesses, or CI automation"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/pymobiledevice3", "repo": "doronz88/pymobiledevice3", "role": "main", "score": 95}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:07:09.167572+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:18:14.089069+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a3d3fbea8464f4a9782ab1546a5293a0848077407298df7d3c5e09a4a71bedbf", "fetched_at": "2026-08-28T04:07:09.167572+00:00", "kind": "readme", "missing": false, "url": "https://github.com/doronz88/pymobiledevice3"}, {"content_hash": "9c081260967f6d8f77385dffdcf3423bcab2f2867a88b690d4df67aa93466607", "fetched_at": "2026-08-29T10:00:52.791476+00:00", "kind": "homepage", "missing": false, "url": "https://doronz88.github.io/pymobiledevice3/"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:07:09.167572+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:18:14.089069+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a3d3fbea8464f4a9782ab1546a5293a0848077407298df7d3c5e09a4a71bedbf", "fetched_at": "2026-08-28T04:07:09.167572+00:00", "kind": "readme", "missing": false, "url": "https://github.com/doronz88/pymobiledevice3"}, {"content_hash": "9c081260967f6d8f77385dffdcf3423bcab2f2867a88b690d4df67aa93466607", "fetched_at": "2026-08-29T10:00:52.791476+00:00", "kind": "homepage", "missing": false, "url": "https://doronz88.github.io/pymobiledevice3/"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:18:14.089069+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a3d3fbea8464f4a9782ab1546a5293a0848077407298df7d3c5e09a4a71bedbf", "fetched_at": "2026-08-28T04:07:09.167572+00:00", "kind": "readme", "missing": false, "url": "https://github.com/doronz88/pymobiledevice3"}, {"content_hash": "9c081260967f6d8f77385dffdcf3423bcab2f2867a88b690d4df67aa93466607", "fetched_at": "2026-08-29T10:00:52.791476+00:00", "kind": "homepage", "missing": false, "url": "https://doronz88.github.io/pymobiledevice3/"}], "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:07:09.167572+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:07:09.167572+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:07:09.167572+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:18:14.089069+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a3d3fbea8464f4a9782ab1546a5293a0848077407298df7d3c5e09a4a71bedbf", "fetched_at": "2026-08-28T04:07:09.167572+00:00", "kind": "readme", "missing": false, "url": "https://github.com/doronz88/pymobiledevice3"}, {"content_hash": "9c081260967f6d8f77385dffdcf3423bcab2f2867a88b690d4df67aa93466607", "fetched_at": "2026-08-29T10:00:52.791476+00:00", "kind": "homepage", "missing": false, "url": "https://doronz88.github.io/pymobiledevice3/"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:07:09.167572+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:07:09.167572+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:18:14.089069+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a3d3fbea8464f4a9782ab1546a5293a0848077407298df7d3c5e09a4a71bedbf", "fetched_at": "2026-08-28T04:07:09.167572+00:00", "kind": "readme", "missing": false, "url": "https://github.com/doronz88/pymobiledevice3"}, {"content_hash": "9c081260967f6d8f77385dffdcf3423bcab2f2867a88b690d4df67aa93466607", "fetched_at": "2026-08-29T10:00:52.791476+00:00", "kind": "homepage", "missing": false, "url": "https://doronz88.github.io/pymobiledevice3/"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:07:09.167572+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:07:09.167572+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:07:09.167572+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:18:14.089069+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a3d3fbea8464f4a9782ab1546a5293a0848077407298df7d3c5e09a4a71bedbf", "fetched_at": "2026-08-28T04:07:09.167572+00:00", "kind": "readme", "missing": false, "url": "https://github.com/doronz88/pymobiledevice3"}, {"content_hash": "9c081260967f6d8f77385dffdcf3423bcab2f2867a88b690d4df67aa93466607", "fetched_at": "2026-08-29T10:00:52.791476+00:00", "kind": "homepage", "missing": false, "url": "https://doronz88.github.io/pymobiledevice3/"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:07:09.167572+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:07:09.167572+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:18:14.089069+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a3d3fbea8464f4a9782ab1546a5293a0848077407298df7d3c5e09a4a71bedbf", "fetched_at": "2026-08-28T04:07:09.167572+00:00", "kind": "readme", "missing": false, "url": "https://github.com/doronz88/pymobiledevice3"}, {"content_hash": "9c081260967f6d8f77385dffdcf3423bcab2f2867a88b690d4df67aa93466607", "fetched_at": "2026-08-29T10:00:52.791476+00:00", "kind": "homepage", "missing": false, "url": "https://doronz88.github.io/pymobiledevice3/"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:18:14.089069+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a3d3fbea8464f4a9782ab1546a5293a0848077407298df7d3c5e09a4a71bedbf", "fetched_at": "2026-08-28T04:07:09.167572+00:00", "kind": "readme", "missing": false, "url": "https://github.com/doronz88/pymobiledevice3"}, {"content_hash": "9c081260967f6d8f77385dffdcf3423bcab2f2867a88b690d4df67aa93466607", "fetched_at": "2026-08-29T10:00:52.791476+00:00", "kind": "homepage", "missing": false, "url": "https://doronz88.github.io/pymobiledevice3/"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:18:14.089069+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a3d3fbea8464f4a9782ab1546a5293a0848077407298df7d3c5e09a4a71bedbf", "fetched_at": "2026-08-28T04:07:09.167572+00:00", "kind": "readme", "missing": false, "url": "https://github.com/doronz88/pymobiledevice3"}, {"content_hash": "9c081260967f6d8f77385dffdcf3423bcab2f2867a88b690d4df67aa93466607", "fetched_at": "2026-08-29T10:00:52.791476+00:00", "kind": "homepage", "missing": false, "url": "https://doronz88.github.io/pymobiledevice3/"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:18:14.089069+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a3d3fbea8464f4a9782ab1546a5293a0848077407298df7d3c5e09a4a71bedbf", "fetched_at": "2026-08-28T04:07:09.167572+00:00", "kind": "readme", "missing": false, "url": "https://github.com/doronz88/pymobiledevice3"}, {"content_hash": "9c081260967f6d8f77385dffdcf3423bcab2f2867a88b690d4df67aa93466607", "fetched_at": "2026-08-29T10:00:52.791476+00:00", "kind": "homepage", "missing": false, "url": "https://doronz88.github.io/pymobiledevice3/"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 100, "rhythm": 87}, "computed_at": "2026-09-03T02:39:23.370411+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 1967, "days_push": 7, "days_rel": 7, "gap_med": 0.0, "n_releases_24m": 331}, "score": 95, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}