Switch language:

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:

  1. Create an account, verify MX records, SPF, DKIM…
  2. Navigate a console with dozens of options you don’t need
  3. Search Stack Overflow for how to send your first email
  4. Build templates in a visual editor disconnected from your code
  5. 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:

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.