Notifuse

βοΈ Notifuse Cloud β from $16/month Β· π― Try the Live Demo
Skip the setup and get started instantly with Notifuse Cloud β fully managed hosting starting at just $16/month.
The open-source alternative to Mailchimp, Brevo, Mailjet, Listmonk, Mailerlite, and Klaviyo, Loop.so, etc.
Notifuse is a modern, self-hosted emailing platform that allows you to send newsletters and transactional emails at a fraction of the cost. Built with Go and React, it provides enterprise-grade features with the flexibility of open-source software.
π Key Features
π§ Email Marketing
- Visual Email Builder: Drag-and-drop editor with MJML components and real-time preview
- Campaign Management: Create, schedule, and send targeted email campaigns
- A/B Testing: Optimize campaigns with built-in testing for subject lines, content, and send times
- List Management: Advanced subscriber segmentation and list organization
- Contact Profiles: Rich contact management with custom fields and detailed profiles
π Automations
- Visual Flow Builder: Build multi-step journeys on a canvas β each automation is a graph of nodes with a single trigger as its root
- Node Types:
delay, email, branch, filter, add_to_list, remove_from_list, ab_test, webhook, and list_status_branch
- Timed Delays: Wait minutes, hours or days between steps
- Branching & Filters: Split a journey on contact conditions, or on a contact's status in a given list
- A/B Testing In-Flow: Weighted variants inside an automation, not just on broadcasts
- Webhook Steps: Call an external URL mid-journey, with retry budget
- Enrollment Control: Enroll a contact
once or every_time the trigger fires, with optional exit_on_reply
- Per-Contact State: Every enrollment tracks its own status (
active, completed, exited, failed) and current node, with a per-node history (entered, processing, completed, failed, skipped)
- Draft / Live / Paused: Edit safely, then publish β paused automations hold their enrollments
π§ Developer-Friendly
- Easy Setup: Interactive setup wizard for quick deployment and configuration
- Transactional API: Powerful REST API for automated email delivery
- Webhook Integration: Real-time event notifications and integrations
- Liquid Templating: Dynamic content with variables like
{{ contact.first_name }}
- Multi-Provider Support: Connect with Amazon SES, Mailgun, Postmark, Mailjet, SparkPost, SendGrid, and SMTP
π Analytics & Insights
- Open & Click Tracking: Detailed engagement metrics and campaign performance
- Real-time Analytics: Monitor delivery rates, opens, clicks, and conversions
- Campaign Reports: Comprehensive reporting and analytics dashboard
π Web Analytics (Staminads)
Privacy-first, cookieless web analytics built in β the Staminads feature set merged into Notifuse, running entirely on PostgreSQL (no ClickHouse, no extra services):
- Engaged-time sessions: sessions measure real visible/focused time (TimeScore), not wall-clock guesses; bounce rate is engagement-based
- Channel attribution: 40 default rules classify traffic (paid click-ids like gclid/fbclid, organic search, social, email) β fully editable per workspace, with one-click backfill of historical data when rules change
- Goals & custom dimensions: conversion tracking with values and properties, plus 10 custom dimension slots (
custom_1..custom_10)
- Cookieless & GDPR-friendly: no cookies, no visitor fingerprinting, IPs used only for optional geo lookup and never stored
- Lightweight SDK: ~21 KB gzipped script served by your own Notifuse instance (
/na.js); the user agent is parsed in the browser, so the raw string is never sent to the server
- Setup: enable Web Analytics on a workspace, paste the snippet from its settings page, done. Country, region and city come from the MaxMind GeoLite2 City database shipped in the image at
/app/geoip/GeoLite2-City.mmdb β to keep it fresher, drop your own copy into the mounted data/ directory as GeoLite2-City.mmdb (it takes precedence) or set GEOIP_DB_PATH (see geoipupdate). This product includes GeoLite2 data created by MaxMind, available from maxmind.com
- Data retention: every session is kept for as long as you keep it. Monthly partitions (
web_sessions_y2026m08 and its web_pages_* / web_goals_* siblings) are created automatically, and expiring old data is a deliberate DROP TABLE on the partitions you no longer want β instant, and the disk comes back immediately
- Scale path: data lives in monthly-partitioned tables per workspace; heavy-traffic installs can run AlloyDB Omni via
compose.alloydb.yaml and get columnar-engine acceleration for dashboard queries with zero schema changes
- Requirements: PostgreSQL 17 or newer (the shipped compose file stays on 17 β upgrading a major version needs
pg_upgrade, and PostgreSQL 18 also changed its data directory layout)
π¨ Advanced Features
- S3 File Manager: Integrated file management with CDN delivery
- Notification Center: Centralized notification system for your applications
- Responsive Templates: Mobile-optimized email templates
- Custom Fields: Flexible contact data management
- Workspace Management: Multi-tenant support for teams and agencies
ποΈ Architecture
Notifuse follows clean architecture principles with clear separation of concerns:
Backend (Go)
- Domain Layer: Core business logic and entities (
internal/domain/)
- Service Layer: Business logic implementation (
internal/service/)
- Repository Layer: Data access and storage (
internal/repository/)
- HTTP Layer: API handlers and middleware (
internal/http/)
Frontend (React)
- Console: Admin interface built with React, Ant Design, and TypeScript (
console/)
- Notification Center: Embeddable widget for customer notifications (
notification_center/)
Database
- PostgreSQL: Primary data storage with Squirrel query builder
π Project Structure
βββ cmd/ # Application entry points
βββ internal/ # Private application code
β βββ domain/ # Business entities and logic
β βββ service/ # Business logic implementation
β βββ repository/ # Data access layer
β βββ http/ # HTTP handlers and middleware
β βββ database/ # Database configuration
βββ console/ # React-based admin interface
βββ notification_center/ # Embeddable notification widget
βββ pkg/ # Public packages
βββ config/ # Configuration files
π Documentation
π€ Contributing
We don't accept pull requests. Notifuse is developed in-house, and unsolicited pull requests will be closed without review β please don't spend your time on one.
Issues, on the other hand, are very welcome and are the best way to help:
- Report a bug β steps to reproduce, your version, and what you expected instead
- Request a feature β describe the problem you're trying to solve rather than a specific implementation
The license grants you every right to fork Notifuse and modify it for your own use. If we ever invite a code contribution directly, we'll agree on the terms with you at that point.
π License
Notifuse is released under the GNU Affero General Public License v3.0.
π Support
π Why Choose Notifuse?
- π° Cost-Effective: Self-hosted solution with no per-email pricing
- π Privacy-First: Your data stays on your infrastructure
- π οΈ Customizable: Open-source with extensive customization options
- π Scalable: Built to handle millions of emails
- π Modern: Built with modern technologies and best practices
- π§ Developer-Friendly: Comprehensive API and webhook support
Ready to get started? Try the live demo or deploy your own instance in minutes.