Skip to content

Changelog

Latest updates and improvements in the new feature category.

Follow us on X

All changelog posts

  • Novu Chat SDK Adapter

    Bring your Chat SDK agent to Slack, Teams, WhatsApp, Telegram, and email: deliver multi-channel notifications from one trigger, resolve every channel to one unified subscriber, and drop in React connect components to put channels in front of your end-customers.

    The @novu/chat-sdk-adapter is now available. Wire it into your Chat SDK app and Novu manages credentials, identity, and delivery across Slack, Microsoft Teams, WhatsApp, Telegram, and email.

    npm install @novu/chat-sdk-adapter

    Multi-channel notifications from one trigger

    Define a workflow once in Novu with the channels you want, then fire a single trigger from any handler. Novu fans out to every step — Slack, email, WhatsApp, and more — and routes replies back through the same agent loop, so proactive notifications and conversational replies share one handler set.

    const ctx = getNovuContext(thread);
    
    // One trigger delivers to every channel in the workflow.
    await ctx.trigger("order-shipped", {
      payload: { orderId: "1234", trackingUrl: "https://example.com/track/1234" },
    });

    One unified subscriber across every channel

    Every channel resolves to a single Novu subscriber mapped to your own user, so your agent always knows who it's talking to — with email, phone, locale, custom data, and the canonical conversation history available inside any handler.

    const ctx = getNovuContext(thread);
    
    const subscriber = await ctx.getSubscriber(); // email, phone, locale, custom data
    const history = await ctx.getHistory();       // canonical transcript — ideal for LLM context

    Expose channels to end-customers with connect components

    Drop the prebuilt SlackConnectButton from @novu/react into your app so your end-customers can install and connect their own Slack workspace to your agent — OAuth, credentials, and Slack Connect handled by Novu. Microsoft Teams and Telegram connect buttons are in pre-release.

    import { SlackConnectButton } from '@novu/react';
    
    <SlackConnectButton
      integrationIdentifier={integrationIdentifier}
      connectionIdentifier={`${subscriberId}:${integrationIdentifier}:${agent.identifier}`}
      connectionMode="subscriber"
      connectLabel={`Install ${agent.name} ↗`}
      connectedLabel="Connected to Slack"
      onConnectSuccess={handleSlackOAuthSuccess}
    />

    Get started with npx novu connect --runtime chat-sdk, or read the connect components docs.

  • <Subscription /> component

    Give users control over what notifications they receive - at the topic level. Create subscribe/unsubscribe flows that fit the context. Set workflow preferences and use advanced conditional rules. All of this can be done with a customizable React component.

    Authors:
    Paweł TymczukGeorge DjabarovAdam Chmara
    Paweł T., George D., Adam C.
    <Subscription /> component
    Requirements

    v3.12.0 or higher

    We've introduced Subscriptions, a new way to manage notification delivery at the topic level. Now with full context-awareness, giving subscribers precise control over what they receive and when.

    States of <Subscription /> component

    The new <Subscription /> React component makes it easy to add subscription features to your app. You can use it for a simple “follow” button on a resource or a complete preferences view.

    Breakdown of the <Subscription /> component
    • Subscribe or unsubscribe to topics (e.g., projects, issues)
    • Enable or disable specific workflows within a topic
    • Support conditional delivery rules (e.g., owner-only, thresholds, filters)
    • Context-aware preferences: manage subscriptions differently across environments, tenants, or custom contexts using contextKeys
    • Multiple subscriptions per topic with different conditions
    • Fully customizable UI with theming, localization, and headless hooks
    • Works seamlessly with Inbox and existing workflow/global preferences

    Previously, subscribers could only control notifications at the workflow or channel level.

    Subscriptions now unlock:

    • Topic-level muting (e.g., turn off updates for project:43)
    • Context-scoped preferences: filter and match subscriptions by context, with behavior safely gated behind the feature flag
    • Advanced, structured preferences stored as JSON conditions
    • Contextual subscription management directly on entities like projects or tasks
    Read more

    Behind the scene, we've added robust support for contextKeys throughout the inbox and subscription modules. Sorted for consistency, validated across commands, and integrated into identifier logic for uniqueness.

    This lays the groundwork for granular notification preferences in multi-context environments while maintaining backward compatibility when context features are disabled.

    Learn more about <Subscription /> component

    Improvements (5)
    • Removed the default custom font URL from block-based email content. Now, it uses system default fonts instead.
    • Subscriber preferences now support context-aware binding. You can set and retrieve preferences for specific contexts, such as tenants or environments. If there's no context-specific value, it will use the global preferences instead.
    • Pagination preferences now persist across sessions. When you change how many items show per page, it saves your choice. The next time you visit, your selection will be restored.
    • Webhook messages now include workflow and step identifiers. Each webhook payload now includes workflowId and stepId. This gives you better context for tracking and routing events.
    • You can now configure digest lookback windows directly in the workflow editor. When digest mode is on, you’ll find new options for how far back to look. You can pick from quick presets: immediately, 5 minutes, or 30 minutes. You can also enter a custom value.
    Fixes (1)
    • Fixed the problem where duplicating a workflow didn't copy schema fields. This includes payloadSchema, validatePayload, and severity. These properties are now correctly preserved when workflows are duplicated.