Skip to content

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 22 May 21:51
· 127 commits to main since this release
24c7d2a

What's new

Features vs kill-the-newsletter upstream

  • Atom feed format — feeds are now available at `atom/:feedId (application/atom+xml) in addition to RSS 2.0, with correct , , and HTML ` elements.
  • WebSub push notifications — Atom and RSS feeds advertise a WebSub hub via Link header; subscribers receive real-time push notifications on new emails instead of polling.
  • HTML email processing — email bodies are sanitized via linkedom + escape-html (XSS prevention, MSO style stripping, plain-text fallback).
  • Email attachments as RSS enclosures — attachments are stored in Cloudflare R2 and served at /files/:attachmentId/:filename, exposed as <enclosure> in RSS and <link rel="enclosure"> in Atom.
  • Sender blocklist — block/allow senders by exact address or domain, with 4-level priority matching. Quick-add dropdown directly from the emails list.
  • EMAIL_DOMAIN env var — separate web domain and email domain.
  • Authelia / reverse-proxy auth — trusted header support (Remote-User, X-Forwarded-User) for delegating admin auth to an external identity provider.
  • Demo environment — auto-deployed to demo.kill-the.news on every push to main, with a nightly KV reset.

Admin UI

  • Full redesign: Inter font, orange theme, site header/footer, Atom feed links, unified container width.
  • Scripts extracted to src/scripts/client/ and compiled via esbuild.
  • Templates migrated to hono/jsx.

Infrastructure & CI

  • Release action builds and attaches dist/index.js to each GitHub release.
  • Cloudflare WAF rate limiting documented (no code changes required).
  • Dependabot updates: Hono 4.12, Zod 4.4, actions/checkout v6, actions/setup-node v6.

Known limitation

  • Race condition on concurrent emails — two emails arriving simultaneously for the same feed can overwrite each other in KV. Fix planned via Durable Objects (see TODO).

Full Changelog: upstream...v0.1.0