Changelog

Product Changelog

Stay informed about new product features and updates on a monthly basis.
Subscribe for product updates
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
April 2024

Release v0.13.1

Max Gurewitz

Dittofeed v0.13.1: Webhooks and Admin API

Hi all, this post announces Dittofeed v0.13.1 which includes some really big new features.

  • A new Webhook Channel for making arbitrary API requests from journeys.
  • And Admin API for managing your workspace programmatically.
  • A rework to the publishing UX of template drafts.

This release brings a new contributor:

If this project interests you, we'd really appreciate a star on github!

https://github.com/dittofeed/dittofeed

Release Details

New: Webhook Channel

The new Webhook channel is Dittofeed's most versatile channel, allowing API requests to be sent to any number of services from user Journeys. This is great for:

  • Sending messages with your own internal APIs.
  • Supporting messaging channels which Dittofeed hasn't built out dedicated support for.

These use cases span:

  • Sending Slack messages.
  • Native mobile push.
  • Triggering messages from a proprietary email or SMS API.

and more.

New: Admin API

The Admin API allows you to manage your Dittofeed workspace programmatically.

This release exposes several Admin endpoints, including:

These endpoints are prefixed with the path /api/admin. Unlike public /api/public endpoints, Admin API endpoints require an Admin API key.

Improved: Template Publishing Flow

We've released a much-improved template editor that allows you to compare your published templates with your current draft! This change provides a visual warning when you have unpublished changes and buttons for publishing and reverting your draft changes.

Fix: Subscription Link Corner Case

Fixed a corner case with unsubscribe link rendering, which could arise with numeric user IDs.

Improved: Collapsible Template

You can now collapse the user properties panel in the template editor to save space while authoring your template! Thank you, Ananthu Kurup, for contributing this feature!

Wrap Up

Release v0.13.1 is a big release for Dittofeed with some really important features.  If you're self-hosting Dittofeed, make sure to read our upgrade guide:

https://docs.dittofeed.com/deployment/self-hosted/upgrade-guide/v0-13-0

Until next time!

March 2024

Release v0.12.1

Max Gurewitz

Dittofeed v0.12.1: Optimizations and Fixes

Hi all, this post announces Dittofeed v0.12.1 which includes some very important optimizations and fixes, along with a few new features.

These include:

  • A new "NotEquals" operator for segments.
  • Substantially improving the memory efficiency of Dittofeed's computed property engine.
  • Adding additional subscription email headers in compliance with the bulk Email sender guidelines.
  • Improve Dittofeed's messaging stats, handling cases where downstream messaging services send conflicting responses.
  • A fix for the namespacing of Resend integration credentials.

If this project interests you we'd really appreciate a star on github!

https://github.com/dittofeed/dittofeed

Release Details

New: "NotEquals" Segment Operator

You can now condition a segment on a user not having a particular trait. You might use this to, for example, exclude paid users from your messaging.

Improved: Query Memory Efficiency

We made several substantial improvements to the memory efficiency of our computed property engine, responsible for computing user property and segment assignments. These improvements were made to two categories of queries.

  • Queries used to re-assign user properties.
  • Queries used to re-compute the incremental state, used to aggregate both user properties and segments.

In our cloud application, these two types of queries showed a high variance in memory consumption across workspaces and time. The optimizations included in v0.12.1 succeeded in an approximate reduction of tp99 memory consumption for the above query types by the following amounts in our workspaces.

  • User property reassignments: ~94%
  • Incremental state inserts: ~76%

Specifically, we learned that ClickHouse’s JOIN operations consume a lot of memory, so we removed several of them!

Improved: Subscription Email Headers

In this release, we've added headers to emails related to assigned subscription groups in compliance with Bulk email sender guidelines. These headers include:

  • List-Unsubscribe-Post
  • List-Unsubscribe
  • List-ID

Improved: Handle Message Stats Edge Case

We discovered an edge case where Sendgrid would apparently fail to send an email due to rate limits but later notify Dittofeed they had delivered the email. This "double counting" leads to invalid statistics. This edge case has been handled in the latest release.

Fix: Namespacing Resend Credentials

Our Resend integration had previously stored its credentials in a database record, which shared a namespace with that of our Sendgrid integration. This has been corrected.

Wrap Up

Release v0.12.1 includes some really important improvements to Dittofeed. If you're self-hosting Dittofeed, make sure to read our upgrade guide.

https://docs.dittofeed.com/deployment/self-hosted/upgrade-guide/v0-12-0

Until next time!

March 2024

Release v0.11.0

Max Gurewitz

Dittofeed v0.11.0: Journey Drafts and Percentages, User Filters, and more

