Not an AI wrapper for RSS. A private recommendation layer you can actually live with.

v0.3.1 focuses on the recommendation mechanism itself: more stable ranked inventory, clearer fallback behavior, stronger negative-topic handling, and background ranking that no longer gets in the way of opening, scrolling, or acting on articles.

Algorithmic flow, without platform-shaped sources.

Dibao ranks only the RSS and Atom feeds you added. Recommended now stays closer to the active rank context and sorted inventory, avoiding old contexts or large fallback batches suddenly taking over the list.

  • Recommended and Latest live side by side.
  • Baseline ranking works before any provider is configured.
  • When ranked inventory runs low, fallback is small, temporary, and visible.
RecommendedWhy
The Verge · 12 min ago

A personal feed should keep ranked inventory

Sources, freshness, reading depth, and exploration shape the ranking.

MIT Technology Review · 1 hour ago

Small embedding models for personal reading

Provider optional; baseline ranking always remains usable.

Simon Willison · 2 hours ago

RSS can be calm without becoming dumb

No ad slots and no platform-injected sources.

A recommendation should be able to explain itself.

Article-level explanations surface topic, source, freshness, state, exploration, and fallback signals. If provider, embedding, or profile data is missing, Dibao degrades gracefully instead of breaking the reader.

  • Interest clusters, negative topics, and source signals are visible.
  • Coverage, pendingJobs, failedJobs, and inventory status are diagnosable.
  • Provider failure never blocks reading or local search.

Recommendation explanation

  1. Close to a positive interest cluster
  2. Ranked inventory · 126 articles
  3. Fresh article
  4. Inside exploration radius

Current provider

Ollama · bge-m3 · 1024 dimensions

coverageRatio 0.78 · pendingJobs 0 · failedJobs 0

Clear the backlog without poisoning the profile.

Reader Commands can mark unread debt as read across Latest, Recommended, or submitted search scopes. They are audited separately from behavior events, so cleanup does not become false positive feedback.

  • Clear all, older than 24h, older than 7d, or older than 30d.
  • Favorite, Read Later, read/unread, and not-interested remain explicit actions.
  • Reader progress and article state continue to shape real recommendations.

Reader Command

Cleanup scope · Recommended Mark unread older than 7 days as read

Audited separately; not counted as positive feedback.

Personalization should have a radius you control.

A reader can become too good at showing only the familiar. Dibao lets you tune how tightly recommendations hug established interests versus how much they explore the edges of your own subscriptions. Exploration can be explained and adjusted later.

  • Lower levels are broader and more exploratory; higher levels stay closer to known interests.
  • The ranking scope never leaves feeds you subscribed to.
  • Dedupe, explicit negative feedback, negative topics, and article state still apply.

Cocoon level

Current bias: keep familiar interests while letting edge topics from your subscriptions surface.

Only the ranking radius changes; sources do not.

When feeds are short, the reader can still stay coherent.

The official full-content selector plugin can fetch article bodies per feed when you explicitly enable it, while failed extraction falls back to the RSS body. SQLite FTS5, typography controls, infinite loading, and PWA installability round out the daily reading feel.

  • Full-content fetching is controlled; it does not run JavaScript or bypass paywalls.
  • Recommendations, Latest, Favorites, Read Later, and search can use infinite loading.
  • One container serves the Web app, API, worker, and plugin runtime.

Local search

SourceFolderUnreadRec priority
42 results · SQLite FTS5 Small embedding models for personal reading

Dibao v0.3.1 is live. Follow the docs quick install guide and run it with Docker on your own host.

Install from docs