<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Dorin</title>
    <description>The latest articles on DEV Community by Dorin (@doring).</description>
    <link>https://dev.to/doring</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4113925%2F1f8aa445-2b13-46da-9c56-91d32fd06161.png</url>
      <title>DEV Community: Dorin</title>
      <link>https://dev.to/doring</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/doring"/>
    <language>en</language>
    <item>
      <title>A torrent client that works on your iPhone</title>
      <dc:creator>Dorin</dc:creator>
      <pubDate>Mon, 07 Sep 2026 12:40:31 +0000</pubDate>
      <link>https://dev.to/doring/a-torrent-client-that-works-on-your-iphone-48h8</link>
      <guid>https://dev.to/doring/a-torrent-client-that-works-on-your-iphone-48h8</guid>
      <description>&lt;h1&gt;
  
  
  A torrent client that works on your iPhone
&lt;/h1&gt;

&lt;p&gt;I wanted to download a film to my iPad on a train and watch it. That turned out to be surprisingly hard.&lt;/p&gt;

&lt;p&gt;Every torrent app worth using is desktop software. On iOS there's essentially nothing — Apple doesn't allow it, so the App Store options are either gone, crippled, or asking for a subscription to a "cloud downloader" that keeps a copy of everything you touch on somebody else's server.&lt;/p&gt;

&lt;p&gt;So I built one that just runs in a browser tab. No install, no account, no App Store.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It's at &lt;a href="https://wasmtorrent.pages.dev" rel="noopener noreferrer"&gt;wasmtorrent.pages.dev&lt;/a&gt;&lt;/strong&gt; if you'd rather poke at it than read about it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;p&gt;Open the page, paste a magnet link, and it downloads. The whole client is compiled to WebAssembly and runs inside your browser — there's no server of mine involved at any point.&lt;/p&gt;

&lt;p&gt;A few things that make it actually usable rather than a demo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Stream while it downloads.&lt;/strong&gt; You can start watching before it finishes, and seek around — it fetches the parts it needs. Files whose codecs your browser refuses fall back to a software player.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Save to your device.&lt;/strong&gt; On iPhone and iPad that means straight into the Files app, in Downloads.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Install it to your home screen.&lt;/strong&gt; It's a progressive web app, so it gets an icon and its own window, and the interface works offline.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It tells you when downloads finish&lt;/strong&gt;, with a deliberately vague message — "one of your downloads has finished", never the name. Notifications land on lock screens where anyone can read them.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The awkward part, explained honestly
&lt;/h2&gt;

&lt;p&gt;Here's the thing nobody tells you about torrents in a browser: &lt;strong&gt;a browser can only make WebRTC connections.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ordinary torrents use TCP peers. A web page physically cannot dial those — it's not a limitation of my code, it's what a browser is. So most magnet links you find will sit at 0% forever in &lt;em&gt;any&lt;/em&gt; in-browser client, including this one. That's why they all feel broken.&lt;/p&gt;

&lt;p&gt;The fix is a small companion app called the bridge. You run it on a computer you already leave on — a Mac, a PC, a Linux box, a home server. It joins the swarm properly, the way a normal torrent client does, and then hands the data to your browser over your own network.&lt;/p&gt;

&lt;p&gt;Setup is: install it, and scan the QR code it shows you. Your phone talks to your computer and nothing else.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why there's no account
&lt;/h2&gt;

&lt;p&gt;There's no sign-up because there's nothing to sign up to. No backend, no database, no analytics on what you add. I don't have a server that could keep a history of your downloads, which is a stronger guarantee than a privacy policy promising not to.&lt;/p&gt;

&lt;p&gt;When you use the bridge, your own machine sees what it fetches — that's unavoidable, since it's the thing doing the downloading. But it's your machine.&lt;/p&gt;

&lt;p&gt;Two honest caveats: torrents are public by nature, so peers see your IP (or your bridge's), and a VPN is still worth having. And finding peers goes through public trackers, which see what you're looking for. Nothing about running in a browser changes either of those.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://wasmtorrent.pages.dev" rel="noopener noreferrer"&gt;wasmtorrent.pages.dev&lt;/a&gt; — free, nothing to install to try it.&lt;/p&gt;

&lt;p&gt;If you only want to see whether it works, open it on a phone and add a magnet link. If it says &lt;strong&gt;Needs bridge&lt;/strong&gt;, that's the WebRTC problem above, and the footer has the bridge download for macOS, Windows and Linux.&lt;/p&gt;

&lt;p&gt;It's a personal project and rough in places — the certificate step when pairing an iPhone is clumsier than I'd like. If you try it and something breaks, I'd genuinely rather hear that than a compliment.&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>webdev</category>
      <category>webassembly</category>
      <category>privacy</category>
    </item>
  </channel>
</rss>
