Skip to content

Proxying feeds

A proxied feed is an origin URL that feedforge polls, normalizes, and re-serves from a stable URL on your worker domain.

The feeds CLI wraps wrangler and edits the registry in KV:

Terminal window
npm run feeds -- add myblog https://example.com/rss.xml
npm run feeds -- list
npm run feeds -- remove myblog

add fetches the origin and parses it before writing, so typos and dead URLs fail at registration time instead of at poll time.

RequestResponse
Feed reader → /<name>Normalized RSS 2.0, application/rss+xml
/<name>?format=atomAtom 1.0, application/atom+xml
Browser → /<name>HTML landing page with subscribe call-to-action

Polls honor ETag and Last-Modified, so unchanged feeds cost a single 304. Served XML carries Cache-Control: public, max-age=<poll interval>.

When the origin errors or returns something unparseable, feedforge keeps serving the last good copy and sets an X-Feed-Stale: true header. The browser view shows the warning; feeds list shows the error count and message. A broken origin with no stored copy returns 502.

Map your own hostname to a feed:

Terminal window
npm run feeds -- map-domain feeds.example.org myblog

The CLI prints the [[routes]] block to add to wrangler.toml. Redeploy, and https://feeds.example.org/ serves the feed directly.