FeedFlow is a minimalistic RSS Reader that I've built for myself and that's now available on Android, iOS, and macOS.
The majority of websites with an RSS feed don't share the article's content because they want you to go on their website. For this reason, FeedFlow always opens the original website, but you can choose the browser that you want (on mobile). For example, you can open an article on DuckDuckGo or Firefox Focus with all the trackers disabled and then just kill all the navigation data. In this way, the reading experience is separated from your main browser instance.
Your existing RSS collection can be easily imported: FeedFlow offers full and easy import and export capabilities through OPML files.
Feel free to open an issue (or, even better, a PR :)) if something is not working or if you want to propose a new feature.
FeedFlow is built with Jetpack Compose, Compose Multiplatform, and SwiftUI. All the logic is shared using Kotlin Multiplatform.
FeedFlow uses RSSParser, an RSS parsing library I've built for Android, which is now Multiplatform!
FeedFlow is available for Android, iOS, and macOS.
You can also download the latest macOS version from GitHub Releases, or use Homebrew.
brew install --cask feedflow
To build the project, some setup is required:
The google-services.json
is required to build the project. You can generate a fake one with this command:
cp config/dummy-google-services.json androidApp/src/debug/google-services.json
cp config/dummy-google-services.json androidApp/src/release/google-services.json
or use the fdroid
variant.
The dropbox sync won't work because the Dropbox API key is not included in the repository.
You can generate your own key and add it in the keystore.properties
file.
dropbox_key=your_key
Create a copy of the FeedFlow.xcconfig
file with the following command:
cp iosApp/Assets/FeedFlow.xcconfig.template iosApp/Assets/FeedFlow.xcconfig
Fill in the DEVELOPMENT_TEAM
and BUNDLE_ID_PREFIX
values. The first is your Apple Team ID. The latter is your domain in reverse notation or what you use as the prefix for your projects.
The GoogleService-Info.plist
(for release and dev variants) is required to build the project. You can generate a fake one with this command:
cp config/dummy-google-service.plist iosApp/GoogleService-Info-dev.plist
cp config/dummy-google-service.plist iosApp/GoogleService-Info.plist
The dropbox sync won't work because the Dropbox API key is not included in the repository.
You can generate your own key and add it on the Config.xcconfig
file. You can generate the file with the following command:
cp iosApp/Assets/Config.xcconfig.template iosApp/Assets/Config.xcconfig
To run the desktop version, run the following Gradle task:
./gradlew desktopApp:run
The dropbox sync won't work because the Dropbox API key is not included in the repository.
You can generate your own key and add it in the desktopApp/src/jvmMain/resources/props.properties
file.
dropbox_key=your-key
If you want to help translate FeedFlow, I will be more than happy.
To add a new translation, you can use Weblate or open a pull request with a new strings.xml
file inside the i18n/src/commonMain/resources/locale/values-<language-code>/strings.xml
folder and new files inside the assets/storecopy/<language-code>
folder (where <language-code>
is a two-letter ISO 639-1 language code).
Copyright 2023 Marco Gomiero
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
http://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.