Skip to content

Releases: novuhq/novu

v0.5.0 - ⭐ New workflow engine and UI Editor

26 Jun 10:48
Compare
Choose a tag to compare

Extremly excited to anounce our latest release which includes an entire redesign of our trigger engine, a brand new and shining workflow editor on the web management platform, notification center theme customization, and a lot more goodies! Let's check it out:

Redesigned backend trigger engine

To support a more complex Novu usecase with custom flows and events we had to reimagine how our trigger engine works, instead of processing just the hardcoded configuration of delivery a user can now specify a tree-like flow with a custom order of nodes. This infra change will help us to support the upcoming: Digest, Delay, Decision trees, and more.

Job Workflow

In this change, we also introduced BullMQ to manage or step execution Queue to support better persistency and scalability as it will allow us to scale trigger processing across multiple machines in the next upcoming releases.

Redesigned Notification Template Editor

One of the biggest steps to support our future plans is the redesigned Workflow Editor when editing a notification template. Previously, you could only decide on a channel but couldn't control more than one message of this particular channel, and couldn't control the order of execution.

Introducing the new workflow editor powered by React-Flow:
CleanShot 2022-06-24 at 09 31 06@2x

This new workflow will be the basis of more exciting features we are about to release in the upcoming weeks!

Attachment support on email providers

Thank to our amazing contributor @devblin, it is possible to send attachments with your emails. You can easily add attachments using the following API:

import { Novu } from '@novu/node';

const novu = new Novu(process.env.NOVU_API_KEY);

novu.trigger('event-name', {
  to: {
    subscriberId: '...'
  },
  payload: {
    attachments: [{
      file: fs.readFileSync(__dirname + '/data/test.jpeg'),
      name: 'test.jpeg',
      mime: 'image/jpg'
    }]
  }
})

Notification center theme customization

Based on a lot of your requests, it is possible now to customize the notification center component visuals for in our React component. Here is how you can do that:

const theme = {
   dark: {
      // Dark Theme Props
   },
   light: {
       // Light Theme Props
   },
   common: {
      // Common
   }
};

return (
   <PopoverNotificationCenter theme={theme}>
   </PopoverNotificationCenter>
);

For more information about the different parts of the theme configuration:

export interface INovuTheme {
  layout?: IThemeLayout;
  header?: IThemeHeader;
  popover?: IThemePopover;
  notificationItem?: IThemeNotificationListItem;
  footer?: IThemeFooter;
  loaderColor?: string;
  unseenBadge?: IThemeUnseenBadge;
}

export interface IThemeLayout {
  background?: string;
  boxShadow?: string;
  borderRadius?: string;
  wrapper?: {
    secondaryFontColor?: string;
  };
}

export interface IThemeHeader {
  badgeColor?: string;
  badgeTextColor?: string;
  fontColor?: string;
}

export interface IThemePopover {
  arrowColor?: string;
}

export interface IThemeNotificationListItem {
  seen?: {
    fontColor?: string;
    background?: string;
    timeMarkFontColor?: string;
  };
  unseen?: {
    fontColor?: string;
    background?: string;
    boxShadow?: string;
    notificationItemBeforeBrandColor?: string;
    timeMarkFontColor?: string;
  };
}

export interface IThemeFooter {
  logoTextColor?: string;
  logoPrefixFontColor?: string;
}

export interface IThemeUnseenBadge {
  color?: {
    fillColor?: string | ISvgStopColor;
    borderColor?: string;
  };
}

More changes and improvements

New Contributors

Full Changelog: v0.4.2...v0.5.0

v0.5.0-alpha.0

21 Jun 10:04
Compare
Choose a tag to compare
v0.5.0-alpha.0 Pre-release
Pre-release
v0.5.0-alpha.0

v0.4.2 - Notification center support for Safari browsers

31 May 16:26
Compare
Choose a tag to compare

What's Changed

This addresses the issue discussed in #607 that fixes safari browsers fail to render the notification center due to not supported regex expression.

Thank for singhgulshan, @BiswaViraj, and @djabarovgeorge for collaborating on bringing this fix

v0.4.1 - React 18 support for notification center

29 May 14:58
Compare
Choose a tag to compare

React 18 support for @novu/notification-center

thanks to the incredible work by @BiswaViraj we are now supporting react 18 for the @novu/notification-center component, also gone the webpack spreadArray) is not a function error encountered in #569

What's Changed

New Contributors

Full Changelog: v0.4.0...v0.4.1

v0.4.0 - The open-source notification infrastructure

25 May 09:03
Compare
Choose a tag to compare

The first Novu Notification Infrastructure Release

We are incredibly excited to release our biggest version since the beginning of Novu. This version includes our first milestone in building the best open-source notification infrastructure. The release is a result of our incredible community collaboration and efforts. Check out all the great shoutouts at the end.

This version includes those large chunks of work:

  • Novu API
  • Notification management web interface
  • Multi Environment Support
  • Integration Store
  • Notification Center API
  • React Notification Center
  • And more!

Get started with the novu platform using:

npx novu init

Novu API

The Novu API was created to manage complex notification delivery use cases. It will be the platform for our future advanced features such as Digest, Scheduling, Time-zone awareness, etc. The API can be accessed from the @novu/node npm package for Node.js and other languages using the simple rest HTTP API accessed using an API key.

Notification management web interface

A brand new React-based web interface to manage your notification templates and monitor the activity of sent notifications. We are planning to add and upgrade the web interface on an ongoing basis, looking forward to hearing your opinions and ideas!

Notification Center API

