Skip to main content

Why I rolled back from 3.1.0 to 2.9.86 — with real numbers (and what support said)

After upgrading to 3.1.0, sending large campaigns became extremely slow on my setup. A campaign to ~28,000 subscribers was taking many hours — in the worst case, spreading across days before finishing. Before the upgrade, the same kind of campaign finished in well under an hour. Same server, same SMTP (Elastic Email, EU), same configuration — only the plugin version changed.

Before posting publicly, I went through support. I want to be fair and share how that went:

Their first recommendation was the WP-CLI sender with multiple workers (unique option keys, staggered offsets) — which was exactly the setup I was already running — and then to ask my host (Cloudways) whether it supports persistent cron for unattended CLI workers. So the diagnosis essentially pointed at my hosting. A second reply confirmed they've escalated the 2.x-vs-3.x throughput difference and the connection-reuse question to their dev team, with no technical conclusion or ETA yet. I do appreciate the escalation.

But I needed a working system now, so I tested the one variable I hadn't: the version itself.

The numbers, measured directly:

  • On 3.1.0 — large campaigns sent at roughly 5–20 emails/min. Even with multiple CLI workers I could only reach ~40/min in short bursts, never sustained.
  • On 2.9.86 — the same ~25,000-subscriber campaign completed in 39 minutes, start to last email.

Here's the key point about the "it's your hosting" diagnosis: if the bottleneck were really my host or cron, the rollback wouldn't have changed anything — same machine, same cron, same SMTP. Yet the identical campaign went from days to 39 minutes. The only thing that changed was the plugin version. That rules out the host as the cause, at least for my case.

A few more findings from my testing, in case they help: CPU sat 79–88% idle during sends, EU→EU latency to my ESP was ~0.05s, the provider accepted 100% of submissions, memory was never a constraint. On 3.1.0 I also saw hundreds of cURL error 28 (connection timeout) entries at high send rates — consistent with a new HTTPS connection being opened per email rather than reused. On 2.9.86, much less of that.

On multi-threading (the usual recommendation): I had it enabled on 3.1.0. On my Kubernetes-based host it would burst for a few minutes, then the background workers got reaped and it stalled — rows cycling between processing and pending. On 2.9.86 the same built-in multi-threading just runs cleanly through Action Scheduler, no manual workers needed.

I'll leave the conclusions to each user. For me: if you genuinely depend on this system for production work, 2.9.86 is the more reliable choice right now.

And to the developers — Shahjahan Jewel , with full and genuine respect for the enormous work that's gone into 3.x — I don't think it's quite ready for production-critical workloads while a regression this serious remains. I'm sure it runs well on many setups; mine clearly isn't one of them yet. Happy to share my full diagnostics (SQL, send-rate measurements, server load, cron logs) if it helps engineering pinpoint what changed in the 3.x sending path.

Debo Ogunrinde

Nikola Belopitov Thanks for sharing your experience here...However, my opinion is that as I didn't see in the post any mention of working with WPManageNinja support, I would recommend putting in a support ticket to help you diagnose the issue. It could be something simple. Just a thought.

Nikola Belopitov

Debo Ogunrinde, thanks — and that's a fair point to raise. I should have mentioned it in the post: I did go through support before rolling back.

The short version: support's recommendation was the WP-CLI sender with multiple workers (unique option keys, staggered offsets) — which is exactly the setup I was already running — and then to ask my host (Cloudways) whether it supports persistent cron for unattended CLI workers. In other words, the diagnosis pointed at my hosting.

A second reply confirmed they've escalated the 2.x-vs-3.x throughput difference and the connection-reuse question to their dev team, with no technical conclusion or ETA yet. I genuinely appreciate that escalation.

But here's what made me act: if the bottleneck were really my hosting or cron, the rollback wouldn't have changed anything — same server, same cron, same SMTP. Yet the identical ~25k campaign went from days on 3.1.0 to 39 minutes on 2.9.86. The only variable was the plugin version. That rules out the host as the cause, at least for my case.

So it's not that I skipped support — it's that support couldn't yet explain or solve it, and the rollback gave me a working system today while the dev team reviews. I'm staying on 2.9.86 until there's a fix, and I'm happy to keep sharing diagnostics to help get there.

Debo Ogunrinde

