Transactional email written in React, rendered to HTML real email clients understand, and sent through SES.
The problem
Email clients are their own world: Outlook wants tables, most clients strip stylesheets, and dark mode rewrites colors. Templates built from strings drift away from the product's design.
What Bones does
- Templates are React. They live in their own
email-templatesworkspace, rendered to HTML with React Email'srender. - Built for real clients. Layout uses tables and inline styles, and templates always render light.
- Tokens stay in sync. The template tokens are generated from
shared-ui/src/tokens.css, and CI fails if they go stale. - One send function.
sendEmail(to, subject, html)works the same everywhere. In development it goes to Mailpit, so you can read every email atlocalhost:8025. In production it goes through Amazon SES. - Live preview.
yarn email-templates:devserves every template atlocalhost:3010.
How it compares
Resend and Postmark have better developer experience out of the box. SES was chosen to keep billing in AWS with everything else, and it's cheaper per email at volume.