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.
September 2024

Release v0.17.0

Max Gurewitz

Hi all, Dittofeed v0.17.0 is short but sweet! This version adds sorting on resource names, fixed a regression in our computed properties pipeline, and introduces a new admin API!

If this project interests you, we'd really appreciate a star on GitHub! You can find our repository at https://github.com/dittofeed/dittofeed.

Release Highlights

Improved: Sorting on Resource Names

You can now sort resource tables by name! This feature was added to:

  • /dashboard/segments
  • /dashboard/journeys
  • /dashboard/templates
  • /dashboard/subscription-groups
  • /dashboard/broadcasts

New: Subscription Management Admin APIs

We’ve exposed our subscription management APIs along the /api/admin/subscription-management path. These APIs are useful for managing user’s subscription states manually. We have one Dittofeed member who’s building their own custom branded subscription management pages!

Fixed: Correct Pagination Logic in Process Assignments

We fixed a regression which was introduced in v0.16.0 which could cause large batches in the “process assignments” step of the computed properties workflow to fail to paginate through all new assignments.

Wrap Up

This release brings a mix of new small features, and bug fixes. We encourage everyone self-hosting dittofeed, to upgrade to this version as soon as they can!

September 2024

Release v0.16.0

Max Gurewitz

Hi all, Dittofeed v0.16.0 is a great little release! This version brings a mixture of new features, performance improvements, and bug fixes!

If this project interests you, we'd really appreciate a star on GitHub! You can find our repository at https://github.com/dittofeed/dittofeed.

Release Highlights

New: GTE and LT Operators for Condition Segments

We've introduced new greater-than-or-equal-to (gte) and less-than (lt) operators for  Trait and Performed segments. This addition allows for more nuanced user targeting, enabling scenarios such as:

  • Targeting users above an age trait threshold.
  • Filtering purchase events, restricting to purchases below a specific price threshold.

A big thanks to Alex Minakov for suggesting this feature!

New: Per Message Node Providers

We now allow message providers to be configured on a per journey message node basis. This is useful when testing out new message providers, allowing you to send a limited subset of your messages from a new provider gradually, while you test it e.g. checking its deliverability.

New: Custom Email Headers

We've introduced support for custom email headers in this release. This feature allows you to add custom headers to your email templates. Custom headers can be useful for various purposes, such as tracking, categorization, or implementing specific email service provider features.

New: External IDs for Workspaces

In preparation for upcoming embedded components, we've added externalId  values to workspaces. This field allows you to track which workspaces are related to your own internal customers, facilitating better integration and management.

See our website for more information on this upcoming feature set, which is designed to allow you to embed Dittofeed inside of your own product!

https://www.dittofeed.com/embeddable-components

Improved: Performance Optimization for Large Workspaces

We’ve fixed the out-of-memory (OOM) errors which would occasionally occur in large workspaces when starting their workflows for the first time.

To address this issue we've implemented:

  • Additional pagination for data transfer between ClickHouse and Postgres.
  • Concurrency limits on assignment transfers.

These improvements eliminates this source of runtime errors during cold starts.

A big thanks to

Fixed: AnyOf Behavior Correction

We've addressed an issue where null values in identify traits or performed properties could override resolved AnyOf user properties. The new behavior ignores null values of child user property nodes inside of AnyOf, providing more intuitive and correct behavior.

Fixed: Webhook Broadcasts and Other Improvements

We've made several other improvements and fixes, including:

  • Fixing a bug which was impacting webhook broadcasts.
  • Various other minor bug fixes and performance enhancements.

Wrap Up

This release brings a mix of new features, performance improvements, and bug fixes that enhance Dittofeed's functionality and stability. We encourage all users, especially those self-hosting Dittofeed, to upgrade to this version to benefit from these improvements.

August 2024

Release v0.15.0

Max Gurewitz

Dittofeed v0.15.0: Huge Performance Improvements and SDK Upgrades

Hi all, we're happy to announce the release of Dittofeed v0.15.0! This version brings a significant performance improvement to our compute properties pipeline, along with important SDK upgrades and bug fixes. If you're self-hosting Dittofeed, you'll definitely want to upgrade to this release as soon as possible.

If this project interests you, we'd really appreciate a star on GitHub! You can find our repository at https://github.com/dittofeed/dittofeed.

Release Highlights

Improved: Massive Performance Boost in Compute Properties Pipeline

We've implemented a collection of small changes to our compute properties pipeline for segments and user properties, resulting in a huge performance win. Here's the story behind this improvement:

  • We recently onboarded a very large client, which put our ClickHouse database under significant pressure.
  • Before onboarding, our compute properties workflow had a duration of ~20 seconds.
  • After onboarding, the duration began climbing quickly, peaking at 3 minutes per run.
  • We rushed to implement optimizations as quickly as possible.
  • Now, the duration has been reduced to ~3 seconds, representing a ~567% improvement from the baseline!

This optimization is particularly crucial for self-hosted Dittofeed instances supporting large amounts of user events. If you're self-hosting Dittofeed, you'll want this release now!

Upgraded: Node.js and Web SDKs

We've updated our Node.js and Web SDKs with some important new features:

  • Support for retries: This improvement enhances the resiliency of writes, ensuring that batch writes support retries with exponential backoff.
  • New initNew method: This addition supports safely writing to different workspaces from the same program.

Fixed: Various Bug Fixes and Improvements

We've addressed several small but important issues in this release:

  • Event Name Autocomplete UX: The autocomplete functionality in event-triggered journeys was fixed to allow values that haven't been previously observed.
  • SMS Test Interface: Resolved an issue with the test interface for SMS in the template editor when using Twilio. This allows SMS templates to be tested prior to their release.

Wrap Up

