Everything Amazon SES needs, including operations.
One command puts the whole SES surface in your AWS account. Send from your app or your agent. Then run it day to day from one control plane.
- ~2 min
- typical first deploy
- 5% / 0.1%
- AWS bounce and complaint limits
- 0
- credentials we store
Deploying to us-east-1...✓ SES identity verified (acme.com)✓ DKIM, SPF, DMARC configured✓ Event tracking pipeline deployed✓ Analytics tables created✓ Bounce & complaint handlers activeInfrastructure deployedReady to send. Run: wraps email statusThere are four ways to send application email. Wraps is the fourth.
- 01
Run SES yourself
You, the AWS console, and a week
Your sending is simple enough that one SendEmail call covers it, and you would rather own a hundred lines than a dependency.
- 02
Rent a sending API
Resend, Postmark, SendGrid, Mailgun
You have no AWS account and no appetite for one. Everything below this row assumes you are willing to hold an AWS account; if you are not, this is your row.
- 03
Rent a marketing platform
Customer.io, Klaviyo, Braze, Knock
Someone who is not an engineer owns email day to day, and the contact-based bill is worth not having to build campaign tooling.
- 04
Self-host an open-source wrapper
Wraps, OpenSend, useSend, MillionSend
You want the account, the reputation and the data to be yours, and you want the tooling to be open source. This is the row Wraps is in.
Open source, your own AWS account, your own reputation — that row is getting crowded, and it should. The thing that still separates the wrappers is whether anything watches the account once you are sending.
See how the wrappers compareStaying on top of it, without opening the AWS console.
Most teams pick a hosted API because they do not want to deal with any of this. Fair. So we made dealing with it the easy part: Amazon can put an account under review once its bounce rate passes 5% and pause sending at 10%, and the console will not draw your rates against those lines — the control plane does, swept hourly, with owners and admins notified when one is crossed.
Same surface for the rest of the daily job: suppression you can browse and clear, deliverability and blacklist audits, and a per-message event log. Bounces and complaints are suppressed on the way in, so the rates have a floor under them and not only a gauge over them.
Account survival
Under reviewBounce rate
4.1%
AWS reviews at 5%, pauses at 10%.
Complaint rate
0.12%
Over AWS's 0.1% review line.
24h quota
38,200/ 50,000
Warns at 80% of the send quota AWS grants the account.
Your email sends through your AWS, not ours.
This model has a name now: BYOC for email sending, bring your own cloud, applied to how you send. Wraps hosts the dashboard, templates, and workflows. Your AWS account holds the sending infrastructure and the delivery data.
Control plane
Wraps-hosted- Dashboard and analytics UI
- Visual template editor and template storage
- Workflow builder and automation state
- Contacts, segments, topics
- Broadcast scheduling and orchestration
Data plane
Your AWS account- SES: Sending, domain identity, sender reputation
- EventBridge: Real-time event capture
- SQS + dead letter queue: Reliable event delivery
- Lambda: Event processing
- DynamoDB: Delivery history and engagement events
Wraps orchestrates. Your AWS sends and stores. Delivery events stream to both places: your DynamoDB keeps the copy you own, and Wraps receives the same stream to power suppression, analytics, and workflow triggers. Full detail on what we receive is on the BYOC page.
Why teams run email on Wraps
Code you can review
Templates and workflows live in your repo. Roll back a bad send in a pull request.
Type-safe end to end
Typed SDK, typed templates, typed workflows. Errors surface at build, not in inboxes.
No more email tickets
Engineers own the code, marketers own the content, both ship through one pipeline.
Runs in your account
Your SES, your DynamoDB, your domain reputation. The bill comes from AWS, not us.
Built for Agents Too
Agents write TypeScript and open PRs. Your agent ships what your team ships.
One command stands up the whole sending stack.
Wraps deploys SES, DynamoDB, Lambda, EventBridge, and scoped IAM roles into your AWS account. Every event streams to tables you own — query them yourself, or watch them in the dashboard.
One-command deploy
Run
wraps email initand the full stack is production-ready in under two minutes.TypeScript-first SDK
email.send()— full type inference, no boilerplate, no wrappers.Reputation protection
Bounce and complaint rates drawn against the lines AWS reviews and pauses at, swept hourly. Suppression is wired on from the first send.
Zero stored credentials
Access is an OIDC-federated IAM role. Your AWS keys never leave your account.
Send an email. That's the whole API.
One import, one client, one call. Events stream to DynamoDB in your account — query them yourself or use the dashboard.
Your code talks to SES, not to us. Swap the SDK for the AWS SDK, boto3, or plain SMTP and the events still land.
import { WrapsEmail } from '@wraps.dev/email';
const email = new WrapsEmail();
await email.send({
from: 'hello@acme.com',
to: user.email,
subject: 'Welcome to Acme',
react: <WelcomeEmail name={user.name} />,
});import {
SESv2Client,
SendEmailCommand,
} from '@aws-sdk/client-sesv2';
const ses = new SESv2Client();
// No ConfigurationSetName needed. Wraps binds it to
// the domain identity, so your events land either way.
await ses.send(new SendEmailCommand({
FromEmailAddress: 'hello@acme.com',
Destination: { ToAddresses: [user.email] },
Content: {
Simple: {
Subject: { Data: 'Welcome to Acme' },
Body: { Html: { Data: html } },
},
},
}));Everything that happens after you hit send.
What you pay everywhere else, versus AWS cost.
| Wraps + SES | Resend | SendGrid | Postmark | |
|---|---|---|---|---|
| 100k emails / month | $10(SES) | $35 | $89.95 | $126 |
| Your data, your AWS | Yes | No | No | No |
| Open source | AGPL-3.0 | No | No | No |
| Typed SDK + templates | Yes | Yes | No | No |
| Templates-as-code in PRs | Yes | Yes | No | No |
| Workflows-as-code | Yes(TypeScript, Git-versioned) | Visual builder | Visual builder | No |
You pay for the platform. AWS handles the sending.
Free to start, no credit card. Sending costs go straight to AWS — $0.10/1K on à la carte, or $0.16/1K on the new default Essentials plan.
Free
Try the platform with your AWS account
- Unlimited sends, domains & contacts
- Unlimited team members
- 5,000 custom events/mo
- 1 AWS account
- 2 workflows
- 30-day history
Pro
For indie hackers and side projects
- Everything in Free
- Unlimited workflows
- Unlimited custom events
- Topics, segments, batch & campaigns
- 250 AI generations/mo
- 90-day history
Business
For scaling companies
- Everything in Pro
- Unlimited AWS accounts
- 1,000 AI generations/mo
- 1-year history
- SSO + SCIM, audit log + CSV export
- Priority support
Every plan includes unlimited sends, domains, contacts, templates, and team members.
Need custom limits or on-prem deployment? Contact us for Enterprise
AWS costs are separate
You pay AWS directly for sending at $0.10 per 1,000 emails on à la carte — AWS now defaults new accounts to $0.16, and Wraps tells you which plan applies — plus infrastructure (~$2-5/mo). The infrastructure lives in your account, so you can leave anytime and keep everything.
Calculate Your CostsOne command to set it up. One place to run it.
About two minutes, and nothing you already have in the account gets touched. Cancel whenever — the infrastructure is yours and keeps sending.

