{"adoption": {"forks": 58, "observed_at": "2026-08-28T04:04:58.024383+00:00", "stars": 1522}, "canonical_url": "https://ross.abutalabs.com/products/mysk-research-loupe", "card": {"archived": false, "artifact_type": "application", "description": "A privacy-focused iOS app that raises awareness about what native apps can see", "domain": ["privacy", "security", "apple-ecosystem", "education"], "enriched": true, "function": ["security", "privacy", "developer-tools"], "health_score": 72, "homepage": null, "language": "Swift", "license": "NOASSERTION", "license_family": "other", "maturity": "active", "member_repos": ["mysk-research/loupe"], "name": "mysk-research/loupe", "platform": [], "pushed_at": "2026-06-12T02:09:44+00:00", "repo": "mysk-research/loupe", "stars": 1522, "tags": ["device-fingerprinting", "privacy-education", "ipados", "swift", "open-source", "ios", "macos"], "topics": [], "urls": [], "use_cases": ["see what data iOS apps can read about my device", "understand device fingerprinting on iPhone", "check which signals apps can access without permission", "learn about iOS privacy side channels like Keychain persistence", "demonstrate fingerprinting surface to others", "audit what my iPhone exposes to third-party apps"], "what_it_is": "Loupe is an open-source iOS and iPadOS app that demonstrates device fingerprinting by showing raw values from public iOS APIs that any third-party app can access. It educates users on what their device exposes to apps, organizing signals into passive, permission-required, and advanced side-channel tiers.", "when_to_avoid": ["you need anti-fingerprinting protection rather than awareness (use a privacy browser instead)", "you need a cross-platform tool covering Android or desktop fingerprinting", "you need automated privacy auditing or reporting rather than interactive exploration"], "when_to_choose": ["you want a hands-on, on-device demonstration of iOS fingerprinting signals", "you're researching or teaching mobile privacy and tracking techniques", "you want an open-source, privacy-respecting tool that keeps all data local"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/mysk-research-loupe", "repo": "mysk-research/loupe", "role": "main", "score": 53}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:58.024383+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T04:31:48.381168+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2e37ea51253643afb2453228572071b0af2d468ccd9a1680bb35abe8900887d6", "fetched_at": "2026-08-28T04:04:58.024383+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mysk-research/loupe"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:58.024383+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T04:31:48.381168+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2e37ea51253643afb2453228572071b0af2d468ccd9a1680bb35abe8900887d6", "fetched_at": "2026-08-28T04:04:58.024383+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mysk-research/loupe"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T04:31:48.381168+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2e37ea51253643afb2453228572071b0af2d468ccd9a1680bb35abe8900887d6", "fetched_at": "2026-08-28T04:04:58.024383+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mysk-research/loupe"}], "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:58.024383+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:58.024383+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:58.024383+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T04:31:48.381168+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2e37ea51253643afb2453228572071b0af2d468ccd9a1680bb35abe8900887d6", "fetched_at": "2026-08-28T04:04:58.024383+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mysk-research/loupe"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:58.024383+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:58.024383+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T04:31:48.381168+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2e37ea51253643afb2453228572071b0af2d468ccd9a1680bb35abe8900887d6", "fetched_at": "2026-08-28T04:04:58.024383+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mysk-research/loupe"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:58.024383+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:58.024383+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:58.024383+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T04:31:48.381168+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2e37ea51253643afb2453228572071b0af2d468ccd9a1680bb35abe8900887d6", "fetched_at": "2026-08-28T04:04:58.024383+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mysk-research/loupe"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:58.024383+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:58.024383+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T04:31:48.381168+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2e37ea51253643afb2453228572071b0af2d468ccd9a1680bb35abe8900887d6", "fetched_at": "2026-08-28T04:04:58.024383+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mysk-research/loupe"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T04:31:48.381168+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2e37ea51253643afb2453228572071b0af2d468ccd9a1680bb35abe8900887d6", "fetched_at": "2026-08-28T04:04:58.024383+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mysk-research/loupe"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T04:31:48.381168+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2e37ea51253643afb2453228572071b0af2d468ccd9a1680bb35abe8900887d6", "fetched_at": "2026-08-28T04:04:58.024383+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mysk-research/loupe"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T04:31:48.381168+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "2e37ea51253643afb2453228572071b0af2d468ccd9a1680bb35abe8900887d6", "fetched_at": "2026-08-28T04:04:58.024383+00:00", "kind": "readme", "missing": false, "url": "https://github.com/mysk-research/loupe"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 87, "longevity": 6, "rhythm": 35}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_releases", "young", "no_license"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 91, "days_push": 83, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 53, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}