Hi all, Dittofeed v0.11.0 includes some very impactful improvements to Dittofeed.

We made big changes to the way you work with journeys. We added Journey Drafts, which allow you to save your incremental progress. We also added Journey percentages, which allow you to see users' paths through journeys.

Next, we added support for rendering SMS stats on Journeys, which had previously been available only for Email.

We totally reworked our Resource tables for Journeys, Messages, Segments, and others, improving their UI and conveniently displaying related resources.

Finally, we made some improvements to the /dashboard/events page.

This release brings with it a new contributor.  A big welcome and thank you to Wr4th100.

We also saw some return contributors who made important contributions.

Release Details

New: Journey Percentages

With this new feature, you can view the percentage of users that are progressing within journeys. This feature is very useful for understanding how journeys are behaving in production.

New: Journey Drafts

With this new feature, Dittofeed will automatically save a draft of your journey before you publish your changes. This is convenient if you want to be able to save your progress in updating a journey without users being able to see the changes right away. Here's a video demoing the feature!

Sorry, your browser doesn't support embedded videos.

Improved: Resource Tables

This addition improves the look and functionality of several pages and their tables:

  • /dashboard/journeys
  • /dashboard/templates
  • /dashboard/broadcasts
  • /dashboard/templates
  • /dashboard/segments
  • /dashboard/user-properties

These tables now allow you to view related resources, e.g., the journeys that use a given template or segment, the templates used by a given user property, etc.

A big thanks to Wr4th100 for making this improvement happen!

They also provide more insight into the rate at which segments and user properties are recomputed, with a "Last Recomputed" column.

New: User Filters

This feature allows you to filter users by their user property values, or segment assignments. This provides a convenient way to explore your user data. A big thanks to oliverqx for contributing this feature!

New: SMS Stats

Previously messaging statistics concerning message deliverability, available both on the /dashboard/messages page, and when viewing a particular journey, were only viewable for email. This release made them available for SMS as well. This is a really important addition. A big thanks to neo773 for this addition!

Improved: /dashboard/events Performance

This release included a radical simplification of the clickhouse query powering the /dashboard/events page, substantially improving its performance.

Wrap Up

Release v0.11.0 includes many high-impact features for Dittofeed, which wouldn't be possible without our amazing contributors!

Until next time!

February 2024

Release v0.10.0

Max Gurewitz

Dittofeed v0.10.0: Transactional Messaging, SES and Postmark, UX Improvements

Hi all, Dittofeed release v0.10.0 is a big release for us. With it, we're releasing support for transactional messaging via Event Entry journeys. This release also adds support for two new email service providers, Amazon SES, and Postmark.

We've also made some key UX improvements, including support for event search, and delivery previews.

Finally, we made some impactful optimizations to our segmentation engine for time based segments.

This release brings with it a number of new contributors.  A big welcome and thank you to,

We also so a number of returning contributors, who we're very grateful for,

Release Details

New: Transactional Messaging via Event Entry Journeys

In big news, Dittofeed now supports for transactional messaging via Event Entry journeys! Event Entry journeys work by triggering a journey whenever a user sends a message with a matching name.

Up untils this point, Dittofeed had been strictly serving the Marketing Email use case case via Segment Entry  journeys.

Event Entry Segments better serve the transactional use case in several respects. They allow an arbitrary number of instances of each journey to be created per user. So for example, one can could an instance of an Event Entry order cancellation journey for every order that a user creates. In contrast, only one instance of Segment Entry journeys can be created per user.

Event Entry journeys are triggered immediately, as soon Dittofeed receives a matching event. This allows Event Entry journeys to be used to send messages much more quickly, which is important for the transactional usecase, which is typically more latency sensitive.  In contrast, Segment Entry journeys must wait until users' segment assignments are recomputed, which can take 10's of seconds.

More information about how to best make use of Dittofeed for transactional messaging is coming soon!

New: Amazon SES Support

Dittofeed now supports Amazon SES as an email service provider, thanks to wreality name. Amazon SES support has been a feature which our users have consistently requested.

Amazon SES is famous for its deliverability guarantees and cost efficiency.

New: Postmark Support

Dittofeed now supports Postmark as an email service provider. Postmark is popular for its deliverability and ease of use. A big thanks to neo773.

New: SMS Tracking via Twilio

Dittofeed now supports tracking the devery rates of your Twilio SMS messages. A big thanks to neo773 contributor.

New: Event Search

Dittofeed now supports search events by event name, message id, or user id. This addition is a big help to workspace members who are trying to understand their users' behavior. A big thanks to Rutik7066 contributor!

Improved: Full JSON Path support

