Changelog

All notable changes to QUILL Cast are documented here. QUILL Cast 2.0 is the first release most people will meet, so its release notes (docs/release-notes-2.0.md, Help > Release Notes in the app) are written as a welcome for new users rather than a list of changes; this file keeps the engineering record. The 1.x release notes were retired on 2026-10-03.

2.0.0 – 2026-10-03

QUILL Cast 2.0. The main window, Find in library and the rest of this release are described for listeners in docs/release-notes-2.0.md. (The app had carried 1.1.0 in its own menus until this release; 2.0.0 is the version everywhere now.)

Testing rebuild: 2.0.0 (build 6). Builds 3 to 6 have not been published. Build 6 keeps everything from build 5 and adds Slider Keys and Help > What’s New; build 5 brought the Python 3.14 runtime and the work on large libraries and long refreshes described under “Speed and reliability”.

The changes are grouped by subject, so you can move through them by heading: the main window, listening, sound and volume, your library, feeds, dictation and AI, help and notifications, Preferences and keys, updates and installing, and speed and reliability.

The main window and getting around

A first-time listener is welcomed

Three screens on a genuinely first launch – welcome, add your first podcast, you’re set – with Skip as a first-class button rather than a small link, because somebody who already knows what a podcast player is should be able to leave in one keystroke.

They were written a long time ago and never once shown: nothing in the app called them. Cast now does, at launch, and remembers that it has. It stays away entirely from anybody who already has podcasts, however they got there – an imported OPML, a restored setup, an upgrade – because explaining how to add a first podcast to somebody with two hundred is a way of saying nobody checked. Skipping counts as done: somebody who skipped chose to, and asking again next launch would be overriding that with a guess.

Tutorials that watch you use the app

The menus are yours

Listening and playback

Deciding what happens next

Winamp keys and chapters you can skip

Bookmarks and your notes

Bookmark This Moment on the Episode menu marks where you are in one keystroke, and Bookmarks… on Help is the list – Enter goes there, with Share, Edit Note, Delete and Export beside it.

No note is required. Episode notes used to insist on text, so “I was here” – the commonest kind of bookmark there is – was not a thing you could record. It is now, and the note can be added later from the list if it turns out there was something to say. Sharing a bookmark with no note says the place rather than a sentence with a dangling colon.

The list is shared with Quill Radio. A bookmark dropped in Radio is here, and one dropped here is there. No sync, no account, no merge: both apps spell the same episode the same way and read one file in your shared data folder, exactly the way your place in an episode already travels between them. Rows this app cannot open – a bookmark Radio made on a live station – still appear, with Go There dimmed and a reason, because hiding them would leave you wondering where your bookmark went.

Export writes the lot as Markdown, grouped by what each bookmark is in, for anybody keeping a listening log.

Sound and volume

Volume Boost per podcast, the right transcript, and F1 in settings

Volume Boost is per podcast now, and it is remembered. One badly-mastered show among forty is exactly what a single global control cannot fix – turn it up for that one and everything else is too loud. Choose Off, Low, Medium or High with a podcast selected in the Podcast Manager, or in that podcast’s own settings, and it applies whenever that show plays.

Two things about the old control were quietly wrong. It was session-only, so the show you fixed last week was quiet again today. And its ceiling was 100% of the system volume, so a podcast already playing at full volume could not be boosted at all – precisely the case a boost exists for. The ceiling is now 150%, which is what Quill Radio’s boost has always allowed and about where a spoken-word recording stops getting louder and starts distorting.

Four levels rather than a number, deliberately: “louder” is a judgement, and choosing between Low and Medium is a question you can hold, where choosing between 118% and 126% is being asked to do the app’s job.

A feed offering several transcripts now gets read properly. Some podcasts publish the same episode’s transcript as JSON, WebVTT, SRT and HTML. QUILL Cast took whichever the publisher happened to list first – and only the structured formats carry cue times, so a show that listed HTML first silently lost the timed transcript reader, chapter detection from transcripts, and timestamps in exported Markdown, on every episode. Cast now picks by what a format can do rather than by feed order, and still falls back to HTML when that is genuinely all there is.

Every settings control answers F1. Podcast Settings and per-podcast settings named themselves properly but had nothing to say when asked – 42 controls now answer with the same sentence they announce.

Your library

A podcast can answer for itself

Almost every complaint a podcast listener has is about one podcast behaving differently from the rest. “Keep the newest three ready” is right for a daily news show and wrong for a weekly three-hour interview. “Check hourly” is right for the news show and wasteful for a dormant archive. A single shared value for either is a value nobody wants.

Nothing added here deletes anything, and everything fails open: a value Cast cannot read means “carry on as before”, never “do less”.

QUILL Lineups

Episode Filters

Some podcasts publish more than one thing. A show you follow also runs a daily two-minute segment, or trailers, or a members-only strand mixed into the public feed – and every one of those arrived, was dismissed by hand, and counted against an Inbox limit you set for a different reason.

Getting episodes without asking

The Inbox, the Play Queue and your disk

Getting an episode out

