Skip to content
wimvdonPublic

About

A simple, private RSS and Atom reader for Android. Follow the sites you choose, read in a clean reader with your own font, size and theme, and save articles to Instapaper. No account, ads or tracking. Includes a web app that syncs through your own Google Drive.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Content

Feeds and saved articles in one app, on Android and the web. Formerly called Reader. Its app ID changed from be.wimvandonck.reader to be.wimvandonck.content (2026-10-23): the new app installs next to the old one, which you then uninstall.

📚 Documentation

⚙️ Architecture System design, components and flow
📁 Structure Project organization and responsibilities
🚀 Installation Building, signing key, releases, GitHub settings
🧠 Technical decisions Trade-offs and design justifications
📖 Usage guide Feeds, reading, text settings, Instapaper, settings
🔖 Instapaper Sign in, save, the saved list, and the one-time setup
🧪 Testing How to run tests and what they cover

Description

A simple, private RSS and Atom feed reader for Android.

  • What it does: follows the websites you choose, lists their new articles, and shows them in a clean reader with your choice of font (sans or serif), text size, line spacing and background (theme, sepia or dark). The Save button sends an article to Instapaper (or any app through the share menu), and straight to your Instapaper account when you are signed in.
  • What problem it solves: reading the sites you like without an account, ads, tracking or an algorithm. Your feed list and reading history stay on your phone.
  • Real use case: add theverge.com, pull down in the morning to get the new articles, read a few in sepia with a serif font, and tap Save on a long one to read it later in Instapaper.

There is also a web app (web/) with the same feeds, folders and read articles. Signing in with Instapaper turns on sync between the phone and the web app (docs/account.md); see web/README.md and worker/README.md to publish it. Its tests, lint and build run in CI with the Android app's.

English, Dutch, French, German, Spanish and Italian. Android 12+. See the privacy policy.

Quick start

Install the latest rss-reader-x.y.z.apk from Releases, open it, tap Add feed and type the address of a website you like. To bring your feeds from another reader, export them there as OPML and tap Import OPML.

Technologies used

Area Technology
Language Kotlin 2.4, coroutines, StateFlow
UI Jetpack Compose, Material 3 (dynamic colour optional)
Networking HttpURLConnection (HTTPS only), the platform XML parser for RSS, Atom and OPML
Pictures Coil 3 with OkHttp (thumbnails, hero and inline pictures, video previews)
Storage Jetpack DataStore (settings; feeds and articles in a small text file)
Build Gradle 9.8 (Kotlin DSL, version catalog), AGP 9.4, R8
CI/CD GitHub Actions: tests, lint and a debug APK on every pull request; signed releases; Dependabot
Tests JUnit 4

Quick installation

  1. Install Android Studio (brings the JDK and Android SDK).
  2. Clone the repo and run ./gradlew installDebug with a phone connected.

Full steps: docs/installation.md.

Architecture (summary)

A single-activity Compose app. RssReaderApp owns a SettingsStore and a LibraryRepository. The repository keeps all feeds and articles as one immutable Library value in DataStore and merges freshly downloaded feeds into it; screens render that state and send changes back through it. Feed parsing, dates, HTML clean-up, OPML and the library logic are plain Kotlin and unit tested. A small back stack replaces a navigation library. Details: docs/architecture.md.

Project structure

rss-reader/
├── .github/            CI and release workflows, PR template, Dependabot
├── CLAUDE.md           Rules for Claude Code sessions
├── DESIGN.md           Design language shared with the sibling apps
├── scripts/            Release helpers (versioning, keystore secret) with tests
├── app/src/main/kotlin/be/wimvandonck/content/
│   ├── RssReaderApp.kt Application: settings, library, background scope
│   ├── data/           Library (feeds, articles, read state), settings, storage
│   ├── feed/           Download, RSS/Atom parsing, dates, HTML, feed discovery, OPML
│   └── ui/             Compose screens (list, reader, settings), navigation, theme
└── app/src/test/       JVM unit tests

Full tree: docs/structure.md.

Before the first release

These steps involve secrets, so only the owner can do them (see docs/installation.md):

  • Create a signing key and add the four repository secrets ("Signing key").
  • Back up the keystore and both passwords ("Backing up the key"). If you lose them, the app can never be updated again.
  • Apply the GitHub settings ("GitHub settings").
  • Make the first release ("Making a release").

About

A simple, private RSS and Atom reader for Android. Follow the sites you choose, read in a clean reader with your own font, size and theme, and save articles to Instapaper. No account, ads or tracking. Includes a web app that syncs through your own Google Drive.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages