Skip to content

Releases

0.8.0

Choose a tag to compare

@psalm2517 psalm2517 released this 24 Oct 18:53

v0.8.0

Added

  • /torch all ends every live address you own, after you confirm with a Confirm/Cancel button. On Discord the prompt is ephemeral. It only touches your own addresses, can't be undone, and does nothing if your addresses changed since the prompt was shown.
  • Slack: new /slack/interactions route for the buttons.

Upgrading

  • Slack: add the interactivity block from docs/slack-adapter.md to your app manifest, or the buttons fail.
  • Optional: re-run npm run register-commands so Discord's /torch hint mentions all.

v0.7.2

Choose a tag to compare

@psalm2517 psalm2517 released this 24 Oct 00:26
e02c327

v0.7.2

Upgrade note

  • The every-minute mail.tm poll is no longer in the default wrangler.jsonc. Domain deployments stop being invoked 1,440 times a day. If you run mail.tm mode, add "*/1 * * * *" back to triggers.crons and redeploy, or you'll receive no mail.
  • Cloudflare preview URLs are now off by default (preview_urls: false).

Changed

  • /new now shows the address's short ID in front of the address, as /list does (#12345 address@yourdomain.com), on Discord, Telegram and Slack.

Fixed

  • /new no longer fails for everyone when create and torch churn fills the shared short-id pool. Torching an address now releases its id immediately.
  • Rate limits and the active-address cap now hold under concurrent commands.
  • Telegram no longer redelivers and re-runs a command when the reply can't be sent, for example if the bot is blocked.
  • Mail with a malformed numeric HTML entity is no longer dropped.
  • Expiry reminders on Telegram and Slack now show a real UTC time and the correct opt-out command. Reminders per run are capped at 20 owners.
  • Reminder bookkeeping no longer breaks for an owner with more than 99 due addresses.
  • Discord: mail with more than 10 attachments is no longer rejected whole. Extras are dropped with a note.
  • mail.tm: a message that can't be parsed no longer blocks its mailbox or stops other mailboxes from being polled.
  • mail.tm: messages are no longer delivered twice.
  • mail.tm: oversized messages are dropped.
  • mail.tm: no orphaned mailbox is left when registering an address fails.
  • mail.tm: /new is faster because the domain is cached and create retries are capped at 3.

Security

  • HTML-to-text conversion now runs in linear time. A crafted 256KB email used to cost about 23 seconds of CPU.
  • Sender-controlled links, Slack control syntax (<!channel>, masked links) and newline-forged Subject and From lines no longer render as live markup on Discord or Slack.
  • Attachment filenames are stripped of control and bidi characters and path separators. The "original HTML attached" note now warns that it is the sender's markup.
  • Discord requests older than 5 minutes are rejected. Oversized unauthenticated request bodies get a 413.
  • /counters is cached for 5 minutes, which protects D1 read quotas.
  • Telegram webhook secret is compared in constant time.
  • The status page now sends a CSP, nosniff and frame-ancestors 'none'.
  • Rate-limit lookups ignore inherited property names such as /constructor.
  • Logs show short ids instead of full addresses.
  • CI uses a read-only token and no persisted checkout credentials. The mirror workflow does the same.

Known issues

  • Daily cleanup can delete a row even if the mail.tm account deletion failed.

https://cindermail.xyz
Roadmap

v0.7.1

Choose a tag to compare

@psalm2517 psalm2517 released this 01 Oct 23:52

v0.7.1

Fixed

  • Addresses created before short ids existed (v0.7.0) had none, so /list showed no #id for them and /extend, /note, and /torch couldn't target them by id. The daily cleanup now gives every address without one a unique id, with no manual step, so existing deployments fill their own gaps.

