# Performance optimization, Redesigned Workflow UI Editor...

> Release Updates

Canonical: https://novu.co/blog/performance-optimization-redesigned-workflow-ui-editor-data-expiration-headless-notification-center-and-more/

Markdown: https://novu.co/blog/performance-optimization-redesigned-workflow-ui-editor-data-expiration-headless-notification-center-and-more.md

Last updated: 2023-04-28T13:29:55.000Z

Release Updates

Authors: Prosper Otemuyiwa

Published: 2023-04-28T13:29:55.000Z

Category: Product updates

**TL;DR:** All you need to know about the latest Novu 0.14.0 release. Performance optimization, Redesigned Workflow UI Editor, Data expiration, Headless Notification Center and more!

## 0.14.0 Release Updates

We’re stoked to share new updates on our latest release. Let’s dig in!

## Performance Optimization

We have worked extremely hard to improve the core performance of Novu. I’ll highlight crucial things to note and be aware of:

1. Improved Caching.

1. Optimized Indexes. Indexes are defined on each [schema file at the bottom](<https://github.com/novuhq/novu/blob/next/libs/dal/src/repositories/job/job.schema.ts>).

## New Worker Service

**Breaking Change:** A new service is required to run with Novu called `@novu/worker` , extracted from the `@novu/api` monolith to ensure that queues and jobs are processed faster. Novu Cloud users do not need to be concerned about this change.

> Novu self-hosted users can now scale the worker service independently as much as the hardware their hosted domain runs on.

For Novu self-hosted users running on Docker, it is now necessary to pull in the [new worker service image](<https://github.com/novuhq/novu/pkgs/container/novu%2Fworker>) in order for Novu to work properly.

This is already taken care of [here](<https://github.com/novuhq/novu/pull/3160>) & [here](<https://github.com/novuhq/novu/pull/3231>). When you run **docker-compose up**, the worker image will be automatically pulled in. No extra steps are needed.

## Data Expiration

The **Jobs** and **Messages** collection now has a TTL and will be removed from the database when it expires. For Novu cloud users, notifications and activity feed data will be saved for 1 month, while in-app messages will be saved for 6 months. After that time, the records will be archived.

For Novu self-hosted users, the same time frame applies before records will be deleted. However, they can disable the TTL setting by adding the environment variable `DISABLE_TTL=true`.

Affected schemes:

- Notification (for 1 month).

- Job (for 1 month).

- Message (for in-app messages – 6 months, for all other messages – 1 month).

- Execution Details (for 1 month).

## New Workflow UI Editor

We’re constantly iterating on the UI editor to reduce the number of clicks needed to perform specific actions, improve the UX, and provide a great experience in setting up notification workflows.

In this release, we simplified the workflow editor UI like so:

## Headless Notification Center

You might have heard the phrase: **Bring Your Own…** or something along those lines.

We encourage you to **bring your UI** with the newly released framework-agnostic headless version of Novu’s notification center.

This lightweight library allows you to incorporate our notification system into any framework or vanilla JavaScript app without UI constraints.

Install and [call the API methods](<https://docs.novu.co/notification-center/headless/headless-service/>) needed to access the notification system.

Install:

```bash
npm install @novu/headless
```

Use:

```bash
import { HeadlessService } from '@novu/headless';
```

You can now fetch all In-App notifications shown like so:

```javascript
const headlessService = new HeadlessService({
  applicationIdentifier: 'APP_ID_FROM_ADMIN_PANEL',
  subscriberId: 'USER_ID',
  backendUrl: 'YOUR_BACKEND_URL',
  socketUrl: 'YOUR_SOCKET_URL',
});

headlessService.initializeSession({
  listener: (session) => {
    console.log(session);
  },
  onSuccess: (session) => {
    console.log(session);
  },
  onError: (error) => {
    console.error(error);
  },
});

headlessService.fetchNotifications({
  listener: ({ data, error, isError, isFetching, isLoading, status }) => {
    console.log({ data, error, isError, isFetching, isLoading, status });
  },
  onSuccess: (response: IPaginatedResponse) => {
    console.log({response.data, response.page, response.totalCount, response.pageSize});
  },
  page: 1, // page number to be fetched
});
```

## Maqsam SMS Provider Integration

Now, you can use the [Maqsam](<https://maqsam.com/>) SMS provider on Novu.

## Termii SMS Provider Integration

Now, you can use the [Termii](<https://www.termii.com/>) SMS provider on Novu.

## SMSCentral SMS Provider Integration

Now, you can use the [SMSCentral](<https://www.termii.com/>) SMS provider on Novu.

## Sparkpost SMS Provider Integration

Now, you can use the [Sparkpost](<https://developers.sparkpost.com/>) SMS provider on Novu.

## All Changes

The full changelog can be found on [GitHub](<https://github.com/novuhq/novu/compare/v0.13.0...v0.14.0>).

## Conclusion

[Sign up on Novu](<https://web.novu.co/>), try it out & let me know what you think about the new changes in the comments section.

If you’re looking to contribute to OSS and make an impact, I believe it is a [great place to start](<https://github.com/novuhq/novu>) & build out amazing things.

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