JSTorrent

The torrent client that runs on any device

One engine, every platform. Fast, free, and open source.

Download

About JSTorrent

JSTorrent is a BitTorrent client that downloads torrent files with ease. It runs as a standalone desktop app on Windows, Mac, and Linux, as a native Android app, and as a Chrome extension paired with a companion app on ChromeOS. It also works on ChromeOS Flex, Android phones, and in any Chromium-based browser. See all supported platforms →

Originally built for ChromeOS over 10 years ago, JSTorrent has been rebuilt from the ground up as a multi-platform, open source project. All builds are produced by GitHub Actions CI and are code-signed — learn more.

4.4 (3,800+ ratings) on Chrome Web Store

What users say

"It works great, it's easy to use."
"Essential app"
"Greatest app ever, it easily doubles the functionality of my chromebook. I don't remember it cost any money when i got it, but i would definitely pay for it. Just as good/better than a full desktop torrent client!"
"I know not everyone has a chromebook and it is nice to be able to find a program that simply works, THANK YOU."

Recent Changes

Extension v1.1.1 March 14, 2026

  • Video player not releasing file lock on close
  • Stale streaming suppressions persisting after file lock removal, preventing pieces from resuming download
  • Internet Archive search plugin now filters results to Creative Commons and public domain licenses only

Extension v1.1.0 March 14, 2026

  • Video streaming: right-click "Watch" on video files to stream directly from the torrent swarm with MKV keyframe-aware seeking and piece timeline visualization
  • Web seed support (BEP 17/19): concurrent HTTP downloads from web seeds with keep-alive, rate limiting, redirect handling, and health-based source selection
  • LAN media sharing: generate shareable URLs for completed files accessible by other devices on the local network (desktop only, capability-gated)
  • Search plugins infrastructure (behind feature flag): sandboxed plugin install and execution, Internet Archive sample plugin, search results with torrent actions
  • Configurable active piece memory limit
  • IO daemon and native host contract version advertising and conformance testing
  • Toast notification system for recheck results
  • Magnet URI select-only file indices (pre-select specific files before metadata)
  • Companion write backpressure deadlock: downloads stalling after 32MB of cumulative writes on ChromeOS
  • ChromeOS download root state sync not reflecting current roots
  • Extension takeover from desktop app failing
  • File progress not updating after torrent recheck
  • Data check using wrong batch size
  • Zero upload slots causing incorrect choking behavior
  • Streaming file lock preemption and cleanup on file completion
  • Boundary .parts file materialization on session restore
  • Rewrote .parts partial file storage to use fixed header slots (libtorrent partfile compatibility)
  • Prefer UTF-8 torrent metadata and file paths over legacy encodings
  • Streaming-aware peer selection: prioritize peers with pieces needed for active video playback
  • Moved ChromeOS capability discovery from HTTP polling to control WebSocket channel
  • Decoupled popup video player from engine bundle for faster loading
  • Recommended backend versions: Tauri App v0.2.0, Android v1.0.23

Android v1.0.23 March 14, 2026

  • Media streaming player (Media3) with subtitle support, fullscreen swipe, and LAN sharing
  • Torrent search with plugin system and WebView sandbox
  • Web seed support (BEP 17/19) with keep-alive, concurrency, and redirect handling
  • Configurable active piece memory limit
  • Companion mode power management to prevent ARCVM Doze stalls
  • Default gateway detection for port mapping (NAT-PMP/PCP)
  • Data Saver detection with user warning banner
  • Fix companion write backpressure deadlock: downloads stalled after 32MB of writes due to cumulative byte counter used for backpressure instead of in-flight bytes
  • Fix OOM crash on Chromebox (Android 13, SDK 33)
  • Use positioned SAF fd I/O for reduced write copy overhead
  • Fix player pause behavior and fullscreen overlay controls
  • Fix file priority await and .parts materialization on file unskip
  • Prefer UTF-8 torrent metadata and paths
  • Add IO daemon conformance gate with contract versioning
  • Harden Android memory crash paths and add instrumentation