Changed

  • The repo moved to the amandoti-win organization. Every GitHub link (README badges, the Deploy button, clone instructions, the status page's Source link) now points at github.com/amandoti-win/cindermail. Old links redirect.
  • LICENSE copyright holder is now amandoti.win. The license itself is still MIT.

v0.7.0

Choose a tag to compare

@psalm2517 psalm2517 released this 25 Sep 16:25

v0.7.0

Added

  • /list now shows a short 5-digit id next to each address (#48213). /extend, /note, and /torch all accept that id instead of retyping the full address, just the digits, no #.
  • GitHub Sponsors is set up on the repo.

Changed

  • Discord's address option is now address_or_id, matching what it actually accepts. Re-run npm run register-commands to pick up the new label in Discord's UI; the old key still works until you do.
  • Bluesky link updated to amandoti.win.

Fixed

  • Discord's /torch, /note, and /extend briefly broke for anyone on a deployment that hadn't re-registered commands yet, fixed to accept both the old and new option key.

v0.6.1

Choose a tag to compare

@psalm2517 psalm2517 released this 07 Sep 02:46

v0.6.1

Changed

  • npm run setup now offers to collect Telegram's and Slack's secrets interactively, matching what the Deploy button's own form already covered since v0.6.0 -- the wizard was a step behind.
  • README now points to whichever of docs/discord-adapter.md, docs/telegram-adapter.md, or docs/slack-adapter.md matches what you filled in, instead of only linking Discord's after the Deploy section.
  • Status page title changed to "Cindermail Status" (tab and heading), and its domain moved to cindermail.xyz.
  • README now leads with a banner image instead of a plain text title.

Removed

  • The X link on the status page.

v0.6.0

Choose a tag to compare

@psalm2517 psalm2517 released this 06 Sep 20:33

v0.6.0

Slack delivery adapter.

Added

  • Slack is now a supported delivery platform alongside Discord and Telegram. All six commands work (/cm-new, /cm-list, /cm-note, /cm-extend, /cm-torch, /cm-remind), prefixed cm- since Slack rejects bare generic command names outright and /remind collides with a real Slack built-in. Works on a single Worker, set up via an app manifest instead of clicking through a dozen dashboard fields one at a time, secrets prompted by the "Deploy to Cloudflare" button same as Discord's and Telegram's, see docs/slack-adapter.md.

Changed

  • docs/discord-adapter.md, docs/telegram-adapter.md, and docs/slack-adapter.md all now include inline screenshots at every setup step, not just prose.
  • docs/telegram-adapter.md and docs/slack-adapter.md no longer point to docs/discord-adapter.md for command semantics, rate limits, or expiry/note behavior; each is fully self-contained.
  • Every secret-setting step across the docs now documents the Cloudflare dashboard as an alternative to the CLI, including the Type: Secret vs Type: Text distinction.
  • Discord's and Telegram's setup docs both now reuse a single shell variable for any value needed across more than one command (bot token, application ID, webhook secret), instead of separate manual entry per step where a value could drift out of sync between two systems without anything catching it.

v0.5.2

Choose a tag to compare

@psalm2517 psalm2517 released this 06 Sep 18:10
7c8b2e3

v0.5.2

  • Switched license from Unlicense to MIT.

v0.5.1

Choose a tag to compare

@psalm2517 psalm2517 released this 03 Sep 23:04
7a7ef8e

v0.5.1

v0.5.0

Choose a tag to compare

@psalm2517 psalm2517 released this 18 Aug 21:07

v0.5.0

Telegram delivery adapter.

Added

  • Telegram is now a supported delivery platform alongside Discord. All six commands work (/new, /list, /note, /extend, /torch, /remind), parsed from plain-text /command args messages. Works on a single Worker by default, see docs/telegram-adapter.md.

Changed

  • CommandConfig, expiry/note parsing, and HTML-to-text rendering moved out of the Discord adapter into core/, since none of it was Discord-specific and Telegram needed the same logic. Discord's behavior is unchanged.

Fixed

  • The mail.tm poller and cleanup were skipped entirely whenever the main Worker itself was in domain mode, even when a mail.tm-backed address existed from another adapter running in mail.tm mode independently. Mail sent to those addresses was silently dropped.

Under consideration (contingent on demand)

  • Public hosted instance
  • Slack delivery adapter

v0.4.0

Choose a tag to compare

@psalm2517 psalm2517 released this 10 Aug 23:21

v0.4.0

Quota visibility, and the project moves to the Unlicense license.

Added

  • /list now shows your quota (e.g. "3/10 active addresses") alongside your addresses, so hitting the cap on /new isn't a surprise.
  • /new's refusal message at the cap now reports current/max ("10/10 active addresses") instead of just the max.

Changed

  • License switched from MIT to the Unlicense (public domain). No functional change, just a licensing one.
  • Added an AI disclosure to the README: this project is built with AI assistance, directed by the maintainer.

Under consideration (contingent on demand)

  • Telegram delivery adapter
  • Slack delivery adapter
  • Publicly hosted instance