Nikola Belopitov Thanks for taking time to update...this is very helpful and it clarify things a lot... Hopefully, there is an upcoming effective fix for your use case. Glad you're able to work with 2.9.86 in the interim. All the best.

Waki Chuang

I'm experiencing the exact same situation as you. In my case, I have even more senders and about 100,000 subscribers.

Previously, it took only three or four hours to finish sending, but now it's taking over 20 hours. This has also significantly slowed down the performance of my WordPress site.

I haven't been able to clearly document the specific data or reflect this status yet, but at this point, it looks like a rollback is the better option.

Michael

Do you guys use the v2.9.86 because it does not have the vulnerability of the v2.9.87?

I'm waiting to put V3 in production as I noticed in dev that a contact can now have multiple time the same tag and list shown in it's profile.

https://patchstack.com/database/wordpress/plugin/fluent-crm/vulnerability/wordpress-fluentcrm-email-newsletter-automation-email-marketing-email-campaigns-optins-leads-and-crm-solution-plugin-2-9-87-unauthenticated-blind-server-side-request-forgery-vulnerability

Cynthia Allen

Michael That sound like a display mess at the least. But removing a tag multiple times also sounds necessary.

Lee Busch

I've had to roll back from v3.x because all templates broke (in subtle but real ways) in v3.x, and rebuilding everything is not a job I can do right now. (already reported and documented to support)

Lee Busch same issue here. All templates broken

Lee Busch

Angelo van der Klift  I'm sorry to hear it. Did you open a ticket so they can know?

Mikkel Toftlund

I've also noticed a quite significant performance drop in the responsiveness itself when updating to 3.0, so I also rolled back.

Nikola Belopitov

Following up — a week later:

First, I want to genuinely acknowledge the scale of work the FluentCRM team has put into 3.x. The architectural ambition is real, and I have full respect for what Shahjahan Jewel  and the developers have built — FluentCRM has been an excellent product for our setup for years, which is exactly why I'm taking the time to write this.

That said, it's now been 7+ days since I posted these findings, and there's still no public technical response. Combined with similar reports from other users at scale — Waki Chuang 100k-subscriber site going from 3–4 hours to 20+ hours, @Lee Busch's template regressions, Mikkel Toftlund  admin performance drop, Angelo van der Klift  broken templates — this looks less like edge cases and more like a pattern worth structured attention.

What I'd genuinely appreciate hearing, even briefly:

  1. Is the 2.x→3.x performance regression at production scale being actively investigated at the engineering level? Not asking for an ETA or a fix — just confirmation that it's on the radar would help all of us plan. Right now we're operating in uncertainty.

  2. Would you consider a "stable" / LTS release channel alongside the cutting-edge 3.x line? Many of us run production-critical email infrastructure where stability matters more than new features. A channel that prioritizes reliability would let both audiences win — innovation continues on 3.x, while production users have a supported path that doesn't shift architecture under them.

I want to be clear: I'm not criticizing the direction of 3.x or the work being done. I'm asking for visibility into whether these regressions are being looked at, because right now, silence reads as uncertainty, and uncertainty makes production planning very hard.

I remain on 2.9.86 — works reliably, handles my volume, no regressions. Happy to keep sharing diagnostics (SQL, send-rate measurements, server load, cron logs) if it helps engineering pinpoint what changed in the 3.x sending path.

With continued respect for the team and the product.

Mikkel Toftlund

I would support this @nikolabelopitov. It's as such a great direction 3.0 is heading in, but at the end of the day, the motor is what's powering the automobile, not the body work. Again, absolutely no criticism to the ninja team, I know they're working as hard as can to provide the best plugins in the WP community, and much appreciated! But an upgrade can never be UI only and deteriorating under the hood performance, it's as simple as that.

Jason Janes

Shahjahan Jewel - What's the lag or reasoning for no response? This post interests me and I want to know if its still an issue, a one off problem that effects limited users or ?? and at the same time this is a red flag for 3.x, I just spent 2 day fine tuning and setting up FluentCRM 3.x for a new project with a small list of 7k subscribers, haven't sent yet, but will be extremely disappointed if the email send rates are slow as in above.

Please respond with current status, and if a fix is in place. This should be a top priority and it appears its being glossed over by support.

