KumoMTA is a single Rust binary with Lua scripting for all runtime configuration. The same binary handles SMTP listeners, queues, delivery, logging, and HTTP introspection.
Process model:
┌─ Listener (SMTP)
├─ Listener (HTTP API)
[ kumod ] ──┐ │
├──► ├─ Queue (per scheduled queue: tenant × destination)
│ │
│ ├─ Egress sources (IP pools)
│ └─ Logging hooks → JSON / ClickHouse / S3
│
└─ Lua VM (config + per-event policy)
Key concepts you'll meet:
| Term | Meaning |
|---|---|
| Tenant | Logical sender (often a customer of an ESP) |
| Egress source | A bound source IP for outbound connections |
| Egress pool | A group of sources to rotate across |
| Scheduled queue | Per-tenant × per-destination queue |
| Throttle | Rate limit (msgs/sec or connections) per key |
| Hook | Lua callback for events: smtp_server_message_received, smtp_client_message_delivered, etc. |
Everything plugs together via Lua. There's no XML, no INI, no main.cf. Read init.lua and you know what the MTA does.
Sign in to keep track of what you have read.