- Kotlin 99.3%
- Python 0.7%
Research (AUDIT.md has the full per-platform record): - NewPipeExtractor rejected again with fresh evidence (GPL-3.0/AGPL vs this app's MIT license; still no Mixcloud or account surface). - SmartTube/MediaServiceCore audit (both MIT): YouTube account sign-in ported as an independent implementation of the TV device-code flow - client constants scraped at runtime from the TV client's base.js, so no Brandon Google Cloud project is involved. YouTube home view shows recommendations + subscriptions shelf. - Groups.io member-only archives via the user's own API key (encrypted). - Sign-in-only Google Groups via WebView sign-in cookie capture + cookies.txt import into the existing encrypted cookie store. - Chromecast: Google's default media receiver needs no registration (old 'needs owner credentials' claim refuted); DLNA kept. - Wayback CDX podcast archive recovery (keyless). Parity ports: YouTube Takeout ZIP import (was absent), ordered filter pipeline with stop, category rename/delete, age retention + delete behaviour + confirm, reader presentation toggles, search scope, restore-last-view, Open Article/Media by URL, feed description + Reset Title, 9 new directory sources (fyyd, Podverse, Feedly, NewsBlur, Reddit, Lemmy, Groups.io, Feedspot + Google/Bing News), schema v4, keyboard shortcuts, built-in guide updated. Translations: English source of truth 58 -> 187 strings (settings detail, player, provider setup, discover, ListReading speech templates); tools/gen_locales.py regenerates all 15 locales from the desktop gettext catalogs. Tests: 81 (70 + 11 new), all green; assembleDebug green; APK verified org.blindrss.android v0.13.0 (17), minSdk 26. |
||
|---|---|---|
| .firecrawl | ||
| app | ||
| docs/agents | ||
| gradle/wrapper | ||
| third_party | ||
| tools | ||
| ytdl | ||
| .gitignore | ||
| .gitmodules | ||
| AGENTS.md | ||
| AUDIT.md | ||
| build.gradle.kts | ||
| gradle.properties | ||
| gradlew | ||
| gradlew.bat | ||
| LICENSE | ||
| README.md | ||
| settings.gradle.kts | ||
BlindRSS for Android
TalkBack-first Android port of desktop BlindRSS (Python/wxPython v2.3.9). Kotlin + Jetpack Compose, Room, WorkManager, Media3 ExoPlayer. minSdk 26, targetSdk 35.
See AUDIT.md for the full feature/provider matrix, accessibility notes, and known gaps.
Build
Windows (JDK 21, Android SDK at %LOCALAPPDATA%\Android\Sdk):
gradlew.bat testDebugUnitTest assembleDebug
Debug APK: app/build/outputs/apk/debug/app-debug.apk (signed with debug key).
Features
- Local RSS/Atom/RDF/JSON-Feed, OPML import/export, URL feed discovery (YouTube channel/playlist, Reddit, Lemmy/PieFed, Mastodon, Bluesky and GitHub shortcuts)
- Hosted sync: Miniflux, Inoreader, The Old Reader, BazQux, Feedbin, Google Reader/FreshRSS, Fever, NewsBlur
- All/Unread/Read/Favorites, categories, Smart Folders, Deleted restore/purge, Feeds-with-errors, filter rules
- Edit feed: rename, move to another category, change a local feed's address (synced to your provider)
- Full-text extraction, search, podcast playback (speed, seek, chapters, sleep timer, offline downloads, resume)
- YouTube videos read as articles (description, chapters, transcript, top comments); Reddit and Lemmy threads read whole
- Directory search: Apple Podcasts, gPodder, Feedsearch, Mastodon, Bluesky, PieFed
- Configurable browser identity and clearance cookies for bot-protected feeds; refresh complete sound
- Offline user guide (Home menu and Settings > About)
- Background sync with new-article notifications, per-feed mute
- TalkBack: labelled controls, merged article rows with custom actions, headings, live-region sync announcements
Providers setup
Build: clone with --recursive (or run git submodule update --init); yt-dlp support comes from the third_party/youtubedl-kotlin submodule.
Settings → Add provider → pick one → enter credentials → Sign in. The login is tested before anything is saved; a first sync runs after. Credentials are stored encrypted (Android Keystore AES-GCM). Inoreader: paste an OAuth access token (App ID/Key fields provided).