Thanks,
Jason

Jason Janes

Update: I sent my first newsletter using latest version of FluentCRM, this was also a clean install from v3.x, not an upgrade.

3061 clean and verified emails scheduled in newsletter

send time was right at 20 minutes so about 9k an hour. Not sure if this is good or bad but seems decent to me.

Fluent SMTP
Postmark Broadcast Stream.
Rocket.net with Server Cron

Default send in FluentCRM set at 14 emails per second.

Next Level Web

Campaigns section is extremely slow loading after upgrade to FluentCRM 3.x

W Creative

I wanted to add our experience here because the lag/processing issue is not just a minor inconvenience for higher-volume senders — it can become a serious operational problem.

We recently attempted to send a campaign to approximately 146,000 contacts through FluentCRM, using SendGrid as the actual sending service. The campaign was intentionally throttled to go out slowly over the course of the day. The email itself contained roughly 24–50 links, which is not unusual for our use case and unfortunately cannot be reduced much.

As the day went on, the server became increasingly overloaded and eventually crashed. My assumption is that the issue was not SendGrid delivery itself, but the amount of processing FluentCRM/WordPress had to do: generating the individual emails, rewriting/tracking many links per recipient, processing the queue, and logging opens/clicks back into the database.

For smaller lists this may not show up as dramatically, but for businesses using FluentCRM at scale, processing speed and database load are critical. A campaign that technically “sends” but causes massive lag, delayed processing, or server instability is not viable for production use.

We moved from SendGrid Marketing Campaigns to FluentCRM specifically to manage our own contacts and avoid the high per-contact platform costs. FluentCRM is very appealing for that reason, and we want to continue using it. But the campaign processing performance needs to be reliable enough for larger lists, especially when link tracking is enabled.

It would be very helpful if the FluentCRM team could address this directly, including:

  • Recommended server requirements for lists over 100k contacts
  • Realistic send-rate guidance for high-volume campaigns
  • Whether link tracking/open tracking significantly increases database load
  • Whether campaign processing changed in recent versions
  • Any known bottlenecks in queue processing, URL tracking, or click/open logging
  • Whether there are planned optimizations for batch processing, database indexing, or background workers

This is not meant as criticism for the sake of criticism. We like FluentCRM and want it to work for our business. But the lag and processing load are serious enough that we need to understand whether FluentCRM is intended to support this kind of volume, and if so, what the optimal configuration should be.

Thomas Oates

W Creative We're not using FluentCRM yet but are planning to move away from our current hosted service to something different. Given that we're using a few other Fluent products, I'd love to use FluentCRM also but we are concerned about the same issues you're dealing with. Our contact list is approximately 160K and we'll need to reliably send multiple emails a month with over 100K recipients. Hopefully they get this resolved in the next month or so.
Thanks for your work and research on this.

JF

Hi Nikola Belopitov and everyone aftected... I'm curious to know if any of you have tested the lastest version 3.1.5 and if it has improved the sending performance. Thanks!

Nikola Belopitov

Update — 3.1.7 is out, original questions still open.

First, sincere thanks to Shahjahan Jewel  and the team for shipping 3.1.5. I read the release notes carefully and I genuinely appreciate the work that went into the campaign queue improvements: lock-first sender handling, stale email recovery, loopback fallback, and the fix for recipient skipping on large sends. These are exactly the kind of refinements production users notice. The continued pace of work is impressive, and I want to acknowledge that openly.

That said — and I write this with full respect for the team's effort — the 3.1.5 release notes don't address the two specific concerns several of us raised here:

  1. The 2.x → 3.x throughput regression itself. Not the queue reliability (which 3.1.5 improves), but the raw sending speed. On my setup, identical infrastructure produces ~3.5 emails/min on 3.x vs 39 minutes for 25k recipients on 2.9.86. The 3.0 marketing promised "up to 10X faster sending." My measurements — and Waki Chuang , and others in this thread — show the opposite at production scale. I haven't seen this addressed publicly, and 3.1.5 doesn't seem to claim it has been fixed either. So the question stands: is the throughput regression itself being investigated at the engineering level, or are queue reliability improvements considered the resolution? These are different problems.

  2. A stable/LTS release channel for production-critical users. Still no public response to whether this is on the roadmap, and I think it deserves one. Many of us aren't asking for less innovation on 3.x — we're asking for a supported path that doesn't shift architecture under live mission-critical systems. The fact that several of us independently chose to stay on or roll back to 2.9.86, despite security and feature trade-offs, suggests this isn't a niche request.

