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.
- 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
- 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 ⚠)
- Import and exports your feeds with OPML
- Light, dark and amoled theme support
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.
- 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.
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.
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.
You can help translate project on Crowdin. We use Compose resources for strings, you can read more about it here.
- Sasikanth Miriyampalli / Development
- Eduardo Pratti / Design



