ivanch 19c3ee2e26
Build and Deploy (internal) / Build Transmission Manager Image (push) Successful in 3m22s
Build and Deploy (internal) / Deploy Transmission Manager (internal) (push) Successful in 3s
adding scheduled view in torrents tab
2026-09-25 20:57:09 -03:00
2026-07-08 20:38:30 -03:00
2026-09-25 20:57:09 -03:00
2026-09-23 17:32:39 -03:00
2026-09-23 17:32:39 -03:00
2026-09-23 17:32:39 -03:00
2026-09-23 17:32:39 -03:00
2026-09-23 17:32:39 -03:00
2026-09-23 18:32:32 -03:00
2026-09-23 17:32:39 -03:00

Transmission Manager

A lightweight, modern, single-binary web application for viewing and managing torrents from a Transmission 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.
  • Smart Seed Scheduler: Opt completed torrents in from the Scheduler tab, choose 1–100 active slots for them, and rotate an idle slot to the least recently seeded waiting torrent after one hour without upload. A persistent cycle history shows activations and rotations.
  • 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.
SCHEDULER_DB_PATH No SQLite database path (default ./data/scheduler.db).

The scheduler runs in the server even when no browser is open. Active slots apply only to opted-in completed torrents. Torrents outside the opt-in set do not count toward those slots or have their Transmission state changed: an unopted download keeps downloading, and an unopted seed keeps seeding. A scheduled torrent that continues uploading can keep its slot indefinitely, so rotation does not guarantee a fixed maximum waiting time. Manual pause or resume of an opted-in torrent is temporary; the scheduler restores its chosen state on its next check.

In the Torrents tab, each card shows whether it is scheduled. Use the Scheduled filter to show only opted-in torrents, or the Schedule/Unschedule button on a completed torrent to change its opt-in without leaving the tab. The Scheduler tab remains available for active slot settings and cycle history.


Quick Start

Using Docker

Run the container directly:

docker run -d \
  --name transmission-manager \
  -p 8080:8080 \
  -v transmission-manager-data:/app/data \
  -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:

services:
  transmission-manager:
    build: .
    container_name: transmission-manager
    ports:
      - "8080:8080"
    volumes:
      - transmission-manager-data:/app/data
    environment:
      TRANSMISSION_URL: http://192.168.1.100:9091/transmission/rpc
      TRANSMISSION_RPC_USERNAME: admin
      TRANSMISSION_RPC_PASSWORD: secret
    restart: unless-stopped

volumes:
  transmission-manager-data:

Then start the application:

docker compose up -d

Open your browser and navigate to http://localhost:8080.


Building from Source

Prerequisites

  • Go 1.24 or later

Build

Compile the single binary with embedded frontend assets:

git clone https://github.com/your-repo/transmission-manager.git
cd transmission-manager
go build -ldflags="-s -w" -o transmission-manager .

Run

export TRANSMISSION_URL="http://localhost:9091/transmission/rpc"
./transmission-manager

By default, the server listens on port 8080.

Keep the data directory (or the path set by SCHEDULER_DB_PATH) across restarts to preserve scheduler settings, opt-ins, and cycle history. The app creates the database directory on startup and exits with a clear error if it cannot open the database.

S
Description
No description provided
Readme
1.1 MiB
Languages
Go 41.9%
JavaScript 31.8%
CSS 19.8%
HTML 6.2%
Dockerfile 0.3%