Desktop App v0.2.1 March 14, 2026

  • Fix video player not releasing file lock on close, which could block other files from downloading

Desktop App v0.2.0 March 14, 2026

  • Add video streaming: right-click Watch on video files for in-app playback with MKV keyframe seeking
  • Add desktop video fullscreen support (double-click to toggle)
  • Add LAN media share server for streaming to other devices on the network
  • Add web seed support: concurrent transfers, keep-alive connections, redirect handling, rate limiting
  • Add search plugin system with installable Internet Archive plugin
  • Add toast notification system (recheck results, etc.)
  • Port media streaming session contract to Rust io-daemon
  • Advertise IO daemon contract versions for conformance testing
  • Return 404 for missing daemon deletes instead of silently succeeding
  • Fix background update check spawning Tauri app window
  • Fix Windows taskbar icon and Linux window icon
  • Fix zero upload slots choking behavior
  • Fix file progress display after torrent recheck
  • Fix extension takeover from desktop app
  • Prefer UTF-8 torrent metadata and paths
  • Support magnet select-only file indices
  • Add configurable active piece memory limit
  • Add diagnostic logging for magnet deep link routing
  • Fix io-daemon spurious shutdown on transient parent process check failure (e.g., after sleep/wake)

Extension v1.0.6 March 3, 2026

  • Crostini mode UI for ChromeOS without ARC (io-daemon in Linux container)
  • NAT-PMP (RFC 6886) and PCP (RFC 6887) port mapping clients
  • Default gateway detection across all backends
  • Legacy migration snooze support and aggressive nag system
  • Legacy app/extension IDs in externally_connectable for bidirectional detection
  • Torrents-added usage metric tracking
  • Tauri 10s startup delay from unnecessary backend-ready synchronization
  • Tauri startup race: wait for backend-ready event before IPC
  • TauriChannel handshake retry for setup race condition
  • Stale profileId causing permanent "Connection Lost" on desktop
  • Native host and io-daemon lingering when no extension UI is open
  • Native port cleanup on failed handshake
  • Version check for Crostini: treat as desktop backend, not Android
  • Tauri desktop app plugin-opener resolution and daemon handshake
  • Report Bug button routes to feedback.html instead of GitHub
  • Replaced new.jstorrent.com URLs with jstorrent.com
  • Removed chromeos-testbed/ and extension/tools/ (moved to standalone repo)
  • Renamed upnp/ to port-mapping/ for NAT-PMP and PCP support

Desktop App v0.1.31 March 3, 2026

  • Fix 10-second startup delay by removing unnecessary backend-ready synchronization
  • Fix startup race condition: wait for backend-ready event before IPC
  • Add retry logic to TauriChannel handshake for setup race condition
  • Add Crostini mode UI and ensure download root exists
  • Fix version check for Crostini: treat as desktop backend, not Android
  • Fix Crostini standalone daemon /status response for extension compatibility

Desktop App v0.1.30 March 3, 2026

  • Add auto-updater hardening tests and CI gates
  • Fix plugin-opener resolution and daemon handshake
  • Fix Crostini standalone daemon serializing snake_case keys for /status
  • Route Report Bug button to feedback.html instead of GitHub

Desktop App v0.1.29 March 3, 2026

  • Publish standalone io-daemon Linux binaries to GitHub Releases for ChromeOS Crostini
  • Add Crostini install script (`curl -fsSL https://jstorrent.com/install-crostini.sh | bash`)
  • Add default gateway detection across all backends (port-mapping)
  • Fix stale profileId causing permanent "Connection Lost" on desktop
  • Fix app not fully quitting on window close when "Run in Background" is off

