Kizaki
Guides

Email

Configure transactional email, understand the Resend BYOK model, and use dev inbox interception during local development.

Kizaki's email support is intentionally narrow:

  • production email is transactional send only
  • provider support is BYOK Resend only
  • local development does not send real email
  • kizaki dev intercepts every send into the dev dashboard inbox

You can build confirmations, password resets, reminders, cancellations, and invite flows today. Kizaki does not yet ship managed email, provider choice, domain verification workflows, or deliverability management.

Configure The Email Block

email {
  provider: resend,
  apiKey: @secret("RESEND_API_KEY"),
  from: "Tempo <noreply@tempo.example>",
  replyTo: "support@tempo.example",
}

Set the production secret with the CLI:

kizaki secrets set RESEND_API_KEY "re_..." --env production

This same email {} configuration applies to both transactional email from sendEmail() in your server code and platform-driven auth mail such as password reset flows.

Send Email From Server Functions

import { sendEmail } from "@kizaki/sdk";

/** @expose */
export async function sendReminder(email: string) {
  await sendEmail({
    to: email,
    subject: "Your availability poll closes tomorrow",
    html: "<p>Your availability poll closes tomorrow.</p>",
    text: "Your availability poll closes tomorrow.",
  });
}

Calendar Invites And .ics Fallback

Use createICSInvite() to generate a standards-compliant calendar attachment, then send it with sendEmail().

import { createICSInvite, sendEmail } from "@kizaki/sdk";

/** @expose */
export async function sendInvite(email: string) {
  const invite = createICSInvite({
    title: "Tempo kickoff",
    startsAt: "2026-06-03T18:00:00Z",
    endsAt: "2026-06-03T18:30:00Z",
    organizer: { email: "host@example.com", name: "Tempo" },
    attendees: [{ email }],
  });

  await sendEmail({
    to: email,
    subject: "Tempo kickoff",
    text: "Calendar invite attached.",
    attachments: [
      {
        filename: "tempo-kickoff.ics",
        content: invite,
        contentType: "text/calendar",
      },
    ],
  });
}

This is the fallback path for apps that need calendar delivery before provider-side calendar write-back exists.

Local Development

In kizaki dev, email is intercepted and shown in the dev dashboard inbox. Nothing reaches real inboxes. You develop against the real sendEmail() API without configuring a live API key.

In practice:

  • you call sendEmail() normally
  • the runtime captures the message for inspection in the dashboard
  • no email is delivered externally

What Is Not Shipped Yet

  • managed Kizaki email (provider: kizaki)
  • provider choice beyond Resend
  • inbound email handling
  • webhook-driven email event ingestion
  • built-in branded templates or campaign tooling

On this page