Giter VIP home page Giter VIP logo

twine's Introduction

Twine - RSS Reader

CI-MAIN Sponsor

banner

Twine is a multiplatform RSS reader app built using Kotlin and Compose Multiplatform. It features an nice user interface and experience to browse through the feeds, and supports Material 3 content based dynamic theming.

Download

Get it on Google Play Download on the App Store

Screenshots

Home Screen Home Screen Scrolled Feeds Sheet Add Feed Edit Feeds Search Screen Bookmarks Screen Settings Screen Reader Screen

Features ✨

  • Supports RSS & Atom feeds
  • Gorgeous home feed
  • Pin frequently visited feeds
  • Smart fetching: Twine looks for feeds when given any website homepage
  • Reading view with shortcut to fetch full article
  • Bookmark posts to read later
  • Search posts
  • Background sync
  • Feed management: Add, Edit & Pin feeds
  • Import and exports your feeds with OPML

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 20+, 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.

Made by ❤️

License

Copyright Sasikanth Miriyampalli

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    https://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

twine's People

Contributors

darktiny avatar freedomchuks avatar msasikanth avatar renovate[bot] avatar tramline-github[bot] avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

twine's Issues

Error reporting for invalid URLs is confusing

Describe the bug

Entering an incorrect URL surfaces errors that range from confusing to misleading.

Input URL Error message Suggested fix
msfjarvis.dev/feed.xml Unable to connect to localhost/127.0.0.1:443 Default URL scheme to HTTPS if absent
https://msfjarvis.dev/feed.xml App doesn't support this type of feed yet Special case handling of HTTP 404

Device Information

  • Device: Pixel 4a
  • OS: Android 13
  • App Version: 1.16.0

Add About section

You should add an About section where to insert:

  • Credits
  • Link to source on GitHub
  • Link to bug report on GitHub
  • Version of app
  • ...

Cannot add RSS v1.0 feed

Description
Hi,

