EventEmitterModule

Provides an in-process event bus for decoupled, event-driven code.

Since NestJS 10/11 Spec ↗

Syntax

EventEmitterModule.forRoot() | @OnEvent(name) | eventEmitter.emit(name, payload)

Parameters

NameTypeRequiredDescription
name string No The event name, often namespaced with dots.
payload any No The data passed to listeners.

Returns

DynamicModule — A module exposing EventEmitter2.

Examples

import { Module } from '@nestjs/common';
import { EventEmitterModule } from '@nestjs/event-emitter';

@Module({ imports: [EventEmitterModule.forRoot()] })
export class AppModule {}
import { Injectable } from '@nestjs/common';
import { EventEmitter2, OnEvent } from '@nestjs/event-emitter';

@Injectable()
export class UsersService {
  constructor(private events: EventEmitter2) {}
  signup(email: string) {
    this.events.emit('user.created', { email });
  }
  @OnEvent('user.created')
  sendWelcome(payload: { email: string }) {
    // send email
  }
}

Notes

Install @nestjs/event-emitter. Events are synchronous by default; set `{ async: true }` in @OnEvent for awaited listeners. Use wildcard patterns (e.g. user.*) with `wildcard: true` in forRoot().