Releases: psalm2517/cindermail
Releases · psalm2517/cindermail
Release list
v0.3.0
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
v.0.2.0
v0.2.0
npm run setup: interactive wizard for all three receivers, writes.env/wrangler.jsoncand creates the D1 database for you- mail.tm reframed as the default quick-start path (no domain/DNS/server), Cloudflare and self-hosted documented as the bring-your-own-domain options
- Permanent addresses:
permanentoption on/newand/extend, never expire, good until torched - Public status page (Cloudflare only): live created/received/torched counts at the Worker's root,
/countersJSON endpoint wrangler.jsoncreplaceswrangler.toml.exampleas the Cloudflare config path — committed (no secrets in it), since Workers Builds needs the D1 binding present at build time and dashboard-only bindings weren't surviving into new versions- Counter failures no longer able to affect address creation or mail delivery
- Status page for hosted instance: https://cindermail.vsvn.net/
Planned: Telegram delivery adapter.
v0.1.0
v0.1.0
Initial release.
- Three receivers: Cloudflare Workers (Email Routing + D1), self-hosted (SMTP + SQLite), mail.tm (no domain or server)
- Discord delivery adapter:
/new/list/extend/torch, ephemeral replies - HTML to readable text conversion, links preserved, attachments forwarded up to 25MB
- 10 day address expiry, 5 active per owner, both configurable
- Daily cleanup of expired/torched addresses and stale rate-limit rows
- MIT licensed
Planned: Telegram delivery adapter.