reader
Twine is a modern cross-platform RSS reader app built using Kotlin and Compose Multiplatform. It features a nice user experience to browse through your feeds, with dynamic theming, changing app ambient color based on content.
Download
Features ✨
- Supports RDF, RSS, Atom and JSON feeds
- Feed management: Add, edit, delete, pin and group feeds
- Bottom bar in home screen to access pinned feeds and groups
- Smart fetching: Twine looks for feeds when given any website homepage
- Article shortcut to fetch full article in the reader view
- Audio player for podcasts and HTML audio tags
- Reader view customizations (fonts, colors)
- Bookmark posts to read later
- Search posts
- Blocked words: Filter out content based on keywords
- Background sync
- Cloud sync support with FreshRSS(GReader), Miniflux, Dropbox (Alpha ⚠)
- Home screen widgets
- Import and exports your feeds with OPML
- App icon customization
- Light, dark and amoled theme support
Project Structure 🏗️
The project follows a modular Kotlin Multiplatform structure:
androidApp: Android-specific application code and entry point.iosApp: iOS-specific application code (Swift/Xcode project).shared: Contains the core UI logic using Compose Multiplatform, ViewModels (usingkotlin-inject), and shared presentation logic.core/: Modularized business logic.base: Base utilities, common interfaces, and platform abstractions.data: Data layer containing repositories, local database (SQLDelight), and sync logic.model: Domain models used across the project.network: Network layer using Ktor for fetching feeds and parsing.
resources/icons: Shared icon resources.
Tech Stack 📚
- Kotlin Multiplatform
- Compose Multiplatform
- Kotlin Coroutines
- Ktor
- SQLDelight
- Kotlin-inject
- Coil
- Multiplatform Markdown Renderer
- Jetpack Libraries
For full list of dependencies used, please take a look at the catalog file.
Development 🛠️
You can just clone the repo and build it locally without requiring any changes.
Project requires JDK 21+, and based on the AGP version defined in libs.versions.toml file,
you can use appropriate Android Studio to import the project.
Contributing 🛠️
You can contribute bug fixes to the project via PRs, for anything else open an issue to start a conversation.
This project uses ktfmt, provided via the spotless gradle plugin, and the bundled project IntelliJ codestyle. Run
./gradlew spotlessApply to format the code before raising a PR.
Translations
You can help translate project on Crowdin. We use Compose resources for strings, you can read more about it here.
Made with 💖 by
- Sasikanth Miriyampalli / Development
- Eduardo Pratti / Design
Error Reporting by



