jochen b9fd0cfe81 lidarr: the runtime serves its watcher and tools, and its downloads step is a run-once process (hq ADR 0198)
The mesh-lidarr container and the mesh-lidarr-downloads step container go with the Dockerfile, build bases and bus credential. The step runs node on the bundle with its words in the process's env, the bound clients' files, the app's config.xml and its memory read where the mesh writes them; it still runs again when a binding it reads changes.
2026-10-04 00:45:22 +02:00

mesh-media-catalog

The media chain as Novox Mesh modules, one per directory under modules/: the servarr trio (sonarr, radarr, lidarr), bazarr, the downloaders (nzbget, qbittorrent), jackett, bookshelf, plex and its companions (tautulli, kometa), and ombi.

It is a catalogue in the exact shape of novox/mesh-catalog: the same manifest vocabulary, the same rules, checked the same way. It is separate because this chain is one system that only talks to itself — jackett-api, sonarr-api, radarr-api, lidarr-api and plex-api are exchanged among these modules and consumed by nothing else except home-assistant — and because what runs here is one operator's media stack, pinned to the builds in use, not shared infrastructure. Provisions cross repositories freely: lidarr requires postgres-database from the catalogue's postgres, every module requires route; the mesh resolves a requirement by name and never by where the manifest lives.

Conventions

  • A manifest names the software's own ports and nothing of the machine: machine ports are assigned by the mesh, per node. No host:container pairs, no pins in an assignment.
  • A manifest names no installation: no hostnames, paths of a particular machine, or people. Names come from ${bound:route:name}, places from ${dir:<id>}, values from settings.
  • Every secret a module needs is declared under own-secrets (minted, or accepted once for an adopted instance); a provision's credential arrives with its binding.
  • Each module carries a small runtime sidecar (tools/index.ts, built by its Dockerfile on the mesh-tools bases) with a few query tools — the working example to extend.

Before pushing, check every manifest together, the way registration does:

mesh-controller module check modules/*/module.json

Register a module from this repository through the forge seat:

module add /<m>.json --source novox/mesh-media-catalog --self --path modules/<m> --ref main --commit <sha>
build novox/mesh-media-catalog --self --path modules/<m> --ref main
S
Description
The media chain as mesh modules: servarr, downloaders, jackett, plex and its companions
Readme
239 KiB
Languages
TypeScript 98%
Python 1.9%