{"adoption": {"forks": 274, "observed_at": "2026-08-28T04:06:25.695463+00:00", "stars": 2202}, "canonical_url": "https://ross.abutalabs.com/products/signtools", "card": {"archived": false, "artifact_type": "service", "description": "✒ A free, self-hosted platform to sideload iOS apps without a computer", "domain": ["apple-ecosystem", "self-hosted", "mobile-development", "developer-tools"], "enriched": true, "function": ["self-hosted", "deployment", "http-server", "ci-cd"], "health_score": 99, "homepage": null, "language": "Go", "license": "AGPL-3.0", "license_family": "copyleft", "maturity": "active", "member_repos": ["SignTools/SignTools"], "name": "SignTools/SignTools", "platform": ["self-hosted"], "pushed_at": "2026-08-21T01:42:52+00:00", "repo": "SignTools/SignTools", "stars": 2202, "tags": ["ios-sideloading", "ipa-signing", "ota-installation", "code-signing", "apple-developer-accounts", "docker", "macos", "web-server", "ios"], "topics": ["ios", "signing", "ci", "cross-platform", "apps", "sideload", "ipa", "macos", "iphone", "ipad", "self-hosted"], "urls": [], "use_cases": ["sideload ipa apps to iphone without a computer", "self-host a service to sign ios apps", "sign and install apps over the air to ipad", "inject tweaks into ios apps while signing", "manage multiple signing profiles and entitlements for ios apps", "resign unsigned ipas using a developer account or provisioning profile"], "what_it_is": "SignTools is a free, self-hosted platform for signing and sideloading iOS, iPadOS, and macOS apps without needing a computer on hand. It pairs a web service (hosted anywhere) with a macOS builder that performs signing using official Apple software, and supports OTA installation directly to devices.", "when_to_avoid": ["you have no access to a macOS machine to run the builder component", "you want a public app catalog or a turnkey hosted service", "you only need to sign apps occasionally and prefer a simple desktop tool", "you cannot self-host services or manage Docker deployments"], "when_to_choose": ["you want to sideload iOS apps without jailbreaking or keeping a computer connected", "you need reliable signing via official Apple tooling on a macOS builder", "you want a mobile-friendly web interface to upload, sign, and install apps OTA", "you need support for provisioning profiles, entitlements, and tweak injection"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/signtools", "repo": "SignTools/SignTools", "role": "main", "score": 92}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:06:25.695463+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:47:01.665972+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6b5cb4987f1f42b82c8f88b17ccbe7b0bf2f08e0171c5afffca6654c29090d61", "fetched_at": "2026-08-28T04:06:25.695463+00:00", "kind": "readme", "missing": false, "url": "https://github.com/SignTools/SignTools"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:06:25.695463+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:47:01.665972+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6b5cb4987f1f42b82c8f88b17ccbe7b0bf2f08e0171c5afffca6654c29090d61", "fetched_at": "2026-08-28T04:06:25.695463+00:00", "kind": "readme", "missing": false, "url": "https://github.com/SignTools/SignTools"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:47:01.665972+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6b5cb4987f1f42b82c8f88b17ccbe7b0bf2f08e0171c5afffca6654c29090d61", "fetched_at": "2026-08-28T04:06:25.695463+00:00", "kind": "readme", "missing": false, "url": "https://github.com/SignTools/SignTools"}], "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:25.695463+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:06:25.695463+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:06:25.695463+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:47:01.665972+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6b5cb4987f1f42b82c8f88b17ccbe7b0bf2f08e0171c5afffca6654c29090d61", "fetched_at": "2026-08-28T04:06:25.695463+00:00", "kind": "readme", "missing": false, "url": "https://github.com/SignTools/SignTools"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:06:25.695463+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:06:25.695463+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:47:01.665972+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6b5cb4987f1f42b82c8f88b17ccbe7b0bf2f08e0171c5afffca6654c29090d61", "fetched_at": "2026-08-28T04:06:25.695463+00:00", "kind": "readme", "missing": false, "url": "https://github.com/SignTools/SignTools"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:06:25.695463+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:06:25.695463+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:06:25.695463+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:47:01.665972+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6b5cb4987f1f42b82c8f88b17ccbe7b0bf2f08e0171c5afffca6654c29090d61", "fetched_at": "2026-08-28T04:06:25.695463+00:00", "kind": "readme", "missing": false, "url": "https://github.com/SignTools/SignTools"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:06:25.695463+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:06:25.695463+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:47:01.665972+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6b5cb4987f1f42b82c8f88b17ccbe7b0bf2f08e0171c5afffca6654c29090d61", "fetched_at": "2026-08-28T04:06:25.695463+00:00", "kind": "readme", "missing": false, "url": "https://github.com/SignTools/SignTools"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:47:01.665972+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6b5cb4987f1f42b82c8f88b17ccbe7b0bf2f08e0171c5afffca6654c29090d61", "fetched_at": "2026-08-28T04:06:25.695463+00:00", "kind": "readme", "missing": false, "url": "https://github.com/SignTools/SignTools"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:47:01.665972+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6b5cb4987f1f42b82c8f88b17ccbe7b0bf2f08e0171c5afffca6654c29090d61", "fetched_at": "2026-08-28T04:06:25.695463+00:00", "kind": "readme", "missing": false, "url": "https://github.com/SignTools/SignTools"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:47:01.665972+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "6b5cb4987f1f42b82c8f88b17ccbe7b0bf2f08e0171c5afffca6654c29090d61", "fetched_at": "2026-08-28T04:06:25.695463+00:00", "kind": "readme", "missing": false, "url": "https://github.com/SignTools/SignTools"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 98, "longevity": 100, "rhythm": 81}, "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": 2026, "days_push": 13, "days_rel": 48, "gap_med": 64, "n_releases_24m": 8}, "score": 92, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}