I also want to address what I think is happening structurally, with as much fairness as I can:

The 3.x release cadence — 3.0 → 3.0.x → 3.1.0 → 3.1.5 in a matter of weeks — combined with new feature work (FluentCart subscription opt-in, AI integrations, WordPress 7 compatibility, FluentCart product blocks) makes me wonder whether the foundational sending pipeline is getting the same depth of engineering attention as the feature surface. I'm not in a position to claim that's what's happening. But from the outside, it's how it looks. And for those of us whose businesses depend on the sending engine, that's a meaningful signal.

To be very clear: I'm not criticizing the direction of 3.x as a product. The Vue 3 rebuild, the Gutenberg editor, the FluentCart integration — these are real, valuable improvements. The team's ambition is impressive. I genuinely want 3.x to succeed for everyone.

What I — and I think many others reading this — are asking for is simply visibility:

  • Is the throughput regression a known issue being actively worked?
  • Is there an ETA or even a quarter-level target for a version that restores 2.x-equivalent send rates?
  • Is an LTS / stable channel under consideration?

Even a brief "yes, it's being investigated; no ETA" would be enormously helpful for production planning. The current silence on these specific questions is what makes it hard to recommend 3.x to peers right now.

JF  — to answer your question: I haven't upgraded to 3.1.5 yet, and I won't be testing it on production. After losing nearly a week of work to the 3.0.x troubleshooting cycle, I need a clear statement from engineering that the throughput regression is resolved before I'm willing to spend another production cycle on it. If anyone on a comparable setup (Cloudways/Kubernetes, ~25k+ list, Elastic Email or similar EU ESP) has tested 3.1.5 head-to-head against 2.9.86, I'd love to see real numbers.

Jason Janes — completely agree with your read. The lack of a clear technical statement is the red flag, more than the regression itself.

W Creative  Thomas Oates  — your reports (146k and 160k lists) reinforce that this isn't an edge case at our scale. The questions you're raising about server requirements, link tracking load, and queue bottlenecks are exactly the ones that need official answers.

Still on 2.9.86, still happy to share full diagnostics (SQL, send-rate measurements, server load, cron logs, cURL error patterns) if engineering wants to look at a concrete production case.

With continued respect for the team and the product.

Nikola Belopitov

Update for the thread:

Shahjahan Jewel  responded to Thomas Oates  in the 3.1.7 announcement thread: "we have improved a lot about the sending speed so you should use the latest version."

I appreciate the response. But I want to address something that's been concerning me throughout this entire situation:

Across three different channels — a support ticket I opened before starting this thread, a direct message I sent to Shahjahan Jewel  before starting this thread, and this thread itself (open for over a month, 24+ likes, multiple production users reporting similar regressions: Waki Chuang  at 100k, Lee Busch , Mikkel Toftlund , Angelo van der Klift , Jason Janes , W Creative  at 146k, Thomas Oates  at 160k) — I have not received a single direct response on the throughput question.

The only acknowledgment came when Thomas Oates  raised it publicly in a release announcement — and even then, the response was a one-line redirect to "use the latest version," delivered in a different thread.

That pattern — silence in private support, silence in DM, silence in a public thread with multiple affected users, but a brief redirect when raised in a release announcement — makes it very hard to interpret what's actually happening. Is the regression considered fixed? Is it being investigated? Is it acknowledged as a real issue at all? After more than a month and three channels, none of those questions has a clear answer.

That's not what I'd expect from a project that describes itself as community-driven and feedback-shaped.

To make this actionable, three specific questions remain open:

  1. What specifically changed in the sending pipeline between 3.1.0 and 3.1.7? The 3.1.5 and 3.1.7 release notes mention queue reliability improvements (lock-first handling, stale recovery, loopback fallback), but not throughput.

  2. Has the connection reuse issue been addressed? Specifically, the cURL error 28 pattern at high send rates that suggested a new HTTPS connection per email rather than reuse.

  3. Real numbers? Has the team benchmarked 3.1.7 head-to-head against 2.9.86 at production scale (>20-30-100k+ recipients, EU SMTP)? "Improved a lot" is hard to act on without measurable comparison.

