Releases: Notifuse/notifuse
Release list
v28.3
v28.2
Release 28.2
Postmark Message Stream Support
Postmark integrations now support configurable Message Streams, allowing a single Postmark account to be used for both transactional (outbound) and broadcast/marketing emails. The stream ID can be set in workspace integration settings.
Contacts API: Partial Email Search (#292)
The /api/contacts.list endpoint now accepts partial email strings in the email filter parameter. Previously, the API rejected anything that wasn't a fully-formed email address with a 400 - invalid email format error, even though the underlying query already supported ILIKE partial matching. You can now search by domain (@company.com), username prefix, or any substring.
Broadcasts: MJML Code Mode Fix
Fixed MJML code mode templates failing with "template missing content" error when sending broadcasts. Templates created with the MJML code editor now send correctly.
v28.1
Notifuse v28.1 — Release Notes
What's New
Transactional Emails — Dynamic Preheader Text
Added subject_preview override to email_options, allowing dynamic email preheader text per API call with Liquid templating support.
Templates — Language Selection for Test & Preview
Added language selection to the "Send Test Email" modal and "Preview Template" drawer, allowing users to preview and test translated email variants.
Demo — Multi-Language Email Templates
The demo workspace now includes French and Spanish translations for all 4 email templates, showcasing the multi-language feature.
Email Builder — mj-liquid Block
Added the mj-liquid block type for embedding raw MJML+Liquid code in the visual editor. This enables dynamic structural content like for-loops generating columns or conditional sections.
Improvements
- Templates: Downloaded template files now use the template's name as filename instead of a generic name (#286)
Security
- Upgraded liquidjs to 10.25.0
v28.0
Notifuse v28.0 Release Notes
What's New
Visual or MJML — You Choose
When creating a new email template, you can now pick between the visual drag-and-drop builder or the MJML code editor. Use whichever workflow fits the task.
Template Translation
Email templates can now be translated into every language configured in your workspace settings, making it easier to run multi-language campaigns from a single template.
Configurable SMTP EHLO Hostname
Some SMTP servers reject the default EHLO localhost greeting. You can now set a custom EHLO hostname (e.g. your own domain) via:
- The
SMTP_EHLO_HOSTNAMEenvironment variable - The setup wizard
- Workspace integration settings
When left empty, the hostname defaults to the SMTP host value.
Bug Fixes
- Contacts — Removed the invalid "Blacklisted" status from the change-status dropdown and replaced it with the correct "Bounced" and "Complained" options.
- Transactional Notifications — Delivery stats (sent, delivered, failed, bounced) were always showing 0. Messages are now linked to their originating notification via a new
transactional_notification_idcolumn. - Email Builder —
<mj-attributes>global styles now apply correctly in both preview and sent emails.
Upgrade Notes
This release includes a workspace database migration that adds a transactional_notification_id column to the message history table. The migration runs automatically on startup and is backward-compatible.
No manual action is required.
v27.4
- Notification Center: Fixed browser language auto-save overwriting contact's manually chosen language. Now only auto-detects when contact has no language set.
- Email Builder: Fixed missing MJML component defaults (border-radius, borders, background, direction, textAlign) causing styles not to render in the WYSIWYG editor
- Transactional Emails: Added
subjectoverride toemail_options, allowing dynamic email subject lines per API call with Liquid templating support (#281)
v27.3
- Segments: Added template filter to email activity conditions, allowing segments like "opened template X at least 3 times"
- SMTP: Fixed TLS override option not working for system emails (magic codes, invitations, alerts). The "Use TLS" toggle was ignored, causing certificate errors on local SMTP relays (#275)
- Automations: Fixed automation emails rendering
{{ notification_center_url }}and{{ unsubscribe_url }}as empty strings by using the shared template data builder (#279) - Segments: Fixed race condition where background task execution could pick up unrelated tasks, causing flaky segment recompute behavior
- Security: Upgraded rollup to 4.59.0 and minimatch to 10.2.4
v27.2
v27.2
Bug Fixes
- Fixed 502 panic when calling
/api/contacts.listwithoutlimitparameter - Fixed email builder block toolbar not appearing on divider blocks
- Fixed Liquid template variables not rendering in email preview (Tiptap v3
issue) - Fixed double-slash URLs when API endpoint has trailing slash
Security
- Upgraded fast-xml-parser to 5.3.6
Updates
- Anthropic Sonnet model updated to
claude-sonnet-4-6
v27.1
Release 27.1 - February 14, 2026
What's New
- Automations: Per-email integration override — choose which email provider sends each email node, enabling IP warming and load distribution (#257)
Changes
- Updated Anthropic Opus model from
claude-opus-4-5-20251101toclaude-opus-4-6
Fixes
- Segments: Allow
count_value=0in activity conditions to support "never did X" segments (#249) - Security: Upgraded markdown-it to 14.1.1
v27.0
v27.0
New Features
- Broadcast Data Feeds: Added external data feed integration for broadcasts, allowing dynamic content injection from external APIs
- Global Feed: Fetch data once before broadcast starts, available to all recipients via
{{ global_feed.* }}template variable - Per-Recipient Feed: Fetch personalized data for each recipient via
{{ recipient_feed.* }}template variable - Custom HTTP headers support for API authentication
- Automatic retry with circuit breaker protection
- SSRF protection with URL validation (blocks localhost and private IPs)
- Real-time feed testing from the broadcast editor
- Global Feed: Fetch data once before broadcast starts, available to all recipients via
Database Migration
- Added
data_feedJSONB column tobroadcaststable (workspace migration) - Added
recurring_intervalandintegration_idcolumns totaskstable (system migration)
Fixes
- Upgrade from v26: Fixed startup crash when upgrading from v26 due to index referencing
integration_idcolumn before the migration could add it - SMTP M365 OAuth2: Fixed XOAUTH2 authentication to use sender email instead of fixed auth email, resolving SendAs permission errors and incorrect Sent folder placement (#250)
- File Manager: Sanitize uploaded filenames by replacing spaces with dashes and lowercasing extensions (#252)
- Broadcasts: Fixed custom endpoint URL not propagating to click tracking and open tracking URLs in sent emails (#254)
- Email Builder: Fixed text color/background changes not applying when re-selecting already-styled text in the rich text editor
- Contacts: Bulk import now processes contacts in batches of 500, fixing crashes on large imports and improving performance