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.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

Android v1.0.22 February 25, 2026

  • In-app language picker with 18 tier 1 translations
  • Manual theme setting (light/dark/system) in Advanced Settings
  • Batch delete for faster torrent data removal
  • SAF: fix `exists()` for directories, duplicate directory race condition, harden dir creation and cache validation
  • Fix `removeTorrentWithData` skipping multi-file deletion and checking wrong root dir
  • Fix per-app language selector not applying locale changes
  • Fix JNI callbacks aborting on OOM (now throws JS exception)
  • Fix deprecated edge-to-edge APIs for Play Store compliance
  • Fix UPnP status display
  • Engine: add TTL for cached failed file opens
  • Stop torrent network immediately on removal
  • Move all hardcoded English strings to strings.xml for localization

Desktop App v0.1.28 February 25, 2026

  • Add batchDelete endpoint to io-daemon for faster torrent data removal
  • Stop torrent network immediately on removal
  • Add loading state to confirm dialog during torrent data removal
  • Add engine state, usage metrics, and daemon uptime to bug reports
  • Add check-for-update ID and reason headers to update checks
  • Add TTL for cached failed file opens
  • Fix Windows taskbar icon appearing as blank page
  • Fix removeTorrentWithData skipping multi-file deletion
  • Fix removeTorrentWithData checking wrong directory for torrent root
  • Fix system bridge showing Ready when no usable download location
  • Fix duplicate update dialogs
  • Clear tray speed stats when window closes without background mode

Android v1.0.21 February 23, 2026

  • Fix .torrent file opening crash (TransactionTooLargeException) by writing torrent bytes to temp file instead of passing base64 via intent extra
  • Fix activity flags: remove FLAG_ACTIVITY_CLEAR_TASK to avoid destroying running activity, add FLAG_GRANT_READ_URI_PERMISSION for content:// URIs
  • Show proper filenames from content providers instead of opaque document IDs
  • Instant pending torrent placeholder while engine starts (for both .torrent files and magnet links)

Desktop App v0.1.27 February 23, 2026

  • Fix Windows build: update icon path after legacy installer removal
  • Fix UPnP status display

Desktop App v0.1.26 February 23, 2026

  • Simplify desktop version reporting and improve update UX
  • Add profile removal to Settings > Profiles tab
  • Fix desktop app update verification timeout
  • Remove legacy System Bridge installers and link-handler scripts
  • Refactor daemon bridge into smaller modules with characterization tests

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