One API for every email provider

Send email through Resend, Postmark, SendGrid, Mailgun, Amazon SES or Cloudflare with the same TypeScript code. Switching providers is a one-line change.

Why emails-sdk

    One API
    send() and sendBatch() take the same message and return the same result, whichever provider you use.
    Swap providers in one line
    Each provider is its own import. Change the import and its options, and the rest of your code stays the same.
    Zero dependencies
    Built only on web standards like fetch, so it runs on Node.js and edge runtimes without pulling in a provider SDK.
    Typed errors
    Every failure is an EmailError with a normalized code, such as auth, rate_limited or validation.
    Batch sending
    Uses the provider's batch endpoint where there is one, and returns a result for every message.
    Local provider
    Prints emails to the console during development and records them for assertions in your tests.
Copyright © 2026