Skip to content

v0.3.0

Latest

Choose a tag to compare

@psalm2517 psalm2517 released this 07 Aug 01:50
· 10 commits to main since this release
86f9d6d

v0.3.0

Cindermail is now Cloudflare-only, and addresses are permanent by default.

Breaking

  • Self-hosted (SMTP + SQLite), Docker, and the Node mail.tm runtime are gone. Cloudflare Workers is the only target. Removes better-sqlite3 and smtp-server, and with them all 3 known dependency vulnerabilities.
  • /new is permanent by default. The permanent flag is replaced by expiry, a number of days, where 0 also means permanent. /extend still defaults to 10 days.
  • DISPOSABLE_DOMAIN and MAX_ACTIVE_ADDRESSES moved from wrangler.jsonc to secrets, so cloning the repo no longer inherits someone else's domain. Set them with wrangler secret put.
  • MailAdapter gained notify(owner, message) alongside deliver. Custom adapters need it.
  • Requires migrations 0006 and 0007. See docs/deploy-cloudflare.md.

Added

  • mail.tm runs on Workers now. Leave DISPOSABLE_DOMAIN unset for disposable addresses with no domain, no DNS and no Email Routing. Same Worker, switchable without redeploying.
  • Deploy to Cloudflare button. Provisions the database, deploys, and prompts for your own domain and credentials.
  • /note <address> [note], plus a note option on /new. Labels show up in /list.
  • /remind [enabled], opt-in DMs about a day before an address expires. One message covering everything expiring, off unless asked for.
  • Status page at the Worker root: addresses created, emails received, torched, and people holding an active address. Same numbers as JSON at /counters.
  • 85 tests, run in CI. Node's built-in runner against real SQLite, no new dependencies.

Fixed

  • Email content was rendered as Discord markdown unescaped, so a message could arrive as a link reading yourbank.com while pointing elsewhere. Bodies, subjects, senders and anchor labels are all escaped now, and mentions can't ping.
  • /torch, /extend and /note rejected addresses typed with different capitalisation or stray whitespace, reporting "Not found or not yours". Phone keyboards autocapitalise, so this was easy to hit.
  • A missing counters table threw from core, dropping inbound mail entirely. Counter failures are contained.
  • npm run setup could discard the domain you entered, or create a Worker in your account without asking.
  • Expiry reminders can't take down the cleanup that runs alongside them.

Under Consideration (contingent on demand)

  • Telegram delivery adapter
  • Publicly hosted instance