Your app already sends password resets through SES and marketing blasts through a second tool. Product wants onboarding journeys, push, and Slack nudges. Finance notices the bill climbs with every new signup because the engagement vendor prices on contacts and message volume. Pretty soon you are syncing traits to three dashboards just to ask one user a simple question: "did they finish setup?"
Dittofeed (dittofeed/dittofeed, ~3k GitHub stars, MIT, TypeScript/React) is an open-source omni-channel customer engagement platform. Think journeys, segments, and templates in one place, with outbound support for email, SMS, mobile push, WhatsApp, Slack, and more. Upstream positions it as a developer-friendly alternative to tools like Customer.io, OneSignal, and Segment Engage. You can try the UI on the demo dashboard; production docs live at docs.dittofeed.com.
What you get
- User data in — Segment, reverse ETL, or Dittofeed's API so traits and events land where segments and journeys can use them.
- Segmentation — build audiences with operators and conditions; user groups can represent teams or accounts when membership rules need that shape.
- Messaging — one-off broadcasts or event-driven journeys from a visual builder; templates in HTML/MJML or a low-code editor.
- Delivery pipes — wire major ESPs (SendGrid, Amazon SES, and others per current docs); channel coverage spans transactional and marketing use cases.
- Analytics — dashboard views for campaign performance and journey progress (expanding over time on their public roadmap).
- Developer hooks — git-friendly workflows for campaign resources, a testing SDK for CI, journey monitoring and alerting; embeddable UI components exist, with some white-label/multi-tenant embedding called out as part of their commercial offering.
Self-host vs cloud engagement SaaS
Engagement platforms sit on a copy of your customer graph: emails, phone numbers, product events, sometimes payment hints. Self-hosting Dittofeed keeps that profile data and message content inside infrastructure you control. That matters for PIPEDA-conscious Canadian products, finance and health-ish apps with strict vendor review, and anyone tired of "contact count" pricing that punishes growth.
The tradeoff is real ops. A typical Docker Compose self-hosted setup pulls in Postgres and ClickHouse (Kafka is optional depending on compose profile). You override default credentials in .env, set SECRET_KEY and dashboard URLs before anything faces the internet, and plan backups for both databases. This is not a single-container side project; it is closer to running a small product analytics plus messaging control plane. For teams with a platform engineer or a managed VPS partner, that is often still cheaper and clearer than juggling two SaaS contracts.
Quick start
git clone https://github.com/dittofeed/dittofeed.git
cd dittofeed
touch .env
# Uncomment env_file in docker-compose.lite.yaml and set DB/ClickHouse secrets per docs
docker compose -f docker-compose.lite.yaml up -d
Upstream documents port overrides when 3000 or database ports clash with other stack on the host. Set DASHBOARD_URL and DASHBOARD_API_BASE to your public HTTPS endpoints so unsubscribe links and API calls resolve correctly. Their YouTube walkthrough on Docker Compose is linked from the README if you prefer video.
You still bring your own SMS/WhatsApp/push providers and respect consent law (CASL in Canada, GDPR where applicable). Dittofeed orchestrates; compliance and list hygiene stay yours.
Who it is for
Good fit: B2B SaaS with lifecycle email plus in-product onboarding; mobile apps that need push and email from one segment definition; agencies white-labeling engagement for clients on dedicated VPSs; teams migrating off Customer.io-style journeys but wanting a GUI product managers can touch.
Skip it: if a bare transactional email API plus cron is all you need; if you cannot run Postgres and ClickHouse reliably; if you require a fully managed SOC2 bundle tomorrow with zero self-serve work.
Hosting in Canada
Message metadata and user traits at rest should live where your privacy policy says they do. A Canadian CloudBox VPS can host Dittofeed's compose stack with outbound mail still flowing through SES or a Canadian-friendly ESP. Size for ClickHouse growth, snapshot Postgres, and monitor journey workers like any other stateful service. Keeping the control plane in-country does not magically make cross-border ESP delivery "local," but it does put segmentation, templates, and audit trails under your jurisdiction.
Bottom line
Dittofeed is for teams that want journey builders and segmentation without renting someone else's customer database at per-message markup. MIT license, active roadmap, and a stack that expects you to know what Docker Compose is. If that sounds like your engineering culture, it is worth a weekend on the demo app before you port your first lifecycle campaign.
Talk with Swift Host if you want help planning a self-hosted Dittofeed deployment on Canadian infrastructure: TLS, backups, and honest sizing for Postgres and ClickHouse. We are in St. Albert and actually answer the phone.