Profile
Back to NewsBack
GitHub Trending 5 min
Reader Mode
anmolkapil/plexo: Speed up downloads by combining multiple network connections in parallel

anmolkapil/plexo: Speed up downloads by combining multiple network connections in parallel

21 hours ago

Plexo icon

Plexo

Download files and torrents faster by combining all your internet connections.
Plexo combines Wi-Fi, Ethernet, mobile networks, and other available connections to boost your download speeds.

Download · Features · Troubleshooting · How it works · Build

Latest release Downloads CI status macOS, Windows and Linux MIT license

Buy me a coffee on Ko-fi

For anything private, email [email protected]

anmolkapil%2Fplexo | Trendshift anmolkapil%2Fplexo | Trendshift anmolkapil%2Fplexo | Trendshift

https://github.com/user-attachments/assets/e57728f4-fb63-441f-839c-174eef954b17

Features

Multi-network downloads

  • Combine multiple internet connections for faster downloads
  • Enable or disable networks during a download
  • Rename networks and customize their colors
  • Download file chunks in parallel across connections
  • Balance chunks across connections, with faster networks handling more of the download
  • Automatically adjust parallel streams to network, server and disk performance
  • Race slow chunks on idle connections to avoid a slow finish
  • View live speeds, time remaining and per-network progress

Browser integration

  • Capture downloads or send individual links to Plexo
  • Download files using your browser’s authenticated session
  • Exclude websites and skip small files

Download management

  • Download direct links, magnet links and .torrent files
  • Select torrent files before or during a download
  • Pause and resume supported downloads across restarts
  • Automatically reconnect downloads after sleep
  • Replace expired links without losing progress
  • Queue downloads and configure concurrent downloads
  • Pause, resume, retry or remove downloads in bulk

Bandwidth controls

  • Set global and per-network speed limits
  • Switch to Slow mode for calls and streaming
  • Set daily, weekly or monthly data allowances
  • Schedule downloads by time and day

Troubleshooting

If your problem isn't covered here, open an issue.

Windows says "Windows protected your PC"

The installer isn't code-signed yet. Click More info, then Run anyway.

A second network doesn't make downloads faster

Plexo adds speed only when each network reaches the internet through its own connection. Wi-Fi from your home router plus a phone tethered over USB works. Wi-Fi and Ethernet plugged into the same router doesn't: both share one connection, so the total stays the same.

VPN, virtual, and isolated adapters show up in Plexo too, so check each network's latency and speed there.

A network doesn't appear in Plexo

Plexo can use any connection your operating system shows as a network adapter.

  • iPhone on macOS: in System Settings › Network, open iPhone USB and turn off Disable unless needed
  • Android on macOS: install TetherKit, as described below
  • Phone on Windows: install your phone maker's driver if the phone doesn't appear in Network Settings

Windows uses only one network

If Windows turns Wi-Fi off when Ethernet is plugged in, open the Group Policy Editor (gpedit.msc), go to _Computer Configuration_ › _Administrative Templates_ › _Network_ › _Windows Connection Manager_, and set Minimize the number of simultaneous connections to the Internet or a Windows domain to Disabled.

If both stay connected but one sits idle in Plexo, Windows may be sending its traffic out the other network. Add your setup to #65.

A network stays idle after reconnecting a phone

Pause the download, then resume it.

Downloads to a hard drive are slow

Leave Streams on Auto in New download. Auto lowers the streams when the disk can't keep up; a fixed number doesn't.

Use an Android phone over USB on macOS

macOS has no driver for RNDIS, the protocol Android's USB tethering uses, so the phone charges but no network adapter appears. TetherKit is an open-source app that adds one without a kernel extension.

  1. Install TetherKit: brew install XiaoMiku01/tap/tetherkit
  2. Connect your phone over USB.
  3. On the phone, open Settings › Network & internet › Hotspot & tethering and turn on USB tethering.
  4. Open TetherKit. On first run, approve its helper with your password.
  5. Pick your phone, click Connect, then apply the IP settings.
  6. Open Plexo. The phone appears in the networks list.
Thanks to @XiaoMiku01 for building and open-sourcing TetherKit.

How it works

Plexo downloads different parts of the same file through each internet connection you select, then assembles them on disk.

For direct downloads, Plexo uses HTTP range requests to fetch chunks in parallel. Streams take new chunks from a shared queue as they finish, so faster connections handle more of the file. Plexo adjusts stream counts to network, server and disk performance. Near the end, idle streams can race slow chunks; the first to finish wins. Servers without range support use a single stream.

For torrents, Plexo distributes peer connections across your selected networks. New peers connect through the network with the fewest peers.

Each network needs its own internet connection to add bandwidth. Plexo combines connections for its own downloads and requires no VPN or virtual network adapter.

Build from source

You need Node.js 22.13 or later and npm 9 or later.

git clone https://github.com/anmolkapil/plexo.git
cd plexo
npm ci
npm run dev

| Command | What it does | | ------------------------- | ------------------------------------------------------------- | | npm run test:e2e:smoke | Playwright smoke tests | | npm run test:e2e | The full end-to-end suite | | npm run build:mac | Creates macOS packages in dist/ | | npm run build:win | Creates the Windows installer in dist/ | | npm run build:unpack | Creates an unpacked app for the current platform in dist/ | | npm run build:linux | Creates AppImage, .deb and .rpm packages in dist/ | | npm run build:extension | Builds the Chrome and Firefox extensions in extension/dist/ |

Run platform packaging commands on the corresponding operating system. Local builds are unsigned unless signing credentials are configured. CONTRIBUTING.md covers packaging requirements, extension setup and testing.

Contributing

Start with open issues, or contribute a reproducible bug report, a fix, network compatibility testing or documentation improvements.

See CONTRIBUTING.md for setup, required checks and pull request guidance. For a substantial feature, open an issue to discuss the approach before implementing it.

Acknowledgements

Special thanks to Dhananjay Bhosale for code signing and notarizing the macOS app.

License

MIT, copyright 2026 Anmol Kapil.

Chat with me