Thanks for your work on this project, it's been a really pleasant experience using this app.
On to the issue, I just tried to add the following RSS feed (http://ln.hixie.ch/rss/html) via the app and it errors that the feed is not a valid RSS feed. I had a look for similar issues and found that you use a validator to check what should be supported, but according to this validator this feed is ok.

https://validator.w3.org/feed/check.cgi?url=https://ln.hixie.ch/rss/html

To Reproduce
Steps to reproduce the behavior:

  1. Open bottom sheet and hit the "add feed" button in Twine
  2. Add the link http://ln.hixie.ch/rss/html
  3. See error

Screenshots
Screenshot_20231205-172911

Device Information

  • Device: Pixel 8 Pro
  • OS: Android 14
  • App Version: 1.28.1

Stacktrace
If present, add stacktrace to help debug the issue faster.

Add support for light mode

Do you plan to add a light/day mode for the app? Many people may find reading black text on a white background easier.

F-Droid Release

Is your feature request related to a problem? Please describe.
Can you add Reader to F-Droid?

Describe the solution you'd like
This is the inclusion policy that must be met to be able to submit. More info about submitting can be found here.

Here is the issue tracker to request your package to be available on F-Droid. After submitting, they can assist on what is needed to be done (if anything) to get it on F-Droid.

crash while swiping up to add feed

Describe the bug
App crashes on latest Play Store release when trying to swipe up on the home page.

To Reproduce
Steps to reproduce the behavior:

  1. Open the app
  2. Swipe up to open the bottom sheet
  3. Crash observed

Device Information

  • Device: Poco F1
  • OS: Android 12
  • App Version: v1.1.2-PROD

Stacktrace

05-25 11:16:36.609 15639 15639 E AndroidRuntime: java.lang.IllegalArgumentException: Padding must be non-negative
05-25 11:16:36.609 15639 15639 E AndroidRuntime: 	at u.r0.<init>(Unknown Source:72)
05-25 11:16:36.609 15639 15639 E AndroidRuntime: 	at h7.l.S0(Unknown Source:7)
05-25 11:16:36.609 15639 15639 E AndroidRuntime: 	at h7.l.T0(Unknown Source:21)
05-25 11:16:36.609 15639 15639 E AndroidRuntime: 	at i5.r.a(Unknown Source:943)
05-25 11:16:36.609 15639 15639 E AndroidRuntime: 	at q.s.a(Unknown Source:26)
05-25 11:16:36.609 15639 15639 E AndroidRuntime: 	at q.s.a0(Unknown Source:17)
05-25 11:16:36.609 15639 15639 E AndroidRuntime: 	at i0.y.H(Unknown Source:283)
05-25 11:16:36.609 15639 15639 E AndroidRuntime: 	at q.u1.b(Unknown Source:356)
05-25 11:16:36.609 15639 15639 E AndroidRuntime: 	at q.u1.T(Unknown Source:32)
05-25 11:16:36.609 15639 15639 E AndroidRuntime: 	at a7.h.s0(Unknown Source:42)
05-25 11:16:36.609 15639 15639 E AndroidRuntime: 	at i0.y.o(Unknown Source:128)
05-25 11:16:36.609 15639 15639 E AndroidRuntime: 	at i0.y.G(Unknown Source:35)
05-25 11:16:36.609 15639 15639 E AndroidRuntime: 	at i0.d0.u(Unknown Source:17)
05-25 11:16:36.609 15639 15639 E AndroidRuntime: 	at i0.w1.n(Unknown Source:100)
05-25 11:16:36.609 15639 15639 E AndroidRuntime: 	at u.t.j0(Unknown Source:415)
05-25 11:16:36.609 15639 15639 E AndroidRuntime: 	at androidx.compose.ui.platform.o0.doFrame(Unknown Source:6)
05-25 11:16:36.609 15639 15639 E AndroidRuntime: 	at androidx.compose.ui.platform.m0.doFrame(Unknown Source:47)
05-25 11:16:36.609 15639 15639 E AndroidRuntime: 	at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1035)
05-25 11:16:36.609 15639 15639 E AndroidRuntime: 	at android.view.Choreographer.doCallbacks(Choreographer.java:845)
05-25 11:16:36.609 15639 15639 E AndroidRuntime: 	at android.view.Choreographer.doFrame(Choreographer.java:775)
05-25 11:16:36.609 15639 15639 E AndroidRuntime: 	at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1022)
05-25 11:16:36.609 15639 15639 E AndroidRuntime: 	at android.os.Handler.handleCallback(Handler.java:938)
05-25 11:16:36.609 15639 15639 E AndroidRuntime: 	at android.os.Handler.dispatchMessage(Handler.java:99)
05-25 11:16:36.609 15639 15639 E AndroidRuntime: 	at android.os.Looper.loopOnce(Looper.java:201)
05-25 11:16:36.609 15639 15639 E AndroidRuntime: 	at android.os.Looper.loop(Looper.java:288)
05-25 11:16:36.609 15639 15639 E AndroidRuntime: 	at android.app.ActivityThread.main(ActivityThread.java:7870)
05-25 11:16:36.609 15639 15639 E AndroidRuntime: 	at java.lang.reflect.Method.invoke(Native Method)
05-25 11:16:36.609 15639 15639 E AndroidRuntime: 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
05-25 11:16:36.609 15639 15639 E AndroidRuntime: 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
05-25 11:16:36.609 15639 15639 E AndroidRuntime: 	Suppressed: s7.f: [i0.h1@fbfe505, androidx.compose.ui.platform.m1@35a395a, o1{Cancelling}@80078b, n0@951c068]
05-25 11:16:42.741 15785 15785 E AndroidRuntime: FATAL EXCEPTION: main
05-25 11:16:42.741 15785 15785 E AndroidRuntime: Process: dev.sasikanth.rss.reader, PID: 15785

Scroll position resets when navigating back

Describe the bug
When scrolling through the feed, the scroll position will go back to the top when a new article is closed.

