You’ve outgrown this plugin when you need push, SMS or chat next to in-app, a preference center and digests across channels, non-engineers editing notification templates, or realtime delivery to thousands of concurrent users. The usual next stops are Knock, Novu and Courier.
Neither Knock nor Novu documents a way to import past notifications. Their messages come from triggering a workflow, stamped with the current time and unread. So moving is a forward cutover, and your notification table stays the archive.
Mapping your data
| Here | Knock | Novu |
|---|---|---|
user.id, user.email |
user id, email (bulk identify, 1,000 per call) |
subscriber subscriberId, email (bulk create, 500 per call) |
organizationId |
tenant id, passed on each trigger |
tenant context { type: "tenant", id } |
type |
workflow key | workflowId, conventionally lowercase with hyphens, so billing.payment_failed may need renaming |
title, body, href, data |
trigger data, rendered by the workflow’s in-app template |
trigger payload |
read, seenAt |
message statuses, for messages it created | read and seen, for messages it created |
createdAt |
not settable | not settable |
notificationDelivery, inboxPresence |
no equivalent; stays here | no equivalent; stays here |
Knock is the more direct fit. Its tenants take organizationId as-is, and it documents setting message status through its API. Novu’s in-house migration guide covers moving triggers one workflow at a time.
Moving over
- Run both. Keep calling
auth.api.notify, and also trigger the new tool’s workflow for onetype, behind a flag. - Backfill people. Bulk-import users from better-auth’s
usertable, and organizations as tenants fromorganization. - Cut over one
typeat a time. Check it in the tool’s activity log, then stop callingnotifyfor that type and point the bell at the tool’s feed component. - Keep history readable. Leave the old inbox reachable, as an “Earlier” tab or as an export into your own archive. For the export, use
exportNotificationsData. Keep it for as long as people need it. - Uninstall once nothing calls
notifyand nothing reads the old inbox. See Uninstall.