Skip to main content

Events

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

config/events/UserCreated.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:

src/app/api/users/route.ts (excerpt)
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 });
}

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