Dittofeed had previously had a limitation that you could not compute a segment or user property on user events which had keys with whitespace. We now support full JSON Path syntax, removing this limitation. { "properties": { "My Property With Whitespace": 1 } ... }

Improved: Optimize Time Based Segmentation

We made big improvements to our segmentation engine, for segments that include measures of time. Improved segments include:

  • "Within" Trait segments.
  • "HasBeen" Trait segments.
  • "Within" Performed segments.

We observed an approximate ~70% reduction in tp95 segment compute times for segments of this type. This is especially impactful because these segments are critical for many common use cases for Dittofeed, including onboarding campaigns, and drip campaigns.

Wrap Up

Release v0.10.0 has been a big release for Dittofeed, which wouldn't be possible without all of our generous contributors!

Until next time!

January 2024

Release v0.9.0

Max Gurewitz

Dittofeed v0.9.0: Resend Support, Dashboard UX, Worker Stability

Hi all, release v0.9.0 comes with a grab bag of awesome features, improvements, and fixes. This release includes Resend support, as well as some major improvements to dittofeed-dashboard's UX, and to the stability and observability of the dittofeed-worker!

It also brings with it a number of new contributors. A big welcome and thank you to:

We also wrote a post on dev.to about our experience optimizing user segmentation in ClickHouse, and would love it if you gave it a read!

https://dev.to/dittofeed-max/how-we-stopped-our-clickhouse-db-from-exploding-2969

Release Details

New: Resend Support

Resend is one the most popular, and fastest growing email service providers. Dittofeed now supports Resend for sending emails.

Shout out to neo773 for contributing this significant feature!

New: Switch Workspaces

We've now provided the ability to easily switch between workspaces. This is an impactful feature which makes it convenient to maintain multiple workspaces for different environments e.g. staging vs production.

New: User Delete Button

We've now added a delete button to the /dashboard/users/[id] page, providing a more convenient way to delete users while testing.

Thanks to mehulmathur16 for this feature!

New: Example User Property Values

You can now configure "example" user properties from the /dashboard/user-properties/[id]  page. The values then provide default mock values when rendering templates in the template editor. This is particularly useful when rendering complex user properties such as arrays of objects.

New: Default "From" Email

We now allow users to configure a default "from" value for email templates, used on creation of the template. This is configured in Dittofeed's email settings /dashboard/settings#email-channel.

Thanks to tobihans for this feature!

Improved: Delete Confirmation Dialogues

We now display confirmation dialogues before allowing workspace members to delete resources including:

  • Templates
  • Journeys
  • Segments
  • Subscription Groups

Thanks to Dhanus3133 for this improvement!

New: Display Workspace Id in Settings

Every workspace has a "workspace Id". It's useful to know this is for debugging purposes, especially for self-hosting users. This is now exposed in the dashboard settings, for convenient access. /dashboard/settings#workspace-metadata

Improved: Hide Internal User Properties

Dittofeed has a concept of "Internal" resources, including internal user properties. Internal resources are created programmatically, rather than configured explicitly by workspace members.

Internal user properties had previously been exposed from the  /dashboard/users/[id] page, and are now hidden.

Improved: Worker Stability

Several key changes were made to improve the stability of Dittofeed's worker.

  • The workflowTaskTimeout was increased for the computed properties workflow responsible for re-computing segments and user properties. Occasionally, this timeout would be hit during deployments.
  • Reduce the total lifespan of the computed properties workflow from ~24 hours to ~2 hours.  These workflows would reach temporals max history length, causing them to fail, which this change addresses.
  • A number of additional custom spans and metrics for observing the performance and stability of the worker.

Fix: Validate Segment JSON Paths

Segments that used JSON path syntax, like trait segments, didn't handle incorrectly specified paths. Now, segments using incorrect paths are skipped, allowing the remaining segments and user properties to be computed as normal.

Upgrading Self-Hosted to v0.10.0

If you're self-hosting v0.9.0 and want to upgrade to v0.10.0 you can use our upgrade guide.

Wrap Up

This is a big release with a lot of new stuff for Dittofeed, which introduced a bunch of new contributors. Until next time.

October 2023

Release v0.6.0

Max Gurewitz

Dittofeed v0.6.0: Polytomic Reverse ETL and Reworked Broadcast Flow

Hey folks, we're back with another significant update: Dittofeed v0.6.0. The highlights of this release are support for reverse ETL via Polytomic reverse ETL and a comprehensive reworking of our broadcast flow. Let's dive into the details!

Release Details

New: Reverse ETL with Polytomic

