A modern BitTorrent client. No frameworks needed. ~2–3 MB native daemon. Fully capable.
Status: Work in progress.
Frontend runs against a standard transmission-daemon. Bugs exist; some features are unfinished and regressions may occur.
Custom single-binary backend is under active development.
I grew up with torrent clients that were ~160 KB — small, fast, and engineered with real hardware limits in mind. That era is gone. Today even a simple tray application wastes memory it has no reason to touch, and I’m not fine with that. So I decided to do something about it.
My first idea was a pure C, bare-metal Windows client — no external libraries, just raw WinAPI. The UI was unacceptable, so I abandoned that approach. Later I realized that every modern system already ships with a fully optimized, GPU-accelerated rendering engine: the web browser. Used on demand, it delivers better visuals, less UI code, and zero idle UI memory.
This project exists to bring back what made the classics great: a lean core, a tiny binary, and a UI that feels modern — without abandoning engineering discipline.
This is how TinyTorrent was born.
Instead of dragging UI toolkits into the binary, TinyTorrent is split cleanly:
-
Native Tray Daemon:
A minimal C/C++ executable responsible for lifecycle, tray controls (pause/resume/open GUI), and the torrent engine. Always running. No UI. -
On-Demand GUI:
A browser-based UI launched only when requested (Chrome, Edge, Firefox, etc.).
When closed, no UI process exists.
Zero GUI memory when unused.
Exactly how it should be.
- Zero GUI memory when unused — the interface is launched on demand in an external browser.
- Glass Monolith UI — Tailwind v4 + HeroUI + blur + depth for a stealth aesthetic.
- Workspace Components
- File Explorer Tree: Nested, accordion-style file selection with priority toggling.
- Visualizers: Real-time speed graphs, Disk Space Gauge, and peer maps.
- Kinetic Motion — Framer Motion used for structural transitions, not decoration.
TinyTorrent is not tied to a single engine.
- Strict RPC boundary: The UI talks to a well-defined API.
- Adapter Pattern:
- Transmission Adapter: Uses standard Transmission RPC.
- Libtorrent Adapter: Planned C++ wrapper around
libtorrent-rasterbar.
- Queue Management: Reorder torrents, move to top/bottom, drag-and-drop.
- Deep Interaction: Shift-click ranges, Ctrl-click toggles, full keyboard navigation.
- Exact Typing: No
any. RPC schema is strictly typed and normalized.
TinyTorrent/
├── frontend/ # React 19 HUD, Vite build, Tailwind v4, HeroUI, Framer Motion
├── backend/ # C/C++ tray daemon + torrent engine
└── README.md # You are here
- React 19
- TypeScript
- TailwindCSS v4
- HeroUI
- Framer Motion
- Vite
- C / C++17 (no exceptions, no RTTI)
- libtransmission
- Mongoose (embedded web server)
- Static asset bundling for optional embedded UI in the future
- Node.js 20+
- Development: You can run the frontend against a standard
transmission-daemon(port 9091).
cd frontend
npm install
npm run devCurrently uses a regular Transmission daemon during development. The TinyTorrent native daemon will replace it.
Defined in AGENTS.md:
- Speed
- Density
- One Responsibility
- Exact Typing
- No entropy in the codebase
Pull requests must follow the Visual Excellence Directive:
- Modern and consistent components
- Framer Motion for structural transitions
- Strict TypeScript
- No regressions in performance
The final TinyTorrent backend will be a minimal, modified Transmission daemon running as a tray application and serving the UI only when requested.
TinyTorrent — Simple. Fast. Beautiful. On-Demand.

