Transmission Manager

A lightweight, modern, single-binary web application for viewing and managing torrents from a [Transmission](https://transmissionbt.com/) RPC daemon. Transmission Manager serves a fast, clean, dark-mode Single Page Application (SPA) and proxies Transmission RPC calls through a minimal Go backend—all contained within a single executable. --- ## Features - **Single Static Binary**: All frontend assets (`index.html`, `app.js`, `styles.css`) are embedded directly into the Go binary using `embed`. Zero runtime asset dependencies. - **Modern Dark-Mode UI**: Built with vanilla HTML5, CSS3 (using CSS variables), and JavaScript. Responsive, compact layout designed for both desktop and mobile screens. - **Live Polling & In-Place Updates**: Keyed DOM reconciliation updates existing torrent cards in place without screen flickering or scroll jumping. Selectable refresh interval (1s, 3s, 5s, 10s). - **Rich Sorting & Filtering**: - Filter torrents instantly by name. - Sort by **Status**, **Name**, **Progress**, **Ratio**, **Size**, **Speed**, or **Availability**. - **Interactive Controls**: Pause or resume individual torrents directly from the web interface. - **Robust Transmission RPC Support**: - Automatically handles Transmission `409 Conflict` session ID (`X-Transmission-Session-Id`) handshakes. - Supports optional HTTP Basic Authentication. --- ## Configuration Transmission Manager is configured entirely via environment variables: | Variable | Required | Description | | :--- | :---: | :--- | | `TRANSMISSION_URL` | **Yes** | Absolute HTTP or HTTPS RPC endpoint URL of your Transmission instance. | | `TRANSMISSION_RPC_USERNAME` | No | Basic Authentication username for Transmission RPC. | | `TRANSMISSION_RPC_PASSWORD` | No | Basic Authentication password for Transmission RPC. | --- ## Quick Start ### Using Docker Run the container directly: ```bash docker run -d \ --name transmission-manager \ -p 8080:8080 \ -e TRANSMISSION_URL=http://192.168.1.100:9091/transmission/rpc \ -e TRANSMISSION_RPC_USERNAME=admin \ -e TRANSMISSION_RPC_PASSWORD=secret \ transmission-manager:latest ``` ### Using Docker Compose Create a `docker-compose.yml`: ```yaml services: transmission-manager: build: . container_name: transmission-manager ports: - "8080:8080" environment: TRANSMISSION_URL: http://192.168.1.100:9091/transmission/rpc TRANSMISSION_RPC_USERNAME: admin TRANSMISSION_RPC_PASSWORD: secret restart: unless-stopped ``` Then start the application: ```bash docker compose up -d ``` Open your browser and navigate to `http://localhost:8080`. --- ## Building from Source ### Prerequisites - [Go](https://go.dev/) 1.24 or later ### Build Compile the single binary with embedded frontend assets: ```bash git clone https://github.com/your-repo/transmission-manager.git cd transmission-manager go build -ldflags="-s -w" -o transmission-manager . ``` ### Run ```bash export TRANSMISSION_URL="http://localhost:9091/transmission/rpc" ./transmission-manager ``` By default, the server listens on port `8080`.