With our new Polytomic integration, Dittofeed workspace members can now directly pull data from databases like PostgreSQL and MySQL or data warehouses such as Snowflake, BigQuery, and Redshift. This means you can flexibly introduce new events without relying on an engineer to tweak the production codebase with additional event tracking. It's a game-changer, especially for teams running lean on engineering manpower.

See Polytomic's getting started docs, as well as their Dittofeed docs for more information!

New: Simplified Broadcast Flow

Based on your invaluable feedback, we've completely revamped our broadcast flow. We've aimed to make it more intuitive by guiding you through each step:

1. Create a user segment.

2. Craft your template.

3. Submit. That's all there is to it!

We hope to refine this flow further, so please provide whatever feedback you can!

New: Email Test Messages

Sending email test messages can be a great way to ensure that they render correctly in all of the relevant email clients. It's also useful for testing that your credentials for your email service provider are configured correctly.

Finally, this feature is useful for checking that the domain you've configured in your email is authorized in your email service provider. This is a common footgun!

Improved: Speedier Segment Page Load Times

We've substantially sped up load times for the segment configuration page by opting to load event traits lazily on the client.

New: Plaintext Email Example

To help you get started, we've added an example of a plaintext welcome email (footer with company address and unsubscribe link included). It feels personal, rather than overdesigned.

Wrap Up

This release is packed with features aimed at improving your user experience and providing more flexibility in how you engage with your audience. As always, we're eager to hear your feedback, especially if you're leveraging the new Polytomic reverse ETL or trying out our revamped broadcast flow.

On a personal note, I (Max, a co-founder) got married!

Now with Chandler, my co-founder.

Thanks for being a part of the Dittofeed community!

September 2023

Release v0.4.0

Max Gurewitz

Hey folks, we've rolled out Dittofeed v0.4.0, and it's a big one. This release is particularly geared toward those interested in self-hosting Dittofeed. Self-hosting is a great choice if you:

  • Want to try out Dittofeed without a major commitment.
  • Prefer a non-volume based pricing model.
  • Want to keep all your PII securely within your own network.

Release Details

New: dittofeed-lite

We've provided simplified "lite" version of Dittofeed which combines the dashboard, API, and worker into a single easy to deploy application.

New: Render 1-Click Deploy

Now you can deploy Dittofeed to Render with just one click.

This render deployment combines the previously mentioned dittofeed-lite, and single tenant auth mode simplify deployments further. This setup costs $39/month to host, flat.

With additional effort, the render deployment's cost can be reduced further by using alternative hosting for Dittofeed's postgres and clickhouse instances (such as neon and clickhouse cloud), to less than $20/month. Join our Slack to learn more!

New: Message Stats in Journey Editor

Get stats on how your messages are performing right within the journey editor.

New: First Messages Analysis Page Section

View performance stats for your messages across all journeys in a single table.

Improved: Local Development Documentation

Big thanks to new contributor Promise Tochi for adding a missing step to our local development docs.

Improved: Change Node Editor Position

Also from Promise Tochi, the node editor in the journey editor has been repositioned so it doesn't overlap the node palette.

Improved: Dittofeed-Worker Temporal Configuration

More configuration options to better manage memory usage and worker stability.

Contributors

Another warm welcome to our new contributor, Promise Tochi!

We'd love to hear your feedback on these updates in our community.

Thanks for reading!

September 2023

Release v0.3.0

Max Gurewitz

We are excited to present Dittofeed 0.3.0, a significant update that makes Dittofeed more powerful, and easier to use. We've been listening to your feedback, and this release incorporates several community-driven improvements, including crucially a new Dittofeed web sdk and node sdk.

Release Details

New: Self-Host with Render

Use our new 1-click deploy to self-host Dittofeed on Render. See our docs to get started!

New: Web SDK

Introducing our Web SDK, designed for frontend web applications. This SDK allows you to interact with our data APIs from client-side JavaScript.

See:

- Web SDK on npm

- docs

New: Node SDK

Introducing our new Node SDK, which allows you to conveniently access our data APIs to track user traits and behavior from your backend Node app, all without the use of a third-party CDP like Segment. Sending data from your backend is particularly useful for ensuring deliverability, e.g. circumventing ad blockers.

See:

- Node SDK on npm

- docs

Improved: Performance Enhancements

We've made substantial improvements to the memory efficiency and the speed with which the dittofeed-worker updates user properties, segments, and journeys. This translates to benefits for Dittfeed members whose users will be messaged more quickly. These improvements also benefit developers self-hosting Dittofeed, who can now do so more cheaply and reliably.

New: "Any Of" User Property

The "Any Of" User Property computes the last observed value from a set of child sub-user properties. This is especially useful when multiple types of user actions can be used to update the same underlying value. See our docs for more info, and an example of how this might be used.

