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-sqlite3andsmtp-server, and with them all 3 known dependency vulnerabilities. /newis permanent by default. Thepermanentflag is replaced byexpiry, a number of days, where0also means permanent./extendstill defaults to 10 days.DISPOSABLE_DOMAINandMAX_ACTIVE_ADDRESSESmoved fromwrangler.jsoncto secrets, so cloning the repo no longer inherits someone else's domain. Set them withwrangler secret put.MailAdaptergainednotify(owner, message)alongsidedeliver. Custom adapters need it.- Requires migrations
0006and0007. See docs/deploy-cloudflare.md.
Added
- mail.tm runs on Workers now. Leave
DISPOSABLE_DOMAINunset 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 anoteoption 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.comwhile pointing elsewhere. Bodies, subjects, senders and anchor labels are all escaped now, and mentions can't ping. /torch,/extendand/noterejected 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
counterstable threw from core, dropping inbound mail entirely. Counter failures are contained. npm run setupcould 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