{"adoption": {"forks": 56, "observed_at": "2026-08-28T04:04:03.344613+00:00", "stars": 1227}, "canonical_url": "https://ross.abutalabs.com/products/modernstorage", "card": {"archived": true, "artifact_type": "library", "description": "ModernStorage is a group of libraries that provide an abstraction layer over storage on Android to simplify its interactions", "domain": ["android-tools", "mobile-development", "files", "developer-tools"], "enriched": true, "function": ["file-system", "sdk", "developer-tools"], "health_score": 10, "homepage": "https://google.github.io/modernstorage/", "language": "Kotlin", "license": "Apache-2.0", "license_family": "permissive", "maturity": "experimental", "member_repos": ["google/modernstorage"], "name": "google/modernstorage", "platform": ["jvm"], "pushed_at": "2023-06-27T09:25:01+00:00", "repo": "google/modernstorage", "stars": 1227, "tags": ["storage-access-framework", "mediastore", "photo-picker", "permissions", "okio", "jetpack-compose", "android"], "topics": ["android", "storage", "mediastore", "storage-access-framework", "kotlin"], "urls": [], "use_cases": ["access files on Android without dealing with Storage Access Framework boilerplate", "check and request storage permissions on Android with a simple API", "interact with MediaStore for media files in an Android app", "use Okio FileSystem API to read and write Android storage", "launch the Android photo picker from an app", "simplify file storage code across Android API levels"], "what_it_is": "ModernStorage is a set of Kotlin libraries from Google that provide an abstraction layer over Android storage APIs, including the Storage Access Framework, MediaStore, and photo picker. It simplifies storage interactions and permission checking for Android app developers with a simpler, opinionated API.", "when_to_avoid": ["you need a stable, production-hardened library - it is still in alpha with expected API breaking changes", "you target platforms other than Android", "you need storage features beyond the library's intentionally small API surface"], "when_to_choose": ["you are building an Android app in Kotlin that needs file or media storage access", "you want a simplified, opinionated wrapper over SAF, MediaStore, and storage permissions", "you prefer Okio's FileSystem API for storage interactions on Android"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/modernstorage", "repo": "google/modernstorage", "role": "main", "score": 10}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:03.344613+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:15:15.357684+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d64b5bbf8da230bc7290e1b2f74e54fac32006205bd5df80edb2664ad5dac907", "fetched_at": "2026-08-28T04:04:03.344613+00:00", "kind": "readme", "missing": false, "url": "https://github.com/google/modernstorage"}, {"content_hash": "119d3964d3b6096eec632e9ce9ecb37ac6d78bf0b83a894e1783f770de1792d3", "fetched_at": "2026-08-29T12:22:52.995725+00:00", "kind": "homepage", "missing": false, "url": "https://google.github.io/modernstorage/"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:03.344613+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:15:15.357684+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d64b5bbf8da230bc7290e1b2f74e54fac32006205bd5df80edb2664ad5dac907", "fetched_at": "2026-08-28T04:04:03.344613+00:00", "kind": "readme", "missing": false, "url": "https://github.com/google/modernstorage"}, {"content_hash": "119d3964d3b6096eec632e9ce9ecb37ac6d78bf0b83a894e1783f770de1792d3", "fetched_at": "2026-08-29T12:22:52.995725+00:00", "kind": "homepage", "missing": false, "url": "https://google.github.io/modernstorage/"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:15:15.357684+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d64b5bbf8da230bc7290e1b2f74e54fac32006205bd5df80edb2664ad5dac907", "fetched_at": "2026-08-28T04:04:03.344613+00:00", "kind": "readme", "missing": false, "url": "https://github.com/google/modernstorage"}, {"content_hash": "119d3964d3b6096eec632e9ce9ecb37ac6d78bf0b83a894e1783f770de1792d3", "fetched_at": "2026-08-29T12:22:52.995725+00:00", "kind": "homepage", "missing": false, "url": "https://google.github.io/modernstorage/"}], "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:03.344613+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:03.344613+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:03.344613+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:15:15.357684+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d64b5bbf8da230bc7290e1b2f74e54fac32006205bd5df80edb2664ad5dac907", "fetched_at": "2026-08-28T04:04:03.344613+00:00", "kind": "readme", "missing": false, "url": "https://github.com/google/modernstorage"}, {"content_hash": "119d3964d3b6096eec632e9ce9ecb37ac6d78bf0b83a894e1783f770de1792d3", "fetched_at": "2026-08-29T12:22:52.995725+00:00", "kind": "homepage", "missing": false, "url": "https://google.github.io/modernstorage/"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:03.344613+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:03.344613+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:15:15.357684+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d64b5bbf8da230bc7290e1b2f74e54fac32006205bd5df80edb2664ad5dac907", "fetched_at": "2026-08-28T04:04:03.344613+00:00", "kind": "readme", "missing": false, "url": "https://github.com/google/modernstorage"}, {"content_hash": "119d3964d3b6096eec632e9ce9ecb37ac6d78bf0b83a894e1783f770de1792d3", "fetched_at": "2026-08-29T12:22:52.995725+00:00", "kind": "homepage", "missing": false, "url": "https://google.github.io/modernstorage/"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:03.344613+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:03.344613+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:03.344613+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:15:15.357684+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d64b5bbf8da230bc7290e1b2f74e54fac32006205bd5df80edb2664ad5dac907", "fetched_at": "2026-08-28T04:04:03.344613+00:00", "kind": "readme", "missing": false, "url": "https://github.com/google/modernstorage"}, {"content_hash": "119d3964d3b6096eec632e9ce9ecb37ac6d78bf0b83a894e1783f770de1792d3", "fetched_at": "2026-08-29T12:22:52.995725+00:00", "kind": "homepage", "missing": false, "url": "https://google.github.io/modernstorage/"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:03.344613+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:03.344613+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:15:15.357684+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d64b5bbf8da230bc7290e1b2f74e54fac32006205bd5df80edb2664ad5dac907", "fetched_at": "2026-08-28T04:04:03.344613+00:00", "kind": "readme", "missing": false, "url": "https://github.com/google/modernstorage"}, {"content_hash": "119d3964d3b6096eec632e9ce9ecb37ac6d78bf0b83a894e1783f770de1792d3", "fetched_at": "2026-08-29T12:22:52.995725+00:00", "kind": "homepage", "missing": false, "url": "https://google.github.io/modernstorage/"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:15:15.357684+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d64b5bbf8da230bc7290e1b2f74e54fac32006205bd5df80edb2664ad5dac907", "fetched_at": "2026-08-28T04:04:03.344613+00:00", "kind": "readme", "missing": false, "url": "https://github.com/google/modernstorage"}, {"content_hash": "119d3964d3b6096eec632e9ce9ecb37ac6d78bf0b83a894e1783f770de1792d3", "fetched_at": "2026-08-29T12:22:52.995725+00:00", "kind": "homepage", "missing": false, "url": "https://google.github.io/modernstorage/"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:15:15.357684+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d64b5bbf8da230bc7290e1b2f74e54fac32006205bd5df80edb2664ad5dac907", "fetched_at": "2026-08-28T04:04:03.344613+00:00", "kind": "readme", "missing": false, "url": "https://github.com/google/modernstorage"}, {"content_hash": "119d3964d3b6096eec632e9ce9ecb37ac6d78bf0b83a894e1783f770de1792d3", "fetched_at": "2026-08-29T12:22:52.995725+00:00", "kind": "homepage", "missing": false, "url": "https://google.github.io/modernstorage/"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:15:15.357684+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "d64b5bbf8da230bc7290e1b2f74e54fac32006205bd5df80edb2664ad5dac907", "fetched_at": "2026-08-28T04:04:03.344613+00:00", "kind": "readme", "missing": false, "url": "https://github.com/google/modernstorage"}, {"content_hash": "119d3964d3b6096eec632e9ce9ecb37ac6d78bf0b83a894e1783f770de1792d3", "fetched_at": "2026-08-29T12:22:52.995725+00:00", "kind": "homepage", "missing": false, "url": "https://google.github.io/modernstorage/"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["archived"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 1945, "days_push": 1163, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 10, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}