Celebrating Novu @ 20k Stars
Tags: javascript, notifications, novu, github
Published: 2023-04-25 13:14:24

Not every day do you see a GitHub repo surpassing 20k stars. So I'm proud to announce that we are [now 20.2k stars](https://github.com/novuhq/novu) as of this writing!

![Celebrating 20k Stars](https://im4.ezgif.com/tmp/ezgif-4-bb3286bf4c.gif)

We are incredibly thankful to the developer community for showering Novu with lots of love, feedback, PRs, stars and improvements. They have made Novu a battle-tested and trusted multi-channel notification service for developers worldwide!

> Novu is an open-source notification infrastructure built for engineering teams to help them build rich product notification experiences without constantly reinventing the wheel.

Without further ado, I'll reiterate our commitment to ensure you have a fantastic developer experience while testing and integrating Novu into your web apps.

## Explore our Demos

We have created a few sample apps that showcase the use of Novu in setting up In-App & email notifications.

![Notification center Next.js](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/80s4z0f9pqs97eew6twz.gif)
_[https://notification-center-demo.vercel.app](https://notification-center-demo.vercel.app)_

![Notification center vue 3](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7xepq6ux9taj8wx343rt.gif)
_[https://novu-notifications-vue3.vercel.app](https://novu-notifications-vue3.vercel.app)_


![Notification center - Angular](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ph65qpt5k7da0nh3egkm.gif)
_[https://angular-novu.vercel.app](https://angular-novu.vercel.app/)_

Feel free to explore the [code on GitHub](https://github.com/novuhq/examples).

## Faster Integration With Novu SDKs

We have worked hard to ensure developers have a fluent and expressive interface for interacting with Novu's API in the language of their choice.

Novu offers native SDK in the following languages: *Go*, *Node.js*, *PHP*, *Ruby*, *Kotlin*, and *Python*.

[Go](https://github.com/novuhq/go-novu)

```go
import (
      "context"
      "fmt"
      novu "github.com/novuhq/go-novu/lib"
      "log"
    )

subscriberID := "<UNIQUE_SUBSCRIBER_IDENTIFIER>"
apiKey := "<NOVU_API_KEY>"
eventId := "<NOTIFICATION_TEMPLATE_TRIGGER_ID>"

ctx := context.Background()
to := map[string]interface{}{
  "lastName":     "Doe",
  "firstName":    "John",
  "subscriberId": subscriberID,
  "email":        "john@doemail.com",
}

payload := map[string]interface{}{
  "name": "Hello World",
  "organization": map[string]interface{}{
    "logo": "https://happycorp.com/logo.png",
  },
}

data := novu.ITriggerPayloadOptions{To: to, Payload: payload}
novuClient := novu.NewAPIClient(apiKey, &novu.Config{})

resp, err := novuClient.EventApi.Trigger(ctx, eventId, data)
if err != nil {
  log.Fatal("novu error", err.Error())
  return
}

fmt.Println(resp)
```
_Go SDK: Triggering a notification to a subscriber_

[Node.js](https://github.com/novuhq/novu/tree/next/packages/node)

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

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

await novu.trigger('<NOTIFICATION_TEMPLATE_TRIGGER_ID>',
  {
    to: {
      subscriberId: '<UNIQUE_SUBSCRIBER_IDENTIFIER>',
      email: 'john@doemail.com',
      firstName: 'John',
      lastName: 'Doe',
    },
    payload: {
      name: "Hello World",
      organization: {
        logo: 'https://happycorp.com/logo.png',
      },
    },
  }
);
```
_Node SDK: Triggering a notification to a subscriber_

[PHP](https://github.com/novuhq/novu-php)

```php
use Novu\SDK\Novu;

$novu = new Novu(<NOVU_API_KEY>);

$novu->triggerEvent([
  'name' => '<NOTIFICATION_TEMPLATE_TRIGGER_ID>',
  'payload' => [
    'name' => 'Hello World',
    'organization' => [
			'logo': 'https://happycorp.com/logo.png',
		],
  ],
  'to' => [
      'subscriberId' => '<UNIQUE_SUBSCRIBER_IDENTIFIER>',
      'phone' => '07983882186',
      'email' => 'john@doemail.com',
      'firstName' => 'John',
      'lastName'  => 'Doe',
  ]
]);
```
_PHP SDK: Triggering a notification to a subscriber_

[Ruby](https://github.com/novuhq/novu-ruby)
```ruby
require 'novu';

client = Novu::Client.new('NOVU_API_KEY')

body = {
  name: "<NOTIFICATION_TEMPLATE_TRIGGER_ID>",
  payload: {
    name: "Hello World",
    organization: {
      logo: "https://happycorp.com/logo.png",
    },
  },
  to: {
    firstName: "John",
    lastName: "Doe",
    email: "john@doemail.com",
    phone: "07983882199",
  },
}.to_json

client.trigger_event(body)
```
_Ruby SDK: Triggering a notification to a subscriber_

[Kotlin](https://github.com/novuhq/novu-kotlin)
```java
import co.novu.Novu
import co.novu.extensions.subscribers
import co.novu.dto.request.TriggerEventRequest
import co.novu.dto.request.SubscriberRequest

fun main() {
    val novu = Novu(apiKey = "NOVU_API_KEY")

    novu.trigger(TriggerEventRequest.Companion.invoke
        ( 
            name = "<NOTIFICATION_TEMPLATE_TRIGGER_ID>",
            to = SubscriberRequest(
                    subscriberId = "harry_potter"
                    firstName = "Harry",
                    lastName = "Potter",
                    phone = "97X98XX98X1",
                    email = "email@email.com",
                    loacal = "locale",
                    avatar = "avatar",
            ),
            payload = mapOf("name" to "Hello World")
        )
    )
} 
```
_Kotlin SDK: Triggering a notification to a subscriber_

> **Note:** Java apps can use it.

[Python](https://github.com/novuhq/novu-python)

```python
from novu.API import EventApi

event_api = EventApi("https://api.novu.co/api/", "<NOVU_API_KEY>")
event_api.trigger(
    name="<NOTIFICATION_TEMPLATE_TRIGGER_ID>",
    recipients="<YOUR_SUBSCRIBER_ID>",
    payload={
      'name': 'Hello World',
      'organization': {
        'logo': 'https://happycorp.com/logo.png'
      }
    },
)
```
_Python SDK: Triggering a notification to a subscriber_

## Novu Notification Center - UI Component

Novu provides a set of UI components to create rich customizable notification center experiences. In addition, you can use our ready-made UI. 

> It's partially skinnable, i.e. You can [customize the UI](https://docs.novu.co/notification-center/custom-styling) to an extent.

![Novu Notification Center](https://docs.novu.co/assets/images/notification-center-912bb96e009fb3a69bafec23bcde00b0.png)
The Notification Center is available in your favourite frontend frameworks as a component:

- [React](https://docs.novu.co/notification-center/react/react-components)
- [Vue.js](https://docs.novu.co/notification-center/vue-component)
- [Angular](https://docs.novu.co/notification-center/angular-component)
- [Web Component](https://docs.novu.co/notification-center/web-component)

## Novu Notification Center - Headless

Have you ever pulled in a third-party UI component to discover that you have to tweak the UI a great deal to sync with the design of your app? Sometimes, this can be frustrating. 

We understand and decided to ship a new [headless library](https://docs.novu.co/notification-center/headless/headless-service) to democratize the notification functionality further.

This version provides users with close to bare-metal, lightweight, renderless software for integrating notifications into their web apps. You can use it in any framework or incorporate it into a vanilla JavaScript app by leveraging the API methods provided.  

You can wrap it in whatever UI or design you deem fit in your app!

## Conclusion

A popular saying goes: **"Don't count the days; make the days count!"**. It's just Day 1 in our quest to build a world-class notification infrastructure that is robust and powerful yet simple to integrate.

We have many things in store for developers and will keep shipping updates as frequently as possible. 

[Start using Novu](https://web.novu.co) today to manage your notifications & let us know about your experience here in the comment section or on [GitHub](https://github.com/novuhq/novu). 

By the way, our **0.14 release** is underway. So expect an update on it soon!