Retorrent (React + Torrent) is a modern web UI and middleware layer that replaces the default Transmission interface.
It provides a clean, responsive frontend with account-based authentication, role management, and notification features — designed for self-hosting environments like NAS or home servers.
- 🔑 Authentication: JWT-based login with multi-user support and role-based access
- 🖥 Modern UI: React-based, responsive torrent dashboard
- 🔔 Notifications: Email and PWA Webpush for torrent events
- 🔌 Multi-client support: Transmission first, qBittorrent (next)
(Coming soon – demo images of the dashboard UI)
- Node.js 20+
- Go
- Transmission RPC or qBittorrent Web API available
Clone and run locally
git clone https://github.com/hojinzs/retorrent.git
cd retorrent
npm install
npm run devRun With Docker
- Make sure Docker is installed.
- Build and run the container:
docker build -t retorrent .
docker run -p 3000:3000 --env-file .env retorrentDocker Compose
- In the directory with
docker-compose.yml, run:
docker-compose up --buildRefer to the docker-compose file for environment variables and configuration.
├── server/ # Go backend & Transmission integration
│ ├── internal/
│ ├── migrations/
│ └── main.go
├── web/ # React frontend
│ ├── src/
│ ├── public/
│ └── package.json
├── docker-compose.yml
├── Dockerfile
└── README.md
- Frontend: React, TypeScript, Vite
- Backend: Go, Transmission RPC integration
- Database: SQLite (PocketBase)
- Authentication: JWT-based
- DevOps: Docker, Docker Compose
- JWT authentication
- Torrent dashboard (React)
- Role management (admin / user)
- Email notifications
- PWA Webpush
See the Issues for more.
Contributions are welcome!
- Fork the repo
- Create a feature branch (git checkout -b feature/your-feature)
- Commit changes (git commit -m 'Add new feature')
- Push to branch (git push origin feature/your-feature)
- Open a Pull Request
Please check the CONTRIBUTING.md (coming soon) for details.
This project is licensed under the MIT License.
- Issues & feature requests: GitHub Issues
- Maintainer: @hojinzs