-
v0.9.1 Stable
released this
2026-09-25 16:18:23 +02:00 | 16 commits to main since this releaseThe big catch-up before 1.0: everything still owed from the earlier cycles, every request collected since 0.8, and a long list of fixes. It's a large release — the headlines come first, the full list follows.
✨ New
Newsletter statistics
- A Statistics view next to Newsletters: pick a period (30 days, 90 days, 12 months, everything) and read the tiles — newsletters sent, emails delivered, open rate, click rate, unsubscribe rate, cold subscribers.
- Month by month: a chart of emails sent with open and click rates on top.
- Newsletter by newsletter: a sortable table with gauges; click a row for the drill-down — time to first open, opens and clicks over the first two weeks, most-clicked links, results by recipient domain, the latest activity.
- By list: how each list performs.
- On the dashboard: a Newsletters row — last 30 days, the latest newsletter, cold subscribers, sends in progress.
- On every sent newsletter: opened / clicked gauges, unsubscribes, time to first open and the top three links.
- For each subscriber: the last twelve newsletters they received, with Opened, N clicks, no sign or Failed.
- Rates only count the people who agreed to be measured, so they stay honest under the consent mode. No charting library: the charts are drawn on the server.
A signup popup
- One popup for the whole site, showing any of your subscribe forms — as a centered window, a corner card or a bottom bar.
- When it shows up: after scrolling, after a delay, when the mouse leaves the page, or only when a visitor clicks a link or button you mark.
- Polite by design: at most once per visit, not again for N days once closed, never again once subscribed. Three presets — Gentle, Balanced, Insistent — and a warning when a setting would nag.
- Where: pick the kinds of pages (posts, pages, front page, archives, your custom post types, WooCommerce products…) and add or exclude URL patterns.
- Preview on the site before switching it on.
Contact-form conversations
- Close a conversation once it's settled — from the inbox, in bulk, or with Send and close straight from the reply box. The visitor's page then says the conversation is closed and points to the form for anything new. Reopen any time.
- A formatting toolbar for visitors (bold, italic, link, lists), switchable per form. What they format is kept everywhere — the inbox, the notification email, the conversation — through the same safe filter as your own replies.
Deliverability
- SPF, DKIM and DMARC proven by a real send: one click mails an identity to itself and reads what the receiving server actually verified — no more guessing from DNS.
- A return address per recipient (VERP), optional per identity: every bounce then names the exact person, even when the reporting server quotes nothing.
- Watch the pace before sending: a Pace button on every draft plays the send as a dry run under your real limits — who goes when, and why it pauses ("waiting on orange.fr").
- Bounce reading rewritten and checked against 796 real bounce reports from about 90 mail systems (Orange, Wanadoo and La Poste included): a full mailbox or a spam-policy refusal no longer retires an address for good, delay notices are no longer counted as bounces, and spam complaints are now recognised.
Subscribers and lists
- Merge one list into another: members, exclusions, newsletter audiences and signup-form defaults all move across.
- One person, one recipient: an address that belongs to a WordPress user now joins your lists as that user when imported, instead of becoming a duplicate subscriber.
- Who downloaded which file: a Downloaded column in the recipients of a newsletter, and each file's download count opens the list of people who fetched it.
- "Not measured" filter in the recipients of a newsletter.
Consent you can see and word
- A Measurement column in the subscribers table, and a Consent section in each subscriber's details: their answer, when and where they gave it, what that means under your current setting, and their whole consent history with the exact wording they saw.
- Your own wording for the consent box, site-wide — and per form, by clicking the text in the form editor. The box is never pre-ticked: under the GDPR a pre-ticked box is not consent.
- The consent box can be added back to a signup form if it was removed (Tracking consent in the field list).
- Where the confirmation link leads: each signup form sends new subscribers to the built-in confirmation page — whose title and message you can now word — or to any page of your site.
Forms
- Custom CSS for every form, and for all contact forms at once — tucked under Customize → Add custom CSS, with the form's class shown ready to copy and a guide with copy-ready examples (en français).
- Three more style settings: button colour on hover, form maximum width, helper and error text size.
- Preset swatches: every style preset now shows its colours, corners or spacing at a glance.
- "Used on" for the preferences page: see which pages carry the Newsletter preferences block.
Permissions
- Give access to one person, from their profile: Newsletters or Inbox for an author or a subscriber account, without changing their role.
- Finer grants: Subscribers only (subscribers, lists, forms, imports — no sending) and Inbox, read-only (follow conversations without answering or deleting).
💅 Improved
- Calmer screens everywhere: explanations moved behind the ⓘ hints, labels that say the unit and what 0 means — 35 paragraphs gone from the admin, none of the knowledge lost.
- One empty state for every "nothing here yet" and "nothing matches these filters" across the admin.
- Styled dialogs replace the browser's own alert boxes that were left in a few places.
- Checkboxes in your forms now follow the size of their text and resist themes that restyle checkboxes; labels no longer follow a theme's text alignment.
🐛 Fixed
- A single checkbox in a contact form lost its label after the editor was reopened and saved.
- The consent box's text could not be edited — the editor saved it empty and the default came back.
- Add list read Ajouter une identité in French.
- The preferences page showed an empty Mailing lists section when no list was open to subscribers.
🔧 Under the hood
Much of this release is invisible, and makes the next ones faster to build and safer to change:
- About 2 650 lines of inline scripts and duplicated markup removed from the admin page classes: the Lists and Subscribers scripts became proper files, the two storage modals share one renderer, the inbox uses the shared detail and confirm dialogs, one asset-versioning helper replaces six copies, and the Subscribers page hands its three modals to their own classes.
- A shared settings-row component replaces the newsletter-only one, on design tokens instead of hard-coded sizes.
- A
readme.txtfor wordpress.org, with the required list of external services (the three hosted captchas, the update check of this build) — the first step toward the 1.0 publication. The license header now reads GPLv2 or later. - Automated browser checks against the test site before each change is handed over.
- Database update (schema 9: closed conversations, per-recipient return address) runs by itself on update.
Requirements
PHP 8.2+ and WordPress 6.8+.
Existing installs update automatically from the WordPress Updates screen. Full history: docs/done.md.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
1 download