Support matrix
Supported vs Available transports and runtimes for production use.
Not every exported transport is part of the 1.x production promise. Supported paths are documented, tested, and operable (verify, retry/fallback, and webhooks where listed). Available paths ship and have unit coverage but are not the support bar.
The one rule
Build production apps on Supported transports. Treat Available exports as optional extras you can adopt knowing the promise is thinner.
Supported (v1 promise)
| Channel | Supported transports | Operability |
|---|---|---|
| SMTP, Resend, SES, SendGrid, Postmark | Attachments / HTML / text, verify, retry / fallback, webhooks for the HTTP majors | |
| SMS | Twilio SMS, Unifonic | Webhooks for Twilio and Unifonic |
| WhatsApp Cloud | Signature verify + delivery parse | |
| Push | Web Push, FCM | Option union: subscription (Web Push) or token (FCM) |
| Runtimes | Node ≥18, Bun, Deno, Cloudflare Workers | Adapters and smoke scripts |
FCM uses the current Firebase HTTP API (service-account JWT, no Google SDK). That is baseline push support, not a special feature tier.
Available (exported, not the v1 bar)
| Channel | Available examples |
|---|---|
| Mailgun, Brevo, MailerSend, Plunk, SparkPost, Mailtrap, Mailpit (dev), Loops, SNDR, Taqnyat Mail, Cloudflare Email, … | |
| SMS | Taqnyat SMS, Msegat |
| Taqnyat WhatsApp | |
| Decorators | WeightedFallbackTransport (advanced); preview / idempotency remain email-only |
| Local email | Mailpit (SMTP catcher), Preview (disk) |
Available transports stay in the package. They are promoted to Supported when docs, operability, and smoke coverage meet the bar above.
Troubleshooting
Yes, at your own risk. Prefer Supported paths when you need the documented operability promise.
The Supported set is a deliberate short list for the 1.x promise — not a popularity ranking of every working export.