It's clear from this thread and others that experiences with 3.x vary significantly by setup — which is exactly why concrete technical details and benchmarks from the team would help all of us make informed decisions for our own infrastructure.

For those of us running production-critical email systems, "use the latest version" isn't a workable upgrade path without specifics. We've already been through 3.0 → 3.0.x → 3.1.0 → 3.1.5 → 3.1.7, each promising improvements. Without a clear technical statement on what was wrong and what was actually fixed, every upgrade is a roll of the dice on production infrastructure.

Staying on 2.9.86 — works reliably, handles my volume, no regressions.

Would genuinely appreciate hearing from anyone on the dev team in this thread, on the open ticket, or via the DM that's been sitting unanswered — even a one-line technical confirmation that the throughput regression has been measured and fixed would be enough to consider upgrading. That's a reasonable ask.

Thanks to Thomas Oates  for raising the question publicly.

Shahjahan Jewel

Nikola Belopitov I am leaving a doc that I have prepared about how email sending speed works as there has lots of variables.

https://developers.fluentcrm.com/modules/email-sending-speed.html

This doc is prepared based on version 3 architecture. I would not recommend to use version 2 for any cases.

Nikola Belopitov

Shahjahan Jewel Thank you Shahjahan Jewel  for the response and the link.

I want to be transparent: I've read this document carefully — multiple times — and I've already tested every recommendation in it before opening this thread. The same document was also shared in a similar exchange in another thread a few weeks ago, in response to a user reporting the same 2.x→3.x regression. I responded there with detailed measurements showing why the doc's general logic doesn't explain the specific regression. That response went unanswered.

The document explains, in general terms, why slow sending can happen when cron is misconfigured, SMTP latency is high, or resources are constrained. None of those apply here. The measurements I've shared, both in this thread and in my open support ticket (ticket has been pending for 3 weeks now, with an acknowledgment that it was escalated to engineering, but no engineering response since):

  • Server-side cron: Cloudways minute-level cron, confirmed running, DISABLE_WP_CRON set
  • SMTP round-trip: ~0.05s (Elastic Email API, EU region, same region as server, measured with curl)
  • CPU: ~80% idle during entire send
  • Memory: 4 vCPU / 15 GB pod, never constrained
  • SMTP acceptance: 100%, zero failures from Elastic
  • Multi-threading: enabled, tested, behaves as described in the doc (bursts then stalls on Kubernetes autoscaling because background workers get reaped)
  • WP-CLI workers: 8 parallel workers with unique --option_key and staggered --offset, exactly as the doc recommends

By the doc's own logic ("if cron runs and the server has headroom, speed = SMTP round-trip"), I should be at 1000+ emails/min. I'm not. Same hosting, same SMTP, same config, same cron — only plugin version changed — produces:

  • 2.9.86: ~220 emails/min sustained, 28k campaign clears in ~2 hours
  • 3.1.x: ~40/min in bursts with 8 CLI workers, ~6/min on plain cron, same campaign takes most of a day

That's a ~5x throughput regression that the document doesn't explain.

I understand 3.1.5 and 3.1.7 shipped queue reliability improvements (lock-first handling, stale recovery, loopback fallback, chunking fix). I appreciate that work. But none of those release notes mention per-email throughput or HTTP connection reuse, which is what the community-side analysis (cURL error 28 pattern, TLS handshake per email rather than keep-alive) points to as the actual bottleneck.

I genuinely want to upgrade. I want it from a security standpoint, from a feature standpoint, and because I've been a paying customer for 4 years and I want to support where the product is going. But after reading the doc, testing everything in it, opening a ticket that's been silent for 3 weeks after "escalation to engineering," sending a DM that went unanswered, and following a thread that received no dev-team comment for over a month until this reply — I'm not in a position to make that upgrade decision confidently. Not without a clearer technical answer.

