https://github.com/lodev09/neotorrent
Simple native torrent client for macOS. Inspired by WebTorrent desktop.
https://github.com/lodev09/neotorrent
Last synced: 29 days ago
JSON representation
Simple native torrent client for macOS. Inspired by WebTorrent desktop.
- Host: GitHub
- URL: https://github.com/lodev09/neotorrent
- Owner: lodev09
- License: mit
- Created: 2026-05-21T13:45:12.000Z (2 months ago)
- Default Branch: main
- Last Pushed: 2026-05-21T21:59:50.000Z (2 months ago)
- Last Synced: 2026-05-22T03:10:44.303Z (about 2 months ago)
- Language: Rust
- Size: 91.8 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# NeoTorrent
Native macOS torrent client. SwiftUI on top of a Rust core. Apple Silicon only.
Built as a replacement for WebTorrent Desktop — no Electron, no Node, native
everything.
## Features
- Add torrents via magnet URI, `.torrent` file, drag-and-drop, or paste
- Card-based torrent list with inline file picker and progress
- Duplicate magnet detection (no accidental re-adds)
- Pause / resume / remove (with optional file deletion)
- Per-file selection (skip files you don't want)
- Resumes torrents on app launch
- Session-wide bandwidth limits (live-updatable)
- Customizable download folder
- macOS default handler for `magnet:` links and `.torrent` files
- Completion notifications + action/chime sound effects (toggleable)
## Architecture
```
SwiftUI app ──UniFFI──> Rust core
├── librqbit (TCP/uTP/HTTP/UDP trackers, DHT,
│ piece picker, disk I/O, streaming
│ HTTP API)
└── neotorrent-core/{tracker,peer,wire,extension,
engine} (WSS tracker + WebRTC peer transport
+ BT wire protocol + ut_metadata — built from
scratch, currently parallel to librqbit)
```
- `crates/neotorrent-core` — engine, librqbit wrapper, custom WebRTC stack
- `crates/neotorrent-ffi` — UniFFI exports (`NeoTorrentSession`, `parseMagnet`, …)
- `apps/NeoTorrent` — SwiftUI app (XcodeGen-managed project)
The WebRTC modules (`peer.rs`, `tracker.rs`, `wire.rs`, `extension.rs`,
`engine.rs`) are end-to-end working against real WebTorrent peers but not yet
wired into the librqbit-backed download path. They're kept in tree for a future
hybrid client that also speaks WebRTC.
## Contributing
Build, layout, tests, and release workflow are documented in
[CONTRIBUTING.md](CONTRIBUTING.md).
## Built on
- [librqbit](https://github.com/ikatson/rqbit) — pure-Rust BitTorrent client
- [webrtc-rs](https://github.com/webrtc-rs/webrtc) — pure-Rust WebRTC
- [UniFFI](https://github.com/mozilla/uniffi-rs) — Rust ↔ Swift bridge
## Inspiration
Heavily inspired by [WebTorrent Desktop](https://github.com/webtorrent/webtorrent-desktop)
— same drag-a-magnet-and-go UX, but rebuilt as a native macOS app. Goals that
drove the rewrite:
- Drop Electron/Node — ship a single Apple-Silicon binary instead of a 200 MB
Chromium bundle
- Use the modern Rust BitTorrent stack (`librqbit`) for the wire protocol
- Keep WebTorrent-flavored WebRTC peer support on the roadmap (the
`neotorrent-core` crates already speak it end-to-end against real WebTorrent
peers)
## License
[MIT](LICENSE)
---
Made with ❤️ by [@lodev09](http://linkedin.com/in/lodev09/)