Extension v1.0.5 February 25, 2026

  • Batch file deletion for faster torrent data removal
  • Loading state in confirmation dialog during torrent data removal
  • Profile removal in Settings > Profiles tab
  • Engine state, usage metrics, and daemon uptime in bug reports
  • Periodic desktop version refresh from rpc-info.json
  • Torrent data deletion skipping multi-file torrents
  • Torrent data deletion checking wrong root directory
  • System bridge showing Ready when no usable download location exists
  • UDP hostname resolution failing on IPv4-bound sockets
  • Duplicate update dialogs in Tauri app
  • UPnP status display
  • Desktop app update verification timeout
  • Stop torrent network immediately on removal (faster cleanup)
  • Simplified desktop version reporting and update UX
  • Minimum backend versions: Tauri App v0.1.28, Android v1.0.22
  • Refactored daemon bridge into smaller, testable modules

Help / FAQ

Bug reports and feature requests are welcome on the JSTorrent GitHub page.

What platforms are supported?

JSTorrent runs on Windows, Mac, Linux, ChromeOS, and Android.

  • Desktop (Windows/Mac/Linux): Install the standalone desktop app, or use the Chrome extension paired with the desktop app.
  • ChromeOS: Install the Android app from the Play Store, or use the Chrome extension paired with the Android companion app.
  • Android: Install the Android app from the Play Store. It works as a standalone torrent client.
Do I need the Chrome extension?

No. The desktop app and Android app both work standalone without the extension. The extension is optional and provides browser integration (intercepting magnet links, right-click to add torrents, etc.).

How do I add a torrent?

Find a torrent file or magnet link on the web, then either:

  • Click a magnet link (JSTorrent will handle it automatically)
  • Download a .torrent file and open it with JSTorrent
  • Paste a magnet link or torrent URL into the app
Where do the files download to?

On desktop, files download to your configured download folder (defaults to your Downloads directory). On Android, you choose a storage location when you first add a torrent.

My torrent isn't downloading!

Check that you have peers available for the torrent. Some torrents have very few seeders and may be slow or unavailable.

If you still have issues, please report them on the GitHub issue tracker.

Is JSTorrent safe to install?

Yes. JSTorrent is open source and every release is built automatically by GitHub Actions CI — no binaries are built on a developer’s machine.

  • macOS: Signed with an Apple Developer ID certificate and notarized by Apple, so Gatekeeper trusts it on first launch.
  • Windows: Code-signed via Azure Trusted Signing, so SmartScreen recognizes the publisher.
  • Android: Signed with a Play Store upload key and distributed through Google Play.
  • Chrome extension: Reviewed and distributed through the Chrome Web Store.
  • Auto-updates: Desktop updates are signature-verified before installation.

You can audit the full build pipeline in the CI workflows and verify that release artifacts match the tagged source code.

Does this work with private trackers?

Yes. Download the .torrent file from your tracker's website first, then load it into JSTorrent. Many trackers employ a whitelist for allowed clients. Contact your tracker's administrators if JSTorrent is not whitelisted.

How does ChromeOS work?

On ChromeOS, you can use the Android app from the Play Store as a standalone torrent client — no extension needed.

Alternatively, install the Chrome extension alongside the Android companion app. The extension provides the UI, while the Android app handles file I/O and networking. A one-time pairing step connects them, and after that the extension automatically connects whenever you open it.

My Chromebook doesn't have the Play Store. Can I still use JSTorrent?

Yes! Some Chromebooks (especially those running ChromeOS Flex) don't have access to the Google Play Store. You can use JSTorrent by installing the Chrome extension paired with a lightweight background daemon running in Linux (Crostini).

  1. Enable Linux on your Chromebook: go to Chrome Settings → About ChromeOS → Linux development environment and follow the prompts to set it up.
  2. Open the Linux terminal and run:
    curl -fsSL https://jstorrent.com/install-crostini.sh | bash
  3. Install the Chrome extension from the Chrome Web Store. It will automatically connect to the daemon.

Files download to your Linux ~/Downloads folder by default. To uninstall the daemon later, run the same script with --uninstall.

Links