So the questions are still the same, just narrower now:

  1. What specifically changed in the sending path between 2.9.86 and 3.x that produced this regression on my (and others') setup?
  2. Is HTTP keep-alive / connection reuse in FluentSMTP on the roadmap? This is the one architectural change that would meaningfully lift the per-email ceiling.
  3. Are the filter hooks promised in the November 2025 community thread actually shipping? In which version?

Re: "I would not recommend using version 2 for any cases" — understood as official guidance. But for those of us with measurable 2.x stability and no equivalent 3.x performance, "don't use 2.x" without a workable alternative isn't actionable. I'd much rather you said "3.1.7 fixes this, here's the benchmark" — then I'd upgrade today.

The open ticket has all my diagnostics, server access offers, and full logs. The DM is still there. Happy to share anything else engineering needs. I'd genuinely like this resolved.

Shahjahan Jewel

Nikola Belopitov something is really wrong with your server or something. We have sent thousands of email for testing and as well as in production.

One of our customer added multiple worker and he reached 150 emails per second.

Elasticmail: check its round trip timing by measuring a single email via php code. That may take at least 200 to 300ms per email as they are really slow as per our testing.

I can’t comment why for your case the sending is slow but I am sure something terribly wrong in server setup if everything is ideal. That’s a big variable.

If you need anything more specific please open a support ticket so our team can take a look. This thread is not ideal for this version 2 vs version 3 as we will not have any security update for version 2.

Nikola Belopitov

Shahjahan Jewel  Thank you for the reply.

A few clarifications, because I think there's been a misunderstanding:

On the ticket: I do have an open support ticket — #160847, opened on June 1st, escalated to engineering on June 4th, with no further engineering response in the 3 weeks since. It contains all the diagnostics, full configuration, server specs, and an offer of staging access. That's specifically what I referenced in my previous comment. I'm happy to open another one if the first didn't reach the right place, but it would help to know the existing one was actually seen.

Important context: I've been using FluentCRM for 4 years on this same site, and I never had any sending-speed issues at all until the upgrade to 3.x. Not slow, not occasional, not edge-case — simply no problem to report. The same campaigns that ran smoothly for years are the ones that regressed dramatically after the upgrade.

The numbers from my original post above, on this exact server, same hosting, same SMTP, same config, only the plugin version different:

  • 2.9.86: 25k campaign completed in 39 minutes. Sustained throughput in the ~490–650 emails/min range. This is what I'm running today.
  • 3.1.0: ~5–20 emails/min on plain cron. ~40/min in bursts with 8 parallel CLI workers, never sustained. A 30k campaign at those rates would take hours to days, not minutes.

On "something is wrong with the server": This is where the logic doesn't hold for me. If the server were misconfigured, 2.x wouldn't have worked either — not for the past 4 years, and not for the campaigns I'm running this week after the rollback. The only thing that changed is the plugin version. That's the definition of what changed.

On Elastic Email latency: You mentioned EE takes 200–300ms per email in your testing. On my server, measured directly with curl from the same pod that sends the campaigns, EE round-trip is ~50ms (EU region, same region as server). Even if it were 300ms, the math doesn't work as the bottleneck — 2.x sustains hundreds of emails/min on the same connection, which would be impossible at 300ms per call unless 2.x reuses connections or 3.x does not. That's exactly the connection-reuse / HTTP keep-alive question I keep asking.

On the customer reaching 150 emails/sec: I'd genuinely love to see the configuration that achieved that on 3.x — hosting, SMTP provider, worker setup, all of it. That's the kind of concrete reference that would help. If there's a published case study or even a forum post, I'd appreciate the link.

On security: Completely understood that 2.x won't get security updates. That's exactly why I want to upgrade. But upgrading to a version that turns a 39-minute campaign into one that takes hours to days isn't a security improvement — it's a different kind of operational risk. "Use the latest version" only solves the security concern if the latest version functionally works at the same scale.

I'm not posting this to be difficult. I'm posting because three weeks of "escalated to engineering" with no further word, plus a thread of multiple users reporting the same regression, plus a public response that suggests opening a ticket (which exists) and points to a server problem (which the 4-year 2.x baseline disproves) — doesn't get any of us closer to a resolution.

What I'd find genuinely helpful: an engineering update on ticket #160847, even brief. Or a published benchmark of 3.1.7 vs 2.9.86 on a comparable setup. Or a statement that connection reuse is or isn't on the roadmap.

Happy to keep this constructive. I just need something to plan against.