Build an RSS feed from various sources.
Rosso is a small CLI that lets you combine multiple RSS feeds into a single feed for your reader.
fetch: downloads RSS feeds defined insource.yamland caches items locally (as JSON)build: generates an aggregated RSS feed from the cache (offline; no network access)
npm install -g @aku11i/rossoRequires Node.js >=22.
Create source.yaml:
name: My Feed
description: A combined feed for my reader
link: https://example.com/
feeds:
- type: rss
url: https://blog.example.com/rss.xml
- type: rss
url: https://news.example.com/feed.xmlFetch and cache:
rosso fetch source.yamlBuild an RSS file:
rosso build source.yaml --output-file ./dist/rosso.xmlIf you omit --output-file, Rosso prints the RSS XML to stdout.
Required fields:
namedescriptionlinkfeeds
Feed entries:
feeds:
- type: rss
url: https://example.com/feed.xmlDuplicate feed URLs are removed within the same source.
Add a filter prompt:
filter:
prompt: Keep items about TypeScript and Node.js.Then pass a model when running fetch:
rosso fetch source.yaml --model-provider openai --model gpt-5-miniProviders: openai, github.
API keys:
openai: setOPENAI_API_KEYor pass--model-provider-api-keygithub: setGITHUB_TOKEN, login viagh auth token, or pass--model-provider-api-key
- Default location: your OS user cache directory
- Override:
--cache-dir <dir> fetchupdates the cache using the networkbuildreads only from the cache (no network)
rosso fetch <source> [--cache-dir <dir>] [--model-provider ...]rosso build <source> [--cache-dir <dir>] [--output-file <file>]
Run rosso --help for full usage.
MIT (see LICENSE).
- Requires Node.js
>=22 - Install:
pnpm install - Build:
pnpm build - Test:
pnpm test - Lint:
pnpm lint