Skip to content
golusorisPublic

About

Go client libraries for media automation, metadata, and download APIs — 62 zero-dependency modules

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

2 stars

Watchers

1 watching

Forks

Latest commit

 

History

371 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

goenvoy — pure-stdlib Go client libraries for media automation, metadata, and download APIs

Release Go

CI

Security OpenSSF Scorecard OpenSSF Best Practices Codacy CodeRabbit

HISS-21 Power of 10 Conventional Commits

License

GitHub Sponsors Ko-fi

Pure-stdlib Go client libraries for media automation, metadata, and download APIs

69 modules covering 63+ services in a multi-module monorepo with zero external dependencies

goenvoy is a collection of Go client libraries for media automation, metadata, and download service APIs — 69 modules covering 63+ services. Designed as a multi-module monorepo, it allows importing only what you need, from a single library to an entire category, using only Go's standard library.

📖 Principles · Architecture Decisions · Contributing


Why goenvoy

  • Pure stdlib — zero external dependencies, just net/http and encoding/json
  • Context-aware — every method takes context.Context for cancellation and timeouts
  • Functional options — WithHTTPClient, WithTimeout, WithHeader and service-specific options
  • Type-safe errors — each module defines an APIError with status code, message, and body
  • OAuth2 support — device code, authorization code, PKCE, and refresh flows where applicable
  • Thoroughly tested — httptest-based tests, race detector enabled, no live API calls

Get started

Install

Import a specific service library:

go get github.com/golusoris/goenvoy/arr/sonarr

Or import shared category types:

go get github.com/golusoris/goenvoy/arr

Usage

package main

import (
    "context"
    "fmt"
    "log"

    "github.com/golusoris/goenvoy/arr/sonarr"
)

func main() {
    client, err := sonarr.New("http://localhost:8989", "your-api-key")
    if err != nil {
        log.Fatal(err)
    }

    ctx := context.Background()

    // Get system status
    status, err := client.GetSystemStatus(ctx)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Printf("%s version %s\n", status.AppName, status.Version)

    // Get all series
    series, err := client.GetAllSeries(ctx)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Printf("Total series: %d\n", len(series))
}

Each service module follows the same pattern: New(baseURL, apiKey) → typed methods with context.

At a glance

Categories

Category Module Services
Arr Stack github.com/golusoris/goenvoy/arr Sonarr, Radarr, Lidarr, Readarr, Whisparr (v2+v3), Prowlarr, Bazarr, Seerr, Autobrr, Mylar3, Jackett, NZBHydra2
Metadata github.com/golusoris/goenvoy/metadata TMDb, TheTVDB, Fanart.tv, OMDb, TVmaze, AniList, Kitsu, AniDB, MAL, Trakt, Simkl, Letterboxd, ListenBrainz, MusicBrainz, StashBox, TPDB, OpenSubtitles, Last.fm, Discogs, TheAudioDB, Open Library, Google Books, Spotify, Deezer, IGDB, RAWG, Steam, MobyGames, SteamGridDB, RetroAchievements, ScreenScraper, Hasheous, LaunchBox
Download Clients github.com/golusoris/goenvoy/downloadclient qBittorrent, Transmission, Deluge, rTorrent, SABnzbd, NZBGet
Media Servers github.com/golusoris/goenvoy/mediaserver Plex, Jellyfin, Emby, Tautulli, Audiobookshelf, Komga, Navidrome, Kavita, Stash, Tdarr
Tools github.com/golusoris/goenvoy/tools FlareSolverr
Anime github.com/golusoris/goenvoy/anime Shoko Server

Structure

Each category has a base module with shared types, plus sub-modules for individual services:

goenvoy/
├── arr/              # shared *arr types + base client
│   ├── sonarr/       # Sonarr v3 client
│   ├── radarr/       # Radarr v3 client
│   ├── lidarr/       # Lidarr client
│   ├── readarr/      # Readarr client
│   ├── whisparr/     # Whisparr v2 + v3 (Eros) client
│   ├── prowlarr/     # Prowlarr client
│   ├── bazarr/       # Bazarr client
│   ├── seerr/        # Seerr client
│   ├── autobrr/      # Autobrr client
│   ├── cleanuparr/   # Cleanuparr client
│   ├── mylar/        # Mylar3 client
│   ├── jackett/      # Jackett client
│   └── nzbhydra/     # NZBHydra2 client
├── tools/            # adjacent automation utilities
│   └── flaresolverr/ # FlareSolverr Cloudflare-bypass client
├── metadata/         # shared metadata types (Rating, Image, Person, ...)
│   ├── video/        # TMDb, TheTVDB, Fanart.tv, OMDb, TVmaze, OpenSubtitles
│   ├── anime/        # AniList, Kitsu, AniDB, MAL
│   ├── music/        # MusicBrainz, Last.fm, Discogs, TheAudioDB, Spotify, Deezer
│   ├── tracking/     # Trakt, Simkl, Letterboxd, ListenBrainz
│   ├── adult/        # StashBox, TPDB
│   ├── book/         # Google Books, Open Library
│   └── game/         # IGDB, RAWG, Steam, MobyGames, SteamGridDB, RetroAchievements, ScreenScraper, Hasheous, LaunchBox
├── downloadclient/   # shared download types + Downloader interface
│   ├── qbit/         # qBittorrent WebUI client
│   ├── transmission/ # Transmission RPC client
│   ├── deluge/       # Deluge JSON-RPC client
│   ├── rtorrent/     # rTorrent XMLRPC client
│   ├── sabnzbd/      # SABnzbd client
│   ├── nzbget/       # NZBGet JSON-RPC client
│   └── queue/        # Unified read-only queue snapshot
├── mediaserver/      # shared media server types
│   ├── plex/         # Plex Media Server client
│   ├── jellyfin/     # Jellyfin client
│   ├── emby/         # Emby client
│   ├── tautulli/     # Tautulli client
│   ├── audiobookshelf/ # Audiobookshelf client
│   ├── komga/        # Komga client
│   ├── navidrome/    # Navidrome client
│   ├── kavita/       # Kavita client
│   ├── stash/        # StashApp GraphQL client
│   └── tdarr/        # Tdarr client
├── anime/            # shared anime types
│   └── shoko/        # Shoko Server client

Contribute

Requires Go 1.26+. See CONTRIBUTING.md for full details.

# Set up workspace (local dev, links all 63 modules)
go work init && find . -name 'go.mod' -not -path './.workingdir/*' -exec dirname {} \; | xargs go work use

# Run all tests
make test-all

# Lint all modules
make lint-all

# Tidy all modules
make tidy-all

# Format all modules
make fmt-all

Support

If goenvoy saves you time, a coffee helps ☕

Support me on Ko-fi    GitHub Sponsors

Upstream and licence

MIT

Standards & Governance

  • Pure stdlib (ADR-0001). depguard in CI enforces.
  • Per-module independent semver (ADR-0002). Tags: <path>/vX.Y.Z.
  • Every release: cosign-signed checksums + SPDX SBOM + SLSA-L3 provenance.
  • Every merged commit: 0 lint / 0 gosec / 0 govulncheck / race-green across all modules.
  • AGENTS.md / CLAUDE.md for agent-assisted development conventions.
  • docs/adr/ for all architectural decisions (Nygard format).

See CONTRIBUTING.md and SECURITY.md.

Documentation Governance

Praetor manages this repository's declared governance policy. This managed block records adoption state; it is not a verification certificate.

Verification: make verify-all runs the repository's configured verification cascade.

HISS Audit: praetorctl audit enforces policy, generated-surface integrity, and the debt ratchet.

Context Sync: praetorctl compile-context --verify verifies every generated agent context against AGENTS.md.

Documentation: make docs-lint enforces locked Markdown style and the private scratch-link policy.

Debt Baseline: .standards-baseline.json anchors the debt ratchet at 5 recorded infractions; audit forbids growth.

About

Go client libraries for media automation, metadata, and download APIs — 62 zero-dependency modules

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages