Skip to content

SynoSoftware/TinyTorrent

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

64 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TinyTorrent

A modern BitTorrent client. No frameworks needed. ~2–3 MB native daemon. Fully capable.

License: MIT C++ TypeScript React UI Motion Build UI Runtime Engine Architecture Binary Size

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.


🧠 Motivation

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.


UI preview

💎 Key Features

Browser-Native HUD (frontend/)

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

Backend-Agnostic Architecture

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.

Interaction Model

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

🏗 Repository Structure


TinyTorrent/
├── frontend/ # React 19 HUD, Vite build, Tailwind v4, HeroUI, Framer Motion
├── backend/ # C/C++ tray daemon + torrent engine
└── README.md # You are here

Frontend Tech

  • React 19
  • TypeScript
  • TailwindCSS v4
  • HeroUI
  • Framer Motion
  • Vite

Backend Tech

  • C / C++17 (no exceptions, no RTTI)
  • libtransmission
  • Mongoose (embedded web server)
  • Static asset bundling for optional embedded UI in the future

🚀 Getting Started

Prerequisites

  • Node.js 20+
  • Development: You can run the frontend against a standard transmission-daemon (port 9091).

Development (frontend)

cd frontend
npm install
npm run dev

Backend

Currently uses a regular Transmission daemon during development. The TinyTorrent native daemon will replace it.


🎨 Design Philosophy

Defined in AGENTS.md:

  1. Speed
  2. Density
  3. One Responsibility
  4. Exact Typing
  5. No entropy in the codebase

🤝 Contributing

Pull requests must follow the Visual Excellence Directive:

  • Modern and consistent components
  • Framer Motion for structural transitions
  • Strict TypeScript
  • No regressions in performance

Backend Note

The final TinyTorrent backend will be a minimal, modified Transmission daemon running as a tray application and serving the UI only when requested.


UI preview

TinyTorrentSimple. Fast. Beautiful. On-Demand.

Releases

No releases published

Packages

No packages published

Languages