You can now add a real-time notification center to your web application, including real-time updates using socket.io. In addition, we provide a react notification center component and an iframe window for non-react apps. You can read more about it here.

https://docs.novu.co/assets/images/notification-center-912bb96e009fb3a69bafec23bcde00b0.png

Multi Environment Support

Based on the feedback from previous alpha releases, we have added support for multiple environments inside the web management site. You can make changes to your dev environment and then commit them to the Production Environment. So you can test your changes before pushing them to prod. Which is always a good thing to do, right? 😜

Integration Store

You can now select what email or SMS provider you will send notifications from. Check out the integrations page on the web management platform. New integrations are coming soon!

Moving from the old @novu/node or @notifire/node packages

The last versions below v0.4.0 only supported stateless and in-code notification template management. If you don't plan to use the Novu API and web management platform, you will need to download the @novu/stateless library, which has an identical API to the old package. Read more about the stateless library here.

What's next?

  • Improving documentation and usage guides
  • Visual Workflow Editor
  • Direct Channel
  • Push Channel
  • Digest Engine
  • and many more exciting features :)

Read more about the new API platform from our documentation site.

Get started with the novu platform using:

npx novu init

Merged issues

Read more

V0.3.3 - The fancy frog release 🐸

16 Dec 13:55
Compare
Choose a tag to compare

What's new?

Email attachments support

This incredible community effort started from @davidsoderberg who took on him to finalize the interface for the $attachments and later on all the community took the effort to update all of our 9 email providers.

So how this works?
The $attachment interface receives an array of attachment objects. Each attachment contains a file buffer, the mime type and the attachment name to be used.

const fileBuffer = fs.readFileSync('event.ics');
await notifire.trigger('test', {
    $user_id: '1234',
    $email: 'recipient@email.com',
    $attachments: [{
        file: fileBuffer,
        mime: 'text/plain',
        name: 'event.ics'
    }]
});

NestJS module

Created by @devblin you can now use notifire in your nestjs application easily by installing the @notifire/nest package.

Initializing module with templates and providers:

import { NotifireModule } from "@notifire/nest";

@Module({
  imports: [
    NotifireModule.forRoot({
      providers: [
        new SendgridEmailProvider({
          apiKey: process.env.SENDGRID_API_KEY,
          from: 'sender@mail.com',
        }),
      ],
      templates: [
        {
          id: 'password-reset',
          messages: [
            {
              subject: 'Your password reset request',
              channel: ChannelTypeEnum.EMAIL,
              template: `
                      Hi {{firstName}}!
                      To reset your password click <a href="{{resetLink}}">here.</a>
               `,
            },
          ],
        },
      ],
    }),
  ],
})

Using notifire's singleton service in other services and modules:

import { Injectable } from '@nestjs/common';
import { NotifireService } from '@notifire/nest';

@Injectable()
export class UserService {
  constructor(private readonly notifire: NotifireService) {}

  async triggerEvent() {
    await this.notifire.trigger('password-reset', {
      $email: 'reciever@mail.com',
      $user_id: 'id'
    });
  }
}

Mail attachments contributors

New providers

Other changes

New Contributors in this version

v0.2.5 - The tiny cake release  🍰

06 Nov 10:08
Compare
Choose a tag to compare

What's Changed

Other changes

Custom template function

In some cases, if you want to use your own template engine and not the built handlebars compiler, you can pass a function as the template in the message object.

await templateStore.addTemplate({
    id: 'test-notification-promise',
    messages: [
      {
        subject: '<div>{{firstName}}</div>',
        channel: ChannelTypeEnum.EMAIL,
        template: (trigger: ITriggerPayload) => {
            return `Custom rendered HTML`
        }
      },
    ],
  });

Validate trigger variables

From this version, you can run a validator for the ITriggerPayload passed to each message.

class JoiValidator extends IMessageValidator {
   constructor(private joiSchema) {}

   async validate(payload) {
     const { error } = this.joiSchema.validate(payload);
     if (error) throw new Error(error);

     return true;
   }
}

await templateStore.addTemplate({
    id: 'test-notification-promise',
    messages: [
      {
        validator: new JoiValidator(Joi.object({
             firstName: Joi.string(),
             lastName: Joi.string().required(),
       })),
        subject: '<div>{{firstName}}</div>',
        channel: ChannelTypeEnum.EMAIL,
        template: `Template`
      },
    ],
  });

New Contributors

Full Changelog: v0.2.4...v0.2.5

v0.2.4

30 Oct 19:13
Compare
Choose a tag to compare

What's Changed

Easily create provider

Added a hygen script to generate a new provider boilerplate.
Run yarn run generate:provider from the root of the project and follow the descriptions by @scopsy in #61

New MailJet provider

You can now send emails using mailjet by @deepak-sreekumar in #66

Unified SMS Providers response

A new unified provider response was added to all the SMS providers by @ComBarnea in #62

Fixes

  • refactor(@notifire/core): adds a strict mode typescript compilation by @scopsy in #69
  • [doc] Updated readme's example by @akhil-gautam in #71
  • fix() Fixed Cannot find module 'handlebars' error

New Contributors

Full Changelog: v0.2.3...v0.2.4

v0.2.3

20 Oct 09:53
Compare
Choose a tag to compare

New providers 🚀

Exciting release with 4 new provider:

Improvements ⭐️

  • Added codespaces quick setup. Just press . on every PR to start developing quickly.
  • Unified Provider response API. You will get the provider message identifier and the time stamp.
  • A brand new theming API! Control the theme of your messages easily.

Other bug fixes and enhancements

Thanks to @SachinHatikankar100 and @L8Y for their contributions.