The AI-native
RSS reader
Every article, full text, by default. Zero config.
Self-hosted, one container, zero subscription.
Full Text, Zero Config
Every article is fetched from its source, cleaned with Readability + 500 patterns, and stored as Markdown. No per-feed config, no manual CSS selectors — it just works.
AI Built In
Summarize, translate, and chat with your articles. Works on full text, not RSS snippets. 3 LLM providers, 2 translation engines. Your API keys, zero subscription.
Any Page, Any Feed
No RSS? Oksskolten uses LLM-powered selector inference to turn any webpage into a feed. FlareSolverr handles JS-rendered sites. Subscribe to anything.
Everything you need to read smarter
Full-text extraction, AI-powered analysis, and a beautiful reading experience — all in one self-hosted container.
Read Full Articles In-App
Articles are fetched, cleaned, and rendered as Markdown right inside Oksskolten. No clicking through to the original site, no cookie banners, no ad-heavy layouts.
Summarize, Translate, Chat
One click to summarize or translate any article. Ask questions about it with AI chat — powered by MCP, with full conversation history.
14 Themes, 4 Layouts, 9 Fonts
Switch between list, card, magazine, and compact layouts. Choose from 14 color themes — or import your own as JSON. Pick the reading font that suits you.
Talk to your feeds from the terminal
The same AI chat tools you use in the app are exposed as an MCP server, so terminal-based assistants like Claude Code or Codex can search, summarize, and discover articles too — seamlessly switch between app and CLI whenever you like.
Article fetching pipeline
How an RSS entry travels from source to your reading list — each stage runs automatically once you add a feed.
Add any feed or page
RSS, Atom — or any web page. No feed? No problem.
Auto-discovers native RSS/Atom feeds first. RSS Bridge handles legacy or restricted sources. CSS Selector uses an LLM to scrape pages with no feed at all.
3-layer change detection
Polls only when something actually changed. Adaptive intervals adjust to each feed's real tempo.
Bot-protected sites fall back to FlareSolverr automatically. Intervals range from 15 min to 4 hours based on HTTP cache headers, RSS TTL, and empirical article frequency.
HTML → clean Markdown, automatically
Every article is fetched, cleaned, and converted to Markdown in an isolated worker.
DNS-level SSRF guard blocks private IPs and limits redirects to 5 hops. OG image and title are extracted before any DOM mutation. Readability parses the article, then a content-block scorer can override it when paragraph density is 2× higher. 500+ CSS and regex patterns strip ads, nav, and tracking. Turndown converts to fenced-code GFM Markdown. Excerpt (200 chars) and language (CJK ratio) are derived locally. All DOM work runs in a Piscina thread pool (max 2, 30 s timeout).
SQLite + Meilisearch
Articles land in WAL-mode SQLite, then sync to a full-text search index.
WAL mode / Meilisearch rebuild / 6 h
Articles are persisted to WAL-mode SQLite with language, excerpt, and OG image already attached from the Extract step. Meilisearch rebuilds every 6 hours with change-log tracking.
AI on demand, not in batch
Summarize or translate any article — streamed via SSE, no queue.
Claude / Gemini / OpenAI
DeepL / Google Translate
Pick your provider per task. Summaries produce a 1–2 sentence overview plus bullet points. Translations preserve Markdown structure. All responses stream token-by-token.
Scored, searchable, yours
Engagement scoring surfaces what matters. Full-text search with Meilisearch. Self-hosted, minimal footprint, zero subscription.
How does it compare?
Other readers can fetch full text — but it's opt-in per feed and requires configuration.
Oksskolten does it for every article, by default, with AI built in.
| Oksskolten | Miniflux | FreshRSS | Feedly | |
|---|---|---|---|---|
| Full-text Extraction | ✓ Every article, by default | Opt-in per feed | Opt-in per feed | ✓ Auto (best-effort) |
| Extraction Engine | Readability.js + 500 patterns | Go Readability (~390 lines, ~60 rules) | Manual CSS selectors (user-specified) | Proprietary |
| JS-rendered Sites | ✓ FlareSolverr | — | — | Enterprise only |
| Sites without RSS | ✓ LLM selector inference | — | — | Pro+ (25 feeds) / Enterprise (100) |
| AI Summarization | ✓ (3 providers) | — | — | Pro+ only (Leo AI) |
| AI Translation | ✓ (6 engines) | — | — | Enterprise only |
| AI Chat | ✓ (MCP) | — | — | — |
| Search | Meilisearch (typo-tolerant) | PostgreSQL full-text | SQL LIKE | Pro+ (Power Search) |
| Offline Reading (PWA) | ✓ | — | — | — (mobile apps only) |
| Database | SQLite (embedded) | PostgreSQL (external) | MySQL/PG/SQLite | SaaS |
| Deployment | Single container | Binary + PostgreSQL | PHP + web server + DB | SaaS |
| Price | Free / OSS | Free / OSS | Free / OSS | $12.99/mo (Pro+) |
Up and running in 60 seconds
One container. No external database. No complex configuration.
Clone the repo
git clone https://github.com/babarot/oksskolten.git
cd oksskolten Start with Docker Compose
docker compose up --build Open your browser
open http://localhost:5173
Oksskolten