Why Resend Over SendGrid/SES
| Feature | Resend | SendGrid | AWS SES |
|---|---|---|---|
| Setup time | 3 minutes | 30 minutes | 1 hour |
| Template system | React Email | Handlebars | Raw HTML |
| Dashboard | Beautiful, real-time | Cluttered | Minimal |
| Free tier | 3,000 emails/month | 100/day | 62,000/month |
| Developer experience | Excellent | OK | Poor |
React Email Templates
// emails/welcome.tsx
import { Html, Head, Body, Container, Text, Button } from "@react-email/components";
export default function WelcomeEmail({ name }: { name: string }) {
return (
<Html>
<Head />
<Body style={{ fontFamily: "sans-serif" }}>
<Container>
<Text>Hi {name}, welcome to our platform!</Text>
<Button href="https://app.example.com" style={{ background: "#3b82f6", color: "#fff", padding: "12px 24px" }}>
Get Started
</Button>
</Container>
</Body>
</Html>
);
}import WelcomeEmail from "./emails/welcome";
await resend.emails.send({
from: "hello@example.com",
to: "user@example.com",
subject: "Welcome!",
react: WelcomeEmail({ name: "Alice" }),
});Webhooks
// Track delivery events
app.post("/webhooks/resend", (req, res) => {
const { type, data } = req.body;
// type: "email.delivered" | "email.bounced" | "email.opened" | "email.clicked"
console.log(`Email ${data.email_id}: ${type}`);
});Multi-Language SDKs
# Python
from resend import Resend
client = Resend(api_key="re_...")
client.emails.send({"from": "...", "to": "...", "subject": "...", "html": "..."})// Go
client := resend.NewClient("re_...")
client.Emails.Send(&resend.SendEmailRequest{From: "...", To: []string{"..."}, Subject: "...", Html: "..."})Key Stats
- 15,000+ GitHub stars
- React Email templates
- 3,000 free emails/month
- Webhooks for delivery tracking
- TypeScript, Python, Go, Ruby SDKs
FAQ
Q: What is Resend? A: A modern email API with React Email templates, delivery webhooks, and developer-first design. Send transactional emails in 3 lines of code.
Q: Is Resend free? A: Free tier: 3,000 emails/month, 1 domain. Pro plans from $20/month.
Q: Can I use Resend without React? A: Yes, pass raw HTML or plain text. React Email is optional.