~/emiit v1.0

Email changes
don't need
a deploy.

Your emails live in a builder, not your codebase. Edit the design anytime and ship it instantly. No PR, no redeploy, no code change.

No credit card required.
you@emiit · zsh
$ npm install @emiit/sdk
+ @emiit/[email protected] in 0.8s
 
$ node send-welcome.ts
→ render tmpl_welcome data: { name: "Jane" }
→ deliver via emiit (mail.emiit.dev)
✓ sent [email protected] 142ms
✓ track opens · clicks
 
$
send with emiit[ or bring your own ]resendsendgridpostmarkaws sessmtp
// what's inside

Everything between the idea and the inbox.

Design, personalize, send, and measure without stitching four tools together.

visual builder + ai

Drag blocks onto a real canvas, or describe the email and let the AI agent draft it for you. Either way, what you see is exactly what lands in the inbox.

draft a welcome email for a new user
headingHi {{ name }} 👋
textYour {{ plan }} plan is ready to go.
buttonGet started →
dynamic variables

Placeholders in the design, values from your app at send time.

{{ name }}"Jane"
{{ plan }}"Pro"
{{ items }}[ … ]
versioning

Every save is kept. Roll back the moment something looks off.

v14· current
v13· 2h ago
v12· yesterdayrestore
opens & clicks

Every send is tracked per template, so you know which emails actually get read and which links get clicked.

welcome
94%
reset-password
91%
receipt
88%
one sdk call

Send any template by its ID. Typed options, readable errors, nothing to configure twice.

await emiit.send({
  templateId: "tmpl_welcome",
  to: "[email protected]",
  subject: "Welcome, {{ name }}",
  data: { name: "Jane", plan: "Pro" },
});
delivery, your way

Connect your domain and send with emiit out of the box, or plug in the provider you already use.

emiit mail.emiit.dev · verified
resend re_••••
your smtp smtp.emiit.dev
// how it works

From idea to inbox in three steps.

Design once, send forever. Your email copy and your codebase stop fighting.

01

$design

Build your email on the canvas. Start blank, pick a template, or let the AI agent draft it from a prompt. Drop in variables wherever the content should change per recipient.

builder → blocks → {{ variables }}
02

$send

Install the SDK and send the template by its ID, either with emiit from your own domain or through the provider you already use.

emiit.send({ templateId, to, data })
03

$measure

Watch opens and link clicks roll in per template, then tweak the design in the builder. No redeploy needed.

opens 94% · clicks 31% · edit → live
~/ get started
$ ship your next email

Your first template is
minutes away.

Sign up free, design it in the builder, and send it with one line of code from your own domain or your own provider.