Skip to content

Your media stack, on autopilot.

Self-hosted Servarr and friends automatically configured, connected, secured. One command to rule them all.

flowchart LR
    subgraph request["Requests"]
        overseerr[Overseerr]
    end

    subgraph indexing["Indexing"]
        flaresolverr[FlareSolverr]
        prowlarr[Prowlarr]
    end

    subgraph trash["TRaSH"]
        recyclarr[Recyclarr]
    end

    subgraph management["Media Management"]
        radarr[Radarr]
        sonarr[Sonarr]
    end

    subgraph download["Downloads"]
        subgraph vpn["VPN Tunnel"]
            gluetun{{Gluetun}}
            qbittorrent[qBittorrent]
            sabnzbd[SABnzbd]
        end
    end

    subgraph media["Media"]
        storage[(Storage)]
        plex[Plex]
    end

    overseerr --> radarr & sonarr
    flaresolverr --> prowlarr
    prowlarr --> radarr & sonarr
    recyclarr -.-> radarr & sonarr
    radarr & sonarr --> qbittorrent & sabnzbd
    gluetun --- qbittorrent & sabnzbd
    qbittorrent & sabnzbd --> storage
    radarr & sonarr --> storage
    plex --> storage

K8s is a time-sink for homelabs?

Sure, Kubernetes has self-healing, scaling, and infrastructure-as-code. But it also wants you to solve VPN routing that doesn't leak, shared storage with hardlinks, and cross-app configuration that survives pod restarts. Copy a million manifests and set up a gitops workflow to have a declarative deployment. Who has time to do all that for a self-hosted home media stack?

Charmarr says hold my beer

Charmarr is an open-source collection of Juju charms wrapping your favorite arr apps. It deploys and manages your media stack on Kubernetes while handling the hard parts: VPN routing, storage reconciliation, credential rotation, service discovery, cross-app configuration. And throws in bleeding edge network security for free.

It aims to provide a simple accessible-to-any-homelabber UX, even simpler than setting up docker compose, for bootstrapping an enterprise grade system. All of this within a few minutes that you won't even be able to prepare popcorn before it's done.

Really. The deployment looks like this:

  1. Write a 20-line config

    variable "wireguard_private_key" {
      description = "WireGuard private key from your VPN provider"
      type        = string
      sensitive   = true
    }
    
    module "charmarr" {
      source = "git::https://github.com/charmarr/charmarr//terraform/charmarr?ref=main"
    
      model                 = "charmarr"
      wireguard_private_key = var.wireguard_private_key
      vpn_provider          = "protonvpn"
      cluster_cidrs         = "10.1.0.0/16,10.152.183.0/24,192.168.0.0/24"
      storage_backend       = "hostpath"
      hostpath              = "/my/gazillion/tb/storage"
      storage_size          = "10000000000000Ti"
    }
    
  2. And just run a one-liner:

    tofu init && TF_VAR_wireguard_private_key="key" tofu apply -auto-approve
    

And you're done. Charmarr begins autonomously wiring up the apps for you.

Life after

  • No more copy-paste API keys


    Apps find each other and configure themselves through relations. No more manual copy-pasting of API keys or URLs. Charmarr butlers it all for you.

  • TRaSH Guides, built-in


    Built-in clean TRaSH guide profiles using Recyclarr. Easy customization. Just run juju config radarr trash-profile=remux-web-1080p.

  • Privacy first setup


    Public traffic stays anonymized always via Gluetun. And protected with a double layered kill switch. Meaning no leaks, ever.

  • Zero-trust ready


    Enable Istio Ambient for mTLS and authz firewalls between services, auto-configured from charm relations. Enterprise security, one flag away.

  • It fixes itself


    Pod dies? Charmarr reconciles. You sleep. Config drift? Charmarr heals. You chill.

  • Keys rotate themselves


    API keys are encrypted at rest. Charmarr rotates them regularly and auto-configures the stack. You can't leak what you don't know.

Powered by
Prowlarr Radarr Sonarr qBittorrent SABnzbd Plex Overseerr FlareSolverr Recyclarr Trash Guides
Gluetun LinuxServer.io Kubernetes Juju Istio OpenTofu