122 lines
5.5 KiB
Markdown
122 lines
5.5 KiB
Markdown
---
|
|
title: Novu
|
|
created: 2026-06-07
|
|
updated: 2026-06-07
|
|
type: app
|
|
tags: [catalogue, development, api, backend, tools]
|
|
confidence: high
|
|
contested: false
|
|
sources: [https://selfh.st/apps/?tag=Development, https://github.com/novuhq/novu]
|
|
---
|
|
|
|
# 💻 Novu
|
|
|
|
> Plateforme de notifications open source — unifie l'envoi de notifications (email, SMS, push, in-app, webhooks) derrière une API unique et un workflow de préférences utilisateur.
|
|
|
|
## 📋 Informations Générales
|
|
|
|
| Attribut | Valeur |
|
|
|----------|--------|
|
|
| **Nom** | Novu |
|
|
| **Slug** | novu |
|
|
| **Description** | Plateforme de notifications multi-canal (inbox, email, push, SMS, chat) |
|
|
| **Site officiel** | https://novu.co |
|
|
| **Repository** | https://github.com/novuhq/novu |
|
|
| **Stars** | 39 079 ⭐ |
|
|
| **Licence** | MIT (core) + Enterprise (Cloud) |
|
|
| **Langage principal** | TypeScript (Node.js) + React (dashboard, in-app) |
|
|
| **Catégorie** | Development |
|
|
| **Tags** | [catalogue, development, api, backend, tools] |
|
|
|
|
## 📝 Description
|
|
|
|
**Novu** est une **plateforme de notifications open source** conçue pour **unifier** l'envoi de messages sur plusieurs canaux depuis une seule API. Les développeurs utilisent un seul SDK (`@novu/node`) et un seul workflow definition pour router une notification vers **email, SMS, push mobile, chat (Slack/Discord/Teams), webhook** ou une **inbox in-app** (composant React/Vue/Angular).
|
|
|
|
L'inbox in-app est la brique différenciante : c'est un composant embed qui affiche, dans votre application, l'historique des notifications de l'utilisateur avec lu/non-lu, marque-pages et préférences granulaires par canal et par topic — similaire à ce que font Intercom, OneSignal ou Knock, mais en self-hostable.
|
|
|
|
**Modèle de licence** : Le **core** est MIT (auto-hébergeable), mais **Novu Inc.** a introduit en 2024 une **Enterprise License** sur certaines briques (SSO/SCIM, audit log avancé, multi-environnements) qui ne sont pas disponibles en self-host MIT. La plateforme cloud `novu.co` est un service freemium avec palier Pro. Pour un self-host 100 % libre, on dispose de l'API, de l'inbox, de la majorité des providers, mais on perd les features Enterprise.
|
|
|
|
Cas d'usage : ajouter des notifications transactionnelles (confirmation de commande, alertes) à un produit SaaS sans réimplémenter le routage par canal, l'email templating, le tracking d'ouverture.
|
|
|
|
## 🚀 Installation
|
|
|
|
### Via Docker (recommandé)
|
|
|
|
```yaml
|
|
# docker-compose.yml (stack officielle Novu)
|
|
version: "3.8"
|
|
services:
|
|
api:
|
|
image: ghcr.io/novuhq/novu/api:0.24
|
|
depends_on: [mongodb, redis]
|
|
environment:
|
|
MONGO_URL: mongodb://mongodb:27017/novu-db
|
|
REDIS_HOST: redis
|
|
JWT_SECRET: ***changeme***
|
|
ports: ["3000:3000"]
|
|
|
|
worker:
|
|
image: ghcr.io/novuhq/novu/worker:0.24
|
|
depends_on: [mongodb, redis]
|
|
environment:
|
|
MONGO_URL: mongodb://mongodb:27017/novu-db
|
|
REDIS_HOST: redis
|
|
|
|
web:
|
|
image: ghcr.io/novuhq/novu/web:0.24
|
|
ports: ["4200:8080"]
|
|
|
|
mongodb:
|
|
image: mongo:7
|
|
volumes: ["./mongo:/data/db"]
|
|
|
|
redis:
|
|
image: redis:7-alpine
|
|
```
|
|
|
|
⚠️ **La stack complète** inclut aussi `ws` (WebSocket pour l'inbox temps réel) et `embed` (widget JS) — voir le repo officiel.
|
|
|
|
### Installation manuelle
|
|
|
|
Déconseillé : le projet est un monorepo TypeScript avec ≥8 services interconnectés. Privilégier l'image Docker officielle (Helm chart Kubernetes aussi disponible).
|
|
|
|
## ⚙️ Configuration
|
|
|
|
- **JWT_SECRET** : secret partagé entre API et Worker, long et unique.
|
|
- **Providers SMTP/SMS/Push** : à configurer depuis l'UI dashboard (`/integrations`), chaque provider a ses credentials (SendGrid, Twilio, FCM, APNS, Slack…).
|
|
- **MongoDB** : URI avec auth à partir du moment où l'instance est exposée.
|
|
- **Redis** : utilisé comme broker de jobs, obligatoire pour les workers.
|
|
- **Variables frontend** : `REACT_APP_API_URL`, `REACT_APP_WS_URL` à pointer vers l'API/WS derrière le reverse-proxy.
|
|
|
|
## 🔗 Alternatives
|
|
|
|
- **Knock** — Concurrent direct, plus orienté produit, moins orienté self-host.
|
|
- **OneSignal** — Notifications push gratuites, mais service cloud uniquement.
|
|
- **Knative Eventing / Apache Kafka + SMTP** — Plus bas niveau, davantage de travail d'intégration.
|
|
- **Supabase + pg_net** — Combinaison maison pour des besoins simples, sans UI de templates.
|
|
|
|
## 🔒 Sécurité
|
|
|
|
- **API key & secrets providers** : stocker via `secrets` Docker / Vault / SOPS, **jamais en clair dans le compose**.
|
|
- **JWT** : rotation régulière de `JWT_SECRET` invalide toutes les sessions en cours.
|
|
- **MongoDB** : activer l'auth (`MONGO_INITDB_ROOT_USERNAME/PASSWORD`) et ne pas exposer 27017.
|
|
- **Dashboard** : mettre en place un SSO/OIDC devant l'UI si l'instance est partagée en équipe.
|
|
- **Rate-limiting** : Novu expose des endpoints publics (webhooks entrants) — limiter via reverse-proxy (fail2ban, Traefik middlewares).
|
|
|
|
## 📚 Ressources
|
|
|
|
- [Site officiel](https://novu.co)
|
|
- [Documentation](https://docs.novu.co)
|
|
- [Repository GitHub](https://github.com/novuhq/novu)
|
|
- [Selfh.st — Novu](https://selfh.st/apps/?tag=Development)
|
|
- [Notification Inbox (composant)](https://docs.novu.co/inbox/introduction)
|
|
|
|
## 🔗 Pages Liées
|
|
|
|
- [[cat-development]] — Catégorie Development
|
|
- [[app-supabase]] — Couplage courant Novu + Supabase (auth + notifications)
|
|
- [[app-appwrite]] — Alternative BaaS avec fonctions de notification
|
|
- [[app-traefik]] — Reverse-proxy HTTPS recommandé
|
|
- [[securisation-home-lab]] — Bonnes pratiques de sécurité
|
|
- [[recettes-docker-compose]] — Templates Docker
|