{"id":13407041,"url":"https://github.com/msasikanth/twine","last_synced_at":"2025-05-14T10:08:22.652Z","repository":{"id":162833687,"uuid":"632826313","full_name":"msasikanth/twine","owner":"msasikanth","description":"Twine: A multiplatform RSS reader built using Kotlin and Compose","archived":false,"fork":false,"pushed_at":"2025-04-11T14:43:45.000Z","size":32880,"stargazers_count":1917,"open_issues_count":27,"forks_count":86,"subscribers_count":11,"default_branch":"main","last_synced_at":"2025-04-11T23:55:40.364Z","etag":null,"topics":["compose-multiplatform","kotlin-multiplatform"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/msasikanth.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["msasikanth"],"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"lfx_crowdfunding":null,"custom":null}},"created_at":"2023-04-26T08:01:11.000Z","updated_at":"2025-04-11T14:57:43.000Z","dependencies_parsed_at":"2024-01-29T21:26:47.657Z","dependency_job_id":"7c702a6b-e8ff-45a9-b133-28e7a4966f4e","html_url":"https://github.com/msasikanth/twine","commit_stats":null,"previous_names":["msasikanth/twine","msasikanth/reader"],"tags_count":56,"template":false,"template_full_name":"JetBrains/compose-multiplatform-template","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/msasikanth%2Ftwine","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/msasikanth%2Ftwine/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/msasikanth%2Ftwine/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/msasikanth%2Ftwine/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/msasikanth","download_url":"https://codeload.github.com/msasikanth/twine/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248497811,"owners_count":21113984,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["compose-multiplatform","kotlin-multiplatform"],"created_at":"2024-07-30T20:00:18.368Z","updated_at":"2025-05-14T10:08:22.646Z","avatar_url":"https://github.com/msasikanth.png","language":"Kotlin","readme":"# Twine - RSS Reader\n\n![CI-MAIN](https://github.com/msasikanth/twine/actions/workflows/ci_checks.yml/badge.svg?branch=main)\n[![Sponsor](https://img.shields.io/static/v1?label=Sponsor\u0026message=%E2%9D%A4\u0026logo=GitHub\u0026color=%23fe8e86)](https://github.com/sponsors/msasikanth)\n\nTwine is a cross-platform RSS reader app built using Kotlin and Compose Multiplatform. It features an nice\nuser interface and experience to browse through the feeds, and supports Material 3 content based \n[dynamic theming](https://m3.material.io/styles/color/dynamic-color/user-generated-color).\n\n## Download\n\n\u003ca href='https://play.google.com/store/apps/details?id=dev.sasikanth.rss.reader\u0026pcampaignid=pcampaignidMKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1'\u003e\u003cimg alt='Get it on Google Play' src='https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png' width=\"200px\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://apps.apple.com/us/app/twine-rss-reader/id6465694958?itsct=apps_box_badge\u0026amp;itscg=30200\" style=\"display: inline-block; overflow: hidden; border-radius: 13px;\"\u003e\u003cimg src=\"https://tools.applemediaservices.com/api/badges/download-on-the-app-store/white/en-us;releaseDate=1694390400\" alt=\"Download on the App Store\" width=\"200px\"\u003e\u003c/a\u003e\n\n## Images\n\u003cimg src=\"readme_images/banner.png\" alt=\"banner\" /\u003e\n\n\u003cp style=\"text-align: center;\"\u003e\n  \u003cimg src=\"readme_images/home.png\" width=\"250\" alt=\"Home screen\"/\u003e\n  \u003cimg src=\"readme_images/reader.png\" width=\"250\" alt=\"Reader screen\"/\u003e\n  \u003cimg src=\"readme_images/search.png\" width=\"250\" alt=\"Search screen\"/\u003e\n  \u003cimg src=\"readme_images/feed_management.png\" width=\"250\" alt=\"Feed management screen\"/\u003e\n\u003c/p\u003e\n\n## Features ✨\n\n- Supports **RDF**, **RSS**, **Atom** and **JSON** feeds\n- Feed management: Add, Edit, Remove \u0026 Pin feeds\n- Feed grouping\n- Access to pinned feeds/groups from bottom bar in the home screen\n- Smart fetching: Twine looks for feeds when given any website homepage\n- Article shortcut to fetch full article in reader view\n- Bookmark posts to read later\n- Search posts\n- Background sync\n- Import and exports your feeds with OPML\n- Dynamic content theming\n- Light/Dark mode support\n\n## Tech Stack 📚\n\n- [Kotlin Multiplatform](https://kotlinlang.org/lp/multiplatform/)\n- [Kotlin Coroutines](https://github.com/Kotlin/kotlinx.coroutines)\n- [Compose Multiplatform](https://www.jetbrains.com/lp/compose-multiplatform/)\n- [Ktor](https://ktor.io/)\n- [SQLDelight](https://cashapp.github.io/sqldelight/2.0.0-alpha05/)\n- [Decompose](https://arkivanov.github.io/Decompose/)\n- [Kotlin-inject](https://github.com/evant/kotlin-inject)\n\nFor full list of dependencies used, please take a look at the [catalog](/gradle/libs.versions.toml) file.\n\n## Development 🛠️\n\nYou can just clone the repo and build it locally without requiring any changes. \n\nProject requires JDK 20+, and based on the AGP version defined in [`libs.versions.toml`](/gradle/libs.versions.toml) file, \nyou can use appropriate Android Studio to import the project.\n\n## Contributing 🛠️\n\nYou can contribute bug fixes to the project via PRs, for anything else open an issue to start a conversation.\n\nThis project uses ktfmt, provided via the spotless gradle plugin, and the bundled project IntelliJ codestyle. Run\n`./gradlew spotlessApply` to format the code before raising a PR.\n\n## Made with 💖 by\n\n- [Sasikanth Miriyampalli](https://www.sasikanth.dev) / Development\n- [Eduardo Pratti](https://twitter.com/edpratti) / Design\n\n## Error Reporting by\n\n\u003ca href=\"http://www.bugsnag.com/\"\u003e\n  \u003cimg src=\"readme_images/bugsnag.png\" width=\"250\" alt=\"bugsnag logo\"/\u003e\n\u003c/a\u003e\n\n## License\n\n```\nCopyright Sasikanth Miriyampalli\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    https://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n```\n","funding_links":["https://github.com/sponsors/msasikanth"],"categories":["App Projects","News","Kotlin"],"sub_categories":["RSS"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmsasikanth%2Ftwine","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmsasikanth%2Ftwine","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmsasikanth%2Ftwine/lists"}