We shipped Octeth v5.8.2 today. Forty-eight commits across 12 days of development — 14 new features, 26 bug fixes, and 3 enhancements. No breaking changes.
This one covers a lot of ground. There's visible UX work in the campaign interface, a brand new terminal monitoring tool for admins, a substantial number of recurring campaign fixes, and deeper send engine reliability improvements. Let me walk through what actually changed.
Campaign Experience, Overhauled
If you use Octeth's campaign editor regularly, the quality-of-life changes in this release will be immediately noticeable.
Success feedback and smart redirects — Previously, saving a campaign felt like throwing something into a void. You'd click save and wonder if it worked. That's fixed. Every save action now shows a proper success toast: sending now, scheduling, recurring setup, or saving as a draft — each gets clear confirmation. More importantly, once a campaign is committed (scheduled or sent), the platform now redirects you to the campaign overview instead of leaving you on the editor. That's the right place to be once you've committed a campaign.
Schedule countdown timer — When a campaign is scheduled for future delivery, you'll now see a countdown banner on the campaign overview page. This sounds small, but it addresses something that was genuinely confusing: you'd schedule a campaign, navigate away, come back, and have no clear sense of when it would send. Now it's right there.
List-filtered activity chart — The campaign overview activity chart now has a list filter dropdown. If your campaign sent to multiple lists, you can now slice the open and click activity by list to see how different audiences engaged. This is particularly useful for segmentation analysis — understanding whether one list outperformed another, without pulling a full export.
These changes came from real feedback. The campaign workflow is where users spend the most time, and it deserved this attention.
LazyOcteth: A Terminal Dashboard for System Admins
This is the most visually distinctive thing in this release, and it's specifically for the people running Octeth infrastructure.
LazyOcteth is a terminal-based monitoring dashboard — a TUI (terminal user interface) that gives system administrators a real-time view of everything happening at the infrastructure level. Think of it as a purpose-built monitoring cockpit that lives in your terminal, rather than forcing you to piece together information from multiple admin screens.
What it shows:
- Real-time service status — All Octeth services at a glance, with instant visibility into what's running and what isn't
- Queue monitoring — Live queue depth and processing status so you can see whether messages are flowing or backing up
- Scrollable log viewer — Browse through system logs without leaving the dashboard context
For anyone who manages Octeth on production infrastructure, this changes how you approach day-to-day monitoring. Instead of SSH-ing into a server and tailing log files, or navigating to an admin panel to check queue status, you have one coherent view.
I've been thinking about the operator experience for a while. Self-hosted software should give you real tools for real operations work — not just an admin UI built for end users. LazyOcteth is a step in that direction.
Recurring Campaigns: Eight Targeted Fixes
Recurring campaigns are one of the more complex features in Octeth, and they had accumulated some genuine rough edges. This release addresses eight specific issues that were affecting scheduling, cloning, and delivery.
The headline ones:
Foreign key violations on clone — Cloning a recurring campaign could trigger database constraint errors under certain conditions. This was blocking teams who relied on cloning as their workflow for managing recurring campaigns. Fixed.
NULL options field crash — Recurring campaign clone operations would fail if the Options field was NULL or empty. This edge case was more common than expected in older setups. Fixed.
Scheduling and state management — Multiple fixes addressed how recurring campaigns track and manage their own state across scheduling cycles. Campaigns getting stuck, not respecting their schedule correctly, or entering inconsistent states — these are the kinds of bugs that are hard to reproduce but very disruptive when they hit.
I'll be honest: recurring campaigns are hard to get right. The scheduling logic, the interaction with the send engine, the state machine that governs when a campaign moves between states — there are a lot of moving parts. We've addressed the most reported issues in this release, and we'll continue monitoring.
Send Engine Reliability
The send engine received three targeted improvements that affect reliability under load and in containerized environments:
Worker allocation improvements — The logic that distributes work across send engine workers has been improved, along with added monitoring capabilities so we can observe worker utilization directly. This helps with both performance and diagnosability — knowing which workers are busy versus idle.
Resilient process spawning — We replaced the underlying process management library (ReactPHP Process) with proc_open for spawning worker processes. This change prevents a class of spawn failures that would silently leave the send engine short-staffed. If workers weren't spawning correctly, messages could queue up without obvious symptoms — now that failure mode is eliminated.
Dynamic container discovery — In Docker deployments, the send engine was previously looking for workers using hardcoded container names. We've moved to dynamic container discovery, which makes deployments more flexible and eliminates a category of configuration errors.
None of these are user-visible features in the traditional sense, but they directly affect whether high-volume sends complete reliably. That matters.
Email Personalization: Modern Merge Tags
We've updated the UI to use handlebar-style merge tags ({{Subscriber.FirstName}}) as the standard syntax, replacing the legacy %Subscriber:FirstName% format that's been around since Octeth's early days.
The legacy format still works — we're not removing it — but new UI elements will guide you toward the modern syntax. We've also added Lex parser support for custom email headers, so you can use personalization tags in header values the same way you use them in email bodies.
If you have templates using the old syntax, they'll continue to work. This is a gradual transition, not a forced migration.
New API Endpoints
Two new API additions for teams building integrations or managing multi-user Octeth deployments:
Email Template CRUD API — Create, read, update, and delete email templates programmatically via the v1 API. If you're managing template libraries across multiple accounts or building an integration that provisions templates, this fills a gap that a number of customers had raised.
Journey Copy-to-User — The new journey.copytouser admin endpoint lets you copy a journey from one user account to another. This is particularly useful in agency and multi-tenant setups where you want to share journey configurations across accounts without manual recreation.
Safer Upgrades
The upgrade command now uses --checksum --backup instead of rsync --delete when syncing files during an upgrade. What that means in practice: instead of aggressively deleting files that don't match the new version, the upgrade process now creates backups of files it modifies and only updates files that have actually changed.
This is a meaningful safety improvement. The old approach could silently remove custom files or configurations that happened to not be in the standard installation. The new approach is conservative by default — your files are preserved, and the upgrade still works correctly.
It's the kind of change that only matters when something goes wrong. But when something does go wrong during an upgrade, you'll be glad the backups are there.
What This Release Adds Up To
v5.8.2 is a release about polish and reliability. The campaign UX improvements make the day-to-day workflow noticeably smoother. The recurring campaign fixes address long-standing issues that affected a subset of users significantly. The send engine improvements make the delivery pipeline more dependable. LazyOcteth gives infrastructure operators a proper monitoring tool.
Forty-eight commits in 12 days. No breaking changes. The platform is in a better state than it was on March 8.
If you're an existing Octeth client, login to the Octeth Client Area to download v5.8.2.
If you're evaluating Octeth or want to learn more about what it can do for your organization, fill in our contact form and we'll be in touch.
Octeth is a self-hosted email marketing platform built for businesses and agencies that need full control over their email infrastructure. Learn more at octeth.com.