Built for Convex v0.0.1

YOUR BACKEND. YOUR PROVIDER.

Email delivery.
On your terms.

A persistent email queue for Convex.
Plug in Plunk or Resend. Keep the delivery logic in one place.

Open source · Apache-2.0 · Provider adapters included

PERSISTENT BY DESIGNQUEUE → DISPATCH → TRACKCONVEX NATIVE

ONE QUEUE. TWO WAYS TO SEND.

Pick the provider.
Keep the architecture.

Scheduling, recipient restrictions, and message records stay in Convex. Each adapter handles its provider’s API and retry rules.

01 / CHOOSE YOUR PROVIDER
Your appQueue a message
▦convex-emailsSchedule · pace · record
PPlunkDeliver the email
convex/emails.ts
import { Emails } from "@clipin/convex-emails";
import { plunk } from "@clipin/convex-emails/plunk";

const email = new Emails(components.emails, {
  adapter: plunk({ route: "plunk-primary" }),
});

export const deliver = email.worker();
Test mode is enabled by default.
ADAPTER BEHAVIOR

Stop when the result is unclear.

Plunk timeouts, conflicts, and server errors pause for review. A rate limit can safely schedule another attempt.

Automatic scheduling
The same persistent queue
Architecture illustration. No email is sent from this page.

THE WORK AFTER “SEND”

Built for what
happens next.

Understand delivery

BRING YOUR OWN HTML

Your templates
come with you.

Keep React Email and your local preview workflow. Render your template once, then pass the HTML to the queue.

Choose your provider independently of the way you build your emails.

Use React Email

SMALL API. EXPLICIT BEHAVIOR.

Make email part
of your backend.

Start with the local example. No provider account required.