notifuse

module
v0.0.0-...-63d70e5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 17, 2026 License: AGPL-3.0, AGPL-3.0-or-later

README ΒΆ

Notifuse

Go Report Card Go codecov

☁️ 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.

Email Editor

πŸš€ 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.

Directories ΒΆ

Path Synopsis
cmd
api command
hmac command
internal
app
domain
Package domain β€” bounce classification.
Package domain β€” bounce classification.
domain/mocks
Package mocks is a generated GoMock package.
Package mocks is a generated GoMock package.
service/broadcast/mocks
Package mocks is a generated GoMock package.
Package mocks is a generated GoMock package.
pkg
geoip
Package geoip resolves IP addresses to coarse locations using a MaxMind GeoLite2/GeoIP2 City database.
Package geoip resolves IP addresses to coarse locations using a MaxMind GeoLite2/GeoIP2 City database.
mocks
Package pkgmocks is a generated GoMock package.
Package pkgmocks is a generated GoMock package.
tests
Package webanalyticssdk embeds the built browser SDK so the Go binary serves it directly (routes /na.js and /na.<hash>.js).
Package webanalyticssdk embeds the built browser SDK so the Go binary serves it directly (routes /na.js and /na.<hash>.js).

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL