Open source, self-hosted

A reading list with an end.

Use Cyris to collect your RSS feeds and newsletters into one digest. Read selected articles first and check the full list for more. Run Cyris on your computer or deploy it to Cloudflare.

How it works

Read the highlights or explore the details.

Choose your sources and processing depth. Start with the digest, then consult the full list when you need it.

  1. Bring your subscriptions

    RSS feeds and newsletters

  2. Set each source’s depth

    Filter, summarize, or keep excerpts

  3. Read, then explore

    Highlights, plus this run’s articles and pending items

Processing details: source tiers and news grouping
filter
Filter out most items and keep key headlines.
summarize
Use scores to select full summaries or brief mentions.
fan
Keep original titles and excerpts; skip AI scoring, filtering, and summaries.

For sources set to filter and tagged news, read reports on the same topic in one summary. Open the originals for details.

Article review

Review articles
and change a verdict.

Review the full article list

Open an issue’s article list to review accepted, rejected, and pending items by source.

Upvote: accept an article

Mark this article as accepted. With similarity filtering enabled, a new article at least as similar to an upvoted article as to a downvoted one passes this filter.

Downvote: reject an article

Mark this article as rejected. With similarity filtering enabled, future articles are excluded when their similarity to a downvoted article reaches the threshold and exceeds their similarity to an upvoted one.

To apply votes to future articles, configure an embedding model and enable Vote similarity. Without it, votes only change the accepted or rejected state of the article you vote on.

Sign-in is required to vote. On a custom domain, we recommend Cloudflare Access to restrict who can vote; Access is not available on workers.dev URLs.

Choose an AI provider, or none

AnthropicGoogle GeminiOpenAICloudflare Workers AINone: plain excerpts

Deployment

Run on your computer
or publish on Cloudflare.

On your computer

Run a command to generate an HTML digest, then open it in your browser.

  • Requires Python 3.12+ and uv
  • Run on demand; keep data on disk
  • Email and web voting need Cloudflare Workers
Local setup

Publish on Cloudflare

Set publishing hours so Cyris can generate digests on schedule. Read them and manage your settings on the web.

  • Requires Cloudflare Workers Paid
  • Data in D1; digests on Pages
  • Email ingestion needs your domain and Email Routing
Cloud setup
Local quickstart: from source to digest

Copy the example files and choose your sources. Set provider = "none" for plain excerpts, or supply credentials for your selected AI provider. Keep the store backend set to json for local use.

git clone https://github.com/musingfox/cyris.git
cd cyris
uv sync

cp cyris.toml.example cyris.toml
cp .env.example .env
cp sources.example.yaml sources.yaml

# Edit settings and sources; choose none or supply your AI provider credentials.
uv run cyris doctor
uv run cyris run

Choose None to skip LLM calls. Other AI providers require credentials and may charge for usage; missing required credentials stop the run. Read the full setup instructions ↗