If you're self-hosting Dittofeed, you can upgrade by simply incrementing the version tag of the application image. No additional steps are required!

As always, we welcome feedback and contributions to make Dittofeed even better.

Thanks, y’all and until next time!

August 2024

Release v0.14.0

Max Gurewitz

Dittofeed v0.14.0: Enhanced Performance, New Features, and Improved Developer Experience

Hi all, we're excited to announce Dittofeed v0.14.0! This release includes a log of great stuff for you and your team, including:

  • Mechanism to safely retrieve data from your internal API's, and use the data in your journeys.
  • A Dittofeed Helm Chart!
  • Manual segments, for creating a segment based on a hardcoded list of users.
  • Support for Webhook and SMS broadcasts.
  • Substantial performance improvements.
  • Support for email attachments

Special thanks to our new contributors:

@Ima8

@eltociear

@bhanufyi

If this project interests you, we'd really appreciate a star on GitHub. You can find our repository at https://github.com/dittofeed/dittofeed.

Release Highlights

New: Helm Chart

We've added a Helm chart for easy installation of Dittofeed on Kubernetes! We're happy to report that several teams are already using it in production.

Read more about the Helm chart in our docs here.

New: Manual Segments

We've added a manual segments feature, allowing users to specify a discrete list of users (via CSV) to belong to a segment. This is particularly useful for messaging users based on criteria represented outside of Dittofeed, such as analysis done in your data warehouse.

Read more about manual segments in our docs here.

New: Email Attachments Support

We've added support for email attachments, allowing users to pass files with track user events. We've also introduced a File type user property, enabling file references to be rendered in email templates for attachment sending.

Read more about sending email attachments in our docs here.

Improved: Performance Enhancements

We've made several significant performance improvements in this release. We've upgraded Prisma, which now performs SQL joins by default instead of in-memory joins, yielding substantial performance improvements throughout the application. Additionally, we've upgraded the ClickHouse client, reducing the rate of socket disconnect errors and improving the reliability of our API's write path.

We've also optimized the process assignments step of the compute properties pipeline, substantially improving the speed and memory efficiency of recalculating segments and user properties. Our compute properties durations were reduced by a full 50%!

New: Webhook and SMS Broadcasts

We've added support for webhook and SMS broadcasts, allowing users to send one-off messages to external API's and SMS providers.

New: Random Bucket Segment Type

We've implemented a new random bucket segment type, which is useful for randomly assigning a predetermined percentage of users to one of two paths within a journey. This feature is particularly helpful for testing out new paths within your user journeys, or making one off broadcasts.

Read more about random bucket segments in our docs here.

New: Synchronize Properties Option in Webhook Message Node

We've implemented a "Synchronize Properties" option in webhook message nodes. This option ensures that user properties are re-computed before progressing past the node, which is helpful for calculating user properties based on responses from webhook requests. This feature allows developers to reliably integrate their API's to pull data into their journeys.

Read more about the synchronize properties option in our docs here.

Improved: Segment and User Property Enhancements

We've fixed an edge case where segments conditioned on an event being performed 0 times, or using the less than operator, would sometimes produce invalid results. We've also added support for prefix matches for performed segments and performed user properties, providing more flexibility in defining user segments.

New: Webhook Deliveries Rendering

We've implemented rendering of webhook deliveries on the /dashboard/deliveries page, allowing webhook payloads to be viewed in the deliveries table.

Improved Webhook Message Tags

We've added support for rendering tags in webhook templates, allowing you to send metadata about the journey and template responsible for sending the webhook to your API. This can be useful for attribution, analytics, and more.

Read more about webhook message tags in our docs here.

{
 "config": {
   "url": "<https://httpbin.org/post>",
   "method": "POST",
   "headers": {
     "Content-Type": "application/json"
   },
   "data": {
     "tagValues": {
       "workspaceId": "{{ tags.workspaceId }}",
       "runId": "{{ tags.runId }}",
       "messageId": "{{ tags.messageId }}",
       "userId": "{{ tags.userId }}",
       "templateId": "{{ tags.templateId }}",
       "nodeId": "{{ tags.nodeId }}",
       "journeyId": "{{ tags.journeyId }}"
     }
   }
 }
}

Improved: Admin API's

We've improved the admin API's to allow for more flexibility in creating and updating resources. They now extend to creating and updating segments, user properties, and journeys.

Improved: Track Event Autocomplete

We've implemented autocomplete for event names and their properties in the segment editor, user property editor, and journey builder, making it easier and less error prone to edit these resources.

Fixed: Various Improvements and Bug Fixes

We've fixed a race condition in data loading for the settings file, improving the reliability of our settings management. We've also reduced table TTL's, addressing an issue with excessively long TTL's on ClickHouse updated_* tables, which yields significant space savings.

New: HyperDX Integration

We've added dedicated support for emitting logs to HyperDX with correlated logs and traces. This new feature allows users submitting Dittofeed logs and traces via OpenTelemetry to HyperDX to correlate those signals, providing enhanced visibility into system behavior.

Telemetry

We've added telemetry to Dittofeed. This will allow us to understand how developers are hosting and using Dittofeed. All data collected is totally anonymous.

Emitted signals currently include:

  • The current total number of users.
  • The current total number of sent messages

If you'd like to disable this telemetry, you can pass the environment variable   DITTOFEED_TELEMETRY_DISABLED.

Wrap Up

Release v0.14.0 brings substantial improvements to Dittofeed. If you're self-hosting Dittofeed, make sure to read our upgrade guide at https://docs.dittofeed.com/deployment/self-hosted/upgrade-guide/v0-14-0.

We're excited to see how our users leverage these new features. As always, we welcome your feedback and contributions to make Dittofeed even better. Until next time!

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.1.0

Max Gurewitz

Dittofeed 0.1.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!