listmonk

App-catalog entry (candidate). Served verbatim from the synced projection of sax3l/siax-app-catalog@ff7719df3a4d — API0 never re-qualifies an entry.

App ID
app_listmonk
Channel
candidatecapped from tested
License
AGPL-3.0
License gate
gateOk: false, swept 2026-09-22T14:30:17.148Z over 0 files
Build digest
sha256:179d00d9553c371b6fe88c9b145095d651e275bdd66db46b2e0b79daff316b6f
Attestation
none — the channel never exceeds candidate without one
Capped
capped from tested: license-gate violation: cannot-verify:no-license-file-at-root:/home/simon/Documents/siax-app-catalog/apps/listmonk
Resource floor
1 vCPU · 1 GB RAM · 10 GB disk
Support boundary
UI integration
Capabilities
email-marketing
Known limitations
  • OIDC-to-Zitadel wiring not tested against a live Zitadel org (isolated-sandbox constraint) — local session-cookie auth WAS proven for real.
  • listmonk publishes no official minimum resource footprint; the resourceModel above is VIBE's own conservative estimate, not an upstream number.
  • Rollback correctness for THIS migration (v6.2.0 -> v6.1.0) happened to be forgiving even without a full restore (see lifecycle.rollback note) — this adapter does not rely on that being true for every future listmonk release, and neither should a caller.
  • Import was only tested subscriber-CSV + list JSON; campaigns/templates/media are exported by exportData() only as row counts in the manifest, not round-tripped through import (listmonk's own import API is subscriber-only; campaigns/templates have no equivalent bulk-import endpoint).
  • Multi-replica / horizontal scaling not tested — this pass ran exactly one app container per instance, matching listmonk's own official docker-compose.yml.
  • H0ST's real Docker adapter (h0st/src/integrations/docker-client.ts) cannot run this app as-is — it has no env/port/volume/network support. This catalog entry's lifecycle was proven against a NEW, more capable orchestrator built for this pass (vibe/src/adapters/docker/docker-orchestrator.ts), not H0ST's adapter. See that module's header for the full reasoning; lifting it into H0ST once a second app needs it is a documented next step, not done here.
JSON
/v1/api0/app-catalog/app_listmonk