Inspiration

I wanted audiobooks and podcasts in one library.

The more I worked on that idea, the less the boundary between them made sense to me. A book can be released in chapters as podcast episodes. A podcast can tell one story over dozens of chapters or episodes, or a whole season. Whatever the format, I wanted to listen, pick up where I left off, and find something I’d heard without switching apps.

That became Yarnplayer: an app for all long-form audio content. Books and episodes share a library, a queue, and the same tools for listening, searching and sharing.

I also wanted the complete app to be free. Optional tips support development without gating features behind a subscription.

What it does

Yarnplayer brings audiobooks and podcasts together on iPhone, iPad, tvOS and Mac (Designed for iPad). Import audiobook files, connect Plex or Audiobookshelf, or add podcast feeds. Queue a podcast episode after an audiobook chapter and move straight from one to the other.

Search transcripts, bookmarks, chapter titles and show notes together. Tap a transcript result to jump to the moment it was spoken. Transcripts remain readable and searchable even after downloaded audio is removed.

Yarnplayer can identify podcast sponsor reads and self-promotions, and skip them individually or automatically. Ad analysis requires a compatible Apple Intelligence device, iOS 27 or later, and service availability.

When something is worth sharing, turn it into a short video clip or quote card. Playback tools include Silence Trim, Clear Speech, Volume Levelling, Noise Reduction, Mono Audio, an Equaliser and a sleep timer.

How I built it

I built Yarnplayer in Swift with SwiftUI, using AVFoundation for audio playback and media work, Apple’s Speech framework for on-device transcription, and CloudKit for synchronisation and transcript caching.

The app brings local files, podcast feeds, Plex and Audiobookshelf into a common listening experience. Apple’s Foundation Models framework and Private Cloud Compute support ad analysis.

RevenueCat powers the optional tip jar. Tips are consumable in-app purchases: they support development and do not unlock features. Yarnplayer 1.0 launched publicly for the first time on September 29, 2026, and received its first real tip that same day.

Challenges I faced

Breaking down the boundary between audiobooks and podcasts meant handling their differences without making listeners work around them. Local files, podcast feeds and server-hosted books have different metadata and playback behaviour, but moving between them should feel natural.

Another challenge was making transcript-based features trustworthy. Finding a possible advertisement is only part of the problem; skipping it requires reliable start and end points. Yarnplayer drops an ad marker when it cannot confirm those boundaries. Missing an ad is better than cutting off a sentence. This feature required robust testing. Dynamic Ad Insertion can sound and read on a transcript very differently to 'this episode is sponsored by' ad reads. Yarnplayer also will flag ads that may come up naturally in conversation in their own section of the analysis.

You can delete a download to free up space and still keep its transcript. I wanted people to be able to find something they’d heard without having to keep every audio file on their phone.

Accomplishments I’m proud of

I shipped a public 1.0 that turns the idea of one library for long-form audio into something people can use, with all features available for free.

Getting the first tip on launch day meant a lot to me. Everything in Yarnplayer is free, so it felt like someone saw what I was trying to build, appreciated the work I’d put into it, and wanted to support it.

What I learned

Building Yarnplayer reinforced how much of a listening app’s quality lives in the details: queue transitions, playback state, transcript timing and the handling of uncertain results.

Once I could search for something I remembered hearing and jump straight back to it, transcripts became one of my favourite parts of the app.

What’s next

My next priority is learning from the first public release: listening to feedback, improving reliability, and refining the features people use most.

Built With

Share this project:

Updates

Submission history