This might be related to #271 but I created another issue just in case the root cause differs.

Screenshots

2024-02-01-22-09-25.mp4

Device Information

  • OS: Android 13
  • App Version 1.33.0

Old Articles Surface above recent articles

Describe the bug
Despite Sorting by recent or deleting articles older than a week, older articles from certain websites stays on top

To Reproduce
Steps to reproduce the behavior:

  1. Go to 'Add feed'
  2. Paste 'https://asteriskmag.com/feed'
  3. See error

Device Information

  • Device: [Poco C3]
  • OS: [e.g. Android 11]
  • App Version [e.g. 1.33.0]

App keep closing itself

Describe the bug
App closes itslef when you mark all read and click next feed sub.

To Reproduce
Steps to reproduce the behavior:

  1. Open all feed drawer.
  2. Mark one feed as all read
  3. Click on the feed below that
  4. App closes itself

Device Information

  • Device: [MIUI GLOBAL 12.0.19]
  • OS: [Android 10]
  • App Version [1.30.1]

Importing opml option not working

Describe the bug
A clear and concise description of what the bug is.

To Reproduce
Steps to reproduce the behavior:

  1. Go to '...'
  2. Click on '....'
  3. Scroll down to '....'
  4. See error

Screenshots
If applicable, add screenshots to help explain your problem.

Device Information

  • Device: [e.g. Pixel 7]
  • OS: [e.g. Android 13]
  • App Version [e.g. 1.0.0]

Stacktrace
If present, add stacktrace to help debug the issue faster.

Post descriptions are not fully URL decoded

Describe the bug
The description tags of RSS feeds tend to contain URL-encoded versions of the post contents which Twine renders as-is without the necessary decoding step.

To Reproduce
Steps to reproduce the behavior:

  1. Add the feed for my website: https://msfjarvis.dev
  2. First featured post contains an "It's" which is not properly URL-decoded

Articles from an RSS feed are continuously reported as being 0 mins old

Describe the bug
Following the latest release of v1.29.0 (115) I find that with the (welcome) addition of a read status one of my feeds i.e. Google AI blog (RSS) always reports the time for all articles as 0 mins since posted. This does increase over time for however long I leave it but once I refresh the feed it resets to 0.

To Reproduce
Steps to reproduce the behavior:

  1. Add RSS feed for google AI blog (linked in the issue)
  2. Add it Twine
  3. All articles will be shown as 0 mins since posted
  4. Wait a few mins then refresh, they are reset again

Screenshots
Screenshot_20231212-103450

Device Information

  • Device: Pixel 8 pro
  • OS: Android 14
  • App Version 1.29.0

Add option to share feed link

Right now i cant see the url of source added. Due to that if i accidentally delete something or it i wanted to share the source with others i end up searching on google anf spend time again.

-> Instead if there is anyway we could see RSS source url and quickly copy/share it with others vis share sheet. Thats saved a bit of time.

Open article links in the app itself

Is your feature request related to a problem? Please describe.
Right now feed open in browser. That is, it open one new app. It would be better if the feed could be read in app itself.

Describe the solution you'd like
Implement a feed reader.

Additional context
Nope

Add support for JSON feeds

Is your feature request related to a problem? Please describe.
My blog, along with others like Jim Nielsen's use JSON feeds instead of XML-based feeds. This is because they're a lot easier to create and manage than XML-based feeds.

Describe the solution you'd like
So far, only a handful of feed readers have added support for JSON feeds. It would be nice if Twine also added support for it. You can read the specification here.

Backup/Restore all RSS links

Is your feature request related to a problem? Please describe.
When you want to switch to a new device or format your phone, you cannot easily export all of your RSS feed links into a file and then restore it to your new device.

Describe the solution you'd like
E.g. export the database of the app into a file and save it to /sdcard . Also, the ability to restore the database from a specific file stored in user's storage.

Additional context

cannot add atom feeds from Microsoft RSS feed picker

Describe the bug
hello, thank you for making this useful app. In this issue, I am reporting the following bug report.

