Embedded, not external
`npm install mailery`, mount the routers, fire events from your code. No third-party sync, no webhooks across the public internet for every signup.
Triggered flows, broadcasts, tracking, and a React admin UI you mount inside your Node.js + MongoDB app. No SaaS, no per-contact pricing.
import { Mailer, MongoContactAdapter, SendGridProvider, createAdminRouter, createPublicRouter } from 'mailery'
const mailer = await Mailer.init({
db,
adapter: new MongoContactAdapter({ db, collection: 'users' }),
queue: { driver: 'bull', redis: { url: process.env.REDIS_URL! } },
providers: { sendgrid: new SendGridProvider({ apiKey: process.env.SENDGRID_API_KEY! }) },
defaultProvider: 'sendgrid',
publicUrl: 'https://yourdomain.com',
unsubscribeSecret: process.env.MAILER_UNSUB_SECRET!,
})
mailer.registerEvent({ name: 'Created', dedupePolicy: 'once-per-contact' })
app.use('/admin/mailer', requireAdmin, createAdminRouter(mailer))
app.use('/m', createPublicRouter(mailer))
// From your business logic:
await mailer.fire('Created', user._id.toString())