New: Download Segments

You can now download user segment assignments as a CSV file. This makes it easier to manage and analyze your segments outside of Dittofeed. See the docs.

New: HubSpot Integration

You can now use our HubSpot integration to sync Dittofeed segments to HubSpot as lists. In addition, Dittofeed can now write back email engagements to HubSpot contacts. See our docs  for more info.

Improved: Duration Selector

We've updated the duration selector to offer a more user-friendly experience. Now, you can choose units of time directly within the selector.

Improved: Redirect from "/" to "/dashboard"

We've made an improvement based on the feedback of self-hosting developers. The base path will now automatically redirect to the "/dashboard" path, eliminating the confusion caused by a 404 error when loading the app locally in development.

---

We hope you find these updates as exciting as we do! As always, we are open to your feedback and suggestions. Feel free to create an issue or reach out to us directly.

Have a good one!

July 2023

Release v0.2.0

Max Gurewitz

Dittofeed 0.2.0

Welcome to the second release post for Dittofeed. We are thrilled to share some of the important new features and improvements that we have made.

Release Details

New: Define custom user properties

User properties are a powerful feature in Dittofeed that allow you to define how user events are processed and aggregated to be rendered in your templates. In this release, we're extending this functionality. Now, you can select the latest property value from Track events as a user property to be rendered in the template. Previously, you could only select the latest trait values from Identify events. For more information, see our user properties docs.

Improved: User CSV uploads

We have improved form validation for user CSV uploads. The system now informs you when channel identifying fields such as email or ID are missing.

New: Reply-To headers in emails

We have added a feature that allows you to include 'Reply-To' headers in emails. This allows you to conveniently respond to user responses to your emails, even when they're sent from a different domain. This feature is particularly useful for minimizing risk. You can send emails from a separate subdomain, and if the deliverability of that domain becomes compromised, the consequences are lower.

Improved: Default operator for 'Performed' segments

This release includes a quality of life improvement for 'Performed' segments. When creating performed segments, the default operator is now 'at least 1 times', rather than 'exactly 1 times'. This is a setting that most users require more often. For more information, see our docs.

Improved: Legibility of large journeys

We have improved the layout of nodes in large journeys to make them easier to read. This improvement is accompanied by bug fixes that affect the deserialization of large journeys from the server.

Improved: Unsubscribe links

We have made a couple of important improvements to unsubscribe links. Now, you can customize the text in unsubscribe links, and these links will open in a new tab. For more information, see our [docs](link-to-docs).

<!-- Defaults to the text "unsubscribe". -->
Click here to {% unsubscribe_link %}.

Can now be used as follows,

<!-- "To unsubscribe click here." -->
To unsubscribe click {% unsubscribe_link here %}.

July 2023

Release v0.17.0

Max Gurewitz

Dittofeed 0.17.0

This is the first of (what we hope are many) Dittofeed weekly roundup posts. We want to let the community know what we have been up to.

If you would like us to change the format or include something new, create an issue.

Release Details

New: “Performed” segmentation on Track events

The latest release of Dittofeed introduces a new "Performed" segmentation feature that allows workspace members to segment users based on whether they've performed a Track event, some number of times. This is a great option for segmenting based on some action that a user performs, like performing a purchase.

New: “Wait For” Journey nodes, to wait for users to enter a segment

“Wait For” nodes are a powerful addition to Journeys. They prevent users from progressing within a Journey until they have entered a segment, with some time limit. This provides a useful complement to delay journey nodes for many use cases. For example, you might want to wait to send a second email, until a day after a user has opened a prior email.

New: Email segmentation

Email segmentation allows workspace members to select users that have received a specific email event for a given email template. These events include:

  • Email sent.
  • Email dropped.
  • Email delivered.
  • Email opened.
  • Email clicked.
  • Email bounced.
  • Email marked as spam.

New: admin-cli, a cli project for administering Dittofeed in production

The new admin-cli project is cli which collects helpful scripts for administering Dittofeed in production, and contributing to Dittofeed locally. The admin-cli project comes with its own Dockerfile for running the project.

The admin-cli is useful for bootstrapping your dittofeed application.

# running in development
yarn admin
# running with production docker compose
docker compose -f docker-compose.prod.yaml run admin-cli yarn admin bootstrap

Improved: Upgrade Prisma for smaller runtimes

Dittofeed upgraded its prisma and @prisma/client dependencies from 4.8.1 to 4.16.2 which includes substantial reductions to the size of prisma’s runtime.

Contributors

Shout out to Kaushik for making major contributions to our ongoing effort to support mobile push!