Postbote
Provider-agnostic transactional email for TypeScript.
Postbote gives your application one dependable API for sending transactional email, while adapters handle the provider-specific work underneath.
import { createPostbote } from "@postbote/core";
import { resend } from "@postbote/adapter-resend";
const postbote = createPostbote({
adapter: resend({ apiKey: process.env.RESEND_API_KEY! }),
});
await postbote.send({
from: "Acme <onboarding@acme.com>",
to: "sam@example.com",
subject: "Welcome",
text: "Thanks for joining Acme.",
});Why Postbote?
- Keep provider code at the boundary. Application code sends a provider-neutral message.
- Switch providers deliberately. Replace an adapter instead of rewriting every email call.
- Build reliability in layers. Compose failover, lifecycle hooks, logging, and tracing as plugins.
- Test without delivery. The testing package records messages in memory and simulates provider failures.
What it does not do
Postbote sends transactional email. It is not a campaign platform, contact manager, queue, scheduler, tracking-pixel service, or browser SDK. Keep credentials on the server.