DEV Community

Cover image for Celebrating Novu @ 20k Stars
Prosper Otemuyiwa for novu

Posted on

Celebrating Novu @ 20k Stars

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 as of this writing!

Celebrating 20k Stars

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://notification-center-demo.vercel.app

Notification center vue 3
https://novu-notifications-vue3.vercel.app

Notification center - Angular
https://angular-novu.vercel.app

Feel free to explore the code on GitHub.

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

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)
Enter fullscreen mode Exit fullscreen mode

Go SDK: Triggering a notification to a subscriber

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',
      },
    },
  }
);
Enter fullscreen mode Exit fullscreen mode

Node SDK: Triggering a notification to a subscriber

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',
  ]
]);
Enter fullscreen mode Exit fullscreen mode

PHP SDK: Triggering a notification to a subscriber

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)
Enter fullscreen mode Exit fullscreen mode

Ruby SDK: Triggering a notification to a subscriber

Kotlin

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")
        )
    )
} 
Enter fullscreen mode Exit fullscreen mode

Kotlin SDK: Triggering a notification to a subscriber

Note: Java apps can use it.

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'
      }
    },
)
Enter fullscreen mode Exit fullscreen mode

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 to an extent.

Novu Notification Center
The Notification Center is available in your favourite frontend frameworks as a 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 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 today to manage your notifications & let us know about your experience here in the comment section or on GitHub.

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

Top comments (3)

Collapse
 
thecheapaudiophile profile image
Griff Polk

Mmmm, test massages. canโ€™t wait. Preferably deep tissue. (But would fix that :) )

Collapse
 
combarnea profile image
Tomer Barnea

Haha, thanks!

Collapse
 
nicklasgellner profile image
Nicklas Gellner