Resend: Why It Got Where It Is and Why I Use It in Every Project - 04/03/2026
Some tools you try once and can no longer imagine working without. Resend is one of those tools. I explain what makes Resend different, why its bet on developer experience led them to dominate a market that seemed solved, and why I use it in every project.
The Transactional Email Market Before Resend
Sending emails from an application seemed like a solved problem. There were established options: SendGrid, Mailgun, Amazon SES, Postmark. All functional. All with extensive documentation.
Also all with the same problem: they were designed for enterprise teams, not individual developers.
The typical experience:
- Create an account, verify MX records, SPF, DKIM…
- Navigate a console with dozens of options you don’t need
- Search Stack Overflow for how to send your first email
- Build templates in a visual editor disconnected from your code
- Debug bounces with hard-to-read logs
Functional. Painful.
What Resend Did Differently: Betting on DX
Resend arrived with a simple premise: sending emails should be as simple as a function call.
import { Resend } from 'resend';
const resend = new Resend(process.env.RESEND_API_KEY);
await resend.emails.send({
from: 'Acme <onboarding@acme.com>',
to: ['user@example.com'],
subject: 'Welcome to Acme!',
react: <WelcomeEmail userName="John" />,
});
That’s it. No SMTP configuration. No mail server. No raw HTML templates.
But what truly differentiates them isn’t the simplicity of the API. It’s the consistency of the decision to prioritize DX in absolutely everything.
The DX Decisions That Led to Their Success
1. React Email: Templates as Components
Resend co-created React Email, a library for building email templates with React components. This radically changed the workflow:
// WelcomeEmail.tsx
import { Html, Body, Heading, Text, Button } from '@react-email/components';
export function WelcomeEmail({ userName }: { userName: string }) {
return (
<Html>
<Body>
<Heading>Welcome, {userName}</Heading>
<Text>We're happy to have you with us.</Text>
<Button href="https://app.example.com">Get Started</Button>
</Body>
</Html>
);
}
Templates live in your repository. They’re versioned, tested, and refactored like any component. No external visual editor, no HTML spaghetti.
2. Documentation That Respects Developer Time
Resend’s documentation shows you how to send your first email in less than 5 minutes. Not in theory: in practice. There are examples for Next.js, Remix, Express, FastAPI, Laravel — with the exact stack you’re probably using.
3. Modern SDK, Types Included
Resend’s SDK is written in TypeScript. Not as an afterthought: as a design decision. Every response is typed. Every error has a predictable shape. Autocomplete works.
const { data, error } = await resend.emails.send({ ... });
if (error) {
// error.name, error.message — specific types, not `any`
console.error(error.name);
}
4. Readable Dashboard
The dashboard shows exactly what you need: send logs, delivery statuses, bounces, and nothing else. No noise. No tabs you never use.
5. Pricing That Doesn’t Punish Indie Developers
There’s a generous free tier (3,000 emails/month, 100 emails/day). No credit card to start. No billing surprises.
Why I Use It in Every Project
When I start a new project, transactional email is infra I don’t want to think about. I need:
- ✅ Welcome emails
- ✅ Account confirmation
- ✅ Password reset
- ✅ Activity notifications
- ✅ Invoices and receipts
With Resend, all of that is solved in hours, not days. I don’t waste time configuring email infrastructure. I write a React component, call the API, and done.
In Keppli Finance and capturioo.com Resend handles all transactional emails. I never had to think about deliverability, bounces, or queues. It just works.
The Business Lesson Behind Resend
Resend didn’t invent email sending. They reinvented the experience of sending emails for developers.
Their growth doesn’t come from having more features than SendGrid. It comes from a developer who tries it never wanting to go back. That’s retention based on experience, not lock-in. It’s the right model.
In a commodity market, DX is the moat.