streamline

module
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 12, 2026 License: GPL-3.0

README

Streamline

CI Image Release Go Version

Self-hosted unified media manager. Replaces the *arr stack (Radarr, Sonarr, Lidarr, Readarr) and Overseerr with a single binary.

Features

  • Unified movie & TV library (music & books planned)
  • Multi-user with SSO
  • Built-in request system (Overseerr replacement)
  • Torznab indexer support
  • Torrent download clients: qBittorrent (Transmission & Deluge planned)
  • Media server notifications: Plex, Jellyfin, Emby
  • REST API (OpenAPI 3.0 spec)
  • OpenTelemetry traces, metrics, logs
  • CGO-free SQLite — single-binary, zero external deps

Quick start (Docker Compose)

services:
  streamline:
    image: ghcr.io/datahearth/streamline:latest
    restart: unless-stopped
    ports: ["8080:8080"]
    volumes:
      - ./data:/data
      - ./config:/etc/streamline:ro
mkdir -p config data
docker run --rm -v "$PWD/config:/etc/streamline" \
  ghcr.io/datahearth/streamline:latest config init --output /etc/streamline/config.yaml
docker compose up -d

Open http://localhost:8080.

Install

Docker
docker run -d --name streamline \
  -p 8080:8080 \
  -v streamline-data:/data \
  -v "$PWD/config:/etc/streamline:ro" \
  ghcr.io/datahearth/streamline:latest

Tags: latest, edge (main branch), vX.Y.Z, X.Y, X, sha-<short>.

Docker Compose

See deploy/compose.yaml for a reference file.

For a full observability stack (VictoriaMetrics + VictoriaLogs + VictoriaTraces + Grafana Alloy + Grafana), see deploy/compose.observability.yaml.

Helm
helm install streamline oci://ghcr.io/datahearth/charts/streamline \
  --namespace streamline --create-namespace

Pin a version with --version X.Y.Z; omit it to pull the latest release.

Binary (from GitHub releases)

Download from Releases. Binaries available for:

  • Linux: amd64, arm64
  • macOS: amd64, arm64
  • Windows: amd64, arm64
# Linux amd64 example
curl -fsSL -o streamline.tar.gz \
  https://github.com/datahearth/streamline/releases/latest/download/streamline_<version>_linux_amd64.tar.gz
tar xzf streamline.tar.gz
cp config.example.yaml ~/.config/streamline/config.yaml
./streamline

Each archive includes a config.example.yaml with default values.

Verify checksum:

curl -fsSL -o checksums.txt https://github.com/datahearth/streamline/releases/latest/download/checksums.txt
sha256sum -c checksums.txt --ignore-missing
From source

Requires Go >= 1.26, Node >= 24, pnpm, Task.

git clone https://github.com/datahearth/streamline.git
cd streamline
task
./streamline

Configuration

Generate a default config:

streamline config init --output ~/.config/streamline/config.yaml

Every config key can also be set via environment variables with the STREAMLINE_ prefix. A double underscore (__) is the path separator; a single underscore is literal, so keys with underscore segments stay reachable: STREAMLINE_LOG__APP__LEVEL=debuglog.app.level, STREAMLINE_AUTH__SESSION_SECRET=…auth.session_secret, STREAMLINE_OTEL__ENDPOINT=…otel.endpoint.

Validate a config file:

streamline config validate --config ~/.config/streamline/config.yaml

Supported integrations

Type Supported
Indexers Torznab
Download clients qBittorrent (Transmission, Deluge planned)
Media servers Plex, Jellyfin, Emby

Verifying images

All images are signed with cosign via GitHub OIDC (keyless). Verify:

cosign verify ghcr.io/datahearth/streamline:latest \
  --certificate-identity-regexp="https://github.com/datahearth/streamline/.github/workflows/image.yaml@.*" \
  --certificate-oidc-issuer=https://token.actions.githubusercontent.com

SBOMs are attached as cosign attestations. Fetch:

cosign download attestation ghcr.io/datahearth/streamline:latest \
  --predicate-type=https://spdx.dev/Document

Every image push is scanned by grype for known vulnerabilities (severity >= high). Results are uploaded to the repository's Security tab.

License

GPL-3.0-or-later

Directories

Path Synopsis
ent
internal
buildinfo
Package buildinfo holds the build-time identity of the running binary.
Package buildinfo holds the build-time identity of the running binary.
db
Package db exposes the database surface as the Store interface.
Package db exposes the database surface as the Store interface.
importer
Package importer runs the post-download pipeline: find media file, apply naming template, transfer to library, update DB, refresh media servers.
Package importer runs the post-download pipeline: find media file, apply naming template, transfer to library, update DB, refresh media servers.
jobs
Package jobs holds scheduler job constructors that bridge service packages to the scheduler without dragging infrastructure deps into the services themselves.
Package jobs holds scheduler job constructors that bridge service packages to the scheduler without dragging infrastructure deps into the services themselves.
jobs/state
Package state persists scheduler run state to the scheduled_jobs table.
Package state persists scheduler run state to the scheduled_jobs table.
library/hygiene
Package hygiene runs two periodic library jobs:
Package hygiene runs two periodic library jobs:
mediaserver
Package mediaserver: Manager owns connection testing + Plex PIN auth for Plex / Jellyfin / Emby entries.
Package mediaserver: Manager owns connection testing + Plex PIN auth for Plex / Jellyfin / Emby entries.
otelx
Package otelx holds low-level OpenTelemetry helpers shared across the project.
Package otelx holds low-level OpenTelemetry helpers shared across the project.
posters
Package posters caches artwork on the local filesystem and serves it via HTTP.
Package posters caches artwork on the local filesystem and serves it via HTTP.
request
Package request is the media-request subsystem: users request movies/shows, admins approve (creating the monitored library item) or deny.
Package request is the media-request subsystem: users request movies/shows, admins approve (creating the monitored library item) or deny.
restart
Package restart tracks whether the running process has accumulated configuration changes that require a restart to take effect.
Package restart tracks whether the running process has accumulated configuration changes that require a restart to take effect.
rss
server/restapi
Package restapi provides primitives to interact with the openapi HTTP API.
Package restapi provides primitives to interact with the openapi HTTP API.
server/web
Package web hosts the non-SPA HTTP surface: the SPA shell, the API docs shell, JSON auth endpoints (login / register / logout / config), and the OIDC redirect dance.
Package web hosts the non-SPA HTTP surface: the SPA shell, the API docs shell, JSON auth endpoints (login / register / logout / config), and the OIDC redirect dance.
sysinfo
Package sysinfo gathers the read-only environment summary surfaced by the Settings → General page and the GET /api/v1/system/info endpoint.
Package sysinfo gathers the read-only environment summary surfaced by the Settings → General page and the GET /api/v1/system/info endpoint.
testutil
Package testutil provides shared test helpers for integration and e2e tests.
Package testutil provides shared test helpers for integration and e2e tests.
testutil/configtest
Package configtest provides config-singleton setup helpers for tests.
Package configtest provides config-singleton setup helpers for tests.
testutil/dbtest
Package dbtest provides database-layer test helpers.
Package dbtest provides database-layer test helpers.
utils/httputil
Package httputil holds HTTP-related helpers shared across the webui.
Package httputil holds HTTP-related helpers shared across the webui.
utils/random
Package random holds crypto/rand wrappers.
Package random holds crypto/rand wrappers.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL