{"adoption": {"forks": 1852, "observed_at": "2026-08-28T04:11:09.492401+00:00", "stars": 15277}, "canonical_url": "https://ross.abutalabs.com/products/peertube", "card": {"archived": false, "artifact_type": "application", "description": "ActivityPub-federated video streaming platform using P2P directly in your web browser", "domain": ["media", "self-hosted", "web-development", "privacy", "social-media"], "enriched": true, "function": ["http-server", "web-framework", "p2p", "video-processing", "self-hosted"], "health_score": 100, "homepage": "https://joinpeertube.org/", "language": "TypeScript", "license": "AGPL-3.0", "license_family": "copyleft", "maturity": "stable", "member_repos": ["Chocobozzz/PeerTube"], "name": "Chocobozzz/PeerTube", "platform": ["self-hosted", "cross-platform"], "pushed_at": "2026-08-25T14:41:35+00:00", "repo": "Chocobozzz/PeerTube", "stars": 15277, "tags": ["video-hosting", "activitypub", "fediverse", "webrtc", "youtube-alternative", "federation", "decentralized", "web-server", "nodejs", "docker"], "topics": ["video", "decentralized", "p2p", "angular", "activitypub"], "urls": [], "use_cases": ["host my own video platform instead of youtube", "self-host a video sharing site for my community", "join a federated video network with mastodon", "reduce server bandwidth with p2p video streaming", "create an ad-free video site without tracking", "run a decentralized video hosting instance", "publish videos on the fediverse"], "what_it_is": "PeerTube is a free, open-source, self-hosted video streaming platform that uses ActivityPub federation to connect independent video hosting instances into a network. It uses WebRTC peer-to-peer streaming in the browser to distribute bandwidth load when videos go viral.", "when_to_avoid": ["you need massive centralized scale and CDN-backed global delivery like YouTube", "you cannot run and moderate your own server instance", "you need strict content control over a single centralized video library", "your audience is behind firewalls blocking WebRTC or p2p traffic"], "when_to_choose": ["you want full ownership and control of your video hosting without vendor lock-in", "you want to federate with Mastodon and other ActivityPub services", "you want to avoid ads, tracking, and opaque moderation algorithms", "you want p2p delivery to cut bandwidth costs on viral videos"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/peertube", "repo": "Chocobozzz/PeerTube", "role": "main", "score": 98}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:11:09.492401+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T17:06:23.994407+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a0aa604f4a351b5f6e233ed5f51231e331d2881746a4d8bb12fe5bf00b75f285", "fetched_at": "2026-08-28T04:11:09.492401+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Chocobozzz/PeerTube"}, {"content_hash": "6d7bbf34dc0afbbdbcf79a5cc6c9be4574adb920fc3785afff288b9db8a9bed5", "fetched_at": "2026-08-29T08:04:39.449552+00:00", "kind": "homepage", "missing": false, "url": "https://joinpeertube.org/"}, {"content_hash": "19ad41da1232a62dc23375a74074a3c8e90b9e2cd969c36ad06b06a171791c53", "fetched_at": "2026-08-29T08:04:39.461880+00:00", "kind": "site_page", "missing": false, "url": "https://docs.joinpeertube.org/"}, {"content_hash": "ea7a6952eceea45d9f43eb7837d16d77da27184b501e688af4dbed7617afa990", "fetched_at": "2026-08-29T08:04:39.459006+00:00", "kind": "site_page", "missing": false, "url": "https://joinpeertube.org/faq"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:11:09.492401+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T17:06:23.994407+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a0aa604f4a351b5f6e233ed5f51231e331d2881746a4d8bb12fe5bf00b75f285", "fetched_at": "2026-08-28T04:11:09.492401+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Chocobozzz/PeerTube"}, {"content_hash": "6d7bbf34dc0afbbdbcf79a5cc6c9be4574adb920fc3785afff288b9db8a9bed5", "fetched_at": "2026-08-29T08:04:39.449552+00:00", "kind": "homepage", "missing": false, "url": "https://joinpeertube.org/"}, {"content_hash": "19ad41da1232a62dc23375a74074a3c8e90b9e2cd969c36ad06b06a171791c53", "fetched_at": "2026-08-29T08:04:39.461880+00:00", "kind": "site_page", "missing": false, "url": "https://docs.joinpeertube.org/"}, {"content_hash": "ea7a6952eceea45d9f43eb7837d16d77da27184b501e688af4dbed7617afa990", "fetched_at": "2026-08-29T08:04:39.459006+00:00", "kind": "site_page", "missing": false, "url": "https://joinpeertube.org/faq"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T17:06:23.994407+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a0aa604f4a351b5f6e233ed5f51231e331d2881746a4d8bb12fe5bf00b75f285", "fetched_at": "2026-08-28T04:11:09.492401+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Chocobozzz/PeerTube"}, {"content_hash": "6d7bbf34dc0afbbdbcf79a5cc6c9be4574adb920fc3785afff288b9db8a9bed5", "fetched_at": "2026-08-29T08:04:39.449552+00:00", "kind": "homepage", "missing": false, "url": "https://joinpeertube.org/"}, {"content_hash": "19ad41da1232a62dc23375a74074a3c8e90b9e2cd969c36ad06b06a171791c53", "fetched_at": "2026-08-29T08:04:39.461880+00:00", "kind": "site_page", "missing": false, "url": "https://docs.joinpeertube.org/"}, {"content_hash": "ea7a6952eceea45d9f43eb7837d16d77da27184b501e688af4dbed7617afa990", "fetched_at": "2026-08-29T08:04:39.459006+00:00", "kind": "site_page", "missing": false, "url": "https://joinpeertube.org/faq"}], "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:11:09.492401+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:11:09.492401+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:11:09.492401+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T17:06:23.994407+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a0aa604f4a351b5f6e233ed5f51231e331d2881746a4d8bb12fe5bf00b75f285", "fetched_at": "2026-08-28T04:11:09.492401+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Chocobozzz/PeerTube"}, {"content_hash": "6d7bbf34dc0afbbdbcf79a5cc6c9be4574adb920fc3785afff288b9db8a9bed5", "fetched_at": "2026-08-29T08:04:39.449552+00:00", "kind": "homepage", "missing": false, "url": "https://joinpeertube.org/"}, {"content_hash": "19ad41da1232a62dc23375a74074a3c8e90b9e2cd969c36ad06b06a171791c53", "fetched_at": "2026-08-29T08:04:39.461880+00:00", "kind": "site_page", "missing": false, "url": "https://docs.joinpeertube.org/"}, {"content_hash": "ea7a6952eceea45d9f43eb7837d16d77da27184b501e688af4dbed7617afa990", "fetched_at": "2026-08-29T08:04:39.459006+00:00", "kind": "site_page", "missing": false, "url": "https://joinpeertube.org/faq"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:11:09.492401+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:11:09.492401+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T17:06:23.994407+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a0aa604f4a351b5f6e233ed5f51231e331d2881746a4d8bb12fe5bf00b75f285", "fetched_at": "2026-08-28T04:11:09.492401+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Chocobozzz/PeerTube"}, {"content_hash": "6d7bbf34dc0afbbdbcf79a5cc6c9be4574adb920fc3785afff288b9db8a9bed5", "fetched_at": "2026-08-29T08:04:39.449552+00:00", "kind": "homepage", "missing": false, "url": "https://joinpeertube.org/"}, {"content_hash": "19ad41da1232a62dc23375a74074a3c8e90b9e2cd969c36ad06b06a171791c53", "fetched_at": "2026-08-29T08:04:39.461880+00:00", "kind": "site_page", "missing": false, "url": "https://docs.joinpeertube.org/"}, {"content_hash": "ea7a6952eceea45d9f43eb7837d16d77da27184b501e688af4dbed7617afa990", "fetched_at": "2026-08-29T08:04:39.459006+00:00", "kind": "site_page", "missing": false, "url": "https://joinpeertube.org/faq"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:11:09.492401+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:11:09.492401+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:11:09.492401+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T17:06:23.994407+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a0aa604f4a351b5f6e233ed5f51231e331d2881746a4d8bb12fe5bf00b75f285", "fetched_at": "2026-08-28T04:11:09.492401+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Chocobozzz/PeerTube"}, {"content_hash": "6d7bbf34dc0afbbdbcf79a5cc6c9be4574adb920fc3785afff288b9db8a9bed5", "fetched_at": "2026-08-29T08:04:39.449552+00:00", "kind": "homepage", "missing": false, "url": "https://joinpeertube.org/"}, {"content_hash": "19ad41da1232a62dc23375a74074a3c8e90b9e2cd969c36ad06b06a171791c53", "fetched_at": "2026-08-29T08:04:39.461880+00:00", "kind": "site_page", "missing": false, "url": "https://docs.joinpeertube.org/"}, {"content_hash": "ea7a6952eceea45d9f43eb7837d16d77da27184b501e688af4dbed7617afa990", "fetched_at": "2026-08-29T08:04:39.459006+00:00", "kind": "site_page", "missing": false, "url": "https://joinpeertube.org/faq"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:11:09.492401+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:11:09.492401+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T17:06:23.994407+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a0aa604f4a351b5f6e233ed5f51231e331d2881746a4d8bb12fe5bf00b75f285", "fetched_at": "2026-08-28T04:11:09.492401+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Chocobozzz/PeerTube"}, {"content_hash": "6d7bbf34dc0afbbdbcf79a5cc6c9be4574adb920fc3785afff288b9db8a9bed5", "fetched_at": "2026-08-29T08:04:39.449552+00:00", "kind": "homepage", "missing": false, "url": "https://joinpeertube.org/"}, {"content_hash": "19ad41da1232a62dc23375a74074a3c8e90b9e2cd969c36ad06b06a171791c53", "fetched_at": "2026-08-29T08:04:39.461880+00:00", "kind": "site_page", "missing": false, "url": "https://docs.joinpeertube.org/"}, {"content_hash": "ea7a6952eceea45d9f43eb7837d16d77da27184b501e688af4dbed7617afa990", "fetched_at": "2026-08-29T08:04:39.459006+00:00", "kind": "site_page", "missing": false, "url": "https://joinpeertube.org/faq"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T17:06:23.994407+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a0aa604f4a351b5f6e233ed5f51231e331d2881746a4d8bb12fe5bf00b75f285", "fetched_at": "2026-08-28T04:11:09.492401+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Chocobozzz/PeerTube"}, {"content_hash": "6d7bbf34dc0afbbdbcf79a5cc6c9be4574adb920fc3785afff288b9db8a9bed5", "fetched_at": "2026-08-29T08:04:39.449552+00:00", "kind": "homepage", "missing": false, "url": "https://joinpeertube.org/"}, {"content_hash": "19ad41da1232a62dc23375a74074a3c8e90b9e2cd969c36ad06b06a171791c53", "fetched_at": "2026-08-29T08:04:39.461880+00:00", "kind": "site_page", "missing": false, "url": "https://docs.joinpeertube.org/"}, {"content_hash": "ea7a6952eceea45d9f43eb7837d16d77da27184b501e688af4dbed7617afa990", "fetched_at": "2026-08-29T08:04:39.459006+00:00", "kind": "site_page", "missing": false, "url": "https://joinpeertube.org/faq"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T17:06:23.994407+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a0aa604f4a351b5f6e233ed5f51231e331d2881746a4d8bb12fe5bf00b75f285", "fetched_at": "2026-08-28T04:11:09.492401+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Chocobozzz/PeerTube"}, {"content_hash": "6d7bbf34dc0afbbdbcf79a5cc6c9be4574adb920fc3785afff288b9db8a9bed5", "fetched_at": "2026-08-29T08:04:39.449552+00:00", "kind": "homepage", "missing": false, "url": "https://joinpeertube.org/"}, {"content_hash": "19ad41da1232a62dc23375a74074a3c8e90b9e2cd969c36ad06b06a171791c53", "fetched_at": "2026-08-29T08:04:39.461880+00:00", "kind": "site_page", "missing": false, "url": "https://docs.joinpeertube.org/"}, {"content_hash": "ea7a6952eceea45d9f43eb7837d16d77da27184b501e688af4dbed7617afa990", "fetched_at": "2026-08-29T08:04:39.459006+00:00", "kind": "site_page", "missing": false, "url": "https://joinpeertube.org/faq"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T17:06:23.994407+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a0aa604f4a351b5f6e233ed5f51231e331d2881746a4d8bb12fe5bf00b75f285", "fetched_at": "2026-08-28T04:11:09.492401+00:00", "kind": "readme", "missing": false, "url": "https://github.com/Chocobozzz/PeerTube"}, {"content_hash": "6d7bbf34dc0afbbdbcf79a5cc6c9be4574adb920fc3785afff288b9db8a9bed5", "fetched_at": "2026-08-29T08:04:39.449552+00:00", "kind": "homepage", "missing": false, "url": "https://joinpeertube.org/"}, {"content_hash": "19ad41da1232a62dc23375a74074a3c8e90b9e2cd969c36ad06b06a171791c53", "fetched_at": "2026-08-29T08:04:39.461880+00:00", "kind": "site_page", "missing": false, "url": "https://docs.joinpeertube.org/"}, {"content_hash": "ea7a6952eceea45d9f43eb7837d16d77da27184b501e688af4dbed7617afa990", "fetched_at": "2026-08-29T08:04:39.459006+00:00", "kind": "site_page", "missing": false, "url": "https://joinpeertube.org/faq"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 100, "rhythm": 96}, "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": 3961, "days_push": 8, "days_rel": 29, "gap_med": 16, "n_releases_24m": 30}, "score": 98, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}