Guides

Bundle size

Keep imports focused on the channel and transport your app actually uses.

sently is split into subpaths so a receipt mailer does not pull SMS, SMTP pooling, or unused providers. Measure stacks with bun run measure:size in the library repo when you change imports.

The one rule

Import channel senders and provider transports from subpaths — never from a convenience barrel when a focused path exists.

Quick start

Prefer mailer + one transport

import { createMailer } from "sently/mailer";
import { SndrTransport } from "sently/transports/sndr";

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

Prefer one webhook parser

import { parse, verifySignature } from "sently/webhooks/sndr";

Avoid import { … } from "sently/webhooks" in Node/Deno without a bundler — that barrel evaluates every provider module.

Typical stacks

StackImportsNotes
HTTP email (SNDR)sently/mailer + sently/transports/sndrSmall HTTP path.
HTTP email (Resend)sently/mailer + sently/transports/resendIncludes attachment helpers.
SMSsently/sms + sently/transports/twilio-smsChannel + one SMS transport.
SMTPsently/smtpSeparate from sently/mailer.

Troubleshooting

Learn more

Next

On this page