CINXE.COM
p2p 路 Topics 路 GitLab
<!DOCTYPE html> <html class="gl-light ui-indigo with-top-bar with-header " lang="en"> <head prefix="og: http://ogp.me/ns#"> <meta charset="utf-8"> <meta content="IE=edge" http-equiv="X-UA-Compatible"> <meta content="width=device-width, initial-scale=1" name="viewport"> <title>p2p 路 Topics 路 GitLab</title> <script> //<![CDATA[ window.gon={}; //]]> </script> <link rel="stylesheet" href="/assets/application-2e69a08e74e113997b5ba7fc5cd3e020a6f407d9ad552675adc6d78c2b23d0f7.css" /> <link rel="stylesheet" href="/assets/page_bundles/projects-3ecc000073da836fc87d71a9d2bc48368b34718e3df8a1904ff6f9755a7692f7.css" /><link rel="stylesheet" href="/assets/page_bundles/commit_description-1e2cba4dda3c7b30dd84924809020c569f1308dea51520fe1dd5d4ce31403195.css" /><link rel="stylesheet" href="/assets/page_bundles/work_items-cbc6a2e1633c4e847a617e35cc4833b85b80816db688d3d6dd3cd31d4251bc53.css" /><link rel="stylesheet" href="/assets/page_bundles/notes_shared-caf98f77b75b4b5399bdde69c069ee023fefdaa986d687c937e8010218785f51.css" /> <link rel="stylesheet" href="/assets/application_utilities-0bfb919a8a7eb0e89544dfe328e69461ccb276a565685fdb6ae3b14f3db3f41b.css" /> <link rel="stylesheet" href="/assets/tailwind-016e83140c37d97dbdff0cef9c063fcd43d214866665fb783774776747928853.css" /> <link rel="stylesheet" href="/assets/fonts-fae5d3f79948bd85f18b6513a025f863b19636e85b09a1492907eb4b1bb0557b.css" /> <link rel="stylesheet" href="/assets/highlight/themes/white-5ffbb706faebead681b01c8b52e92c6c0d35ad5b1c11d39012c90bcaf7892ca8.css" /> <link rel="preload" href="/assets/application_utilities-0bfb919a8a7eb0e89544dfe328e69461ccb276a565685fdb6ae3b14f3db3f41b.css" as="style" type="text/css"> <link rel="preload" href="/assets/application-2e69a08e74e113997b5ba7fc5cd3e020a6f407d9ad552675adc6d78c2b23d0f7.css" as="style" type="text/css"> <link rel="preload" href="/assets/highlight/themes/white-5ffbb706faebead681b01c8b52e92c6c0d35ad5b1c11d39012c90bcaf7892ca8.css" as="style" type="text/css"> <script src="/assets/webpack/runtime.507390f4.bundle.js" defer="defer"></script> <script src="/assets/webpack/main.a4c9ae4f.chunk.js" defer="defer"></script> <script src="/assets/webpack/commons-pages.admin.abuse_reports.show-pages.admin.topics.edit-pages.admin.topics.new-pages.dashboar-c8f1318b.54872cef.chunk.js" defer="defer"></script> <script src="/assets/webpack/commons-pages.admin.abuse_reports.show-pages.dashboard.issues-pages.dashboard.milestones.show-pages.-13e11bbf.1a73330b.chunk.js" defer="defer"></script> <script src="/assets/webpack/commons-pages.admin.abuse_reports.show-pages.dashboard.issues-pages.groups.boards-pages.groups.issue-8dfa5f96.20262e8b.chunk.js" defer="defer"></script> <script src="/assets/webpack/commons-pages.admin.abuse_reports.show-pages.dashboard.issues-pages.groups.boards-pages.groups.issue-f804d6c2.d4f467df.chunk.js" defer="defer"></script> <script src="/assets/webpack/commons-pages.groups.new-pages.import.gitlab_projects.new-pages.import.manifest.new-pages.projects.n-44c6c18e.800b02b5.chunk.js" defer="defer"></script> <script src="/assets/webpack/commons-pages.search.show-super_sidebar.98a5daf8.chunk.js" defer="defer"></script> <script src="/assets/webpack/super_sidebar.839aed14.chunk.js" defer="defer"></script> <script src="/assets/webpack/commons-pages.admin.abuse_reports-pages.admin.abuse_reports.show-pages.admin.groups.index-pages.admi-e271b53c.4fcbe683.chunk.js" defer="defer"></script> <script src="/assets/webpack/commons-pages.admin.groups.index-pages.dashboard.groups.index-pages.dashboard.projects-pages.explore-72c3c3a5.6ffd4786.chunk.js" defer="defer"></script> <script src="/assets/webpack/pages.explore.projects.0c5a968a.chunk.js" defer="defer"></script> <meta content="object" property="og:type"> <meta content="GitLab" property="og:site_name"> <meta content="p2p 路 Topics 路 GitLab" property="og:title"> <meta content="Framagit" property="og:description"> <meta content="https://framagit.org/assets/twitter_card-570ddb06edf56a2312253c5872489847a0f385112ddbcd71ccfa1570febab5d2.jpg" property="og:image"> <meta content="64" property="og:image:width"> <meta content="64" property="og:image:height"> <meta content="https://framagit.org/explore/projects/topics/p2p" property="og:url"> <meta content="summary" property="twitter:card"> <meta content="p2p 路 Topics 路 GitLab" property="twitter:title"> <meta content="Framagit" property="twitter:description"> <meta content="https://framagit.org/assets/twitter_card-570ddb06edf56a2312253c5872489847a0f385112ddbcd71ccfa1570febab5d2.jpg" property="twitter:image"> <meta name="csrf-param" content="authenticity_token" /> <meta name="csrf-token" content="-V_KyZXcCdYmCMsd3OOiYHbWVQpasSSuLTY-wOLXnigaVocQ8NI3qnw3zHdGGKe7AH-usTjMwlykRNuuOPqh9Q" /> <meta name="csp-nonce" /> <meta name="action-cable-url" content="/-/cable" /> <link href="/-/manifest.json" rel="manifest"> <link rel="icon" type="image/png" href="/uploads/-/system/appearance/favicon/1/git.png" id="favicon" data-original-href="/uploads/-/system/appearance/favicon/1/git.png" /> <link rel="apple-touch-icon" type="image/x-icon" href="/assets/apple-touch-icon-b049d4bc0dd9626f31db825d61880737befc7835982586d015bded10b4435460.png" /> <link href="/search/opensearch.xml" rel="search" title="Search GitLab" type="application/opensearchdescription+xml"> <!-- Matomo --> <script> //<![CDATA[ var _paq = window._paq = window._paq || []; _paq.push(['trackPageView']); _paq.push(['enableLinkTracking']); ; (function() { var u="//stats.framasoft.org/"; _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', "29"]); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.type='text/javascript'; g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s); })(); //]]> </script><noscript><p><img src="//stats.framasoft.org/matomo.php?idsite=29" style="border:0;" alt="" /></p></noscript> <!-- End Matomo Code --> <meta content="Framagit" name="description"> <meta content="#222261" name="theme-color"> </head> <body class="tab-width-8 gl-browser-ie gl-platform-windows" data-page="explore:projects:topic"> <script> //<![CDATA[ gl = window.gl || {}; gl.client = {"isIe":true,"isWindows":true}; //]]> </script> <header class="header-logged-out" data-testid="navbar"> <a class="gl-sr-only gl-accessibility" href="#content-body">Skip to content</a> <div class="container-fluid"> <nav aria-label="Explore GitLab" class="header-logged-out-nav gl-flex gl-gap-3 gl-justify-between"> <div class="gl-flex gl-items-center gl-gap-1"> <span class="gl-sr-only">GitLab</span> <a title="Homepage" id="logo" class="header-logged-out-logo has-tooltip" aria-label="Homepage" href="/"><img class="brand-header-logo lazy" alt="" data-src="/uploads/-/system/appearance/header_logo/1/logo.svg" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" /> </a></div> <ul class="gl-list-none gl-p-0 gl-m-0 gl-flex gl-gap-3 gl-items-center gl-grow"> <li class="header-logged-out-nav-item"> <a class="" href="/explore">Explore</a> </li> </ul> <ul class="gl-list-none gl-p-0 gl-m-0 gl-flex gl-gap-3 gl-items-center gl-justify-end"> <li class="header-logged-out-nav-item"> <a href="/users/sign_in?redirect_to_referer=yes">Sign in</a> </li> <li class="header-logged-out-nav-item"> <a class="gl-button btn btn-md btn-confirm " href="/users/sign_up"><span class="gl-button-text"> Register </span> </a></li> </ul> </nav> </div> </header> <div class="layout-page page-with-super-sidebar"> <aside class="js-super-sidebar super-sidebar super-sidebar-loading" data-command-palette="{}" data-force-desktop-expanded-sidebar="" data-is-saas="false" data-root-path="/" data-sidebar="{"is_logged_in":false,"context_switcher_links":[{"title":"Explore","link":"/explore","icon":"compass"}],"current_menu_items":[{"id":"projects_menu","title":"Projects","icon":"project","avatar_shape":"rect","link":"/explore/projects/starred","is_active":false,"items":[],"separated":false},{"id":"groups_menu","title":"Groups","icon":"group","avatar_shape":"rect","link":"/explore/groups","is_active":false,"items":[],"separated":false},{"id":"catalog_menu","title":"CI/CD Catalog","icon":"catalog-checkmark","avatar_shape":"rect","link":"/explore/catalog","is_active":false,"items":[],"separated":false},{"id":"topics_menu","title":"Topics","icon":"labels","avatar_shape":"rect","link":"/explore/projects/topics","is_active":true,"items":[],"separated":false},{"id":"snippets_menu","title":"Snippets","icon":"snippet","avatar_shape":"rect","link":"/explore/snippets","is_active":false,"items":[],"separated":false}],"current_context_header":"Explore","support_path":"https://contact.framasoft.org","docs_path":"/help/docs","display_whats_new":false,"show_version_check":null,"search":{"search_path":"/search","issues_path":"/dashboard/issues","mr_path":"/dashboard/merge_requests","autocomplete_path":"/search/autocomplete","settings_path":"/search/settings","search_context":{"for_snippets":null}},"panel_type":"explore","shortcut_links":[{"title":"Snippets","href":"/explore/snippets","css_class":"dashboard-shortcuts-snippets"},{"title":"Groups","href":"/explore/groups","css_class":"dashboard-shortcuts-groups"},{"title":"Projects","href":"/explore/projects/starred","css_class":"dashboard-shortcuts-projects"}],"terms":"/-/users/terms"}"></aside> <div class="content-wrapper"> <div class="broadcast-wrapper"> <div class="gl-broadcast-message banner js-broadcast-notification-33 indigo" data-broadcast-banner data-testid="banner-broadcast-message" role="alert"> <div class="gl-broadcast-message-content"> <div class="gl-broadcast-message-icon"> <svg class="s16" data-testid="bullhorn-icon"><use href="/assets/icons-8791a66659d025e0a4c801978c79a1fbd82db1d27d85f044a35728ea7cf0ae80.svg#bullhorn"></use></svg> </div> <div class="gl-broadcast-message-text"> <h2 class="gl-sr-only">Admin message</h2> <p>You don't pay for Framagit, because it is <strong>funded by donations to Framasoft</strong>. Our not-for-profit needs any support you can afford: <a href="https://support.framasoft.org" rel="nofollow noreferrer noopener" target="_blank">support.framasoft.org</a>.</p> <p>Framagit est gratuit car il est <strong>financ茅 par les dons 脿 Framasoft</strong>. Notre association a besoin de votre soutien sur <a href="https://soutenir.framasoft.org" rel="nofollow noreferrer noopener" target="_blank">soutenir.framasoft.org</a>.</p> </div> </div> <button class="gl-button btn btn-icon btn-sm btn-default btn-default-tertiary gl-broadcast-message-dismiss js-dismiss-current-broadcast-notification" aria-label="Close" data-id="33" data-expire-date="2024-12-02T22:59:43Z" data-cookie-key="hide_broadcast_message_33" type="button"><svg class="s16 gl-icon gl-button-icon " data-testid="close-icon"><use href="/assets/icons-8791a66659d025e0a4c801978c79a1fbd82db1d27d85f044a35728ea7cf0ae80.svg#close"></use></svg> </button> </div> </div> <div class="alert-wrapper alert-wrapper-top-space gl-flex gl-flex-col gl-gap-3 container-fluid container-limited"> <div class="gl-alert gl-alert-danger gl-alert-not-dismissible" role="alert"> <div class="gl-alert-icon-container"> <svg class="s16 gl-alert-icon gl-alert-icon-no-title" data-testid="error-icon"><use href="/assets/icons-8791a66659d025e0a4c801978c79a1fbd82db1d27d85f044a35728ea7cf0ae80.svg#error"></use></svg> </div> <div class="gl-alert-content" role="alert"> <div class="gl-alert-body"> GitLab may not work properly, because you are using an outdated web browser. <br> Please install a <a target="_blank" rel="noopener noreferrer" href="/help/install/requirements.md#supported-web-browsers">supported web browser</a> for a better experience. </div> </div> </div> </div> <div class="top-bar-fixed container-fluid" data-testid="top-bar"> <div class="top-bar-container gl-flex gl-items-center gl-gap-2"> <div class="gl-grow gl-basis-0 gl-flex gl-items-center gl-justify-start"> <button class="gl-button btn btn-icon btn-md btn-default btn-default-tertiary js-super-sidebar-toggle-expand super-sidebar-toggle -gl-ml-3" aria-controls="super-sidebar" aria-expanded="false" aria-label="Primary navigation sidebar" type="button"><svg class="s16 gl-icon gl-button-icon " data-testid="sidebar-icon"><use href="/assets/icons-8791a66659d025e0a4c801978c79a1fbd82db1d27d85f044a35728ea7cf0ae80.svg#sidebar"></use></svg> </button> <script type="application/ld+json"> {"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Explore","item":"https://framagit.org/explore"},{"@type":"ListItem","position":2,"name":"Topics","item":"https://framagit.org/explore/projects/topics"},{"@type":"ListItem","position":3,"name":"p2p","item":"https://framagit.org/explore/projects/topics/p2p"}]} </script> <div data-testid="breadcrumb-links" id="js-vue-page-breadcrumbs-wrapper"> <div data-breadcrumbs-json="[{"text":"Explore","href":"/explore","avatarPath":null},{"text":"Topics","href":"/explore/projects/topics","avatarPath":null},{"text":"p2p","href":"/explore/projects/topics/p2p","avatarPath":null}]" id="js-vue-page-breadcrumbs"></div> <div id="js-injected-page-breadcrumbs"></div> </div> </div> <div class="gl-flex-none gl-flex gl-items-center gl-justify-center"> <div id="js-advanced-search-modal"></div> </div> <div class="gl-grow gl-basis-0 gl-flex gl-items-center gl-justify-end"> <div id="js-work-item-feedback"></div> </div> </div> </div> <div class="container-fluid container-limited "> <main class="content" id="content-body"> <div class="flash-container flash-container-page sticky" data-testid="flash-container"> <div id="js-global-alerts"></div> </div> <div class="gl-text-center gl-bg-gray-10 gl-pb-3 gl-pt-6"> <div class="container-fluid container-limited"> <div class="gl-pb-5 gl-items-center gl-justify-center gl-flex"> <div alt="" class="gl-avatar gl-avatar-s64 !gl-rounded-base gl-avatar-identicon gl-avatar-identicon-bg3"> P </div> <h1 class="gl-mt-3 gl-ml-5"> p2p </h1> </div> </div> </div> <div class="container-fluid container-limited"> <div class="gl-py-5 gl-border-gray-100 gl-border-b-solid gl-border-b-1"> <h3 class="gl-m-0">Projects with this topic</h3> </div> <div class="top-area gl-pt-2 gl-pb-2 gl-justify-between"> <div class="nav-controls"> <form class="project-filter-form !gl-flex gl-flex-wrap gl-w-full gl-gap-3" data-testid="project-filter-form-container" id="project-filter-form" action="/explore/projects/topics/p2p?sort=latest_activity_desc" accept-charset="UTF-8" method="get"><input type="search" name="name" id="project-filter-form-field" placeholder="Filter by name" class="project-filter-form-field form-control input-short js-projects-list-filter !gl-m-0 gl-grow" spellcheck="false" /> <input type="hidden" name="sort" id="sort" value="latest_activity_desc" autocomplete="off" /> <div class="dropdown !gl-m-0"> <button class="dropdown-menu-toggle " type="button" data-toggle="dropdown" data-testid="project-language-dropdown"><span class="dropdown-toggle-text ">Language</span><svg class="s16 dropdown-menu-toggle-icon" data-testid="chevron-down-icon"><use href="/assets/icons-8791a66659d025e0a4c801978c79a1fbd82db1d27d85f044a35728ea7cf0ae80.svg#chevron-down"></use></svg></button> <ul class="dropdown-menu dropdown-menu-right dropdown-menu-selectable"> <li> <a href="/explore/projects/topics/p2p?sort=latest_activity_desc">Any</a> </li> <li> <a class="" href="/explore/projects/topics/p2p?language=33&sort=latest_activity_desc">Batchfile </a></li> <li> <a class="" href="/explore/projects/topics/p2p?language=16&sort=latest_activity_desc">C </a></li> <li> <a class="" href="/explore/projects/topics/p2p?language=47&sort=latest_activity_desc">C# </a></li> <li> <a class="" href="/explore/projects/topics/p2p?language=2&sort=latest_activity_desc">C++ </a></li> <li> <a class="" href="/explore/projects/topics/p2p?language=19&sort=latest_activity_desc">CMake </a></li> <li> <a class="" href="/explore/projects/topics/p2p?language=4&sort=latest_activity_desc">CSS </a></li> <li> <a class="" href="/explore/projects/topics/p2p?language=168&sort=latest_activity_desc">Dockerfile </a></li> <li> <a class="" href="/explore/projects/topics/p2p?language=167&sort=latest_activity_desc">Hack </a></li> <li> <a class="" href="/explore/projects/topics/p2p?language=5&sort=latest_activity_desc">HTML </a></li> <li> <a class="" href="/explore/projects/topics/p2p?language=20&sort=latest_activity_desc">Java </a></li> <li> <a class="" href="/explore/projects/topics/p2p?language=3&sort=latest_activity_desc">JavaScript </a></li> <li> <a class="" href="/explore/projects/topics/p2p?language=23&sort=latest_activity_desc">Jupyter Notebook </a></li> <li> <a class="" href="/explore/projects/topics/p2p?language=6&sort=latest_activity_desc">Makefile </a></li> <li> <a class="" href="/explore/projects/topics/p2p?language=13&sort=latest_activity_desc">Perl </a></li> <li> <a class="" href="/explore/projects/topics/p2p?language=14&sort=latest_activity_desc">PHP </a></li> <li> <a class="" href="/explore/projects/topics/p2p?language=8&sort=latest_activity_desc">Python </a></li> <li> <a class="" href="/explore/projects/topics/p2p?language=24&sort=latest_activity_desc">Ruby </a></li> <li> <a class="" href="/explore/projects/topics/p2p?language=81&sort=latest_activity_desc">Rust </a></li> <li> <a class="" href="/explore/projects/topics/p2p?language=225&sort=latest_activity_desc">SCSS </a></li> <li> <a class="" href="/explore/projects/topics/p2p?language=1&sort=latest_activity_desc">Shell </a></li> <li> <a class="" href="/explore/projects/topics/p2p?language=31&sort=latest_activity_desc">Smarty </a></li> <li> <a class="" href="/explore/projects/topics/p2p?language=7&sort=latest_activity_desc">TeX </a></li> <li> <a class="" href="/explore/projects/topics/p2p?language=224&sort=latest_activity_desc">Twig </a></li> <li> <a class="" href="/explore/projects/topics/p2p?language=36&sort=latest_activity_desc">TypeScript </a></li> <li> <a class="" href="/explore/projects/topics/p2p?language=25&sort=latest_activity_desc">Vue </a></li> </ul> </div> <input type="submit" name="commit" class="!gl-hidden" data-disable-with="" /> <div class="dropdown js-project-filter-dropdown-wrap gl-inline !gl-m-0"> <button class="dropdown-menu-toggle " id="sort-projects-dropdown" type="button" data-toggle="dropdown" data-display="static"><span class="dropdown-toggle-text ">Updated date</span><svg class="s16 dropdown-menu-toggle-icon" data-testid="chevron-down-icon"><use href="/assets/icons-8791a66659d025e0a4c801978c79a1fbd82db1d27d85f044a35728ea7cf0ae80.svg#chevron-down"></use></svg></button> <ul class="dropdown-menu dropdown-menu-right dropdown-menu-selectable"> <li class="dropdown-header"> Sort by </li> <li> <a class="is-active" href="/explore/projects/topics/p2p?sort=latest_activity_desc">Updated date </a></li> <li> <a href="/explore/projects/topics/p2p?sort=created_desc">Last created </a></li> <li> <a href="/explore/projects/topics/p2p?sort=name_asc">Name </a></li> <li> <a href="/explore/projects/topics/p2p?sort=name_desc">Name, descending </a></li> <li> <a href="/explore/projects/topics/p2p?sort=stars_desc">Most stars </a></li> <li> <a href="/explore/projects/topics/p2p?sort=latest_activity_asc">Oldest updated </a></li> <li> <a href="/explore/projects/topics/p2p?sort=created_asc">Oldest created </a></li> <li class="divider"></li> <li> <a class="is-active" href="/explore/projects/topics/p2p?sort=latest_activity_desc">Hide archived projects </a></li> <li> <a href="/explore/projects/topics/p2p?archived=true&sort=latest_activity_desc">Show archived projects </a></li> <li> <a href="/explore/projects/topics/p2p?archived=only&sort=latest_activity_desc">Show archived projects only </a></li> </ul> </div> </form> </div> <a title="Subscribe to the new projects feed" class="gl-button btn btn-icon btn-md btn-default gl-hidden sm:gl-inline-flex has-tooltip" href="/explore/projects/topics/p2p.atom"><svg class="s16 gl-icon gl-button-icon " data-testid="rss-icon"><use href="/assets/icons-8791a66659d025e0a4c801978c79a1fbd82db1d27d85f044a35728ea7cf0ae80.svg#rss"></use></svg> </a> </div> <div class="js-projects-list-holder" data-testid="projects-list"> <ul class="projects-list gl-text-secondary gl-w-full gl-my-2"> <li class="project-row"> <div class="project-cell gl-w-11"> <a class="project" href="/framasoft/peertube/PeerTube"><img srcset="/uploads/-/system/project/avatar/18854/icon2.png?width=48 1x, /uploads/-/system/project/avatar/18854/icon2.png?width=96 2x" alt="" class="gl-avatar gl-avatar-s48 !gl-rounded-base" height="48" width="48" loading="lazy" src="/uploads/-/system/project/avatar/18854/icon2.png?width=48" /> </a></div> <div class="project-cell"> <div class="project-details gl-pr-9 gl-sm-pr-0 gl-w-full gl-flex gl-flex-col" data-qa-project-name="PeerTube" data-testid="project-content"> <div class="gl-flex gl-items-baseline gl-flex-wrap"> <h2 class="gl-text-base gl-leading-20 gl-my-0 gl-wrap-anywhere"> <a class="gl-text-default hover:gl-text-default gl-mr-3 js-prefetch-document" title="PeerTube" href="/framasoft/peertube/PeerTube"><span class="namespace-name gl-font-normal"> Framasoft / PeerTube / </span> <span class="project-name">PeerTube</span> </a></h2> <span class="has-tooltip gl-mr-2" data-container="body" data-placement="top" title="Public - The project can be accessed without any authentication."><svg class="s16" data-testid="earth-icon"><use href="/assets/icons-8791a66659d025e0a4c801978c79a1fbd82db1d27d85f044a35728ea7cf0ae80.svg#earth"></use></svg></span> </div> <div class="description gl-hidden sm:gl-block gl-overflow-hidden gl-mr-3 gl-mt-2 gl-text-sm"> <p data-sourcepos="1:1-1:75" dir="auto">self-hosted, interconnected video streaming communities, back in your hands</p> </div> <div class="gl-mt-2"> <div class="gl-w-full gl-inline-flex gl-flex-wrap gl-text-base gl-font-normal gl-items-center -gl-mx-2 -gl-my-2" data-testid="project_topic_list"> <a class="gl-p-2" href="/explore/projects/topics/activitypub" itemprop="keywords"> <span class="gl-badge badge badge-pill badge-muted"><span class="gl-badge-content">activitypub</span></span> </a> <a class="gl-p-2" href="/explore/projects/topics/webtorrent" itemprop="keywords"> <span class="gl-badge badge badge-pill badge-muted"><span class="gl-badge-content">webtorrent</span></span> </a> <a class="gl-p-2" href="/explore/projects/topics/p2p" itemprop="keywords"> <span class="gl-badge badge badge-pill badge-muted"><span class="gl-badge-content">p2p</span></span> </a> <div class="text-nowrap gl-p-2" data-content="<span class="gl-inline-flex gl-flex-wrap"> <a class="gl-mr-3 gl-mb-3" href="/explore/projects/topics/social-network" itemprop="keywords"> <span class="gl-badge badge badge-pill badge-muted"><span class="gl-badge-content">social-network</span></span> </a> <a class="gl-mr-3 gl-mb-3" href="/explore/projects/topics/angular" itemprop="keywords"> <span class="gl-badge badge badge-pill badge-muted"><span class="gl-badge-content">angular</span></span> </a> <a class="gl-mr-3 gl-mb-3" href="/explore/projects/topics/nodejs" itemprop="keywords"> <span class="gl-badge badge badge-pill badge-muted"><span class="gl-badge-content">nodejs</span></span> </a> <a class="gl-mr-3 gl-mb-3" href="/explore/projects/topics/Webfinger" itemprop="keywords"> <span class="gl-badge badge badge-pill badge-muted"><span class="gl-badge-content">Webfinger</span></span> </a> <a class="gl-mr-3 gl-mb-3" href="/explore/projects/topics/federation" itemprop="keywords"> <span class="gl-badge badge badge-pill badge-muted"><span class="gl-badge-content">federation</span></span> </a> </span> " data-html="true" data-placement="top" data-title="More topics" data-toggle="popover" data-triggers="focus hover" role="button" tabindex="0"> + 5 more </div> </div> </div> <div class="gl-flex gl-items-center gl-mt-3 sm:!gl-hidden"> <div class="controls gl-flex gl-items-center"> <a class="gl-flex gl-items-center !gl-text-inherit icon-wrapper has-tooltip stars" title="Stars" data-container="body" data-placement="top" href="/framasoft/peertube/PeerTube/-/starrers"><svg class="s14 gl-mr-2" data-testid="star-o-icon"><use href="/assets/icons-8791a66659d025e0a4c801978c79a1fbd82db1d27d85f044a35728ea7cf0ae80.svg#star-o"></use></svg> 87 </a></div> <div class="updated-note gl-text-sm gl-ml-3 gl-sm-ml-0"> <span> Updated <time class="js-timeago" title="Nov 27, 2024 9:56am" datetime="2024-11-27T09:56:35Z" data-toggle="tooltip" data-placement="top" data-container="body">Nov 27, 2024</time> </span> </div> </div> </div> </div> <div class="project-cell project-controls gl-text-subtle !gl-hidden sm:!gl-table-cell" data-testid="project_controls"> <div class="controls gl-flex gl-items-center gl-mb-2 gl-gap-4 !gl-pr-0 !gl-justify-end"> <a class="gl-flex gl-items-center !gl-text-inherit icon-wrapper has-tooltip stars" title="Stars" data-container="body" data-placement="top" href="/framasoft/peertube/PeerTube/-/starrers"><svg class="s14 gl-mr-2" data-testid="star-o-icon"><use href="/assets/icons-8791a66659d025e0a4c801978c79a1fbd82db1d27d85f044a35728ea7cf0ae80.svg#star-o"></use></svg> 87 </a><a class="gl-flex gl-items-center !gl-text-inherit icon-wrapper has-tooltip forks" title="Forks" data-container="body" data-placement="top" href="/framasoft/peertube/PeerTube/-/forks"><svg class="s14 gl-mr-2" data-testid="fork-icon"><use href="/assets/icons-8791a66659d025e0a4c801978c79a1fbd82db1d27d85f044a35728ea7cf0ae80.svg#fork"></use></svg> 27 </a><a class="gl-flex gl-items-center !gl-text-inherit icon-wrapper has-tooltip merge-requests" title="Merge requests" data-container="body" data-placement="top" href="/framasoft/peertube/PeerTube/-/merge_requests"><svg class="s14 gl-mr-2" data-testid="merge-request-icon"><use href="/assets/icons-8791a66659d025e0a4c801978c79a1fbd82db1d27d85f044a35728ea7cf0ae80.svg#merge-request"></use></svg> 0 </a> </div> <div class="updated-note gl-text-sm gl-whitespace-nowrap gl-justify-end"> <span> Updated <time class="js-timeago" title="Nov 27, 2024 9:56am" datetime="2024-11-27T09:56:35Z" data-toggle="tooltip" data-placement="top" data-container="body">Nov 27, 2024</time> </span> </div> </div> </li> </ul> </div> </div> </main> </div> </div> </div> <script> //<![CDATA[ if ('loading' in HTMLImageElement.prototype) { document.querySelectorAll('img.lazy').forEach(img => { img.loading = 'lazy'; let imgUrl = img.dataset.src; // Only adding width + height for avatars for now if (imgUrl.indexOf('/avatar/') > -1 && imgUrl.indexOf('?') === -1) { const targetWidth = img.getAttribute('width') || img.width; imgUrl += `?width=${targetWidth}`; } img.src = imgUrl; img.removeAttribute('data-src'); img.classList.remove('lazy'); img.classList.add('js-lazy-loaded'); img.dataset.testid = 'js-lazy-loaded-content'; }); } //]]> </script> <script> //<![CDATA[ gl = window.gl || {}; gl.experiments = {}; //]]> </script> </body> </html>