Skip to content

Architecture

PartylinePager runs in two deployment modes. Both use the same daemon, the same hooks, and the same configuration files. The difference is how transport relays are managed.

Standard (multi-container)

The default. Each transport relay runs in its own container, pulled from Docker Hub. The daemon dispatches to them through docker compose. You enable only the adapters and providers you need via compose overlays.

Full (all-in-one)

One container holds the daemon, all three transport runtimes, the admin terminal, and every chat adapter. No Docker socket required. The daemon manages transports as local processes via PID files.

Best for environments that need a single docker run with no compose tooling (Unraid, Portainer, appliance-style deploys).

How they compare

graph LR
  subgraph standard ["Standard (multi-container)"]
    direction TB
    D1[partylinepagerd] -- hooks --> R1[plp-runtime.sh]
    R1 -- docker compose --> T1[Tor relay]
    R1 -- docker compose --> T2[I2P relay]
    R1 -- docker compose --> T3[RNS relay]
  end

  subgraph full ["Full (all-in-one)"]
    direction TB
    D2[partylinepagerd] -- hooks --> R2[plp-runtime.sh]
    R2 -- PID files --> T4[Tor process]
    R2 -- PID files --> T5[I2P process]
    R2 -- PID files --> T6[RNS process]
    D2 -.- TT[ttyd admin terminal]
  end

Both modes share identical hook scripts. The runtime shim (plp-runtime.sh) checks PARTYLINEPAGER_RUNTIME and dispatches accordingly: compose for Standard, direct for Full. See provider hooks for the shim details.

When to pick which

Standard Full
Setup compose overlays single docker run
Transport isolation separate containers, no port conflicts shared network stack, one relay at a time
Docker socket required for transport containers not required
Admin access host SSH / partylinepagerctl browser terminal (ttyd)
Image size ~200 MB base + relay images ~1.1 GB