Changelog

The latest releases and improvements to Knock.

Feature illustration

Today we're excited to introduce a completely rebuilt CSV uploader that makes it faster and easier than ever to upload users for broadcasts, with a powerful new feature that lets you include ephemeral data that won't clutter your user schema.

Lightning-fast uploads with instant feedback

We've rebuilt the CSV uploader from the ground up with performance in mind. The uploader now opens instantly and processes uploads in seconds, giving you real-time feedback as users are added to your broadcast or audience. You'll see the user count update live as your file is processed, making it easy to track progress and confirm your upload is working as expected.

Streamlined column mapping with full control

The new mapping interface gives you complete control over your data. You can easily add new columns, rename incoming columns, or skip unnecessary ones. This flexibility means you can work with any CSV structure without having to modify your files beforehand.

Per-recipient broadcast data

Here's the game-changer: when uploading users for a broadcast, you can now categorize CSV fields as either "user data" or "broadcast data". User data gets saved to your user schema as usual, but broadcast data is used only for that specific broadcast.

Categorizing data as user or broadcast fields

This is perfect for including one-time information like:

  • Promotional discount codes unique to each recipient but not necessary to reuse
  • Event-specific details like seat numbers or session times
  • Usage metrics relevant only to that broadcast

Previously, if you wanted to include this type of data in your broadcasts, you'd have to store it permanently on your user records with no easy way to clean it up later. Now you can keep your user schema clean while still personalizing broadcasts with rich, contextual data.

Save uploaded users as reusable audiences

When uploading users to a broadcast, you still have the option to save them as a new audience that can be reused for future broadcasts. This makes it easy to build and maintain audience segments without having to re-upload the same users repeatedly.

Option to save uploaded users as a new audience

Fixes and improvements

  • πŸ› [In app feed] We fixed an issue where the realtime feed didn't update after marking all archived.
  • πŸ› [CLI] We fixed a regression with the push all command in the CLI.
  • πŸ› [Dashboard] We fixed an issue where searching for a source event with a space would return no results.
  • πŸ› [Dashboard] We fixed an issue where setting user preferences in the UI would fail even though setting via the API worked for the same payload.
  • πŸ› [Dashboard] We fixed an issue where workflow categories with spaces would break.
Meryl Dakin
Meryl Dakin
Feature illustration

Today we’re excited to share a new Changes tab on every versionable resource in the Knock dashboard and an improved commits experience.

New tab for resource-specific version control

On versionable resource pages, we introduced a new tab titled "Changes". This tab gives you a more detailed view of the changes you've made to your resource. You can see the changes you've made, the commits that need promoting, and a history of when your resource was last promoted.

changes tab

You'll also be able to see the historical commits for that resource, enabling full visibility into the changes that have been made to your resource over time.

commit history

Commit and promote changes directly from any resource

We've added the ability to commit and promote changes directly from any resource. This means you can now make changes to a workflow, email layout, or any other versionable resource and commit those changes without leaving the page. The new commit flow provides a clear summary of your changes and lets you add a descriptive message before committing.

Once committed, you can promote those changes to the next environment too, right from the resource page. This streamlines the process of moving changes through your environments.

View changes across environments

The new changes tab also enables you to view the overall status of your resource across environments. Previously, it was difficult to know when a resource had unpromoted commits in other environments. Now, we have a special indicator that introduces a visual cue to help you identify when a resource has uncommitted changes or unpromoted commits in other environments.

unpromoted commits

And when a resource is synchronized across all environments and in production, you'll see a green checkmark to indicate that the resource in its current state is live in production and the same across all environments.

unpromoted commits

Fixes and improvements

  • πŸ› [MCP] We fixed an issue where creating a new partial from the MCP server crashes partials list.
  • πŸ‘€ [Dashboard] We added filtering for messages under users/tenants/objects.
  • πŸ‘€ [Dashboard] We improved the translation editing experience.
  • πŸ‘€ [Dashboard] Introduced breadcrumb navigation for the dashboard.
  • πŸ› [Dashboard] We fixed an issue where previewing a message would mark it as "read" inadvertently.
  • πŸ‘€ [Docs] We added Guides tooling to the Agent Toolkit docs.
  • πŸ‘€ [SDK] We added a usePreferences hook to the React SDK.
  • πŸ› [API] We fixed an issue with plaintext link parsing.
Mike Carbone
Mike Carbone
Feature illustration

Today we’re excited to share a set of improvements to our JavaScript SDKs that make them more flexible, modern, and easier to work with across environments.

Our @knocklabs/react package now has support for React Sever Components. This unlocks full compatibility with Next.js App Router and other frameworks, allowing you to use the SDK in both server and client components.

We migrated our internal store from zustand to @tanstack/store. This means finer control over state updates, better TypeScript support, and a smaller overall bundle size. It also unifies store logic across packages, reducing the surface area for bugs and improving long-term maintainability.

Finally, we’ve revamped our release pipeline to support canary and release candidate (RC) versions. Teams can now opt into early versions of our SDKs, test upcoming changes, and provide feedback before a stable release. With this change, we will now ship fixes and features more confidently, with a clear and gradual path to general availability.

