{"adoption": {"forks": 129, "observed_at": "2026-08-28T04:06:16.134803+00:00", "stars": 2116}, "canonical_url": "https://ross.abutalabs.com/products/maruos", "card": {"archived": false, "artifact_type": "application", "description": "Your phone is your PC.", "domain": ["operating-systems", "mobile-development", "desktop-applications", "cross-platform"], "enriched": true, "function": ["container-runtime", "desktop-framework"], "health_score": 78, "homepage": "https://maruos.com", "language": null, "license": "Apache-2.0", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["maruos/maruos"], "name": "maruos/maruos", "platform": [], "pushed_at": "2026-08-11T02:35:24+00:00", "repo": "maruos/maruos", "stars": 2116, "tags": ["android-os", "lxc-containers", "debian-desktop", "phone-as-pc", "aosp", "custom-firmware", "external-display", "operating-system", "virtualization", "containers", "android", "linux", "mobile", "desktop"], "topics": ["android", "linux", "maru", "virtualization", "containers", "phone", "os"], "urls": [], "use_cases": ["use my phone as a desktop PC with an HDMI monitor and keyboard", "run a full Debian Linux desktop on my Android smartphone", "replace my Android OS with a bloatware-free custom ROM", "get desktop-class multitasking from a single mobile device", "spin up Linux containers on demand on a phone", "preserve desktop session state when undocking my phone", "build or port a custom Android distribution for Nexus/Pixel devices"], "what_it_is": "Maru OS is an open-source Android-based operating system that turns your smartphone into a desktop PC when connected to an external display, keyboard, and mouse. It uses lightweight OS virtualization (LXC containers) to run a Debian Linux desktop environment on demand alongside Android.", "when_to_avoid": ["your device is not on the officially supported list", "you need a modern, actively developed OS with recent Android security updates", "you cannot factory reset or unlock your phone's bootloader", "you only want an app rather than a full firmware replacement"], "when_to_choose": ["you want a phone that doubles as a lightweight Linux desktop via external display", "you own a supported Nexus/Pixel device and want a bloat-free, open-source OS", "you need a portable Debian environment with Android apps side by side", "you want to hack on an AOSP-based OS with container-based virtualization"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/maruos", "repo": "maruos/maruos", "role": "main", "score": 66}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:06:16.134803+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:53:20.309978+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "167a06407b0b6da190931ed39a657cbd2e5e4d96fd2a348706acb1de155332e0", "fetched_at": "2026-08-28T04:06:16.134803+00:00", "kind": "readme", "missing": false, "url": "https://github.com/maruos/maruos"}, {"content_hash": "12e3eb7e4e5371df5f4f586bde5ccf8d22e548f760f7fef674a728e5954d7984", "fetched_at": "2026-08-29T10:33:51.393783+00:00", "kind": "homepage", "missing": false, "url": "https://maruos.com"}, {"content_hash": "66359eaacab12cbbf7fba1b7b55a0526b8d2941b6af734537a60554383c8730e", "fetched_at": "2026-08-29T10:33:51.405651+00:00", "kind": "site_page", "missing": false, "url": "https://maruos.com/docs/faq"}, {"content_hash": "836b8d5a603b3d6760d078571ec953da70d34b444e57d77772dff07c3c83dada", "fetched_at": "2026-08-29T10:33:51.403034+00:00", "kind": "site_page", "missing": false, "url": "https://maruos.com/docs"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:06:16.134803+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:53:20.309978+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "167a06407b0b6da190931ed39a657cbd2e5e4d96fd2a348706acb1de155332e0", "fetched_at": "2026-08-28T04:06:16.134803+00:00", "kind": "readme", "missing": false, "url": "https://github.com/maruos/maruos"}, {"content_hash": "12e3eb7e4e5371df5f4f586bde5ccf8d22e548f760f7fef674a728e5954d7984", "fetched_at": "2026-08-29T10:33:51.393783+00:00", "kind": "homepage", "missing": false, "url": "https://maruos.com"}, {"content_hash": "66359eaacab12cbbf7fba1b7b55a0526b8d2941b6af734537a60554383c8730e", "fetched_at": "2026-08-29T10:33:51.405651+00:00", "kind": "site_page", "missing": false, "url": "https://maruos.com/docs/faq"}, {"content_hash": "836b8d5a603b3d6760d078571ec953da70d34b444e57d77772dff07c3c83dada", "fetched_at": "2026-08-29T10:33:51.403034+00:00", "kind": "site_page", "missing": false, "url": "https://maruos.com/docs"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:53:20.309978+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "167a06407b0b6da190931ed39a657cbd2e5e4d96fd2a348706acb1de155332e0", "fetched_at": "2026-08-28T04:06:16.134803+00:00", "kind": "readme", "missing": false, "url": "https://github.com/maruos/maruos"}, {"content_hash": "12e3eb7e4e5371df5f4f586bde5ccf8d22e548f760f7fef674a728e5954d7984", "fetched_at": "2026-08-29T10:33:51.393783+00:00", "kind": "homepage", "missing": false, "url": "https://maruos.com"}, {"content_hash": "66359eaacab12cbbf7fba1b7b55a0526b8d2941b6af734537a60554383c8730e", "fetched_at": "2026-08-29T10:33:51.405651+00:00", "kind": "site_page", "missing": false, "url": "https://maruos.com/docs/faq"}, {"content_hash": "836b8d5a603b3d6760d078571ec953da70d34b444e57d77772dff07c3c83dada", "fetched_at": "2026-08-29T10:33:51.403034+00:00", "kind": "site_page", "missing": false, "url": "https://maruos.com/docs"}], "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:16.134803+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:06:16.134803+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:06:16.134803+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:53:20.309978+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "167a06407b0b6da190931ed39a657cbd2e5e4d96fd2a348706acb1de155332e0", "fetched_at": "2026-08-28T04:06:16.134803+00:00", "kind": "readme", "missing": false, "url": "https://github.com/maruos/maruos"}, {"content_hash": "12e3eb7e4e5371df5f4f586bde5ccf8d22e548f760f7fef674a728e5954d7984", "fetched_at": "2026-08-29T10:33:51.393783+00:00", "kind": "homepage", "missing": false, "url": "https://maruos.com"}, {"content_hash": "66359eaacab12cbbf7fba1b7b55a0526b8d2941b6af734537a60554383c8730e", "fetched_at": "2026-08-29T10:33:51.405651+00:00", "kind": "site_page", "missing": false, "url": "https://maruos.com/docs/faq"}, {"content_hash": "836b8d5a603b3d6760d078571ec953da70d34b444e57d77772dff07c3c83dada", "fetched_at": "2026-08-29T10:33:51.403034+00:00", "kind": "site_page", "missing": false, "url": "https://maruos.com/docs"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:06:16.134803+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:06:16.134803+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:53:20.309978+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "167a06407b0b6da190931ed39a657cbd2e5e4d96fd2a348706acb1de155332e0", "fetched_at": "2026-08-28T04:06:16.134803+00:00", "kind": "readme", "missing": false, "url": "https://github.com/maruos/maruos"}, {"content_hash": "12e3eb7e4e5371df5f4f586bde5ccf8d22e548f760f7fef674a728e5954d7984", "fetched_at": "2026-08-29T10:33:51.393783+00:00", "kind": "homepage", "missing": false, "url": "https://maruos.com"}, {"content_hash": "66359eaacab12cbbf7fba1b7b55a0526b8d2941b6af734537a60554383c8730e", "fetched_at": "2026-08-29T10:33:51.405651+00:00", "kind": "site_page", "missing": false, "url": "https://maruos.com/docs/faq"}, {"content_hash": "836b8d5a603b3d6760d078571ec953da70d34b444e57d77772dff07c3c83dada", "fetched_at": "2026-08-29T10:33:51.403034+00:00", "kind": "site_page", "missing": false, "url": "https://maruos.com/docs"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:06:16.134803+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:06:16.134803+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:06:16.134803+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:53:20.309978+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "167a06407b0b6da190931ed39a657cbd2e5e4d96fd2a348706acb1de155332e0", "fetched_at": "2026-08-28T04:06:16.134803+00:00", "kind": "readme", "missing": false, "url": "https://github.com/maruos/maruos"}, {"content_hash": "12e3eb7e4e5371df5f4f586bde5ccf8d22e548f760f7fef674a728e5954d7984", "fetched_at": "2026-08-29T10:33:51.393783+00:00", "kind": "homepage", "missing": false, "url": "https://maruos.com"}, {"content_hash": "66359eaacab12cbbf7fba1b7b55a0526b8d2941b6af734537a60554383c8730e", "fetched_at": "2026-08-29T10:33:51.405651+00:00", "kind": "site_page", "missing": false, "url": "https://maruos.com/docs/faq"}, {"content_hash": "836b8d5a603b3d6760d078571ec953da70d34b444e57d77772dff07c3c83dada", "fetched_at": "2026-08-29T10:33:51.403034+00:00", "kind": "site_page", "missing": false, "url": "https://maruos.com/docs"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:06:16.134803+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:06:16.134803+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:53:20.309978+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "167a06407b0b6da190931ed39a657cbd2e5e4d96fd2a348706acb1de155332e0", "fetched_at": "2026-08-28T04:06:16.134803+00:00", "kind": "readme", "missing": false, "url": "https://github.com/maruos/maruos"}, {"content_hash": "12e3eb7e4e5371df5f4f586bde5ccf8d22e548f760f7fef674a728e5954d7984", "fetched_at": "2026-08-29T10:33:51.393783+00:00", "kind": "homepage", "missing": false, "url": "https://maruos.com"}, {"content_hash": "66359eaacab12cbbf7fba1b7b55a0526b8d2941b6af734537a60554383c8730e", "fetched_at": "2026-08-29T10:33:51.405651+00:00", "kind": "site_page", "missing": false, "url": "https://maruos.com/docs/faq"}, {"content_hash": "836b8d5a603b3d6760d078571ec953da70d34b444e57d77772dff07c3c83dada", "fetched_at": "2026-08-29T10:33:51.403034+00:00", "kind": "site_page", "missing": false, "url": "https://maruos.com/docs"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:53:20.309978+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "167a06407b0b6da190931ed39a657cbd2e5e4d96fd2a348706acb1de155332e0", "fetched_at": "2026-08-28T04:06:16.134803+00:00", "kind": "readme", "missing": false, "url": "https://github.com/maruos/maruos"}, {"content_hash": "12e3eb7e4e5371df5f4f586bde5ccf8d22e548f760f7fef674a728e5954d7984", "fetched_at": "2026-08-29T10:33:51.393783+00:00", "kind": "homepage", "missing": false, "url": "https://maruos.com"}, {"content_hash": "66359eaacab12cbbf7fba1b7b55a0526b8d2941b6af734537a60554383c8730e", "fetched_at": "2026-08-29T10:33:51.405651+00:00", "kind": "site_page", "missing": false, "url": "https://maruos.com/docs/faq"}, {"content_hash": "836b8d5a603b3d6760d078571ec953da70d34b444e57d77772dff07c3c83dada", "fetched_at": "2026-08-29T10:33:51.403034+00:00", "kind": "site_page", "missing": false, "url": "https://maruos.com/docs"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:53:20.309978+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "167a06407b0b6da190931ed39a657cbd2e5e4d96fd2a348706acb1de155332e0", "fetched_at": "2026-08-28T04:06:16.134803+00:00", "kind": "readme", "missing": false, "url": "https://github.com/maruos/maruos"}, {"content_hash": "12e3eb7e4e5371df5f4f586bde5ccf8d22e548f760f7fef674a728e5954d7984", "fetched_at": "2026-08-29T10:33:51.393783+00:00", "kind": "homepage", "missing": false, "url": "https://maruos.com"}, {"content_hash": "66359eaacab12cbbf7fba1b7b55a0526b8d2941b6af734537a60554383c8730e", "fetched_at": "2026-08-29T10:33:51.405651+00:00", "kind": "site_page", "missing": false, "url": "https://maruos.com/docs/faq"}, {"content_hash": "836b8d5a603b3d6760d078571ec953da70d34b444e57d77772dff07c3c83dada", "fetched_at": "2026-08-29T10:33:51.403034+00:00", "kind": "site_page", "missing": false, "url": "https://maruos.com/docs"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:53:20.309978+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "167a06407b0b6da190931ed39a657cbd2e5e4d96fd2a348706acb1de155332e0", "fetched_at": "2026-08-28T04:06:16.134803+00:00", "kind": "readme", "missing": false, "url": "https://github.com/maruos/maruos"}, {"content_hash": "12e3eb7e4e5371df5f4f586bde5ccf8d22e548f760f7fef674a728e5954d7984", "fetched_at": "2026-08-29T10:33:51.393783+00:00", "kind": "homepage", "missing": false, "url": "https://maruos.com"}, {"content_hash": "66359eaacab12cbbf7fba1b7b55a0526b8d2941b6af734537a60554383c8730e", "fetched_at": "2026-08-29T10:33:51.405651+00:00", "kind": "site_page", "missing": false, "url": "https://maruos.com/docs/faq"}, {"content_hash": "836b8d5a603b3d6760d078571ec953da70d34b444e57d77772dff07c3c83dada", "fetched_at": "2026-08-29T10:33:51.403034+00:00", "kind": "site_page", "missing": false, "url": "https://maruos.com/docs"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 97, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-03T02:39:23.370411+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 3758, "days_push": 23, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 66, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}