What's new in Novu 0.12.0
Published: 2023-02-28 09:16:08

**TL;DR:** All you need to know about the latest Novu 0.12.0 release. New Onboarding experience, Actor Filtering, Custom subscriber properties, Email overrides, bug fixes, UI polishing and more!

## 0.12.0 Polishing Release Updates

This [release](https://github.com/novuhq/novu/releases/tag/v0.12.0) contains exciting updates for existing and new users of Novu. Fun fact, more than 170 polishing issues were resolved in this release. Let's dig in!

### New Onboarding Experience for Notification Center

We shipped a new onboarding experience for adding the notification center to existing apps. Check it out below:

![https://res.cloudinary.com/unicodeveloper/video/upload/v1677519923/Novu_Manage_Platform_-_27_February_2023_tljibe.gif](https://res.cloudinary.com/unicodeveloper/video/upload/v1677519923/Novu_Manage_Platform_-_27_February_2023_tljibe.gif)

[Sign up](https://web.novu.co/auth/signup) and set up your app with the notification center swiftly!

### Actor Filtering for Topics

This feature is great for users of topic-based notification. By default, it excludes an actor responsible for the action of a triggered notification on a topic event.

**Typical Use Case:**

The comment section of a post. Jane, John, and Doe made comments on a post. When Prosper makes a comment on the post, these users (Jane, John and Doe) should get a notification about the recent comment, but Prosper should not receive a notification on his recently created comment.

```javascript
const topicKey = 'posts:comment:12345';

await novu.trigger('template-name', {
  to: [{ type: 'Topic', topicKey: topicKey }],
  payload: {},
  actor: { subscriberId: '<SUBSCRIBER_ID_OF_ACTOR>' },
});

```

*Node SDK Usage: Actor filtering*

PR: [https://github.com/novuhq/novu/pull/2691](https://github.com/novuhq/novu/pull/2691)

### Support for cc, bcc, and multiple to for E-mail

Now, you can use the overrides object to allow for multiple `to`, `bcc`, and `cc` when triggering the email channel.

```javascript
await novu.trigger('template-name', {
   to: 'subscriberId',
   payload: {...data},
   overrides: {
     email: {
         to: ['to@test.com'],
         bcc: ['test@email.com'],
         cc: ['another@test.com']
     }
   }
});
```

*Node SDK Usage: E-mail support for cc,bcc and multiple to*

The `to` property will be merged with the subscriber recipient email to avoid duplicates.

Also `text` can be passed as an override that will send the `text` version of the email along side the HTML for old clients.

PR: [https://github.com/novuhq/novu/pull/2763](https://github.com/novuhq/novu/pull/2763)

### Use Custom Sender Name on Template

Before now, the sender name was defined only on the provider integration. So, all the emails triggered had the same sender name.

![https://res.cloudinary.com/unicodeveloper/image/upload/v1677512479/Screenshot_2023-02-27_at_15.40.13_fhith6.png](https://res.cloudinary.com/unicodeveloper/image/upload/v1677512479/Screenshot_2023-02-27_at_15.40.13_fhith6.png)

*Before: Integration store - Provider Integration*

Now, you can define a custom sender from name on the template level. If empty, Novu will fallback to the sender name defined on the provider integration.

![https://res.cloudinary.com/unicodeveloper/image/upload/v1677512609/sendername_fhmakz.png](https://res.cloudinary.com/unicodeveloper/image/upload/v1677512609/sendername_fhmakz.png)

*Now: Sender Name from Template*

PR: [https://github.com/novuhq/novu/pull/2769](https://github.com/novuhq/novu/pull/2769)

**Typical Use Case**

Each template can serve a different purpose, depending on the type of email content. Specifying different sender names for different templates makes the email content different.

PR: [https://github.com/novuhq/novu/pull/2769](https://github.com/novuhq/novu/pull/2769)

### Bulk Trigger Endpoint

Previously, the only way to trigger events as many times as possible was to loop the trigger call.

```javascript
await novu.trigger('<template-name>', {
  to: [
    {
      subscriberId: '<UNIQUE_IDENTIFIER>',
      email: 'john1@doemail.com',
      firstName: 'John',
      lastName: 'Doe',
    },
  ],
  payload: {
    name: 'Hello World',
    organization: {
      logo: '<https://happycorp.com/logo.png>',
    },
  },
});
```

*Node SDK Usage: Trigger event*

Now, Novu has a new [bulk trigger endpoint](https://docs.novu.co/api/bulk-trigger-event/), `/events/trigger/bulk`.

This endpoint allows simply passing in an array of events to the like so:

```javascript
await novu.bulkTrigger([
	{ name: "my-event", to: "subscriber-id", payload: ['customVariables' : 'Hello'] },
	{ name: "my-event-2", to: "subscriber-id-2", payload: ['customVariables' : 'World'] }
]);
```

*Node SDK Usage: Bulk Trigger events*

PR: [https://github.com/novuhq/novu/pull/2704](https://github.com/novuhq/novu/pull/2704)

### Custom Subscriber Properties

Now, custom subscriber properties can be added using the `data` key via the API or SDK like so:

**Typical Use Case**

You can leverage using the data key if you need to add some metadata (e.g date of birth, gender) to the subscriber. The data added is also available in templates.

*API reference:* The property can be set directly via the [create](https://docs.novu.co/api/create-subscriber/) & [update](https://docs.novu.co/api/update-subscriber/) subscriber API.

```javascript
await novu.subscribers.identify(user.id, {
  email: user.email,
  firstName: user.firstName,
  lastName: user.lastName,
  phone: user.phone,
  avatar: user.profile_avatar
  data: {
    dob: user.dob
    gender: user.gender
  }
});
```

*Node SDK usage - Create Subscriber*

PR: [https://github.com/novuhq/novu/pull/2707](https://github.com/novuhq/novu/pull/2707)

### Resend Email Provider Integration

Now, you can use the Resend email provider on Novu.

![https://res.cloudinary.com/unicodeveloper/image/upload/v1677519100/resend_connect_gkp3ck.png](https://res.cloudinary.com/unicodeveloper/image/upload/v1677519100/resend_connect_gkp3ck.png)

![https://res.cloudinary.com/unicodeveloper/image/upload/v1677572334/Screenshot_2023-02-28_at_08.17.54_vrgfei.png](https://res.cloudinary.com/unicodeveloper/image/upload/v1677572334/Screenshot_2023-02-28_at_08.17.54_vrgfei.png)

PR: [https://github.com/novuhq/novu/pull/2750](https://github.com/novuhq/novu/pull/2750)

### Changes & Bug Fixes:

- Trouble with apostrophe’s sending SMS across SMS providers. It was converting them to unicode characters. Now it works correctly. [https://github.com/novuhq/novu/pull/2797](https://github.com/novuhq/novu/pull/2797)
- Change prompt showing up when there's no change made to a saved notification template. Now, it only shows the prompt when a change has been made. [https://github.com/novuhq/novu/pull/2674](https://github.com/novuhq/novu/pull/2674)
- More fields added for APNS Integration. [https://github.com/novuhq/novu/pull/2798](https://github.com/novuhq/novu/pull/2798)
- Android and APNS properties added to fcm message overrides by in [https://github.com/novuhq/novu/pull/2645](https://github.com/novuhq/novu/pull/2645)

## All Changes

The full changelog can be found [on GitHub.](https://github.com/novuhq/novu/compare/v0.11.0...v0.12.0)

## Conclusion

Take Novu for a spin & let me what you think about the new changes in the comments section or in the [release discussion on GitHub](https://github.com/novuhq/novu/discussions/2916).

We had **25 contributors** in this release. If you're looking to contribute to OSS and make an impact, I believe it is a great place to start & build out amazing things. 

Oh, don't forget to **star the repo** as well.🤩 See you in the next release! 🚀