Dittofeed

Open-source omni-channel customer engagement platform for automating transactional and marketing messages via email, SMS, WhatsApp, Slack, and mobile push.

2.8Kstars
360forks
MIT License
TypeScript

Dittofeed is an open-source customer engagement platform that enables product and growth teams to automate and deliver personalized messages across email, SMS, WhatsApp, Slack, and mobile push notifications — all from a single self-hosted installation. It is positioned as a developer-first alternative to platforms like Customer.io, OneSignal, and Segment Engage, with a strong emphasis on data ownership, self-hosting, and CI/CD-friendly workflows.

The platform provides a visual journey builder for constructing event-driven user lifecycle campaigns, an advanced segmentation engine supporting unlimited AND/OR conditions on user properties and behavioral events, and a low-code template editor (Emailo) supporting HTML, MJML, and Liquid syntax. Developers can connect user data via the Dittofeed API, Segment, or reverse ETL pipelines, and integrate with major email service providers including SendGrid, Amazon SES, and Mailchimp Transactional.

A distinctive capability is the embedded components feature, which allows SaaS companies to integrate Dittofeed’s journey builder, segment builder, and template editor directly into their own applications via iframe or headless React components — enabling white-labeled customer engagement tooling without building from scratch. The underlying architecture uses Temporal for durable workflow orchestration, ClickHouse for high-performance analytics, and Drizzle ORM with PostgreSQL for transactional data, deployed as a Docker Compose stack with a lightweight “lite” single-container option for simpler environments.

What You Get

  • Omni-channel messaging - Send automated and transactional messages across email, SMS, WhatsApp, Slack, and mobile push from a single unified platform.
  • Visual Journey Builder - Build event-driven user lifecycle campaigns with a drag-and-drop GUI that supports branching logic, time delays, and multi-trigger entry conditions.
  • Advanced Segmentation Engine - Define audience segments using unlimited AND/OR logical conditions across user properties, behavioral events, subscription status, and group membership.
  • Emailo Low-Code Template Editor - Design email templates in a Notion-like editor with HTML/MJML import, a command palette, and Liquid syntax for dynamic personalization.
  • Embedded Components - Integrate Dittofeed’s Journey Builder, Segment Builder, and Template Editor directly into your SaaS product via iframe or headless React components.
  • Self-Hosted Deployment - Run on Docker Compose (full stack) or Render, with a lightweight lite container option, keeping all PII within your own VPC.
  • Git-Based Version Control - Store messaging templates and campaign definitions in Git, enabling code reviews, environment promotion, and rollback.
  • Testing SDK for CI/CD - Validate journey logic and message delivery in automated test pipelines before rolling out to production users.
  • Broadcast Campaigns - Send one-off bulk messages to any defined segment, with scheduling and audience filtering built in.
  • ESP & Data Integrations - Connect to SendGrid, Amazon SES, Mailchimp Transactional, Twilio, Google Workspace Gmail, and ingest data from Segment or Reverse ETL.

Common Use Cases

  • SaaS product onboarding automation - A product team defines event-triggered journeys that send welcome emails, Slack notifications, and SMS nudges at specific activation milestones, reducing manual outreach and improving time-to-value.
  • Embedding engagement tools in a platform product - A B2B SaaS company integrates Dittofeed’s segment and template builders into their own admin UI via headless React components, offering customers white-labeled messaging automation without building it from scratch.
  • Transactional notifications with data residency requirements - A fintech or healthcare company routes payment alerts and compliance notifications through a self-hosted Dittofeed instance, ensuring PII never leaves their private VPC.
  • Replacing volume-priced SaaS tools - A growth-stage startup migrates from Customer.io or Braze as MAU counts push pricing tiers, retaining campaign complexity via Git-versioned journeys and CI testing without ongoing per-user cost.
  • Re-engagement broadcast campaigns - A consumer app marketing team runs segmented re-engagement emails and push campaigns to churned users identified by last-active date and subscription tier.
  • Multi-client messaging infrastructure for agencies - An agency deploys Dittofeed EE’s multi-tenant mode to manage isolated email and SMS campaigns for multiple clients from a single installation with per-workspace data separation.

Under The Hood

