sently handbook

Channel-delivery for email, SMS, WhatsApp, and push — one sender shape as channels grow.

sently is the channel-delivery layer for the order confirmation email, the OTP SMS, and the device push that follow. Apps call a channel sender; providers live in transports you can swap without rewriting send sites.

The one rule

Use createMailer, createSmsSender, createWhatsAppSender, or createPushSender in app code — never a vendor SDK as your application API.

Quick start

bun add sently
import { createMailer } from "sently/mailer";
import { ResendTransport } from "sently/transports/resend";

const mailer = await createMailer({
  transport: new ResendTransport({
    apiKey: process.env.RESEND_API_KEY!,
  }),
});

const result = await mailer.send({
  from: "hello@example.com",
  to: "person@example.com",
  subject: "Welcome",
  text: "Thanks for joining.",
});
console.log(result.messageId);

Channels

ChannelSenderStart here
EmailcreateMailer / createSMTPMailerEmail
SMScreateSmsSenderSMS
WhatsAppcreateWhatsAppSenderWhatsApp
PushcreatePushSenderPush

Email factories are asynchronous. SMS, WhatsApp, and push factories return the sender synchronously; every send is async.

Where next

PathWhen
Get startedInstall, entrypoints, runtimes, migrate from Nodemailer
ChannelsFull sender docs + lifecycle hooks
TransportsProvider list by channel
FailoverRetry inside a provider, then fail over
Support matrixSupported vs Available for production
Comparevs vendor SDKs, Nodemailer, Novu / Knock / Courier
StabilityWhat is frozen at 1.x

Troubleshooting

Next

On this page