To Reproduce
Steps to reproduce the behavior:

  1. Go to https://support.microsoft.com/en-us/rss-feed-picker
  2. Pick any entry from Products drop-down
  3. Copy the link of RSS feed shown
  4. Try to add in Twine app and see error
  5. It says "Provided link doesn't contain valid RSS/Atom feed" but if you open the rss link in browser, you can see the XML payload

Screenshots
If applicable, add screenshots to help explain your problem.

Device Information

  • Device: Redmi 10 Pro
  • OS: Android 13
  • App Version: 1.31.0 (142)

Stacktrace
If present, add stacktrace to help debug the issue faster.

Add support for changing app language

Have you thought about providing translation support?

I am looking for an rss app for our staff and would be happy to provide German and maybe polish translations

App crashes when swiping up (Android 12)

Upon launching the app for the first time after downloading it from the Play Store, I encountered a crash when swiping up on my Redmi Note 9S Global device running Android 12 (MIUI 14).

(After swiping up, the app crashes and closes abruptly)

  • Device: Redmi Note 9S Global
  • Android Version: Android 12
  • MIUI Version: MIUI 14

I have not encountered any similar issues with other apps made with Compose.

Action Required: Fix Renovate Configuration

There is an error with this repository's Renovate configuration that needs to be fixed. As a precaution, Renovate will stop PRs until it is resolved.

Location: config
Error type: Invalid allowedVersions
Message: The following allowedVersions does not parse as a valid version or range: "\\d+\\.\\d+\\.\\d+-compose-experimental"

Third Party Apps in ContextMenu

Is your feature request related to a problem? Please describe.

Thanks for this App.
But using dictionary in this app is inconvenient, since contextmenu(?) does not allows third party apps. so i have to leave app, to Google every time.
Screenshot_Twine

Describe the solution you'd like

Other apps like Feeder allows third party apps to context menu, so one can use popup based dictionaries.

Incorrect timestamps for the posts

Describe the bug
Instead of showing the actual release date of rss items it says '0 minutes ago'.

To Reproduce
Steps to reproduce the behavior:

  1. Add haveibeenpawned rss
  2. See same result

Screenshots
9c75e1a4-4c7e-4880-8594-d5904282e115

Device Information

  • Device: Pixel 4a (5g)
  • OS: 13 (latest)
  • App Version: 1.2.0 (fdroid)

Stacktrace
Not present in my present lol

Scroll position resets after rotating

Describe the bug
When scrolling through the feed, the scroll position will go back to the top if the phone is rotated.

Screenshots

2024-02-01-22-06-25.mp4

Device Information

  • OS: Android 13
  • App Version 1.33.0

Importing large opml file doesnt work

Describe the bug
I updated my app version to the latest release and as noted in z changelog this release has support to importing opml files. So I tried to import this opml file hacker-news-blogs. And found these too things to improve

  1. Importing only lets us choose xml files at this time... It would be good if opml support was added to
  2. Importing z file stops at 8% (can it be because it is large file)

Device Information

  • Device: [e.g. Samsung A24]
  • OS: [e.g. Android 13]
  • App Version [e.g. 1.24.0]

Support marking article as read

Sometimes, RSS feeds have articles which I don't necessarily want to read but clutter up the feed, and marking all posts as read would not be ideal. It would be really helpful to add this feature (whether through a left/right swipe gesture and/or a button where the bookmark and share buttons are) to help organise my feed!

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

Open

These updates have all been created already. Click a checkbox below to force a retry/rebase of any.

Ignored or Blocked

These are blocked by an existing closed PR and will not be recreated unless you click a checkbox below.

Detected dependencies

cocoapods
iosApp/Podfile
github-actions
.github/workflows/android_prod_release.yml
  • tramlinehq/deploy-action v0.1.6
  • actions/setup-java v4
  • actions/upload-artifact v4
  • actions/upload-artifact v4