Architecture Dittofeed is a TypeScript monorepo with a clear service-oriented structure: a Fastify-based API layer, a Next.js dashboard, a dedicated Temporal worker, and shared libraries in backend-lib and isomorphic-lib. The architecture is explicitly event-driven at its core — segment membership and user property computations are handled by durable Temporal workflows that process incremental ClickHouse queries, enabling large-scale audience evaluation without blocking API services. A dependency injection container pattern (DiContainer from isomorphic-lib) decouples service initialization from usage, improving testability and enabling environment-specific configuration. The lite package bundles all services into a single deployable unit for simpler self-hosting scenarios, while the full stack separates concerns for scalable production use.

Tech Stack The platform is built on TypeScript throughout — Next.js with React powers the dashboard, Fastify handles the REST and OpenAPI API layer, and Temporal (v1.14) orchestrates all durable workflows including journey execution, segment recomputation, and broadcast delivery. PostgreSQL with Drizzle ORM (migrated from Prisma) handles transactional data, while ClickHouse serves as the high-throughput analytics store for event ingestion and computed properties. The observability stack includes OpenTelemetry with OTLP exporters, Prometheus for metrics, and Grafana dashboards. Email templating is handled by the custom Emailo editor (built on TipTap) that compiles to MJML. Deployments use Docker Compose with MinIO for blob storage and the Temporal server bundled as a dependency.

Code Quality The codebase has extensive test coverage with 62 test files spanning unit and integration scenarios, including Temporal activity mocking and end-to-end journey execution tests. Type safety is enforced throughout via TypeScript strict mode, with TypeBox used for runtime schema validation across API boundaries, and Neverthrow for explicit result-based error handling that avoids swallowed exceptions. The monorepo uses shared tsconfig bases and consistent ESLint (airbnb-typescript preset) across packages. Drizzle migrations are versioned and tracked, and configuration is validated at startup via TypeBox schemas, catching misconfiguration early. CI runs tests across multiple packages with sharding for speed.

What Makes It Unique Dittofeed’s most distinctive technical choice is the combination of Temporal-based durable workflows with ClickHouse-powered incremental computed properties — segment membership is evaluated as a streaming computation against a columnar store rather than a batch SQL job, enabling large audiences and complex behavioral conditions to be evaluated efficiently without full table scans. The embedded components feature, backed by a licensed EE tier, is architecturally unusual: it exposes Dittofeed’s internal React components as embeddable units so SaaS builders can offer white-labeled messaging automation to their own customers. The Git-based resource management and testing SDK directly address the developer pain point of unversioned, untestable marketing campaigns, which competitors typically leave as a manual process.

Self-Hosting

Dittofeed is released under the MIT License, which is one of the most permissive open-source licenses available. You are free to use, modify, distribute, and run the software commercially with no restrictions. The license imposes no copyleft requirements, meaning you are not obligated to open-source modifications you make. The only requirement is preserving the copyright notice. The core platform — journey builder, segmentation, template editor, broadcast campaigns, and all channel integrations — is fully open-source and free to self-host indefinitely.

Running Dittofeed yourself involves managing a non-trivial infrastructure stack. The full Docker Compose deployment requires PostgreSQL, ClickHouse, a Temporal server (including its dependencies), MinIO for blob storage, and the three Dittofeed application containers (API, dashboard, worker). The “lite” mode bundles these into fewer containers but still requires ClickHouse and Temporal. You are responsible for database backups, ClickHouse tuning for event volume, Temporal worker scaling under load, and monitoring across the observability stack. The project provides Docker Compose files and a Render deploy button for quick starts, along with documented upgrade paths via an admin-cli container — but operational burden is real, particularly around ClickHouse performance at scale and Temporal version compatibility.

Dittofeed also offers a cloud-hosted SaaS tier and a closed-source EE extension (dittofeed-ee) that adds multi-tenancy and the embedded components feature. If you self-host only the open-source version, you are limited to single-workspace deployments and cannot embed Dittofeed components into your own product’s UI. The cloud tier provides managed infrastructure, automatic upgrades, and support SLAs that remove the operational overhead — and the EE tier unlocks multi-tenant architectures for platforms that need to serve multiple isolated customer workspaces from one installation. Embedded components, which let you white-label Dittofeed inside your SaaS product, require contacting Dittofeed for licensing terms.

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack

No spam. Unsubscribe anytime.

Join 750+ subscribers
No spam. Unsubscribe anytime.

Search