Introducing Email SDK
Email SDK launched on June 1, 2026: one TypeScript client for transactional email across Resend, SMTP, Postmark, SendGrid, Mailgun, AWS SES, and more.

Email SDK launched on June 1, 2026. It is a small TypeScript package for transactional email, built around a boring idea: your app should not have to know every detail of every provider just to send a receipt, a login code, or an onboarding email.
Most teams start with one provider. That is sensible. Resend is nice. Postmark is steady. SendGrid is everywhere. SES is cheap and deeply tied into AWS. SMTP is still there, quietly doing its job. The trouble starts later, when one provider-specific payload leaks across the app and every product email becomes a small migration risk.
Email SDK gives you one typed client, separate adapter entry points, and explicit provider limits. It does not pretend all email APIs are the same. They are not.
import { createEmailClient } from "@opencoredev/email-sdk";import { resend } from "@opencoredev/email-sdk/resend";import { smtp } from "@opencoredev/email-sdk/smtp";const email = createEmailClient({ adapters: [ resend({ apiKey: process.env.RESEND_API_KEY! }), smtp({ host: process.env.SMTP_HOST!, auth: { user: process.env.SMTP_USER!, pass: process.env.SMTP_PASS!, }, }), ], fallback: ["smtp"], retry: { retries: 1 },});await email.send({ from: "Acme <hello@acme.com>", to: "user@example.com", subject: "Welcome", text: "Your account is ready.",});What shipped
One message shape
Your app calls email.send(). The adapter handles the provider request.
Fallback routes
Retry transient failures and move to backup adapters in the order you configure.
Separate entry points
Import only the provider adapter you use. No giant all-provider bundle.
Fail-fast limits
Unsupported fields throw before the request instead of being silently dropped.
The adapter list
The first public version covers the common routes people actually reach for in production. Some are API-first, some are infrastructure-heavy, and SMTP is included without pulling in Nodemailer.
| Provider | Entry point | Good fit |
|---|---|---|
| Resend | /resend | Modern default for product teams that want a clean email API. |
| Postmark | /postmark | Transactional email where delivery behavior matters more than campaign tools. |
| SendGrid | /sendgrid | Existing SendGrid accounts and teams already invested in that ecosystem. |
| AWS SES | /ses | AWS-heavy apps that want low-cost infrastructure and explicit credentials. |
| SMTP | /smtp | Cheap fallback routes, self-managed mail, or providers without a dedicated API. |
What it is not
Email SDK is not a campaign platform, template builder, queue, analytics suite, or deliverability consultant in a trench coat. Those are real products with real complexity. This package sits lower in the stack: create the client, choose the adapters, send the message, and know when a provider cannot represent the fields you care about.
That last part matters. A fallback is only safe if the fallback can send the same class of email. If your primary route supports tags, metadata, attachments, and custom headers, but your backup route does not, the SDK should make that obvious.