{"id":13803422,"url":"https://github.com/pojntfx/multiplex","last_synced_at":"2026-02-06T11:08:05.699Z","repository":{"id":37599507,"uuid":"504903743","full_name":"pojntfx/multiplex","owner":"pojntfx","description":"Watch torrents with your friends.","archived":false,"fork":false,"pushed_at":"2025-03-14T00:50:59.000Z","size":13406,"stargazers_count":297,"open_issues_count":9,"forks_count":2,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-04-04T02:51:58.662Z","etag":null,"topics":["bittorent","gtk4","libadwaita","mpv","streaming","torrent"],"latest_commit_sha":null,"homepage":"https://flathub.org/apps/com.pojtinger.felicitas.Multiplex","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pojntfx.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-06-18T17:08:13.000Z","updated_at":"2025-03-31T11:51:21.000Z","dependencies_parsed_at":"2024-04-22T18:42:07.985Z","dependency_job_id":"9e2003c0-67a7-4ecc-bdec-cf430aad829b","html_url":"https://github.com/pojntfx/multiplex","commit_stats":{"total_commits":271,"total_committers":1,"mean_commits":271.0,"dds":0.0,"last_synced_commit":"8d56951537a0613139b589ae97bb14637259e606"},"previous_names":["pojntfx/multiplex","pojntfx/vintangle"],"tags_count":11,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pojntfx%2Fmultiplex","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pojntfx%2Fmultiplex/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pojntfx%2Fmultiplex/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pojntfx%2Fmultiplex/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pojntfx","download_url":"https://codeload.github.com/pojntfx/multiplex/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248646773,"owners_count":21139064,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bittorent","gtk4","libadwaita","mpv","streaming","torrent"],"created_at":"2024-08-04T01:00:31.898Z","updated_at":"2026-01-22T09:15:04.106Z","avatar_url":"https://github.com/pojntfx.png","language":"Go","readme":"\u003cimg alt=\"Project icon\" style=\"vertical-align: middle;\" src=\"./assets/meta/icon.svg\" width=\"128\" height=\"128\" align=\"left\"\u003e\n\n# Multiplex\n\nWatch torrents with your friends.\n\n\u003cbr/\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg alt=\"Screenshot of two peers synchronizing playback\" width=\"90%\" src=\"./assets/meta/screenshot-sync-playback.png\" /\u003e\n\u003c/p\u003e\n\n[![Flatpak CI](https://github.com/pojntfx/multiplex/actions/workflows/flatpak.yaml/badge.svg)](https://github.com/pojntfx/multiplex/actions/workflows/flatpak.yaml)\n![Go Version](https://img.shields.io/badge/go%20version-%3E=1.25-61CFDD.svg)\n[![Go Reference](https://pkg.go.dev/badge/github.com/pojntfx/multiplex.svg)](https://pkg.go.dev/github.com/pojntfx/multiplex)\n[![Matrix](https://img.shields.io/matrix/multiplex:matrix.org)](https://matrix.to/#/#multiplex:matrix.org?via=matrix.org)\n[![Weblate translation status](https://hosted.weblate.org/widget/multiplex/svg-badge.svg)](https://hosted.weblate.org/engage/multiplex/)\n\n## Overview\n\nMultiplex is an app to watch torrents together, providing an experience similar to Apple's [SharePlay](https://support.apple.com/en-us/HT212823) and Amazon's [Prime Video Watch Party](https://www.amazon.com/adlp/watchparty).\n\nIt enables you to:\n\n- **Stream any file directly** using a wide range of video and audio formats with the mpv video player\n- **Host online watch parties while preserving your privacy** by synchronizing video playback with friends without a central server using [weron](https://github.com/pojntfx/weron)\n- **Bypass internet restrictions** by optionally separating the [hTorrent HTTP to BitTorrent gateway](https://github.com/pojntfx/htorrent) and user interface into two separate components\n\n## Installation\n\nOn Linux, Multiplex is available on Flathub:\n\n\u003ca href='https://flathub.org/apps/com.pojtinger.felicitas.Multiplex'\u003e\n\u003cimg width='240' alt='Download on Flathub' src='https://flathub.org/api/badge?locale=en'/\u003e\n\u003c/a\u003e\n\nFor other platforms, see [contributing](#contributing); development builds are also available on [GitHub releases](https://github.com/pojntfx/multiplex/releases/tag/release-main).\n\n## Tutorial\n\n### 1. Start Streaming a Torrent\n\nTo get started, first find a [magnet link](https://en.wikipedia.org/wiki/Magnet_URI_scheme) that you want to stream. There are many sites on the internet to find them; check out [webtorrent.io/free-torrents](https://webtorrent.io/free-torrents) for some copyright-free torrents to try out. Once you've found one, launch Multiplex and enter the link:\n\n\u003cp align=\"center\"\u003e\n  \u003cimg alt=\"Starting the app\" src=\"./assets/meta/screenshot-launch-app.png\" /\u003e\n\u003c/p\u003e\n\n![Initial start screen with link entered](./assets/meta/screenshot-link-entered.png)\n\nNote that Multiplex will prompt you to install the [mpv media player](https://mpv.io/) if you don't already have it installed; to continue, please do so:\n\n\u003cp align=\"center\"\u003e\n  \u003cimg alt=\"Prompt to install mpv\" src=\"./assets/meta/screenshot-install-mpv.png\" /\u003e\n\u003c/p\u003e\n\nNext, select the file you want to stream; note that only media files are supported:\n\n![Media selection](./assets/meta/screenshot-media-selection.png)\n\nFinally, confirm that you have the right to stream the media you've selected. Note that many countries have copyright restrictions - in that case, please [take appropriate measures to protect yourself](https://sec.eff.org/topics/VPN):\n\n![Confirmation screen](./assets/meta/screenshot-confirmation.png)\n\nNote that you can also choose to stream without downloading! Provided that the underlying media file supports streaming playback (such as `.mkv` files), this allows you to start playing the media immediately, without having to wait for it to download completely:\n\n\u003cp align=\"center\"\u003e\n  \u003cimg alt=\"Option to stream without downloading\" src=\"./assets/meta/screenshot-stream-without-downloading.png\" /\u003e\n\u003c/p\u003e\n\nAfter you've given your consent, playback will start, and you can enjoy the media you've selected:\n\n![Playback screen](./assets/meta/screenshot-playback.png)\n\n## 2. Ask Friends to Join\n\nWhile consuming media on your own can be fun, doing so with friends or your SO is always better. I built Multiplex to enjoy media together with my partner, but due to COVID and the Atlantic ocean we're unable to do so in person all the time - this app intents to bridge that gap. To ask someone to join, click on the people button in the top right, and copy the [stream code](https://github.com/pojntfx/multiplex/wiki/Stream-Codes):\n\n![Join screen](./assets/meta/screenshot-join.png)\n\nThis stream code can now be entered by the person that wants to watch the media with you. There is no technical limit on how many people can join the session, so feel free to invite as many as you want!\n\n![Entering stream codes](./assets/meta/screenshot-enter-stream-code.png)\n\nAfter the person that wants to join has entered the stream code, they need to confirm that they too have the right to stream the media; depending on your country, please ask them to [take appropriate measures to protect themselves](https://sec.eff.org/topics/VPN):\n\n![Confirmation screen](./assets/meta/screenshot-confirmation.png)\n\nNote that is recommended not to choose the option to stream without downloading when streaming with multiple people; while it is supported and buffering is synchronized across peers, it requires a very good internet connection for all peers in order for it to work smoothly. Once all peers have joined, you can start playback and enjoy the media together:\n\n![Two peers synchronizing playback](./assets/meta/screenshot-sync-playback.png)\n\nAll play/pause events, seeking position etc. will be synchronized between all peers using [weron](https://github.com/pojntfx/weron), a peer-to-peer networking library.\n\n## 3. Increase Privacy and Security\n\nAs noted above, the legality of consuming media from torrents depends on the country you're in. In most countries, following [these guidelines on VPNs from the Electronic Frontier Foundation](https://sec.eff.org/topics/VPN) will suffice, but Multiplex provides an additional option: **Remoting**.\n\nMultiplex is built on [hTorrent](https://github.com/pojntfx/htorrent), an HTTP to BitTorrent gateway. Using remoting, it is possible to use a trusted server as a proxy to stream torrents from. This makes it possible to not only increase security for all peers without them having to take the appropriate measures themselves, but it can also increase the performance by caching the media on a single server with a good internet connection. To enable remoting, first [host a hTorrent gateway with basic authentication enabled](https://github.com/pojntfx/htorrent#1-start-a-gateway-with-htorrent-gateway) - be sure to set up TLS certificates to enable encryption, for example by using [Caddy](https://caddyserver.com/). Once you have a gateway set up, you can configure Multiplex to use in its preferences:\n\n![Remoting preferences](./assets/meta/screenshot-prefs-remoting.png)\n\nBe sure to ask the people who want to stream the media with you to also use the gateway.\n\nFor more preferences, see the [screenshots](#screenshots).\n\n🚀 **That's it!** We hope you enjoy using Multiplex.\n\n## Screenshots\n\nClick on an image to see a larger version.\n\n\u003ca display=\"inline\" href=\"./assets/meta/screenshot-initial.png?raw=true\"\u003e\n\u003cimg src=\"./assets/meta/screenshot-initial.png\" width=\"45%\" alt=\"Entering a magnet link or stream code\" title=\"Entering a magnet link or stream code\"\u003e\n\u003c/a\u003e\n\n\u003ca display=\"inline\" href=\"./assets/meta/screenshot-media-selection.png?raw=true\"\u003e\n\u003cimg src=\"./assets/meta/screenshot-media-selection.png\" width=\"45%\" alt=\"Media selection\" title=\"Media selection\"\u003e\n\u003c/a\u003e\n\n\u003ca display=\"inline\" href=\"./assets/meta/screenshot-confirmation.png?raw=true\"\u003e\n\u003cimg src=\"./assets/meta/screenshot-confirmation.png\" width=\"45%\" alt=\"Confirming playback\" title=\"Confirming playback\"\u003e\n\u003c/a\u003e\n\n\u003ca display=\"inline\" href=\"./assets/meta/screenshot-playback.png?raw=true\"\u003e\n\u003cimg src=\"./assets/meta/screenshot-playback.png\" width=\"45%\" alt=\"Playing media\" title=\"Playing media\"\u003e\n\u003c/a\u003e\n\n\u003ca display=\"inline\" href=\"./assets/meta/screenshot-audiotracks.png?raw=true\"\u003e\n\u003cimg src=\"./assets/meta/screenshot-audiotracks.png\" width=\"45%\" alt=\"Selecting audio tracks\" title=\"Selecting audio tracks\"\u003e\n\u003c/a\u003e\n\n\u003ca display=\"inline\" href=\"./assets/meta/screenshot-subtitles.png?raw=true\"\u003e\n\u003cimg src=\"./assets/meta/screenshot-subtitles.png\" width=\"45%\" alt=\"Selecting subtitles\" title=\"Selecting subtitles\"\u003e\n\u003c/a\u003e\n\n\u003ca display=\"inline\" href=\"./assets/meta/screenshot-join.png?raw=true\"\u003e\n\u003cimg src=\"./assets/meta/screenshot-join.png\" width=\"45%\" alt=\"Getting a stream code to join playback\" title=\"Getting a stream code to join playback\"\u003e\n\u003c/a\u003e\n\n\u003ca display=\"inline\" href=\"./assets/meta/screenshot-sync-playback.png?raw=true\"\u003e\n\u003cimg src=\"./assets/meta/screenshot-sync-playback.png\" width=\"45%\" alt=\"Two peers synchronizing media playback\" title=\"Two peers synchronizing media playback\"\u003e\n\u003c/a\u003e\n\n\u003ca display=\"inline\" href=\"./assets/meta/screenshot-prefs-playback.png?raw=true\"\u003e\n\u003cimg src=\"./assets/meta/screenshot-prefs-playback.png\" width=\"45%\" alt=\"Playback preferences\" title=\"Playback preferences\"\u003e\n\u003c/a\u003e\n\n\u003ca display=\"inline\" href=\"./assets/meta/screenshot-prefs-remoting.png?raw=true\"\u003e\n\u003cimg src=\"./assets/meta/screenshot-prefs-remoting.png\" width=\"45%\" alt=\"Remoting preferences\" title=\"Remoting preferences\"\u003e\n\u003c/a\u003e\n\n\u003ca display=\"inline\" href=\"./assets/meta/screenshot-prefs-sync.png?raw=true\"\u003e\n\u003cimg src=\"./assets/meta/screenshot-prefs-sync.png\" width=\"45%\" alt=\"Synchronization preferences\" title=\"Synchronization preferences\"\u003e\n\u003c/a\u003e\n\n## Acknowledgements\n\n- [Brage Fuglseth](https://bragefuglseth.dev/) contributed the icon.\n- [mpv](https://mpv.io/) provides the media player.\n- [jwijenbergh/puregotk](https://github.com/jwijenbergh/puregotk) provides the GTK4 and `libadwaita` bindings for Go.\n- [hTorrent](https://github.com/pojntfx/htorrent) provides the torrent gateway.\n- [weron](https://github.com/pojntfx/weron) provides the WebRTC library for playback synchronization.\n\n## Contributing\n\nTo contribute, please use the [GitHub flow](https://guides.github.com/introduction/flow/) and follow the [GNOME Code of Conduct](https://conduct.gnome.org/).\n\nTo build and start a development version of Multiplex locally, run the following:\n\n```shell\n$ git clone https://github.com/pojntfx/multiplex.git\n$ cd multiplex\n$ go generate ./...\n$ go run -ldflags=\"-X 'main.LocaleDir=${PWD}/po' -X 'main.SchemaDir=${PWD}/assets/resources'\" .\n```\n\nYou can also open the project in [GNOME Builder](https://flathub.org/apps/org.gnome.Builder) and run it by clicking the play button in the header bar. Note that GNOME Builder doesn't automatically download the sources specified in [go.mod.json](./go.mod.json), so you need to either run `go mod vendor` manually or copy the contents of [go.mod.json](./go.mod.json) into the `.modules[] | select(.name == \"multiplex\") | .sources` field of [com.pojtinger.felicitas.Multiplex.json](./com.pojtinger.felicitas.Multiplex.json).\n\nTo translate Multiplex, you can use [Weblate](https://hosted.weblate.org/engage/multiplex/). This is the current translation status:\n\n[![Weblate translation status graphs](https://hosted.weblate.org/widget/multiplex/multi-auto.svg)](https://hosted.weblate.org/engage/multiplex/)\n\n## License\n\nMultiplex (c) 2026 Felicitas Pojtinger and contributors\n\nSPDX-License-Identifier: AGPL-3.0\n","funding_links":[],"categories":["Video","Go","others"],"sub_categories":["Live Stream Viewers"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpojntfx%2Fmultiplex","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpojntfx%2Fmultiplex","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpojntfx%2Fmultiplex/lists"}