Changelog
What's shipped in Emit.
v1.19October 19, 2026
Sample a source before creating a feed
Authenticated REST and MCP clients can resolve a source and inspect its first ten items before creation. Sampling is read-only, free of credits and rate limited per account, with guarded direct fetching.
v1.18October 18, 2026
Google Chat as a chat destination
-
Chat sinks now accept
kind: "google_chat"with a space's incoming webhook URL (https://chat.googleapis.com/v1/spaces/<space>/messages?key=…&token=…). Other hosts, paths or missingkey/tokenparameters return 422. - Messages are plain text with the same silent baseline, daily/weekly digests and retries as the other chat sinks. The key and token are redacted from stored errors and logs.
v1.17October 16, 2026
Runtime releases recipe in the feed composer
-
The feed catalog links to
/app.html?recipe=runtime-releases, which opens the feed composer with the CPython and Node.js release feeds prefilled and editable. - The choice survives sign-in in the same browser, is applied once, and creates nothing until you press Create feed. A magic link opened on another device does not carry it.
v1.16October 18, 2026
Metered sink deliveries and starter credits
- Slack, Discord, Teams, Telegram, Google Chat, and JSON webhook sinks now include 250 free deliveries per account per calendar month (UTC), then 1 credit ($0.0016) per delivery. A daily or weekly digest counts as one delivery, and test sends are free.
- When the allowance is used and the balance can't cover more, deliveries pause and items are held, not dropped, until credits are added. The allowance resets on the 1st.
- New accounts get 625 free starter credits (~$1) when they verify their email.
- A failed sink test now shows what the destination answered (status, a hint, and the start of its response body), so you can fix the endpoint without guessing.
- In the dashboard, previewing a feed now ends with a “send it somewhere” step for picking where its items get delivered.
v1.15October 12, 2026
Email when a feed or sink keeps failing
-
Owners get one email when an email feed or chat sink fails 10 times in a row (
EMIT_RESOURCE_FAILURE_ALERT_THRESHOLDon self-hosted deployments, 0 disables). The resource stays active and keeps retrying with backoff. - A successful poll re-arms the alert, so a later outage emails again.
v1.14October 11, 2026
Re-queue failed signed account events
-
Owners can retry a failed signed account-event delivery through
POST /or MCPv1/ webhook-endpoints/ {endpoint_id}/ deliveries/ {delivery_id}/ retry retry_event_delivery. The worker resends the original body with a fresh six-attempt budget; pending and delivered rows cannot be replayed. - This recovery action is separate from unsigned per-feed JSON sinks.
v1.13October 10, 2026
Retry times for failing feeds and chat broadcasts
-
Email feeds and chat broadcasts now return
next_poll_atfrom the REST API and MCP list tools: null when healthy, the next retry time while polling is backed off. - The dashboard shows "Retrying in 42m (6 consecutive failures)" under a chat broadcast's error while it is waiting to retry.
v1.13October 10, 2026
Reinstate a wrongly bounced subscriber
-
POST /v1/subscribers/{id}/reinstate(MCPreinstate_subscriber, and a reinstate link on bounced rows in the dashboard) returns a bounced subscriber to pending and sends a fresh double opt-in confirmation. Nothing is mailed until the reader clicks, and the old confirmation link stops working. - Send history is untouched. Complained and unsubscribed subscribers cannot be reinstated; if the address bounces again it is suppressed again.
v1.12October 10, 2026
Developer feed catalog
- A starter catalog of eight upstream-owned developer feeds (release updates, security advisories, engineering news) with copyable RSS/Atom URLs, publisher provenance and a verification date.
- Includes a complete REST example that creates a feed from a catalog URL and routes it to a daily Slack digest, and explains the silent baseline and which operations cost credits.
v1.11October 7, 2026
Telegram chat broadcasts
-
Route any feed to a Telegram group or channel with
kind: "telegram"and a Bot APIsendMessageURL includingchat_id. - Plain-text item alerts and daily or weekly digests reuse the shared message limit, silent baseline, retries and SSRF-pinned transport. Bot tokens are redacted from delivery errors and application logs.
v1.10October 5, 2026
Rotate a Watcher's public feed URLs
-
POST /v1/watchers/{id}/rotate-feed-token(MCP:rotate_feed_token) replaces a feed's Atom and JSON URLs and keeps its sources, items, feedback and Reader history. -
The old URLs return 404 immediately, on every replica. Readers and downstream consumers,
including newsletters made with
/pipe, are not rewritten and must be updated to the new URLs. Existing tokens are unchanged by this release.
v1.10October 5, 2026
Microsoft Teams chat broadcasts
-
New Teams chat destination:
POST /v1/sinkswith"kind": "teams"and a Teams Workflows webhook URL (the "When a Teams webhook request is received" trigger) posts each new item, or one rolled-up daily/weekly digest, to a channel or chat as an Adaptive Card. Same templates, scheduling, preview and retry behaviour as Slack and Discord. -
This is a chat broadcast, not a JSON one: a
webhooksink still POSTs plain JSON to your own endpoint, and account-event webhooks remain a separate signed stream.
v1.8July 30, 2026
JSON webhook broadcasts: any feed → your endpoint
-
New JSON broadcast type: point any feed — including one you
don't own — at an HTTP endpoint and get each new item POSTed as clean JSON. No poller,
no XML parsing, no cron. Sent as
application/jsonwith anX-Emit-Eventheader ofsink.item, and a body of{"event","sink_id","name","item"}. -
Same digest scheduling as the chat broadcasts: switch to daily or weekly and emit holds
items and sends one
sink.digestPOST with anitemsarray, instead of one request per item. - The dashboard states the payload contract before you connect, and the test button now shows the exact body it posted — a JSON endpoint has no channel to go look at.
- Broadcasts tabs are now Email · Chat · JSON · Events. The old "Webhooks" tab is Events — those are account events (a subscriber joined, a broadcast went out), HMAC-signed and retried with a delivery log. JSON broadcasts carry a feed's items instead. Two different things; they no longer share a name.
v1.7July 12, 2026
One taxonomy: feeds in, broadcasts out
- The dashboard now has one Feeds section for everything that makes a feed — a single RSS URL, a stack of them, plain web pages, or a topic prompt, with optional LLM filtering — and one Broadcasts section for everything that sends one out: email, Slack/Discord, and webhooks. "Watchers" and "Destinations" as separate concepts are gone.
- Webhook endpoints get a dashboard home under Broadcasts → Webhooks: add endpoints, copy signing secrets, and inspect the per-endpoint delivery log.
-
The API is unchanged — smart feeds are still
watcherobjects at/v1/watchers, and every published guide keeps working as written.
v1.6July 9, 2026
Programmable RSS feeds: ingest, transform, deliver
- Watchers: describe an interest in plain language → auto-discovered sources, LLM relevance filtering with an auditable "why didn't I see X" view, and a durable Atom/JSON feed. One call pipes it into a newsletter.
- Filter your own feeds: bring feed URLs, add a prompt, get one merged, de-duplicated, filtered feed back — with optional per-item LLM summaries.
- Page → feed: sites without a feed are watched by link diffing and served as a clean feed.
- Slack & Discord destinations: push any feed's new items into a channel via an incoming webhook.
-
Durable webhooks: deliveries are logged and retried with exponential backoff; inspect
them at
GET /v1/webhook-endpoints/{id}/deliveries. - Metered on the same prepaid balance as email: 1 credit per 5 items judged, 1 per summary. Polling, feeds out, chat sinks, and webhooks are free.
v1.5May 26, 2026
Engagement, billing & passwordless login
- Passwordless magic-link login for the dashboard, alongside API keys.
- Open & click tracking with a privacy-respecting per-account toggle.
- Auto-recharge: save a card and top up automatically below a threshold, plus a Stripe billing-portal link.
- Test-send & preview any broadcast before it goes to the list.
- Edit, pause/resume, and test feeds; feeds surface their last poll status.
- Multipart
text/plainsent alongside HTML for deliverability.
v1.4May 26, 2026
Agents, references & polish
- Generated, always-current API reference from the OpenAPI spec.
- Dashboard precompiled (no in-browser Babel); React vendored.
- Terms, Privacy, status and 404 pages;
/metrics+ optional Sentry. - Now operated by Helton Labs LLC at rssemit.com.
v1.3May 2026
Deliverability & safety
- Sender-domain verification flow with DNS challenge (
/v1/domains). - Bounce/complaint suppression via Resend and Amazon SES (SNS) webhooks.
- One-click
List-Unsubscribe; suppression filter + CSV export. - Rate limiting on signup & subscriber writes; unconfirmed-subscriber cap.
v1.2May 2026
Scheduling & scale
- Daily/weekly digests with per-feed send time and timezone.
- Bulk subscriber import; broadcast idempotency keys; bounded send retries.
- Cursor-friendly pagination across list endpoints.
v1.1May 2026
Billing & dashboard
- Prepaid credits via Stripe Checkout; append-only credit ledger.
- API-first dashboard: feeds, subscribers, billing, analytics, key rotation.
v1.0May 2026
Launch
- RSS-to-newsletter, billed per email — no subscriber tiers, no free tier.
- Feed polling (conditional GET), double opt-in, SES sending, OpenAPI 3.1.