.github/workflows/ci_checks.yml
  • actions/checkout v4
  • actions/setup-java v4
  • actions/checkout v4
  • actions/setup-java v4
  • actions/checkout v4
  • actions/setup-java v4
  • actions/checkout v4
  • actions/setup-java v4
  • reactivecircus/android-emulator-runner v2
.github/workflows/ios_prod_release.yml
  • tramlinehq/deploy-action v0.1.6
  • actions/setup-java v4
  • actions/upload-artifact v4
  • macos 14
.github/workflows/ios_prod_release_test.yml
  • tramlinehq/deploy-action v0.1.6
  • actions/setup-java v4
  • actions/upload-artifact v4
gradle
gradle.properties
settings.gradle.kts
build.gradle.kts
androidApp/build.gradle.kts
core/base/build.gradle.kts
core/model/build.gradle.kts
core/network/build.gradle.kts
gradle/libs.versions.toml
  • org.jetbrains.compose.runtime:runtime 1.6.1
  • org.jetbrains.compose.foundation:foundation 1.6.1
  • org.jetbrains.compose.ui:ui 1.6.1
  • org.jetbrains.compose.ui:ui-util 1.6.1
  • org.jetbrains.compose.material:material 1.6.1
  • org.jetbrains.compose.material3:material3 1.6.1
  • org.jetbrains.compose.material:material-icons-extended 1.6.1
  • org.jetbrains.compose.components:components-resources 1.6.1
  • io.ktor:ktor-client-core 2.3.9
  • io.ktor:ktor-client-okhttp 2.3.9
  • io.ktor:ktor-client-darwin 2.3.9
  • io.ktor:ktor-client-logging 2.3.9
  • org.jetbrains.kotlinx:kotlinx-coroutines-core 1.8.0
  • org.jetbrains.kotlinx:kotlinx-coroutines-test 1.8.0
  • org.jetbrains.kotlinx:kotlinx-datetime 0.5.0
  • org.jetbrains.kotlinx:kotlinx-collections-immutable 0.3.7
  • org.jetbrains.kotlinx:atomicfu 0.23.2
  • app.cash.sqldelight:android-driver 2.0.1
  • app.cash.sqldelight:native-driver 2.0.1
  • app.cash.sqldelight:coroutines-extensions 2.0.1
  • app.cash.sqldelight:androidx-paging3-extensions 2.0.1
  • app.cash.sqldelight:sqlite-3-35-dialect 2.0.1
  • com.arkivanov.decompose:decompose 2.2.2-compose-experimental
  • com.arkivanov.decompose:extensions-compose-jetbrains 2.2.2-compose-experimental
  • com.arkivanov.essenty:lifecycle 1.3.0
  • com.arkivanov.essenty:lifecycle-coroutines 1.3.0
  • com.arkivanov.essenty:back-handler 1.3.0
  • androidx.activity:activity-compose 1.8.2
  • androidx.appcompat:appcompat 1.6.1
  • androidx.core:core-ktx 1.12.0
  • androidx.collection:collection 1.4.0
  • androidx.test:runner 1.5.2
  • androidx.test:rules 1.5.0
  • androidx.work:work-runtime-ktx 2.9.0
  • androidx.datastore:datastore-core-okio 1.1.0-beta02
  • androidx.datastore:datastore-preferences-core 1.1.0-beta02
  • androidx.browser:browser 1.8.0
  • androidx.annotation:annotation 1.7.1
  • io.coil-kt.coil3:coil-compose 3.0.0-alpha04
  • io.coil-kt.coil3:coil-network-ktor 3.0.0-alpha04
  • io.coil-kt.coil3:coil-svg 3.0.0-alpha04
  • me.tatarka.inject:kotlin-inject-compiler-ksp 0.6.3
  • me.tatarka.inject:kotlin-inject-runtime 0.6.3
  • dev.sasikanth:material-color-utilities 1.0.0-alpha01
  • com.fleeksoft.ksoup:ksoup 0.1.2
  • com.github.requery:sqlite-android 3.45.0
  • dev.chrisbanes.material3:material3-window-size-class-multiplatform 0.5.0
  • com.android.tools:desugar_jdk_libs 2.0.4
  • cafe.adriel.lyricist:lyricist 1.6.2-1.8.20
  • cafe.adriel.lyricist:lyricist-processor 1.6.2-1.8.20
  • com.squareup.okio:okio 3.9.0
  • app.cash.paging:paging-common 3.3.0-alpha02-0.5.1
  • app.cash.paging:paging-compose-common 3.3.0-alpha02-0.5.1
  • co.touchlab:stately-isolate 2.0.6
  • co.touchlab:stately-iso-collections 2.0.6
  • io.github.pdvrieze.xmlutil:core 0.86.3
  • io.github.pdvrieze.xmlutil:serialization 0.86.3
  • org.kobjects.ktxml:core 0.2.3
  • com.eygraber:uri-kmp 0.0.17
  • io.github.kevinnzou:compose-webview-multiplatform 1.9.0
  • com.benasher44:uuid 0.8.4
  • com.bugsnag:bugsnag-android 6.3.0
  • co.touchlab.crashkios:bugsnag 0.8.6
  • co.touchlab:kermit 2.0.3
  • co.touchlab:kermit-bugsnag 2.0.3
  • com.android.application 8.3.1
  • com.android.library 8.3.1
  • org.jetbrains.kotlin.multiplatform 1.9.23
  • org.jetbrains.kotlin.android 1.9.23
  • org.jetbrains.kotlin.native.cocoapods 1.9.23
  • org.jetbrains.kotlin.plugin.parcelize 1.9.23
  • org.jetbrains.kotlin.plugin.serialization 1.9.23
  • org.jetbrains.compose 1.6.1
  • app.cash.sqldelight 2.0.1
  • com.diffplug.spotless 6.25.0
  • com.google.devtools.ksp 1.9.23-1.0.19
  • com.bugsnag.android.gradle 8.1.0
