{"adoption": {"forks": 84, "observed_at": "2026-08-28T04:06:03.228899+00:00", "stars": 1993}, "canonical_url": "https://ross.abutalabs.com/products/appports", "card": {"archived": false, "artifact_type": "application", "description": "📦 A macOS utility to seamlessly migrate applications to external storage and reclaim local disk space.【一款 macOS 工具，无缝迁移应用到外部存储并自动建立链接，释放宝贵的本地空间】", "domain": ["operating-systems", "developer-tools", "files", "self-hosted"], "enriched": true, "function": ["file-system", "developer-tools"], "health_score": 95, "homepage": "https://appports.shimoko.com", "language": "Swift", "license": "Apache-2.0", "license_family": "permissive", "maturity": "active", "member_repos": ["wzh4869/AppPorts"], "name": "wzh4869/AppPorts", "platform": [], "pushed_at": "2026-07-07T14:40:56+00:00", "repo": "wzh4869/AppPorts", "stars": 1993, "tags": ["disk-space", "symbolic-links", "external-storage", "app-migration", "swiftui", "disk-cleaner", "utility", "macos", "desktop"], "topics": ["app-manager", "disk-cleaner", "external-storage", "full-disk-access", "macos", "macos-app", "swift", "swiftui", "symbolic-links", "utility"], "urls": [], "use_cases": ["free up macbook disk space by moving apps to an external ssd", "migrate large applications to external storage on macos", "move apps to external drive without breaking launchpad", "reclaim local storage from multi-gigabyte mac apps", "run mac apps from an external drive seamlessly", "clean up mac applications folder with symbolic links"], "what_it_is": "AppPorts is a macOS utility that migrates large applications from /Applications to external storage (SSD, SD card, or NAS) while leaving a tiny launcher stub locally via symbolic links. Apps continue to launch normally from Launchpad and the macOS App Menu, freeing local disk space.", "when_to_avoid": ["you need a cross-platform disk management tool (macOS only)", "your external drive isn't reliably connected when launching apps", "you need to migrate system apps or apps with strict sandbox/security restrictions"], "when_to_choose": ["you're on macOS with limited internal storage and an external drive available", "you want apps to keep working normally (Launchpad, self-updates) after migration", "you prefer a native SwiftUI GUI over manual symlink commands"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/appports", "repo": "wzh4869/AppPorts", "role": "main", "score": 77}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:06:03.228899+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:02:37.174455+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1706a8921b62e5aa4494e7252d6b4080bb4060afa878746ee9f035eeeb3d44c3", "fetched_at": "2026-08-28T04:06:03.228899+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wzh4869/AppPorts"}, {"content_hash": "2e540b6995c99da00cbce0cedea587972f8965a8fba645f318bb0d6d322efb11", "fetched_at": "2026-08-29T10:42:21.702298+00:00", "kind": "homepage", "missing": false, "url": "https://appports.shimoko.com"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:06:03.228899+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:02:37.174455+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1706a8921b62e5aa4494e7252d6b4080bb4060afa878746ee9f035eeeb3d44c3", "fetched_at": "2026-08-28T04:06:03.228899+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wzh4869/AppPorts"}, {"content_hash": "2e540b6995c99da00cbce0cedea587972f8965a8fba645f318bb0d6d322efb11", "fetched_at": "2026-08-29T10:42:21.702298+00:00", "kind": "homepage", "missing": false, "url": "https://appports.shimoko.com"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:02:37.174455+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1706a8921b62e5aa4494e7252d6b4080bb4060afa878746ee9f035eeeb3d44c3", "fetched_at": "2026-08-28T04:06:03.228899+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wzh4869/AppPorts"}, {"content_hash": "2e540b6995c99da00cbce0cedea587972f8965a8fba645f318bb0d6d322efb11", "fetched_at": "2026-08-29T10:42:21.702298+00:00", "kind": "homepage", "missing": false, "url": "https://appports.shimoko.com"}], "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:03.228899+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:06:03.228899+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:06:03.228899+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:02:37.174455+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1706a8921b62e5aa4494e7252d6b4080bb4060afa878746ee9f035eeeb3d44c3", "fetched_at": "2026-08-28T04:06:03.228899+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wzh4869/AppPorts"}, {"content_hash": "2e540b6995c99da00cbce0cedea587972f8965a8fba645f318bb0d6d322efb11", "fetched_at": "2026-08-29T10:42:21.702298+00:00", "kind": "homepage", "missing": false, "url": "https://appports.shimoko.com"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:06:03.228899+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:06:03.228899+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:02:37.174455+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1706a8921b62e5aa4494e7252d6b4080bb4060afa878746ee9f035eeeb3d44c3", "fetched_at": "2026-08-28T04:06:03.228899+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wzh4869/AppPorts"}, {"content_hash": "2e540b6995c99da00cbce0cedea587972f8965a8fba645f318bb0d6d322efb11", "fetched_at": "2026-08-29T10:42:21.702298+00:00", "kind": "homepage", "missing": false, "url": "https://appports.shimoko.com"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:06:03.228899+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:06:03.228899+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:06:03.228899+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:02:37.174455+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1706a8921b62e5aa4494e7252d6b4080bb4060afa878746ee9f035eeeb3d44c3", "fetched_at": "2026-08-28T04:06:03.228899+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wzh4869/AppPorts"}, {"content_hash": "2e540b6995c99da00cbce0cedea587972f8965a8fba645f318bb0d6d322efb11", "fetched_at": "2026-08-29T10:42:21.702298+00:00", "kind": "homepage", "missing": false, "url": "https://appports.shimoko.com"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:06:03.228899+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:06:03.228899+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:02:37.174455+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1706a8921b62e5aa4494e7252d6b4080bb4060afa878746ee9f035eeeb3d44c3", "fetched_at": "2026-08-28T04:06:03.228899+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wzh4869/AppPorts"}, {"content_hash": "2e540b6995c99da00cbce0cedea587972f8965a8fba645f318bb0d6d322efb11", "fetched_at": "2026-08-29T10:42:21.702298+00:00", "kind": "homepage", "missing": false, "url": "https://appports.shimoko.com"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:02:37.174455+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1706a8921b62e5aa4494e7252d6b4080bb4060afa878746ee9f035eeeb3d44c3", "fetched_at": "2026-08-28T04:06:03.228899+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wzh4869/AppPorts"}, {"content_hash": "2e540b6995c99da00cbce0cedea587972f8965a8fba645f318bb0d6d322efb11", "fetched_at": "2026-08-29T10:42:21.702298+00:00", "kind": "homepage", "missing": false, "url": "https://appports.shimoko.com"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:02:37.174455+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1706a8921b62e5aa4494e7252d6b4080bb4060afa878746ee9f035eeeb3d44c3", "fetched_at": "2026-08-28T04:06:03.228899+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wzh4869/AppPorts"}, {"content_hash": "2e540b6995c99da00cbce0cedea587972f8965a8fba645f318bb0d6d322efb11", "fetched_at": "2026-08-29T10:42:21.702298+00:00", "kind": "homepage", "missing": false, "url": "https://appports.shimoko.com"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:02:37.174455+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1706a8921b62e5aa4494e7252d6b4080bb4060afa878746ee9f035eeeb3d44c3", "fetched_at": "2026-08-28T04:06:03.228899+00:00", "kind": "readme", "missing": false, "url": "https://github.com/wzh4869/AppPorts"}, {"content_hash": "2e540b6995c99da00cbce0cedea587972f8965a8fba645f318bb0d6d322efb11", "fetched_at": "2026-08-29T10:42:21.702298+00:00", "kind": "homepage", "missing": false, "url": "https://appports.shimoko.com"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 91, "longevity": 20, "rhythm": 92}, "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": 288, "days_push": 57, "days_rel": 57, "gap_med": 6.0, "n_releases_24m": 19}, "score": 77, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}