Skip to content

Repository files navigation

Tsacdop Banner

github action GitHub Release Github Downloads Localizely License badge fdroid install

About

Enjoy podcasts with Tsacdop.

Tsacdop is a podcast player developed with Flutter, a clean, simply beautiful, and friendly app, which is also free and open source.

Credit to the Flutter team and all involved plugins, especially webfeed, Just_Audio, and Provider.

The podcast search engine is powered by, ListenNotes & PodcastIndex.

Features

  • Podcast group management
  • Playlists support
  • Sleep timer / speed setting
  • OPML file export and import
  • Auto-syncing in the background
  • Listening and subscription history record
  • Dark mode / accent color
  • Download for offline play
  • Auto-download new episodes / auto-delete outdated downloads
  • Settings backup
  • Skip silence
  • Boost volume

More to come...

Preview

Home Page Group Podcast Episode Dark Mode

Localization

Please Email me you'd like to contribute to support more languages!

Credit to Localizely for kind support to open source projects.

English

Chinese Simplified

French

Spanish

Portuguese

License

Tsacdop is licensed under the GPL v3.0 license.

Build

The current toolchain is Flutter 3.47.2, Dart 3.13.2, Android Gradle Plugin 9.3.1, Gradle 9.5, and JDK 21. Android release lint requires JDK 21. The iOS deployment target is 15.0.

  1. Install Flutter and JDK 21, then fetch the source code.
git clone https://github.com/stonega/tsacdop.git
cd tsacdop
flutter config --jdk-dir /path/to/jdk-21
  1. Resolve the dependencies.
flutter pub get
  1. Optionally supply a Listen Notes API key at build time. Without it, the app uses Podcast Index search only. Do not commit the key to the repository.
flutter run --flavor fdroid \
  --dart-define=LISTEN_NOTES_API_KEY=your_key
  1. Build Android artifacts. The F-Droid release is intentionally unsigned so that the store can sign it. The Play flavor reads its signing credentials from KEYSTORE, KEYSTORE_PASSWORD, KEY_ALIAS, and KEY_PASSWORD.
flutter build apk --debug --flavor fdroid

JAVA_HOME=/path/to/jdk-21 \
  ./android/gradlew -p android assembleFdroidRelease

flutter build appbundle --release --flavor play \
  --dart-define=LISTEN_NOTES_API_KEY=your_key
  1. For iOS, run pod install in ios/ on macOS, then build with Xcode or Flutter.
cd ios
pod install
cd ..
flutter build ios --release --no-codesign \
  --dart-define=LISTEN_NOTES_API_KEY=your_key

Plugins that need compatibility patches are vendored in third_party/. Each fork includes an UPSTREAM.md file recording its original repository, pinned commit, and local changes.

You can obtain a Listen Notes key from Listen Notes.

Contribute

If you have an issue or found a bug, please raise a GitHub issue. Pull requests are also welcome.

Architecture

Plugins

  • Local storage
    • sqflite
    • shared_preferences
  • Audio
    • just_audio
    • audio_service
  • State management
    • provider
  • Download
    • flutter_downloader
  • Background task
    • workmanager

Directory Structure

UI
src
└──home
   ├──home.dart [Homepage]
   ├──searc_podcast.dart [Search Page]
   └──playlist.dart [Playlist Page]
└──podcasts
   ├──podcast_manage.dart [Group Page]
   └──podcast_detail.dart [Podcast Page]
└──episodes
   └──episode_detail.dart [Episode Page]
└──settings
   └──setting.dart [Setting Page]

STATE
src
└──state
   ├──audio_state.dart [Audio State]
   ├──download_state.dart [Episode Download]
   ├──podcast_group.dart [Podcast Groups]
   ├──refresh_podcast.dart [Episode Refresh]
   └──setting_state.dart [Setting]

Service
src
└──service
   ├──api_service.dart [Podcast Search]
   ├──gpodder_api.dart [Gpodder intergate]
   └──ompl_builde.dart [OMPL export]

Known Issue

  • Playlist is unstable

Contact

You can reach out to me directly at tsacdop.app@gmail.com.

Or you can join our Telegram Group.

Getting Started with Flutter

This project is a starting point for a Flutter application.

Here are a few resources to get you started if this is your first Flutter project:

For help getting started with Flutter, view our online documentation, which offers tutorials, samples, guidance on mobile development, and a full API reference.

About

Enjoy podcasts with Tsacdop! A podcast player built with flutter.

Topics

Resources

Stars

521 stars

Watchers

15 watching

Forks

Releases

Sponsor this project

Used by

Contributors

Languages