← Back to Open Source

Sinkhole

Sinkhole is a zero-infrastructure email trap for staging environments. It runs as a Cloudflare Worker with D1 storage and a built-in web UI. Emails are POSTed over HTTP with no SMTP server needed.

Overview

When you’re building and testing applications, you don’t want real emails going out to real people. Sinkhole captures all outgoing mail from your app and stores it in a simple web UI where you can inspect and verify everything without it leaving your environment.

It’s designed to run entirely on Cloudflare’s free tier. There are no servers, no SMTP, no Docker containers. Fork the repo, create your GitHub OAuth app to authenticate your team, deploy the Worker, and you’re all set.

Sinkhole in action

Features

  • No SMTP required - Emails are sent via a simple HTTP POST, so there’s no mail server to configure or maintain
  • Built-in web UI - Browse, search, and inspect captured emails directly in your browser
  • Cloudflare Worker - Runs on the edge with D1 for storage and R2 for attachments, all within the free tier
  • GitHub OAuth - Restrict access to your GitHub org or a specific team
  • Channels - Separate captured emails by environment, project, or team
  • Attachment support - Attachments are stored in R2 and viewable from the UI
  • Laravel integration - A companion sinkhole-laravel package makes it a tiny config change to capture all outgoing mail from any Laravel app

Links