Fixes and improvements

  • πŸ› [Dashboard] We fixed an issue where the "Alerts" workflow template was broken.
  • πŸ› [Dashboard] We fixed an issue with the search input when interacting with it from the Command+K menu.
  • πŸ› [Dashboard] We fixed an issue where the "Discard changes" button didn’t work in the translations editor.
  • πŸ› [Dashboard] We fixed an issue where the diff viewer was cut off in Safari.
Kyle McDonald
Kyle McDonald
Feature illustration

Today we're excited to announce scheduling and analytics for guides. These features give you more control over when your guides are active and provide insight into how they're performing.

With guides scheduling, you can now control exactly when your guides activate and deactivate. This is perfect for time-sensitive announcements, seasonal promotions, and other in-product messaging.

We've also added an analytics summary for guides, giving you visibility into how your in-product messages are performing. The summary shows total potential audience size and the number of users who have seen, interacted with, and archived a guide. You can view these metrics as either raw numbers or as percentages of the total audience.

Fixes and improvements

  • πŸ› [Dashboard] We fixed an issue where breadcrumbs were not displaying correctly on some pages.
  • πŸ› [Dashboard] We fixed an issue where updates to brand settings did not live update the branding preview.
  • πŸ› [Dashboard] We fixed an issue where opening links in a message preview would break the preview.
  • πŸ› [Dashboard] We fixed an issue where the template editor could crash when selecting a source event trigger for API-triggered workflows.
  • πŸ› [Dashboard] We fixed an issue related to drag & drop and the trigger workflow step.
  • πŸ‘€ [Dashboard] We moved email template settings like from address directly into the template editor to simplify email editing.
  • πŸ‘€ [Dashboard] We shipped a number of other miscellaneous UI and bug fixes.
Connor Lindsey
Connor Lindsey
Feature illustration

Today we're releasing support for workflow type generation through the CLI, making it easy to get end-to-end type safety between your application and the workflows you trigger with Knock.

Getting started with generating types is incredibly easy. You first describe your workflow trigger schema (or generate it using AI), then you can pull workflow type definitions from the Knock CLI:

knock workflow generate-types --output-file=./knock-workflow-types.ts

Next, within your application, you can import your types and annotate your Knock workflow triggers:

import { Knock } from "@knocklabs/node";
import { CommentCreatedData } from "./knock-workflow-types";
 
const knock = new Knock({ apiKey: process.env.KNOCK_API_KEY });
 
const triggerData: CommentCreatedData = {
  comment_id: "comment_123",
  comment_text: "Great work on this!",
  document_id: "doc_456",
  document_name: "Project Proposal",
  priority: "medium",
  metadata: {
    source: "web_app",
    version: 1,
  },
};
 
await knock.workflows.trigger("comment-created", {
  recipients: ["user_789"],
  data: triggerData, // βœ… Type-safe!
});

Your application's compilation will now fail if required data is missing or invalid data types are passed. This ensures that the data your workflow expects is provided.

The Knock CLI currently supports generating types for TypeScript, Go, Python, and Ruby. We may add other languages in the future. Please get in touch if there's a language you need that we don't currently support.

You can learn more in our guide on type safety and in the CLI documentation.

Other CLI improvements

We've also added support for two new commands in the Knock CLI:

  • knock pull: Pulls down all versionable resources from your Knock account into the specified directory. Using this command, all resources will be pulled under their own directories (like workflows, layouts, partials).
  • knock push: Pushes all resources in your Knock directory up to Knock in a single command, where you can optionally supply a commit message to pass along to commit and push at the same time.

Fixes and improvements

  • πŸ› [Dashboard] We fixed an issue where the discard changes button for setting trigger data did not always work
  • πŸ› [Dashboard] We fixed an issue where opening an email preview could have marked a message as "opened" inadvertently
  • πŸ‘€ [Dashboard] We improved the categories filter on workflows to be a typeahead
  • πŸ‘€ [Notification engine] We added support for a new format_date_in_locale liquid helper
  • πŸ› [API] We fixed an issue with our OpenAPI spec where the set tenant endpoint listed that it accepted preferences
  • πŸ› [SDK] We fixed an issue in the React SDK where the useNotifications hook could cause a memory leak
  • πŸ› [Agent toolkit] We fixed an issue where some models would report issues with the tools provided by the MCP server
  • πŸ‘€ [Agent toolkit] We added support for updating as well as creating workflow steps
  • πŸ‘€ [Agent toolkit] We added support for upserting email layouts
Chris Bell
Chris Bell
Matthew Mikolay
Matthew Mikolay
Feature illustration

Today we're excited to announce the introduction of email client previews, giving you the ability to see real previews of how your emails will render, right inside of the Knock template editor.

Previously to see how your email notifications would render you would have to use a combination of our in browser preview, sending tests to yourself via the test runner, and using an external tool, like Litmus. Now, with email client previews, you can see exactly how your email will render on a variety of email clients by just navigating to the "Client previews" tab.

You can access email client previews by going to the "Client previews" tab in the template editor. There you will see a selection of popular email clients, showing a snapshot of how your template will render on each client. Each image can be enlarged, and you can easily navigate between different email client previews by using the keyboard.

