# Changelog: ipx-web The page, and the container that serves it (Caddy). ipx's changelog is [crates/ipx/CHANGELOG.md](../crates/ipx/CHANGELOG.md), which was the page's too until 0.12.0, and the directory's [crates/directory/CHANGELOG.md](../crates/directory/CHANGELOG.md). Its version is in `package.json`, and a release is tagged `web-vX.Y.Z`. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] ### Fixed - An item opens from the keyboard and with a screen reader: its title is a button. The feed list's rows and the Directory's shows are links to a screen reader, the open one marked current (#298). - An item's Play, Download and Delete buttons show while the keyboard is on one, as they do under the pointer (#299). - A screen reader names an item's read button for what it does, Mark read or Mark unread, not "●" (#300). - The player's position slider has a name, and a screen reader reads where you are as a time, "12:30 of 45:00" (#301). - Placeholder text is in the theme's own hint colour, readable in every theme, and the search and feed filter boxes have names of their own (#302). - A screen reader reads toasts out, and an error stays until you dismiss it with its x; no more than four show at once (#303). - Error messages say what to do, for a server error, a lost connection, a file that would not play or a download that failed, in place of the browser's or the server's own words (#304). - Text boxes, selects and switches have an edge you can see in every theme, and a box with the keyboard in it has the same ring as every other control (#305, #308). - Dialogs are dialogs to a screen reader, named by their heading. The page behind one is out of reach while it is open, and closing it puts the keyboard back where it was (#306). - The boxes in Add a feed, Settings, Download latest and OPML are named by their labels, and clicking a label puts the cursor in its box (#307). - Settings shows iPX's and the page's versions at its foot: the logo's tooltip was out of reach of a keyboard and of a phone (#309). ## [1.2.0] - 2026-10-19 ### Added - A search box has an x at its right end once something is typed in it, which clears it: items, the feed list, the log in Admin and a Signal's icons (#291). - A feed's, an OPML subscription's or a Patreon creator's settings have In All Subscriptions: off keeps its items out of All Subscriptions and its unread count, still there on its own page, in Signals and in Currently Listening (#288). - A feed's settings have a Signals switch beside All Subscriptions, to keep its items out of every Signal (#289). - An item sent as both HTML and Markdown, as Scripting News's are, has a choice beside its buttons to show it as the publisher's HTML or as the Markdown, kept from one item to the next (#285). - A show inside an OPML subscription has a Keep button, a plus, on its page, so it stays on your list as a show of its own if the OPML drops it or you unsubscribe from the OPML (#280). - Admin, Server: a setting to give everyone Signals on the server's TypeSafe key (#271). - Admin, Server: how many days back a new Signal reads (#276). ### Changed - A feed's settings are in parts, each named beside its controls: Address, Downloads, Playback, Where it shows and Directory, with All Subscriptions and Signals drawn as the sidebar draws them, and DeadAir's pause as a slider without a heading (#290). - An OPML subscription's page lists the items of all its shows together, newest first, with the same tabs, search and sort as a show's, in place of a list of the shows; the shows are still in the folder in the feed list (#283). - Unless the server pays for them, Signals are turned on in Settings with your own TypeSafe key, and the Signals folder shows only once they are on (#271). - A Signal's dialog says how far back it reads, and that an edit reads again only what was picked out (#276). - Each request's span in Tempo is named for its method and path, such as `GET /api/entries`, instead of `ipx-web` for every one (#286). ### Fixed - Another person's download, its progress and its failure, no longer shows on your page (#294). ## [1.1.0] - 2026-10-16 ### Added - Signals pick what matters out of the noise of every feed you subscribe to: New signal takes a name, the words to listen for and, if those are not enough, a sentence saying what you mean, and its page lists the items from your feeds that are about it, read and unread as in their own feeds. Settings takes your TypeSafe key, which Signals need, and a Signal without one links to typesafe.ai to get one and to the key's place in Settings (#254, #266). They are kept in a Signals folder first in the feed list, under All Subscriptions, closed or open as an OPML is, with its own page listing them and a + there for a new one (#255, #256, #265). Each can have an icon of its own, searched for among all of Font Awesome Free, in place of its initials (#261), or one picked for it with Auto, which a Signal made without an icon gets by itself; each Signal's row counts its items and unread as a feed's does (#263). - A list opens at once when you have seen it before or the page fetched it ahead: All Subscriptions and the feeds with something unread are fetched when the page loads, and a feed or filter as the pointer or a finger reaches it, then refreshed behind once shown. A list that has to be waited for shows a spinner instead of nothing (#247). Currently Listening and the Directory's front page are fetched ahead the same way and open at once (#248). ### Changed - The page reports how long each list you open takes to show, from the click to the list drawn, for the dashboard (#246). - The page's files are compressed once when built, brotli at its strongest and gzip, and sent in place of the files: the script 30 KB where it was 37, the stylesheet 11 where it was 14. Traces go to the collector compressed (#253). - The page and the API's answers are sent compressed, zstd or gzip, which the feed list and item lists, over 100 KB each, were not; live updates and audio are not compressed (#239). ## [1.0.2] - 2026-10-15 ### Fixed - The refresh buttons turn from the moment they are pressed until the scan they asked for has finished, smoothly, instead of jerking back upright between one feed and the next (#231, #233). - A feed's unread count stays put while a scan checks it quickly; the spinner takes its place only when a check takes a moment (#232). ### Security - The ipx-web image no longer carries curl, which Caddy's base image shipped and nothing used: 8.22.0 there is affected by CVE-2026-92392 (#237). ## [1.0.1] - 2026-10-13 ### Fixed - A live update or a list refresh that fails because the network is gone (a laptop asleep) is no longer reported as an error, an error page from Cloudflare no longer becomes a request's message, and requests a minute or more after a tap start a trace of their own instead of joining that tap's (#219). ## [1.0.0] - 2026-10-12 ### Added - With a directory token that may administer it, an admin has Check now and Remove from the directory on a Directory feed's page, and Servers and Blocked lists in Admin, Directory (#206). - The page has a version of its own, which the logo's tooltip shows beside ipx's (#207). - The page is served by its own container, ipx-web (Caddy), which passes the API to ipx on the same address, so a change to the page deploys without rebuilding ipx (#203). - Admin, Directory sets the directory's address and this server's token, and whether to share, and says how the last share went (#205). - A feed's settings have a Private switch, which keeps it out of the directory; on and locked for a feed whose address or login shows it is private (#205). - ipx-web logs one line a request, without the request's headers or a sign-in token in the address (#210). - ipx-web sends a trace span for each request when `WEB_TRACING=on`, continuing the page's trace into ipx (#213). ### Changed - The Directory says when no directory is set up, and its counts are of everyone on every sharing server (#205). - Add a feed no longer asks for a folder; a feed's folder is its title (#201). ### Fixed - On a phone, the Subscribe button on a Directory feed's page is full size again, not squashed to a sliver (#212). [unreleased]: https://git.sdf1.net/rays/ipx/compare/web-v1.2.0...main [1.2.0]: https://git.sdf1.net/rays/ipx/compare/web-v1.1.0...web-v1.2.0 [1.1.0]: https://git.sdf1.net/rays/ipx/compare/web-v1.0.2...web-v1.1.0 [1.0.2]: https://git.sdf1.net/rays/ipx/compare/web-v1.0.1...web-v1.0.2 [1.0.1]: https://git.sdf1.net/rays/ipx/compare/web-v1.0.0...web-v1.0.1 [1.0.0]: https://git.sdf1.net/rays/ipx/releases/tag/web-v1.0.0