Skip to content

Twine: A multiplatform RSS reader built using Kotlin and Compose

License

Notifications You must be signed in to change notification settings

msasikanth/twine

Repository files navigation

Twine - RSS Reader

CI-MAIN Crowdin

banner

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

Get it on Google Play Download on the App Store Get it at IzzyOnDroid

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
  • 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

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 (using kotlin-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 📚

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

Error Reporting by

bugsnag logo

License

GNU GPLv3 Image

About

Twine: A multiplatform RSS reader built using Kotlin and Compose

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

 

Contributors 13