{"adoption": {"forks": 243, "observed_at": "2026-08-28T04:09:22.988434+00:00", "stars": 5611}, "canonical_url": "https://ross.abutalabs.com/products/miru-app", "card": {"archived": false, "artifact_type": "application", "description": "🎉 A versatile application that is free, open-source, and supports extension sources for videos, comics, and novels, available on Android, Windows, and Web platforms.", "domain": ["media", "entertainment", "cross-platform", "self-hosted"], "enriched": true, "function": ["gui", "video-processing", "plugin-system", "web-scraping"], "health_score": 58, "homepage": "https://miru.js.org", "language": "Dart", "license": "AGPL-3.0", "license_family": "copyleft", "maturity": "active", "member_repos": ["miru-project/miru-app"], "name": "miru-project/miru-app", "platform": ["windows", "cross-platform"], "pushed_at": "2025-12-05T14:04:55+00:00", "repo": "miru-project/miru-app", "stars": 5611, "tags": ["media-consumption", "extension-sources", "manga-reader", "novel-reader", "video-streaming", "anime", "tmdb", "anilist", "bittorrent", "quickjs", "android", "web", "flutter"], "topics": ["apk", "manga", "miru", "player", "windows", "android", "flutter", "bangumi", "novel", "video", "anime", "bittorrent"], "urls": [], "use_cases": ["watch anime and videos from multiple online sources in one app", "read manga and comics online with progress tracking", "read web novels from various sources", "write custom JavaScript extensions to add new media sources", "track watched anime on AniList automatically", "stream video via BitTorrent", "fetch movie and TV metadata from TMDB"], "what_it_is": "Miru is a free, open-source, multi-platform media entertainment app built with Flutter for watching videos, reading comics/manga, and reading novels from extensible JavaScript-based sources. It supports custom extension repositories, TMDB metadata, AniList tracking, proxy protocols, and BitTorrent streaming on Android, Windows, and Web.", "when_to_avoid": ["you need Linux or iOS/macOS support, which is not currently available", "you want a fully legal built-in content catalog without configuring sources", "you need offline media library management rather than online source viewing", "you require data synchronization, which is still on the todo list"], "when_to_choose": ["you want a unified cross-platform app for video, manga, and novel sources", "you want to add media sources via simple JavaScript extensions", "you need AniList tracking and TMDB metadata built in", "you prefer free open-source media apps on Android or Windows"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/miru-app", "repo": "miru-project/miru-app", "role": "main", "score": 45}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:09:22.988434+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T17:55:25.528421+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3a8c20b66b307769d447417f3196641911a7580198e9ab41bf7d771a414da183", "fetched_at": "2026-08-28T04:09:22.988434+00:00", "kind": "readme", "missing": false, "url": "https://github.com/miru-project/miru-app"}, {"content_hash": "63f821b8a6c9921f2a122e4e1943119c88a824f602f1b61a036b403b8f72604b", "fetched_at": "2026-08-29T08:50:09.400714+00:00", "kind": "homepage", "missing": false, "url": "https://miru.js.org"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:09:22.988434+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T17:55:25.528421+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3a8c20b66b307769d447417f3196641911a7580198e9ab41bf7d771a414da183", "fetched_at": "2026-08-28T04:09:22.988434+00:00", "kind": "readme", "missing": false, "url": "https://github.com/miru-project/miru-app"}, {"content_hash": "63f821b8a6c9921f2a122e4e1943119c88a824f602f1b61a036b403b8f72604b", "fetched_at": "2026-08-29T08:50:09.400714+00:00", "kind": "homepage", "missing": false, "url": "https://miru.js.org"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T17:55:25.528421+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3a8c20b66b307769d447417f3196641911a7580198e9ab41bf7d771a414da183", "fetched_at": "2026-08-28T04:09:22.988434+00:00", "kind": "readme", "missing": false, "url": "https://github.com/miru-project/miru-app"}, {"content_hash": "63f821b8a6c9921f2a122e4e1943119c88a824f602f1b61a036b403b8f72604b", "fetched_at": "2026-08-29T08:50:09.400714+00:00", "kind": "homepage", "missing": false, "url": "https://miru.js.org"}], "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:09:22.988434+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:09:22.988434+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:09:22.988434+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T17:55:25.528421+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3a8c20b66b307769d447417f3196641911a7580198e9ab41bf7d771a414da183", "fetched_at": "2026-08-28T04:09:22.988434+00:00", "kind": "readme", "missing": false, "url": "https://github.com/miru-project/miru-app"}, {"content_hash": "63f821b8a6c9921f2a122e4e1943119c88a824f602f1b61a036b403b8f72604b", "fetched_at": "2026-08-29T08:50:09.400714+00:00", "kind": "homepage", "missing": false, "url": "https://miru.js.org"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:09:22.988434+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:09:22.988434+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T17:55:25.528421+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3a8c20b66b307769d447417f3196641911a7580198e9ab41bf7d771a414da183", "fetched_at": "2026-08-28T04:09:22.988434+00:00", "kind": "readme", "missing": false, "url": "https://github.com/miru-project/miru-app"}, {"content_hash": "63f821b8a6c9921f2a122e4e1943119c88a824f602f1b61a036b403b8f72604b", "fetched_at": "2026-08-29T08:50:09.400714+00:00", "kind": "homepage", "missing": false, "url": "https://miru.js.org"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:09:22.988434+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:09:22.988434+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:09:22.988434+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T17:55:25.528421+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3a8c20b66b307769d447417f3196641911a7580198e9ab41bf7d771a414da183", "fetched_at": "2026-08-28T04:09:22.988434+00:00", "kind": "readme", "missing": false, "url": "https://github.com/miru-project/miru-app"}, {"content_hash": "63f821b8a6c9921f2a122e4e1943119c88a824f602f1b61a036b403b8f72604b", "fetched_at": "2026-08-29T08:50:09.400714+00:00", "kind": "homepage", "missing": false, "url": "https://miru.js.org"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:09:22.988434+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:09:22.988434+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T17:55:25.528421+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3a8c20b66b307769d447417f3196641911a7580198e9ab41bf7d771a414da183", "fetched_at": "2026-08-28T04:09:22.988434+00:00", "kind": "readme", "missing": false, "url": "https://github.com/miru-project/miru-app"}, {"content_hash": "63f821b8a6c9921f2a122e4e1943119c88a824f602f1b61a036b403b8f72604b", "fetched_at": "2026-08-29T08:50:09.400714+00:00", "kind": "homepage", "missing": false, "url": "https://miru.js.org"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T17:55:25.528421+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3a8c20b66b307769d447417f3196641911a7580198e9ab41bf7d771a414da183", "fetched_at": "2026-08-28T04:09:22.988434+00:00", "kind": "readme", "missing": false, "url": "https://github.com/miru-project/miru-app"}, {"content_hash": "63f821b8a6c9921f2a122e4e1943119c88a824f602f1b61a036b403b8f72604b", "fetched_at": "2026-08-29T08:50:09.400714+00:00", "kind": "homepage", "missing": false, "url": "https://miru.js.org"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T17:55:25.528421+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3a8c20b66b307769d447417f3196641911a7580198e9ab41bf7d771a414da183", "fetched_at": "2026-08-28T04:09:22.988434+00:00", "kind": "readme", "missing": false, "url": "https://github.com/miru-project/miru-app"}, {"content_hash": "63f821b8a6c9921f2a122e4e1943119c88a824f602f1b61a036b403b8f72604b", "fetched_at": "2026-08-29T08:50:09.400714+00:00", "kind": "homepage", "missing": false, "url": "https://miru.js.org"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T17:55:25.528421+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "3a8c20b66b307769d447417f3196641911a7580198e9ab41bf7d771a414da183", "fetched_at": "2026-08-28T04:09:22.988434+00:00", "kind": "readme", "missing": false, "url": "https://github.com/miru-project/miru-app"}, {"content_hash": "63f821b8a6c9921f2a122e4e1943119c88a824f602f1b61a036b403b8f72604b", "fetched_at": "2026-08-29T08:50:09.400714+00:00", "kind": "homepage", "missing": false, "url": "https://miru.js.org"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 55, "longevity": 87, "rhythm": 8}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 1224, "days_push": 271, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 45, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}