Product Changelog
Release v0.17.0
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!
Release v0.16.0
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.
Release v0.15.0
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!
Release v0.14.0
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:
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!
Release v0.13.1
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:
- POST /api/admin/users: Search users
- DELETE /api/admin/users: Delete all events and computed property assignments for users.
- GET /api/admin/events: Search user events.
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!
Release v0.12.1
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!
Release v0.11.0
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!
Release v0.10.0
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!
Release v0.9.0
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.
Release v0.6.0
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!
Release v0.4.0
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!
Release v0.3.0
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:
- 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:
- 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!
Release v0.2.0
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 %}.
Release v0.1.0
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!