resources/icons/build.gradle.kts
resources/strings/build.gradle.kts
shared/build.gradle.kts
thirdparty/readability/build.gradle.kts
gradle-wrapper
gradle/wrapper/gradle-wrapper.properties
  • gradle 8.6

  • Check this box to trigger a request for Renovate to run again on this repository

Allow rearranging RSS feeds order

Its abit painful to not have some of my favourite RSS sources at first as app takes the orde in chronological form.

It would be really helpful if we can reorder the added sources and any newly added source goes to bottom of the list.

Error when adding a feed

Describe the bug
When I try to add any rss feed i get the error msg "CLEARTEXT communication not permitted by network security policy"

Screenshots
Screenshot_2023-07-13-14-32-52-99_f399cc1ded1bced82d9d5339fe0d251e.jpg

Device Information

  • Device: OnePlus 8 pro
  • OS: Android 13
  • App Version 1.4.0

Material You theming

Would it be possible to add Material You theming support to the app?

I'm not involved in coding Android apps so I don't know how hard it could be, but it would be great to have the app integrate with the theme most of my apps and my launcher follow.

Thanks in advance for any update.

Reader View

Is your feature request related to a problem? Please describe.
Instead of opening the website I'd love to view the articles directly inside the app alternatively

Describe the solution you'd like
A new view would open (preferably not a Bottom sheet as there's already one) with the date, title, image, body, author and so on

Additional context
Not necessary imho

Widget Feature

Widgets feature for the home screen launcher on Android. For example, we can select an RSS feed, add it as a widget and read it from the home screen without opening the app.

Support feed folders

For those who have organized their feeds into folders by topic, the OPML file also has that information. It would be super handy to have Twine organize our feeds into those folders when we import!

OPML support

Please add OPML support to import/export all feeds at once

parse rss xml with webview ,not use browser or browser tab

this app looks beautiful,UI interaction is also very convenient!

Is your feature request related to a problem? Please describe.
Nope

escribe the solution you'd like
use browser or browser tab Spending too much time

Additional context
Nope

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.