Blog
LaunchTypeScriptTransactional email

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.

June 1, 20266 min read
Email SDK unified email sending preview

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.

ProviderEntry pointGood fit
Resend/resendModern default for product teams that want a clean email API.
Postmark/postmarkTransactional email where delivery behavior matters more than campaign tools.
SendGrid/sendgridExisting SendGrid accounts and teams already invested in that ecosystem.
AWS SES/sesAWS-heavy apps that want low-cost infrastructure and explicit credentials.
SMTP/smtpCheap 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.