opencast is a native, open source podcast app for iPhone and iPad. subscribe directly to any feed, keep your listening private, and skip the parts you don't want (without an account or recommendation algorithm).
no ads. no tracking. no analytics SDKs. ever.
| Your feeds, not a feed | Listen smarter |
|---|---|
| Direct RSS, no lock-in. Find a show in the podcast directory or paste its feed URL. There is no opencast account, recommendation feed, or engagement algorithm between you and your subscriptions. | Searchable transcripts. Transcribe with Apple Speech or Whisper on your device, search what was said, and tap a result to jump to that moment. Remote Transcription is available per episode. |
| Private sync. Keep subscriptions and progress in your private iCloud database, browse and play from CarPlay, and ask Siri for a subscribed show. | Automatic ad skipping. Map promo and sponsor reads on the timeline, skip high-confidence breaks, and undo a bad skip with one tap. |
| Native by design. SwiftUI and Apple system frameworks keep the app fast, familiar, and at home on iPhone and iPad. | A complete player. Up Next, smart resume, speed controls, sleep timer, AirPlay, Voice Boost, and downloads are all built in. |
opencast has no ads, tracking SDKs, or account sign-in. Subscriptions and listening progress can sync through your private iCloud database; caches and downloads remain on your device.
Read the plain-language privacy policy for more.
You will need macOS, Xcode 26 or later, Swift 6.3, and an iOS 26 simulator.
git clone https://github.com/connlark/opencast.git
cd opencast
open opencast.xcodeprojSelect the OpenCast scheme, choose an iPhone or iPad running iOS 26, and press Run. A simulator build does not require a Cloudflare deployment: RSS, the local library, playback, downloads, Voice Boost, and local persistence are all part of the app checkout.
The public repository is deliberately sanitized. Server-backed features point to placeholder endpoints, so notifications, ad analysis, model delivery, purchases, and remote transcription require services you operate and configure yourself.
Running on a physical device
Use your own Apple development team and unique bundle identifiers for the app and both notification extensions. Update the iCloud container to one your team controls and enable Siri for the App ID and provisioning profile. CarPlay audio is granted by Apple per team; remove com.apple.developer.carplay-audio from the selected entitlements file if your team does not have it.
| Area | What lives there |
|---|---|
OpenCast/ |
SwiftUI app, SwiftData stores, playback and feature UI, resources, and platform integrations |
OpenCastNotificationService/ and OpenCastNotificationContent/ |
Rich new-episode notification extensions |
OpenCastCore |
Podcast domain types, RSS parsing, feed identity, and directory search |
OpenCastPlayback |
AVFoundation playback, remote commands, and Voice Boost integration |
OpenCastTranscription |
Apple Speech and vendored WhisperKit transcription support |
OpenCastVoiceBoost |
Native Swift/C voice-processing library and lab tools |
Server/ |
Optional Cloudflare Workers and the opencast marketing/support site |
The app is intentionally native-first: SwiftUI, Observation, SwiftData, AVFoundation, MediaPlayer, CloudKit, and first-party DSP. The Swift code uses Swift 6 strict concurrency.
Every public Worker configuration is a disabled, self-hostable template.
| Capability | Setup guide |
|---|---|
| New-episode notifications | NotificationsWorker |
| Transcript-based ad analysis | AdAnalysisWorker |
| Transcript chapters and summaries | TranscriptAnalysisWorker |
| Whisper model manifests and assets | ModelGatewayWorker |
| Remote transcription | RemoteTranscriptionWorker and TranscriptionMediaWorker |
| Remote-transcription purchases | PurchaseWorker |
| Marketing, support, and privacy site | Website |
Issues and pull requests are welcome!
Need help using the app? Visit support.opencast.mobile. For bugs and feature ideas, open an issue!
opencast is available under the MIT License. Vendored components retain their own attribution and license files.
