Skip to Content
Kai

Email

Verification codes, invitations and password resets, with or without an email provider.

Kai sends three kinds of email: a six-digit code to confirm an address (at sign-up and when deleting an account), invitations, and password resets.

Without email (local, the default)

KAI_EMAIL_ADAPTER=local sends nothing. Each email, codes and links included, is printed to the server log:

docker compose -f infra/docker-compose.yml logs kai | grep -A6 "verification code"

What changes:

  • Codes still work: read them from the log.
  • Invitations show a link to copy and send yourself.
  • Forgot password? is hidden on the sign-in page.

That suits a single person or a small team where the operator can read logs.

With Resend

.env
KAI_EMAIL_ADAPTER=resend
RESEND_API_KEY=re_...
KAI_EMAIL_FROM="Kai <no-reply@kai.example.com>"

The sender's domain must be verified in Resend. With a key set, Kai emails codes, invitations and password-reset links, and shows Forgot password?.

Sending failures are logged and never block sign-up; people can ask for a new code.

On this page