Email client previews is available today for all enterprise plan customers. You can read more in the documentation.

Fixes and improvements

  • πŸ› [API] We fixed an issue where using the bulk create schedules endpoint with a non-existent recipient could cause the process to fail.
  • πŸ› [Dashboard] We fixed an issue where service tokens could not be deleted or renamed.
  • πŸ› [Dashboard] We fixed an issue with archiving email layouts.
  • πŸ› [Dashboard] We fixed an issue where opening the template settings modal on email templates would show an errant error for the JSON overrides field.
  • πŸ› [Dashboard] We fixed some performance issues with the new template editor, leading to slow typing speeds.
Chris Bell
Chris Bell
Feature illustration

We're excited to introduce guides.

Guides enable you to power in-product messaging, everything from paywalls and badges, to one-time announcements and banners, using your own native components.

With guides, your engineering team gets complete control over in-product messages and how they’re rendered in your product, while your product and marketing teams get the ability to draft, A/B test, and manage all your native in-product content.

Native, self-serve, and observable

Here are a few reasons why we think guides will help product and engineering teams:

  • Goodbye <script/>. Hello <Component/>: Unlike legacy in-app messaging tools that inject JavaScript agents and slow down your app, Knock guides integrate directly with your React, Vue.js, or Angular components. No performance penalties. No UI janking. Complete design system compliance.
  • Self-service for PMs and marketers: With guides, product and marketing teams get the ability to draft content, target recipients, and configure message activation in a self-service way, without needing to worry about introducing breaking changes in the frontend.
  • Built-in analytics and observability: Guides automatically track delivery and engagement metrics. You can understand how many users are seeing, interacting with, and archiving your in-app guides. We make it easy to deliver that data where you need it, whether that's your data warehouse or CDPs such as Segment or Amplitude.

We believe in a future for the internet where software teams can ship in-app messaging that powers adoption, growth, and retention, without having to compromise on performance, web vitals, and content layout shift.

Check out a walkthrough here.

Read the full announcement.

Thomas Yu
Thomas Yu
Feature illustration

We're excited to announce two significant upgrades to developer experience at Knock, Docs 2.0 and new auto-generated SDKs.

A brand new docs experience

We first shipped our docs site four years ago along with the initial launch of Knock. Since then, the design hasn’t changed, despite us shipping a lot of new content.

We’ve reorganized our content, rebuilt our β€œbuilding in-app UI” section, and refreshed our API and management API references using the OpenAPI spec.

We have also added support for all your LLM needs, with llms.txt and llms-full.txt, markdown pages, and a new RAG API endpoint for our MCP server.

If you’re interested in peeking behind the curtains for these changes, our docs are open source and available here.

New SDKs for Node, Go, Python, and Ruby

Today, we’re proud to release the 1.0 versions of our SDKs in Node (Typescript), Go, Python, and Ruby. These new SDKs are richly typed and include all resources across our API. They are a joy to use. In addition to typing, they include retries, auto-pagination, customizable logging, and configurable timeouts.

If you’re a current SDK user, our migration guides will provide information on how to migrate to the 1.0 releases of our SDKs. We’re also anticipating that our PHP and .NET SDKs will follow the same generated treatment in the second half of this year.

Check out a walkthrough here.

Read the full announcement.

Meryl Dakin
Meryl Dakin
Feature illustration

We're excited to announce broadcasts, a way to send one-time cross-channel messages in Knock.

Whether you’re announcing a new feature, alerting users about system maintenance, or driving new feature adoption, broadcasts let you create thoughtful cross-channel messaging sequences that reach users where they are.

Unlike traditional workflows in Knock that trigger based on events, broadcasts are scheduled to run once for an audience. And, because broadcasts use our workflow engine under the hood, you can easily build sophisticated cross-channel one-time messaging.

Audiences, preferences, and analytics

Along with broadcasts, we are also releasing:

  • Audiences: You can now create an audience in Knock using CSV upload, through our rETL integrations with Census and Hightouch and via our API.
  • Commercial preferences and 1-click unsubscribe: To stay compliant with regulations like CAN -SPAM and CASL, you can set a broadcast (or a workflow) as commercial, which give users the ability to one-click opt-out of any future commercial messaging sent with Knock.
  • Observability and analytics: The messages sent by broadcasts are just like any other messages in Knock. You get visibility into all of the same observability and analytics data we provide for trigger-based workflows.

Read the full announcement.

Check out a demo here.

Connor Lindsey
Connor Lindsey
Feature illustration

Today we're excited to introduce Knock workflows 3.0.

Read the full announcement.

This is our biggest update yet to building and designing cross-channel messaging in Knock. We redesigned our template editor and our workflow canvas with a renewed focus on:

  • Speed. All updates are optimistic. You will never see a loading spinner. You can now use keyboard shortcuts for everything.
  • Ease of use. Writing an email in Knock is as easy as writing a doc in Notion.
  • Quality control. We’ve overhauled error handling and introduced AI powered auto-fix suggestions to debug more complex issues

Check out a demo here.

Kyle McDonald
Kyle McDonald