Skip to content
OS Domains
MTA head-to-head

KumoMTA vs Postfix

KumoMTA and Postfix are both free, open-source mail transfer agents, so the choice between them is about fit, not cost. Postfix is the general-purpose default of the Unix mail world — it handles inbound, outbound and relay competently and runs almost everywhere, configured through static files. KumoMTA is purpose-built for high-volume outbound: written in Rust with policy in Lua, it gives the fine per-destination traffic shaping that bulk sending needs, in the volume band where Postfix's coarser controls start to strain. Most senders start on Postfix and move to KumoMTA when outbound sending at scale — roughly past half a million messages a day — becomes the job, not because either one costs money.

Two free, open-source engines — one a general-purpose default, the other built for outbound at scale. The question is not which is better, but when you have outgrown the first.

In short

  • Both are free and open source, so this is a fit decision: Postfix is general-purpose; KumoMTA is built specifically for high-volume outbound.
  • Postfix configures through static files (main.cf, master.cf); KumoMTA expresses shaping and routing as Lua policy you version like code.
  • The inflection is volume: Postfix is comfortable up to roughly 500K/day; past that, KumoMTA’s per-destination control holds reputation more easily.
  • It is not either/or — many setups keep Postfix for general mail and run KumoMTA for the outbound stream that needs shaping.
  • The honest trigger to switch: outbound work — deferrals, per-ISP throttling — starts eating your week on Postfix. That is when KumoMTA pays back, not before.
Both free — so cost is not the question

The honest comparison is general-purpose against purpose-built

Almost every sender meets Postfix first. It is the quiet default under a large share of the internet’s mail: free, dependable, documented to death, and capable of handling inbound, outbound and relay from one configuration. For most of what most servers do, it is the right answer and there is no reason to look further. The comparison only becomes interesting when outbound sending grows into a job of its own.

KumoMTA was built for exactly that job. It is not a general mail server — it is an engine for pushing large volumes of outbound mail with the per-destination control that protects reputation at scale, written in Rust and configured as Lua policy. Because both engines are free and open source, choosing between them never comes down to a licence. It comes down to whether your sending has outgrown a general-purpose tool and needs one shaped for the task.

That reframing matters because it stops people switching for the wrong reason. You do not move off Postfix because something newer exists; you move when its coarser outbound controls start costing you time you would rather not spend. Until then, staying put is the correct call — and we will say so even though we host both.

What actually separates them

What is the real difference?

The gap shows up in two places: scope and shaping. Postfix is designed to do many mail jobs adequately, which is a strength when you want one tool for everything and a limitation when one of those jobs — high-volume outbound — outgrows the rest. Its per-destination controls exist, but they are coarse next to an engine built specifically for bulk delivery. KumoMTA narrows its scope to outbound on purpose, and spends that focus on fine control: how it paces each provider, how it backs off on deferrals, how it isolates streams.

The second difference is how that control is expressed. Postfix puts it in static configuration files — predictable, easy to read, the same every run. KumoMTA puts it in Lua policy, so a shaping or routing decision can depend on whatever logic you write and can be reviewed and versioned like any other code. For a small, stable mail server the static model is a virtue; for a sending operation that changes and grows, policy-as-code earns its keep.

Static config, illustrated

How each one shapes traffic to a provider

To pace sending to a single provider, Postfix uses static per-transport settings: you declare a concurrency limit and a rate delay in configuration, the same for every message on that route. The snippet below shows that approach. KumoMTA reaches the same outcome through Lua policy evaluated per message, so the pacing can adapt to context rather than being fixed in a file.

# Postfix main.cf — per-transport pacing is static
# (illustrative: one fixed rule per destination class)

default_destination_concurrency_limit = 20
default_destination_rate_delay        = 1s

# a dedicated transport for one provider, tuned by hand
gmail_destination_concurrency_limit   = 10
gmail_destination_rate_delay          = 0s

# master.cf
# gmail   unix  -  -  n  -  -  smtp

This works, and for moderate volume it works well. The strain appears at scale, when every provider wants different pacing that shifts with your reputation and their mood that day. Tuning that by editing static files for dozens of destinations is the manual work KumoMTA’s policy model is designed to absorb — the same job, expressed as logic instead of as a growing list of fixed entries.

Side by side

Postfix and KumoMTA on the dimensions that decide

Postfix KumoMTA
Licence & cost Open source (IBM Public License), free Open source (Apache 2.0), free
Built for General-purpose mail: inbound, outbound, relay High-volume outbound sending
Language C Rust core, policy in Lua
Configuration Static files (main.cf / master.cf) Policy-as-code, written in Lua
Outbound traffic shaping Coarse, per-transport Fine, per-destination and per-policy
Volume sweet spot Up to ~500K/day 500K–5M/day and scaling upward
Choose it when You need a dependable general MTA Outbound at scale is the actual job
Where the path bends

The point where Postfix gives way

Think of it as a single road with a bend in it. From low volume up to roughly half a million messages a day, Postfix carries you comfortably and a move would be wasted effort. Around that point the cost of holding outbound reputation by hand starts to rise, and an engine built for the job — KumoMTA — takes the load off. The bend is gradual, not a wall; the diagram marks where most senders feel it.

