Skip to content

Events ​

Events wire lifecycle triggers to functions. After a model is created, updated, or deleted, the associated function is automatically called.

json
{
  "name": "UserCreated",
  "trigger": "onUserCreated",
  "function": "SendWelcomeEmail"
}

Trigger naming convention ​

Triggers follow the pattern on<Model><Action>:

TriggerFires when…
onUserCreatedA User is POSTed
onArticleDeletedAn Article is DELETEd
onOrderUpdatedAn Order is PUT or PATCHed

Generated output ​

Events are wired directly into the generated API route handlers. For example, with the UserCreated event above, the POST /api/users route becomes:

Drizzle ​

ts
import { SendWelcomeEmail as sendWelcomeEmailEvent } from '../../lib/functions/SendWelcomeEmail';
import { db } from '../../lib/db';
import { users } from '../../drizzle/schema';

export async function POST(_req: NextRequest) {
  const body = await _req.json();
  const data = await db
    .insert(users)
    .values({ email: body.email, name: body.name })
    .returning()
    .then((r) => r[0]);
  await sendWelcomeEmailEvent({ ...data }); // ← event wired here
  return NextResponse.json(data, { status: 201 });
}

Prisma ​

ts
import { SendWelcomeEmail as sendWelcomeEmailEvent } from '../../lib/functions/SendWelcomeEmail';

export async function POST(_req: NextRequest) {
  const body = await _req.json();
  const data = await prisma.user.create({
    data: { email: body.email, name: body.name },
  });
  await sendWelcomeEmailEvent({ ...data }); // ← event wired here
  return NextResponse.json(data, { status: 201 });
}

No extra event dispatcher file is needed — events are inlined at the call site.

Released under the Elastic License 2.0.