Save Episode Audio As waits for the download now. It used to ask “download it now? then run this command again”, which is honest about not blocking the window on a download of unknown length and makes you the scheduler: press the key, listen for a completion you have to be watching for, remember what you were doing, press the key again. It now says “Preparing audio file for export” and opens the save dialog when the bytes land. One keystroke, one wait, one outcome.

A wait has four endings, and it says which one it got: the file arrives, the download fails and names the reason, you cancel it from the Downloads window, or it takes long enough that continuing to wait silently would be indistinguishable from a hang – in which case it says the download is carrying on without it, because that is true. And the copy is still a copy: QUILL Cast goes on managing its own downloaded file, and yours is outside all of that.

Copy File Path, on every downloaded episode. The half of handing a file off that needs no file manager – an upload box, a terminal, a message to somebody. It reads back the file name and the folder rather than the whole path, because a path spoken aloud is a line of separators.

Lineups: the Play Queue order, saved. Save Lineup… keeps the order you have arranged under a name; Apply Lineup… puts it back. Applying moves, it never replaces: the lineup’s available unplayed episodes go to the front in the lineup’s order, everything else stays behind them in the order it already had, and anything played or gone is skipped – and counted, because “applied 3, skipped 2” is the difference between a lineup that worked and one that quietly half-worked. Episodes keep the age they had, so Queue Expiration still measures how long they have really been waiting.

A lineup is a saved playlist, deliberately: it renames, deletes, appears in the tree and travels in an export because it is one of those, not a second thing that looks like one.

The Play Queue takes more than one selection. Every other episode list in Cast already did. Shift and arrow extend, Ctrl and Space adds one, and Remove takes everything selected and says how many it took.

Tell me when downloads finish. Off by default, in Podcast Settings. One desktop notification when the download queue goes quiet – not one per episode, because forty toasts is a fault with a friendly icon. Nothing leaves this computer. And it goes through quiet hours as a download, which is the whole reason that category exists: an overnight batch of forty episodes was otherwise the first thing in the family that could wake somebody at 3 a.m.

Knowing what you listened to

Feeds, importing and Feed Check

Importing a real subscription list

A real Downcast export (1,307 feeds) was imported into an isolated library and checked with Cast’s own code; every bug it found is fixed here. Before and after numbers are in the test report.

Checking feeds

A verb for the question the per-show Refresh could not answer. Refresh Feed on a show has always answered “anything new in this one?”. Check All Feeds Now, on the folder and library rows of the Podcast Manager’s tree, answers the other one. It says how many feeds it is checking before it starts, because that result arrives show by show over the next few seconds and a bare “checking” never tells you when it is finished.

It checks paused shows too. A pause means “leave this show alone” – no automatic feed check, no automatic download, for a finished show or a seasonal one between seasons – and it must never come to mean “you cannot reach this show”. That it costs nothing you cannot undo with one keystroke on the row in front of you is the whole reason a pause is safe to offer.

And it runs whether or not the background check is switched on. That switch answers a different question – whether to check without being asked – and it is off by default, so reading one as the other would have shipped a menu item that did nothing at all for most people.

Cast and Quill Radio stop asking the same publisher twice. Both apps read one podcast library, and each keeps its own cadence on purpose: a single shared switch would mean enabling the check here enabled it in Radio too, with no way to say “let Radio do it”. The cost of that is two timers over one set of feeds, so they now share the record of when a check happened. Whichever app checks first writes it down, and the other, arriving inside the same interval, finds the work already done and stays quiet. Nobody configures this.

One list of intervals, meaning the same thing in both apps. Cast used to clamp its interval to its own range and offer its own choices, so “every 12 hours” was a choice in one app and not the other, and a value one app accepted the other quietly rewrote. Both now ask one shared policy, including for what zero means: manually only, an answer rather than the absence of one.

Secure connections and readable text

Dictation and AI

Help, notifications and undo

Undo, Recent Problems, quiet hours, and a setup that travels

Nine things QUILL Cast owed a listener and was quietly not paying. Most are shared with Quill Radio – one store, one window, one wording – so setting them here sets them there.

Every setting says what it does not do

A settings description that answers “what does this do?” and stops leaves the harder question open, and the harder question is the one people get wrong: whether a change applies to what you already have or only to what comes next; whether “keep” means the episode or just the downloaded file; whether off means never or only not-by-itself.

So every podcast, download and per-show setting was rewritten to the same rule – what it does, then the misreading it prevents, in that order, in one added sentence. A few examples of what was missing:

The strings moved into one table so they could be checked, and a new test asserts that every one of them carries the second half. A setting added without it fails the build.

Preferences and keys

Preferences that group what belongs together

Preferences had grown into one flat run of controls, which reads as a list of unrelated facts – especially arrowing through it with a screen reader, where there is no visual proximity to infer grouping from. Related settings now sit in named groups that are announced when you enter them, rather than in a run you have to hold in your head.

Every control in them says what it does and what it does not, under the same rule the rest of the settings were rewritten to earlier today.

Updates, release channels and installing

Speed and reliability

Also

1.0.7

1.0.6

1.0.5

1.0.4

1.0.3

1.0.2

1.0.1

1.0.0