outbound volume per day → ~500K / day Postfix is comfortable general-purpose · static config · no move needed KumoMTA takes the load built for outbound · Lua policy · 500K–5M+ / day

Stay on Postfix when

Your sending is comfortably under a few hundred thousand messages a day, your current setup delivers, and you value one well-understood tool that does everything. Postfix asks less of you to operate, its behaviour is easy to reason about, and the documentation answers nearly every question you will have. Spending effort on a migration here moves you sideways.

The better use of your time at this stage is authentication and list hygiene — clean SPF, DKIM and DMARC, suppression of dead addresses — which lifts deliverability far more than swapping engines would.

Move to KumoMTA when

Outbound sending has become a job in its own right: volume is climbing past the half-million mark, per-ISP deferrals and throttling are eating your time, and you want shaping you can express as code rather than as a growing pile of static rules. KumoMTA is built for that, and it gets you there without a licence because it is open source like Postfix.

You can also adopt it without leaving Postfix behind — keep Postfix for general mail and route the heavy outbound stream through KumoMTA, isolating the part that needs the shaping.

The one-line rule

Stay on Postfix until outbound shaping at volume starts costing you time. Move to KumoMTA when it does — and consider running both rather than replacing one.

Where OS Domains fits

We run both, and we will tell you to stay put when that is right

Because neither engine carries a licence and we operate both as managed infrastructure, we gain nothing by pushing you to migrate. A low-volume sender keeps a tuned Postfix and our honest advice is to leave it alone; a sender whose outbound has outgrown it gets KumoMTA on the stream that needs it, often alongside the Postfix that still handles everything else. The recommendation tracks your volume, not a sale.

What we add underneath either choice is the part that is hard to assemble yourself: dedicated IPs whose reputation we warm and manage, and EU-resident infrastructure under an Austrian entity, so the sending leg raises no cross-border transfer question in your compliance review. The engine is a free choice between two good open-source options; the dedicated, sovereign, operated base it runs on is the differentiator. For how this pair sits among the others, the MTA comparison hub places Postfix and KumoMTA alongside Exim, PowerMTA, Halon and MailerQ.

The practical questions

KumoMTA vs Postfix: what senders ask

Should I replace Postfix with KumoMTA?

Only if high-volume outbound sending has become the real job. Both engines are free and open source, so this is never a cost decision — it is about fit. Postfix is general-purpose and handles inbound, outbound and relay well; KumoMTA is built specifically for outbound at scale, with the per-destination shaping that bulk sending needs. If your sending is modest and Postfix delivers, replacing it gains you nothing. Many setups do not replace it at all and instead run both, with KumoMTA carrying the outbound stream.

At what volume does Postfix stop being enough?

There is no hard cliff, but roughly half a million messages a day is a useful marker. The real signal is not the number — it is when per-ISP deferrals, connection throttling and reputation management on outbound start eating your time. Postfix’s traffic shaping is coarser than an engine built for bulk sending, so above that band you spend more effort holding a clean reputation by hand. KumoMTA moves that work into policy you can express once and reuse.

Is KumoMTA harder to run than Postfix?

It is different rather than strictly harder. Postfix configures through static files that are simple to start with and widely documented, which is part of why it is everywhere. KumoMTA expresses shaping and routing as Lua, which is more expressive and more to learn, but it rewards teams that want their sending logic as reviewable, versioned code. For a low-volume general mail server, Postfix is less to operate; for high-volume outbound, KumoMTA’s model does more of the work for you.

Can I run Postfix and KumoMTA together?

Yes, and it is a common arrangement. Postfix keeps doing what it is good at — general mail handling, inbound, relay — while KumoMTA takes the outbound sending stream that needs careful shaping at volume. Treating them as complementary rather than as a replacement is often the lowest-risk path: you isolate the high-volume sending onto the purpose-built engine without disturbing the rest of your mail setup.

Does moving to KumoMTA improve deliverability?

Indirectly, and only above the threshold where shaping matters. No engine sets your inbox placement — reputation, authentication and list quality do. What KumoMTA gives you is finer control to protect that reputation when you send at scale, so deferrals are handled per destination rather than bluntly. Below a few hundred thousand messages a day, a well-configured Postfix gives you the same result, and the migration buys nothing.

Do you set up either engine for me?

Yes. We run both Postfix and KumoMTA as managed infrastructure and recommend by volume — a low-volume sender keeps a tuned Postfix, a sender outgrowing it moves the outbound stream to KumoMTA. The dedicated IPs and EU-resident infrastructure underneath are the same either way, so the advice follows your sending rather than a product we would rather place.

Decide with someone who runs both

Not sure you have outgrown Postfix yet?

Tell us your outbound volume and where the pain is. We will tell you whether to stay on Postfix, move to KumoMTA, or run both — on dedicated EU infrastructure.

Phone +43 1 205 11 80 Mon–Fri · 9–18 CET
Email [email protected] Avg response 4h business
Office Fleischmarkt 1, 1010 Wien By appointment