2026-09-23 - 2026-10-23
Overview
26 Releases published by 1 user
Published
v1.5.0
ipx 1.5.0
Published
directory-v1.4.0
ipx-directory 1.4.0
Published
web-v1.3.0
ipx-web 1.3.0
Published
v1.4.0
ipx 1.4.0
Published
directory-v1.3.0
ipx-directory 1.3.0
Published
web-v1.2.0
ipx-web 1.2.0
Published
v1.3.0
ipx 1.3.0
Published
web-v1.1.0
ipx-web 1.1.0
Published
directory-v1.2.0
ipx-directory 1.2.0
Published
v1.2.0
ipx 1.2.0
Published
directory-v1.1.1
ipx-directory 1.1.1
Published
web-v1.0.2
ipx-web 1.0.2
Published
v1.1.0
ipx 1.1.0
Published
directory-v1.1.0
ipx-directory 1.1.0
Published
web-v1.0.1
ipx-web 1.0.1
Published
v1.0.0
ipx 1.0.0
Published
directory-v1.0.0
ipx-directory 1.0.0
Published
web-v1.0.0
ipx-web 1.0.0
Published
v0.12.0
Published
v0.11.0
Published
v0.10.3
Published
v0.10.2
Published
v0.10.1
Published
v0.10.0
Published
v0.9.1
Published
v0.9.0
309 Issues closed from 2 users
Closed
#356 Rust: the root modules hold most of the code
Closed
#355 Rust: types written with their full path instead of imported
Closed
#354 Rust: ipx-feed and ipx-directory have public items without doc comments
Closed
#353 Rust: small departures from the style guide (imports, unwrap, for headers, must_use, bool parameters, SAFETY)
Closed
#352 Unread counts still hash every read-state row a person has
Closed
#347 Unread lists and counts read all of a person's items to find the few unread
Closed
#349 Two requests for the same missing artwork fetch it twice
Closed
#345 Artwork kept on disk is read from FUSE, blocking the async threads
Closed
#348 A Signal's counts run the same verdict query twice
Closed
#346 The item list and feed list wait on queries one at a time that could run together
Closed
#344 A page of items reads every enclosure in the database to find its files
Closed
#323 ipx-web strips only the Cf-Access header names, while ipx trusts whatever header trusted_header names from Caddy's address
Closed
#342 One rw snapshot with an enormous subscriber count breaks the directory's listings for everyone
Closed
#343 On the server's key, one user's Signal text shares a Jev call with other users' Signals and may steer their verdicts
Closed
#340 Any signed-in user can make unlimited TypeSafe calls on the server's key through the icon route, even with signals_on_server off
Closed
#324 Disconnecting sign-in requests escape the password-check limit and run unbounded Argon2 work on the blocking pool
Closed
#338 One OPML upload of many same-titled outlines does quadratic work while holding the catalogue lock, and adds tens of thousands of permanent feeds to the shared scan
Closed
#333 Any signed-in user can mark a feed they do not subscribe to private, and promote an OPML-derived feed out of its OPML
Closed
#335 An open /api/events stream keeps sending daemon events to an account after it is removed
Closed
#325 Private feed keys in the URL path reach every signed-in user through /api/events
Closed
#334 Changing a password leaves every existing session and API token valid
Closed
#336 Bodyless POST routes accept cross-origin simple requests carrying ambient credentials
Closed
#337 A subscribed OPML with very many outlines causes quadratic sync work and an unbounded set of child feeds scanned on the shared worker
Closed
#339 One feed listing many distinct http artwork hosts holds the shared scan worker for hours, on every scan
Closed
#329 The directory's refresher fetches LAN and container-network addresses named by an rw peer or by a listed feed's redirect
Closed
#341 Anonymous directory pages each run an unpaged query over the whole catalogue on a shared 10-connection pool
Closed
#327 Feeds listed in a password-protected OPML inherit its username and password and send them to their own, unrelated hosts
Closed
#328 Enclosure downloads send the feed's basic-auth password to whatever host the feed names, unlike feed fetches
Closed
#332 A kept feed from a private OPML loses its private mark when the OPML is removed and is shared to the directory
Closed
#321 Every fresh install seeds an admin account with the public password 'ipodderx', usable through the unauthenticated login endpoint
Closed
#351 cargo deny: RUSTSEC-2026-0385 (ctutils 0.4.2) and RUSTSEC-2026-0382 (rustls-webpki 0.103.15)
Closed
#330 A feed's .torrent URL, or a tracker it names, can make the daemon buffer an unbounded body in memory
Closed
#320 Feed, enclosure, OPML and artwork fetches reach any internal address, and the responses come back to the user
Closed
#322 A deeply nested OPML, uploaded by any signed-in user or served by any feed publisher, can overflow the stack and abort the whole daemon
Closed
#326 Item and enclosure links from feeds are used as href and window.open targets without a scheme check
Closed
#319 Downloaded enclosure served same-origin with an extension-guessed type allows stored XSS
Closed
#331 Torrent enclosures write with overwrite enabled straight into a folder other feeds share, so one publisher can replace another feed's downloaded episodes
Closed
#318 A multi-file torrent's name is recorded unchecked as the enclosure path, so a feed publisher can point Delete, reap and media serving at any path
Closed
#350 Traces of some routes show their time with nothing under it
Closed
#317 WordPress.com sites answer the feed with a browser check, and the feed fails for hours
Closed
#316 A feed's page keeps showing an error after a check succeeds
Closed
#315 The Directory's cover fan names the wrong property in will-change
Closed
#314 The tab bar's corners do not nest around its tabs
Closed
#313 Cover artwork has no edge, and dark covers melt into dark themes
Closed
#310 Reduced motion leaves no sign that a check for new items is running
Closed
#311 Hover styles stick on a phone after a tap
Closed
#312 Scrolling past the end of a dialog or the phone drawer scrolls the page behind
Closed
#309 iPX's and the page's versions are only in a hover tooltip
Closed
#308 An off switch is nearly invisible in every light theme
Closed
#307 Fields in dialogs have labels that are not tied to them
Closed
#306 Dialogs are not dialogs: focus is not moved in, kept in, or given back
Closed
#305 Text fields' borders fail 3:1 in every theme but High contrast
Closed
#304 Error toasts show the browser's or server's raw text, with no next step
Closed
#303 Toasts are not announced, and error toasts vanish after six seconds
Closed
#302 Search and filter placeholders fail contrast in 20 of 25 palettes
Closed
#301 The player's seek bar has no name
Closed
#300 The read toggle on an item row is named "●"
Closed
#299 Play and Delete on an item row are invisible while focused
Closed
#298 An item can't be opened from the keyboard or a screen reader
Closed
#297 CLAUDE.md's test counts are out of date
Closed
#295 A feed address that serves a large file is read whole into memory
Closed
#296 Searching items for % or _ matches more than was typed
Closed
#294 Other people's download failures and progress show on everyone's page
Closed
#293 Downloads folder missing for a moment makes ipx forget every downloaded file
Closed
#292 Patreon's signed download links go to every open page and the log
Closed
#291 A search box has no button to clear what was typed
Closed
#290 Redesign a feed's settings dialog
Closed
#289 Keep a feed, an OPML or a Patreon creator out of Signals
Closed
#288 Keep a feed, an OPML or a Patreon creator out of All Subscriptions
Closed
#287 A slow item list's trace does not say which list it was
Closed
#286 ipx-web's spans are all named ipx-web
Closed
#285 Switch an item between its HTML and its Markdown when a feed sends both
Closed
#268 App-icon tiles for Signals and DeadAir, drawn as the logo is
Closed
#273 The Directory shows initials for podcasts nobody here subscribes to: their artwork is refused
Closed
#272 Every artwork request scans the whole entries table: no index on entries.image
Closed
#284 A feed written in Markdown shows the Markdown as text, not formatted
Closed
#283 An OPML's page lists its shows, not their items together
Closed
#282 ipx lists atom_syndication, quick-xml and rss but does not use them
Closed
#281 Dependencies with known security advisories: ammonia, rustls, h2, ringbuf
Closed
#280 Keep a podcast from an OPML subscription when the OPML drops it
Closed
#279 Artwork served without an image type is refused, so the podcast shows initials
Closed
#278 Signals' metrics are not broken out by person, so the server's bill cannot be split
Closed
#277 Signals can outrun TypeSafe's rate limits, and a 429 is retried as any other error
Closed
#276 Signals: a look-back window an admin sets, a week by default, and an edit that asks again only what was picked out
Closed
#274 The Signals judge scans the whole entries table on every pass, outside any trace
Closed
#275 Signals call Jev one item at a time, so a new Signal takes about 20 minutes to fill
Closed
#269 The API reference on ipxreader.app has no Signals
Closed
#271 Signals: an admin setting for whose TypeSafe key pays for Jev
Closed
#270 Signals have no metrics, and failed Jev calls do not show as failed traces
Closed
#267 Signals judge an image-only item by its title alone: xkcd's Ground Effect went into Formula 1
Closed
#266 A Signal with no key should link to getting one and adding it
Closed
#265 No + on the Signals folder's row
Closed
#264 Jev is offered brand icons through their search terms: Disney Parks got the Mandalorian
Closed
#263 Jev picks a Signal's icon, on the server's key
Closed
#262 Signal tiles all in one colour
Closed
#261 A Signal's own icon, chosen from Font Awesome Free
Closed
#259 Signals pick out far too much: each keyword is a subject on its own
Closed
#260 Signals judge 25 items every 5 minutes instead of going straight through the queue
Closed
#258 Signal unread counts go stale on the page
Closed
#257 Signals: TypeSafe answers 422 to every Jev request
Closed
#256 Signals folder right under All Subscriptions, with its + on the folder's row
Closed
#255 Signals in a folder in the sidebar, like an OPML or Patreon creator
Closed
#254 Signals: smart feeds picked by Jev
Closed
#253 The directory sends its answers uncompressed
Closed
#250 /api/directory's time is mostly outside any span
Closed
#252 The Directory knows only what this server's people subscribe to
Closed
#251 The dashboard's Database connections panel looks exhausted when it is not
Closed
#249 Currently Listening's list takes 1.3 s to answer
Closed
#248 Currently Listening and the Directory's front page still wait for the server
Closed
#247 Opening a list waits for the server, with nothing to say it is loading
Closed
#246 How long a list takes to show after a click is not measured
Closed
#245 The load test's browse scenario fails without a directory
Closed
#240 The feed list counts every item of every feed on each load
Closed
#241 All Subscriptions' item query takes 0.3-0.9 s for about 14,000 items
Closed
#242 Feeds that never answer 'not modified' are downloaded whole every hour
Closed
#244 Feed fetches accept only gzip
Closed
#239 ipx-web sends the API uncompressed
Closed
#243 The directory re-checks every feed every six hours
Closed
#238 A private feed's key is written to the log when its fetch fails
Closed
#236 The page's type-check does not catch nulls
Closed
#237 ipx-web's image carries curl 8.22.0, affected by CVE-2026-92392
Closed
#235 The page's type-check catches little: strict is off
Closed
#234 No unit tests for the page's own functions
Closed
#232 Unread counts blink as a scan goes by
Closed
#233 Refresh buttons should turn from the press to the end of that scan
Closed
#231 The check-every-feed icon turns in jerks
Closed
#230 A server that accepts and never answers holds a scan for 30 s
Closed
#228 A forced scan looks up site icons one feed at a time
Closed
#229 A feed's fetch span does not say which feed
Closed
#227 Directory: a feed check round waits on each feed in turn
Closed
#226 Grafana: the Downloads panel fails
Closed
#225 Private feeds' tokens are kept in traces
Closed
#224 Memory: no way to tell what holds it, and the directory reports none
Closed
#223 Docs: a page for each topic, and an API reference laid out like docs.rs
Closed
#222 The website has no docs: how to install ipx and ipx-web, and how to use ipx's and the directory's APIs
Closed
#221 The prod-check skill still expects the healthcheck's lines after #218
Closed
#220 ipx-directory holds about 900 MB, and nothing shows whether it climbs
Closed
#219 The page reports a NetworkError rejection each time a background fetch fails
Closed
#217 ipx's image does not build: the directory crate's logo files are not copied in
Closed
#216 A home page for iPX at ipxreader.app
Closed
#214 The directory moves to directory.ipxreader.app
Closed
#215 A public web view of the directory at directory.ipxreader.app
Closed
#207 Split ipx into directory, backend and frontend
Closed
#206 Split: directory admin from ipx
Closed
#213 ipx-web and ipx-directory send no traces
Closed
#212 On a phone, a Directory feed's Subscribe button is squashed to 18px
Closed
#210 Dashboard, metrics and traces do not cover ipx-directory or ipx-web
Closed
#211 ipx sends the directory its whole snapshot every half minute
Closed
#203 Split: the frontend in its own container behind Caddy
Closed
#205 Split: ipx uses the directory service
Closed
#209 ipx-web strips Cloudflare Access headers from the tunnel too
Closed
#204 Split: the directory service at ipx-dir.sdf1.net
Closed
#202 Split: move to a Cargo workspace, shared feed crate
Closed
#208 Move ipx into its own Arcane project, with a sample compose for others
Closed
#201 Add a feed asks for a folder
Closed
#200 A larger database pool on Postgres
Closed
#199 The Database connections panel looks maxed out when the pool is idle
Closed
#198 The Artwork kept panel is a flat line at 500 MiB
Closed
#196 Postgres logs an error every 30 seconds for the old DeadAir table
Closed
#197 A scan's not-due notices overflow the live-update stream
Closed
#193 Every scan waits 1-12 s for a check that only needs doing once a day
Closed
#195 Metrics miss the worker's current job, the queues and the work in flight
Closed
#194 No metrics for what the daemon holds between requests, such as database connections in use
Closed
#192 A play's trace holds only its report, not the playlist and audio it fetched
Closed
#188 All Subscriptions takes about a second to list, nearly all of it one query
Closed
#191 The changelog's Unreleased link compares from 0.10.3, not 0.11.0
Closed
#190 Nothing the page does in the browser reaches the logs or traces
Closed
#189 Cloudflare caches DeadAir's audio, so its copy skips the subscriber check
Closed
#187 Traces cannot say where a slow reap, episode list or DeadAir pass spends its time
Closed
#184 Browser test "touch gestures on a phone ... goes to the item just read" fails now and then in the full run
Closed
#186 Saving an episode keeps its dead air though DeadAir is on
Closed
#185 DeadAir sits outside the box of a show's other podcast settings
Closed
#183 DeadAir's pause choice reads as four unrelated buttons
Closed
#178 DeadAir: start an episode at once and move to the shortened copy when it is ready
Closed
#182 DeadAir leaves pauses too short, so speech sounds rushed
Closed
#181 DeadAir: play episodes through an HLS playlist of the original instead of a copy
Closed
#180 Test whether an iPhone plays DeadAir's cuts as an HLS playlist over the original file
Closed
#179 DeadAir copies are kept as long as the episode, doubling its space
Closed
#177 The container's ffmpeg is 5.1, two major versions behind
Closed
#176 Show that DeadAir is still working on an episode
Closed
#175 A downloaded file's buttons wrap onto two rows in the Files pane
Closed
#174 DeadAir fails on an episode with more than about 100 silences, and never tries it again
Closed
#173 DeadAir makes no copy of an episode you have opened but not played
Closed
#172 DeadAir in the page: a switch per feed, one beside the speed, and the time saved
Closed
#171 DeadAir: play episodes with their silences shortened
Closed
#170 The web server leaves Nagle's algorithm on, so a response sent in parts can wait for the browser's acknowledgement
Closed
#169 Five Glass Cannon feeds show no artwork, and every page load logs a 502 for each
Closed
#167 Redesign the feed settings dialog
Closed
#168 All Subscriptions shows unread items that have been read, until the page is reloaded
Closed
#166 A feed set to download 0 downloads nothing, though the dialog says 0 means every episode
Closed
#165 The feed list counts every item of every feed on the server, about 70% of its time
Closed
#164 The feed list's traces do not say where its 290 ms goes
Closed
#163 patch_feed asks for the subscription twice
Closed
#161 Adding a feed from the CLI and from the page are the same steps written twice
Closed
#162 Downloading or deleting a file that no longer exists answers 500 instead of 404
Closed
#160 A feed's Directory page builds the whole Directory to check that one feed is listed
Closed
#159 The feed list asks the database three times per feed in a Patreon or OPML group for the group's title
Closed
#157 Removing an account leaves the feeds only they read downloading for no one
Closed
#158 A torrent of several files can be neither played nor reaped
Closed
#156 The reaper counts read marks and pins of people who no longer subscribe
Closed
#155 An episode whose file turns out to be a torrent is never marked downloaded, and is fetched again every scan
Closed
#154 Download latest with more than 64 items hangs the request and holds up adding feeds and Refresh
Closed
#152 A download that stalls partway stops every scan and download, and the daemon still reports healthy
Closed
#153 A change to the feed list can silently undo another made at the same time
Closed
#147 Color matching
Closed
#151 On a phone the closed feed list casts its shadow along the page's left edge
Closed
#149 toddstashwick-com-devil-inside has never been read: the site redirects to itself forever
Closed
#145 daily-quests and hots-dots are dead: both domains have lapsed
Closed
#144 Pelgrane Press's feed is behind a browser check that refuses iPX most of the time
Closed
#150 Two Directory feeds are dead: Yahoo Finance's is gone, TV Fanatic's is behind a browser check
Closed
#146 Icons should not wrap
Closed
#148 Pin icon remains hard to read
Closed
#143 A moment's DNS failure keeps a listed feed failing for a day: 205 feeds have never been read
Closed
#142 A feed's Directory page says nobody subscribes when someone does, and not why it has nothing
Closed
#141 A feed's corrections never reach an item already stored: a scan skips every item it has seen
Closed
#136 On SQLite every request and every scan write share one database connection
Closed
#120 ipx rm and ipx add while the daemon runs change the database but not the daemon, which then undoes them
Closed
#127 The search box does nothing on Currently Listening
Closed
#119 A feed whose domain has lapsed looks like a quiet feed, not a failing one
Closed
#139 Run the load tests on Postgres, as production runs
Closed
#140 On Postgres every write waits for the server's disk: a scan takes most of a second a feed
Closed
#133 Load tests: what many people at once do to the server, which the browser tests cannot show
Closed
#138 How long a sign-in takes to fail tells anyone whether the name is an account
Closed
#134 Every feed's artwork in the feed list flashes while a refresh of every feed runs
Closed
#137 A flood of wrong passwords stalls every other request
Closed
#135 On SQLite every statement waits for the disk: a scan takes over a second a feed
Closed
#132 The Directory's category tiles fan their covers choppily
Closed
#130 Keep a feed's own description, for its page in the Directory
Closed
#131 Some Directory category tiles are green, which reads as yours
Closed
#129 Anyone signed in can read any feed's items and files, a private feed's included
Closed
#128 Open a feed from the Directory before subscribing to it
Closed
#126 The search box does nothing on the Directory
Closed
#124 Redesign the Directory as a place to browse, with the most subscribed feeds in it
Closed
#125 Feeds that use Apple's Football or Soccer category show as categories of their own beside Sports
Closed
#123 No way for a script or agent to use the API as a person
Closed
#122 The Directory cannot be sorted: only most subscribers first
Closed
#121 A pinned item's pin looks nothing like a pinned feed's
Closed
#118 The Directory's category chips mix categories and subcategories in one flat list
Closed
#117 Most feeds have no Directory category: blogs name none, and it is only set by hand
Closed
#112 The daemon times out fetching some feeds that answer at once from anywhere else
Closed
#115 Follow a feed that has moved for good to its new address
Closed
#116 Items without a title all read "(untitled)"
Closed
#114 The daemon runs a scan pass every minute, nearly always for nothing
Closed
#113 The download queue counts 4420 files that will never download on their own
Closed
#111 Keep artwork on disk and serve it from iPX
Closed
#109 iPhones asking for /apple-touch-icon-precomposed.png get a 404
Closed
#110 Artwork published on http should be stored on https where its host serves it
Closed
#108 A feed whose server hangs holds up the whole scan: fetches have no timeout
Closed
#107 Seed the Directory with vetted news feeds, and keep it free of dead ones
Closed
#106 The startup warning says the token is all that guards the web UI
Closed
#105 The page reloads the whole feed list after every change to one feed
Closed
#104 Feeds are fetched one at a time, so a refresh waits on every site in turn
Closed
#103 An open page reloads the whole feed list every minute, and settings with it
Closed
#102 Adding a site that links no feed subscribes to its web page
Closed
#101 Adding a site without https:// fails on every check
Closed
#100 A feed that was failing stays in the database after its last subscriber leaves
Closed
#99 A failing feed is retried on its normal schedule forever
Closed
#97 Every scan downloads three more old episodes of each show, working back through its whole history
Closed
#98 An unlimited per-check limit stops downloads on Postgres
Closed
#96 Most of a slow feed's scan time is in untraced work after the fetch
Closed
#95 Feeds with no artwork of their own ask their website for an icon on every scan
Closed
#94 The feed list takes about 320ms to load: six queries per feed
Closed
#91 Log as JSON for Loki
Closed
#90 Artwork only on http:// does not show on the https page
Closed
#82 ipx list does not show feed ids
Closed
#85 Remove ipx copy-db once Postgres is settled
Closed
#92 Four subscribed feeds fail on every scan: their publishers' addresses are dead
Closed
#93 A failing feed's error mark is easy to miss, especially in dark mode
Closed
#89 A feed's own artwork is used even when it is gone
Closed
#81 The log is lost on every deploy
Closed
#87 Send OpenTelemetry traces to Tempo
Closed
#88 The log carries terminal colour codes when nobody is at a terminal
Closed
#86 Remove subscribing the first admin to the catalogue
Closed
#84 Remove the move of feeds and settings from config.toml into the database
Closed
#83 Remove the startup pass that folds files WordPress listed twice
Closed
#80 A site icon is never looked up again after the first time
Closed
#79 A site icon the page names but that is missing is stored anyway
Closed
#78 The refresh button gives no sign the feed is being checked
Closed
#77 Refreshing every feed still asks each one only for changes
Closed
#76 A feed page's refresh button looks different from the buttons beside it
Closed
#75 The Directory's Subscribe button shows the Subscribed icon
Closed
#74 Pinned and read look different in each place they are shown
Closed
#73 Existing feeds wait for new content before getting a site icon
Closed
#72 Looking for a page's feed link can panic on non-ASCII text
Closed
#71 Adding a web page's address instead of its feed fails
Closed
#70 A feed with no image shows no artwork, even when its site has a favicon
Closed
#68 Pull to refresh gives no sign it started
Closed
#69 The theme follows the account, so every device gets the same one
Closed
#67 Homepage cannot show ipx's numbers
Closed
#66 The logo takes room from search in the phone's top bar
Closed
#65 The iOS home-screen icon does not follow light and dark mode
Closed
#64 The favicon is the light logo in dark mode too
Closed
#63 Modern theme and the logo's dark variant
Closed
#62 Between releases the running build claims to be the last release
Closed
#61 Settings shows the server's download folder, which nobody can change there
Closed
#60 Logo beside the add-feed button, with the name and version on hover
Closed
#59 The logo's orange needle is too close to the blue bars
Closed
#50 When viewing unread articles, unable to go back after read.
Closed
#58 On the Unread tab a swipe back cannot reach the item just read
Closed
#57 A changed favicon is not picked up for a day
Closed
#56 Rename iPodderX to iPX
Closed
#55 A logo drawn from the radio's screen, to app icon guidelines
Closed
#54 Nothing keeps clear of the Dynamic Island and status bar
Closed
#53 The phone layout looks like a shrunk desktop page, not an iOS app
Closed
#52 Swiping between items shows the item list underneath
Closed
#51 Glass theme: light catching the panel edges
Closed
#48 add a share option
Closed
#47 User managed list of blocked keywords.
Closed
#49 Swipe gesture to go to next article
309 Issues created by 0 users
Opened
#47 User managed list of blocked keywords.
Opened
#48 add a share option
Opened
#49 Swipe gesture to go to next article
Opened
#50 When viewing unread articles, unable to go back after read.
Opened
#51 Glass theme: light catching the panel edges
Opened
#52 Swiping between items shows the item list underneath
Opened
#53 The phone layout looks like a shrunk desktop page, not an iOS app
Opened
#54 Nothing keeps clear of the Dynamic Island and status bar
Opened
#55 A logo drawn from the radio's screen, to app icon guidelines
Opened
#56 Rename iPodderX to iPX
Opened
#57 A changed favicon is not picked up for a day
Opened
#58 On the Unread tab a swipe back cannot reach the item just read
Opened
#59 The logo's orange needle is too close to the blue bars
Opened
#60 Logo beside the add-feed button, with the name and version on hover
Opened
#61 Settings shows the server's download folder, which nobody can change there
Opened
#62 Between releases the running build claims to be the last release
Opened
#63 Modern theme and the logo's dark variant
Opened
#64 The favicon is the light logo in dark mode too
Opened
#65 The iOS home-screen icon does not follow light and dark mode
Opened
#66 The logo takes room from search in the phone's top bar
Opened
#67 Homepage cannot show ipx's numbers
Opened
#68 Pull to refresh gives no sign it started
Opened
#69 The theme follows the account, so every device gets the same one
Opened
#70 A feed with no image shows no artwork, even when its site has a favicon
Opened
#71 Adding a web page's address instead of its feed fails
Opened
#72 Looking for a page's feed link can panic on non-ASCII text
Opened
#73 Existing feeds wait for new content before getting a site icon
Opened
#74 Pinned and read look different in each place they are shown
Opened
#75 The Directory's Subscribe button shows the Subscribed icon
Opened
#76 A feed page's refresh button looks different from the buttons beside it
Opened
#77 Refreshing every feed still asks each one only for changes
Opened
#78 The refresh button gives no sign the feed is being checked
Opened
#79 A site icon the page names but that is missing is stored anyway
Opened
#80 A site icon is never looked up again after the first time
Opened
#81 The log is lost on every deploy
Opened
#82 ipx list does not show feed ids
Opened
#83 Remove the startup pass that folds files WordPress listed twice
Opened
#84 Remove the move of feeds and settings from config.toml into the database
Opened
#85 Remove ipx copy-db once Postgres is settled
Opened
#86 Remove subscribing the first admin to the catalogue
Opened
#87 Send OpenTelemetry traces to Tempo
Opened
#88 The log carries terminal colour codes when nobody is at a terminal
Opened
#89 A feed's own artwork is used even when it is gone
Opened
#90 Artwork only on http:// does not show on the https page
Opened
#91 Log as JSON for Loki
Opened
#92 Four subscribed feeds fail on every scan: their publishers' addresses are dead
Opened
#93 A failing feed's error mark is easy to miss, especially in dark mode
Opened
#94 The feed list takes about 320ms to load: six queries per feed
Opened
#95 Feeds with no artwork of their own ask their website for an icon on every scan
Opened
#96 Most of a slow feed's scan time is in untraced work after the fetch
Opened
#97 Every scan downloads three more old episodes of each show, working back through its whole history
Opened
#98 An unlimited per-check limit stops downloads on Postgres
Opened
#99 A failing feed is retried on its normal schedule forever
Opened
#100 A feed that was failing stays in the database after its last subscriber leaves
Opened
#101 Adding a site without https:// fails on every check
Opened
#102 Adding a site that links no feed subscribes to its web page
Opened
#103 An open page reloads the whole feed list every minute, and settings with it
Opened
#104 Feeds are fetched one at a time, so a refresh waits on every site in turn
Opened
#105 The page reloads the whole feed list after every change to one feed
Opened
#106 The startup warning says the token is all that guards the web UI
Opened
#107 Seed the Directory with vetted news feeds, and keep it free of dead ones
Opened
#108 A feed whose server hangs holds up the whole scan: fetches have no timeout
Opened
#109 iPhones asking for /apple-touch-icon-precomposed.png get a 404
Opened
#110 Artwork published on http should be stored on https where its host serves it
Opened
#111 Keep artwork on disk and serve it from iPX
Opened
#112 The daemon times out fetching some feeds that answer at once from anywhere else
Opened
#113 The download queue counts 4420 files that will never download on their own
Opened
#114 The daemon runs a scan pass every minute, nearly always for nothing
Opened
#115 Follow a feed that has moved for good to its new address
Opened
#116 Items without a title all read "(untitled)"
Opened
#117 Most feeds have no Directory category: blogs name none, and it is only set by hand
Opened
#118 The Directory's category chips mix categories and subcategories in one flat list
Opened
#119 A feed whose domain has lapsed looks like a quiet feed, not a failing one
Opened
#120 ipx rm and ipx add while the daemon runs change the database but not the daemon, which then undoes them
Opened
#121 A pinned item's pin looks nothing like a pinned feed's
Opened
#122 The Directory cannot be sorted: only most subscribers first
Opened
#123 No way for a script or agent to use the API as a person
Opened
#124 Redesign the Directory as a place to browse, with the most subscribed feeds in it
Opened
#125 Feeds that use Apple's Football or Soccer category show as categories of their own beside Sports
Opened
#126 The search box does nothing on the Directory
Opened
#127 The search box does nothing on Currently Listening
Opened
#128 Open a feed from the Directory before subscribing to it
Opened
#129 Anyone signed in can read any feed's items and files, a private feed's included
Opened
#130 Keep a feed's own description, for its page in the Directory
Opened
#131 Some Directory category tiles are green, which reads as yours
Opened
#132 The Directory's category tiles fan their covers choppily
Opened
#133 Load tests: what many people at once do to the server, which the browser tests cannot show
Opened
#134 Every feed's artwork in the feed list flashes while a refresh of every feed runs
Opened
#135 On SQLite every statement waits for the disk: a scan takes over a second a feed
Opened
#136 On SQLite every request and every scan write share one database connection
Opened
#137 A flood of wrong passwords stalls every other request
Opened
#138 How long a sign-in takes to fail tells anyone whether the name is an account
Opened
#139 Run the load tests on Postgres, as production runs
Opened
#140 On Postgres every write waits for the server's disk: a scan takes most of a second a feed
Opened
#141 A feed's corrections never reach an item already stored: a scan skips every item it has seen
Opened
#142 A feed's Directory page says nobody subscribes when someone does, and not why it has nothing
Opened
#143 A moment's DNS failure keeps a listed feed failing for a day: 205 feeds have never been read
Opened
#144 Pelgrane Press's feed is behind a browser check that refuses iPX most of the time
Opened
#145 daily-quests and hots-dots are dead: both domains have lapsed
Opened
#146 Icons should not wrap
Opened
#147 Color matching
Opened
#148 Pin icon remains hard to read
Opened
#149 toddstashwick-com-devil-inside has never been read: the site redirects to itself forever
Opened
#150 Two Directory feeds are dead: Yahoo Finance's is gone, TV Fanatic's is behind a browser check
Opened
#151 On a phone the closed feed list casts its shadow along the page's left edge
Opened
#152 A download that stalls partway stops every scan and download, and the daemon still reports healthy
Opened
#153 A change to the feed list can silently undo another made at the same time
Opened
#154 Download latest with more than 64 items hangs the request and holds up adding feeds and Refresh
Opened
#155 An episode whose file turns out to be a torrent is never marked downloaded, and is fetched again every scan
Opened
#156 The reaper counts read marks and pins of people who no longer subscribe
Opened
#157 Removing an account leaves the feeds only they read downloading for no one
Opened
#158 A torrent of several files can be neither played nor reaped
Opened
#159 The feed list asks the database three times per feed in a Patreon or OPML group for the group's title
Opened
#160 A feed's Directory page builds the whole Directory to check that one feed is listed
Opened
#161 Adding a feed from the CLI and from the page are the same steps written twice
Opened
#162 Downloading or deleting a file that no longer exists answers 500 instead of 404
Opened
#163 patch_feed asks for the subscription twice
Opened
#164 The feed list's traces do not say where its 290 ms goes
Opened
#165 The feed list counts every item of every feed on the server, about 70% of its time
Opened
#166 A feed set to download 0 downloads nothing, though the dialog says 0 means every episode
Opened
#167 Redesign the feed settings dialog
Opened
#168 All Subscriptions shows unread items that have been read, until the page is reloaded
Opened
#169 Five Glass Cannon feeds show no artwork, and every page load logs a 502 for each
Opened
#170 The web server leaves Nagle's algorithm on, so a response sent in parts can wait for the browser's acknowledgement
Opened
#171 DeadAir: play episodes with their silences shortened
Opened
#172 DeadAir in the page: a switch per feed, one beside the speed, and the time saved
Opened
#173 DeadAir makes no copy of an episode you have opened but not played
Opened
#174 DeadAir fails on an episode with more than about 100 silences, and never tries it again
Opened
#175 A downloaded file's buttons wrap onto two rows in the Files pane
Opened
#176 Show that DeadAir is still working on an episode
Opened
#177 The container's ffmpeg is 5.1, two major versions behind
Opened
#178 DeadAir: start an episode at once and move to the shortened copy when it is ready
Opened
#179 DeadAir copies are kept as long as the episode, doubling its space
Opened
#180 Test whether an iPhone plays DeadAir's cuts as an HLS playlist over the original file
Opened
#181 DeadAir: play episodes through an HLS playlist of the original instead of a copy
Opened
#182 DeadAir leaves pauses too short, so speech sounds rushed
Opened
#183 DeadAir's pause choice reads as four unrelated buttons
Opened
#184 Browser test "touch gestures on a phone ... goes to the item just read" fails now and then in the full run
Opened
#185 DeadAir sits outside the box of a show's other podcast settings
Opened
#186 Saving an episode keeps its dead air though DeadAir is on
Opened
#187 Traces cannot say where a slow reap, episode list or DeadAir pass spends its time
Opened
#188 All Subscriptions takes about a second to list, nearly all of it one query
Opened
#189 Cloudflare caches DeadAir's audio, so its copy skips the subscriber check
Opened
#190 Nothing the page does in the browser reaches the logs or traces
Opened
#191 The changelog's Unreleased link compares from 0.10.3, not 0.11.0
Opened
#192 A play's trace holds only its report, not the playlist and audio it fetched
Opened
#193 Every scan waits 1-12 s for a check that only needs doing once a day
Opened
#194 No metrics for what the daemon holds between requests, such as database connections in use
Opened
#195 Metrics miss the worker's current job, the queues and the work in flight
Opened
#196 Postgres logs an error every 30 seconds for the old DeadAir table
Opened
#197 A scan's not-due notices overflow the live-update stream
Opened
#198 The Artwork kept panel is a flat line at 500 MiB
Opened
#199 The Database connections panel looks maxed out when the pool is idle
Opened
#200 A larger database pool on Postgres
Opened
#201 Add a feed asks for a folder
Opened
#202 Split: move to a Cargo workspace, shared feed crate
Opened
#203 Split: the frontend in its own container behind Caddy
Opened
#204 Split: the directory service at ipx-dir.sdf1.net
Opened
#205 Split: ipx uses the directory service
Opened
#206 Split: directory admin from ipx
Opened
#207 Split ipx into directory, backend and frontend
Opened
#208 Move ipx into its own Arcane project, with a sample compose for others
Opened
#209 ipx-web strips Cloudflare Access headers from the tunnel too
Opened
#210 Dashboard, metrics and traces do not cover ipx-directory or ipx-web
Opened
#211 ipx sends the directory its whole snapshot every half minute
Opened
#212 On a phone, a Directory feed's Subscribe button is squashed to 18px
Opened
#213 ipx-web and ipx-directory send no traces
Opened
#214 The directory moves to directory.ipxreader.app
Opened
#215 A public web view of the directory at directory.ipxreader.app
Opened
#216 A home page for iPX at ipxreader.app
Opened
#217 ipx's image does not build: the directory crate's logo files are not copied in
Opened
#219 The page reports a NetworkError rejection each time a background fetch fails
Opened
#220 ipx-directory holds about 900 MB, and nothing shows whether it climbs
Opened
#221 The prod-check skill still expects the healthcheck's lines after #218
Opened
#222 The website has no docs: how to install ipx and ipx-web, and how to use ipx's and the directory's APIs
Opened
#223 Docs: a page for each topic, and an API reference laid out like docs.rs
Opened
#224 Memory: no way to tell what holds it, and the directory reports none
Opened
#225 Private feeds' tokens are kept in traces
Opened
#226 Grafana: the Downloads panel fails
Opened
#227 Directory: a feed check round waits on each feed in turn
Opened
#228 A forced scan looks up site icons one feed at a time
Opened
#229 A feed's fetch span does not say which feed
Opened
#230 A server that accepts and never answers holds a scan for 30 s
Opened
#231 The check-every-feed icon turns in jerks
Opened
#232 Unread counts blink as a scan goes by
Opened
#233 Refresh buttons should turn from the press to the end of that scan
Opened
#234 No unit tests for the page's own functions
Opened
#235 The page's type-check catches little: strict is off
Opened
#236 The page's type-check does not catch nulls
Opened
#237 ipx-web's image carries curl 8.22.0, affected by CVE-2026-92392
Opened
#238 A private feed's key is written to the log when its fetch fails
Opened
#239 ipx-web sends the API uncompressed
Opened
#240 The feed list counts every item of every feed on each load
Opened
#241 All Subscriptions' item query takes 0.3-0.9 s for about 14,000 items
Opened
#242 Feeds that never answer 'not modified' are downloaded whole every hour
Opened
#243 The directory re-checks every feed every six hours
Opened
#244 Feed fetches accept only gzip
Opened
#245 The load test's browse scenario fails without a directory
Opened
#246 How long a list takes to show after a click is not measured
Opened
#247 Opening a list waits for the server, with nothing to say it is loading
Opened
#248 Currently Listening and the Directory's front page still wait for the server
Opened
#249 Currently Listening's list takes 1.3 s to answer
Opened
#250 /api/directory's time is mostly outside any span
Opened
#251 The dashboard's Database connections panel looks exhausted when it is not
Opened
#252 The Directory knows only what this server's people subscribe to
Opened
#253 The directory sends its answers uncompressed
Opened
#254 Signals: smart feeds picked by Jev
Opened
#255 Signals in a folder in the sidebar, like an OPML or Patreon creator
Opened
#256 Signals folder right under All Subscriptions, with its + on the folder's row
Opened
#257 Signals: TypeSafe answers 422 to every Jev request
Opened
#258 Signal unread counts go stale on the page
Opened
#259 Signals pick out far too much: each keyword is a subject on its own
Opened
#260 Signals judge 25 items every 5 minutes instead of going straight through the queue
Opened
#261 A Signal's own icon, chosen from Font Awesome Free
Opened
#262 Signal tiles all in one colour
Opened
#263 Jev picks a Signal's icon, on the server's key
Opened
#264 Jev is offered brand icons through their search terms: Disney Parks got the Mandalorian
Opened
#265 No + on the Signals folder's row
Opened
#266 A Signal with no key should link to getting one and adding it
Opened
#267 Signals judge an image-only item by its title alone: xkcd's Ground Effect went into Formula 1
Opened
#268 App-icon tiles for Signals and DeadAir, drawn as the logo is
Opened
#269 The API reference on ipxreader.app has no Signals
Opened
#270 Signals have no metrics, and failed Jev calls do not show as failed traces
Opened
#271 Signals: an admin setting for whose TypeSafe key pays for Jev
Opened
#272 Every artwork request scans the whole entries table: no index on entries.image
Opened
#273 The Directory shows initials for podcasts nobody here subscribes to: their artwork is refused
Opened
#274 The Signals judge scans the whole entries table on every pass, outside any trace
Opened
#275 Signals call Jev one item at a time, so a new Signal takes about 20 minutes to fill
Opened
#276 Signals: a look-back window an admin sets, a week by default, and an edit that asks again only what was picked out
Opened
#277 Signals can outrun TypeSafe's rate limits, and a 429 is retried as any other error
Opened
#278 Signals' metrics are not broken out by person, so the server's bill cannot be split
Opened
#279 Artwork served without an image type is refused, so the podcast shows initials
Opened
#280 Keep a podcast from an OPML subscription when the OPML drops it
Opened
#281 Dependencies with known security advisories: ammonia, rustls, h2, ringbuf
Opened
#282 ipx lists atom_syndication, quick-xml and rss but does not use them
Opened
#283 An OPML's page lists its shows, not their items together
Opened
#284 A feed written in Markdown shows the Markdown as text, not formatted
Opened
#285 Switch an item between its HTML and its Markdown when a feed sends both
Opened
#286 ipx-web's spans are all named ipx-web
Opened
#287 A slow item list's trace does not say which list it was
Opened
#288 Keep a feed, an OPML or a Patreon creator out of All Subscriptions
Opened
#289 Keep a feed, an OPML or a Patreon creator out of Signals
Opened
#290 Redesign a feed's settings dialog
Opened
#291 A search box has no button to clear what was typed
Opened
#292 Patreon's signed download links go to every open page and the log
Opened
#293 Downloads folder missing for a moment makes ipx forget every downloaded file
Opened
#294 Other people's download failures and progress show on everyone's page
Opened
#295 A feed address that serves a large file is read whole into memory
Opened
#296 Searching items for % or _ matches more than was typed
Opened
#297 CLAUDE.md's test counts are out of date
Opened
#298 An item can't be opened from the keyboard or a screen reader
Opened
#299 Play and Delete on an item row are invisible while focused
Opened
#300 The read toggle on an item row is named "●"
Opened
#301 The player's seek bar has no name
Opened
#302 Search and filter placeholders fail contrast in 20 of 25 palettes
Opened
#303 Toasts are not announced, and error toasts vanish after six seconds
Opened
#304 Error toasts show the browser's or server's raw text, with no next step
Opened
#305 Text fields' borders fail 3:1 in every theme but High contrast
Opened
#306 Dialogs are not dialogs: focus is not moved in, kept in, or given back
Opened
#307 Fields in dialogs have labels that are not tied to them
Opened
#308 An off switch is nearly invisible in every light theme
Opened
#309 iPX's and the page's versions are only in a hover tooltip
Opened
#310 Reduced motion leaves no sign that a check for new items is running
Opened
#311 Hover styles stick on a phone after a tap
Opened
#312 Scrolling past the end of a dialog or the phone drawer scrolls the page behind
Opened
#313 Cover artwork has no edge, and dark covers melt into dark themes
Opened
#314 The tab bar's corners do not nest around its tabs
Opened
#315 The Directory's cover fan names the wrong property in will-change
Opened
#316 A feed's page keeps showing an error after a check succeeds
Opened
#317 WordPress.com sites answer the feed with a browser check, and the feed fails for hours
Opened
#318 A multi-file torrent's name is recorded unchecked as the enclosure path, so a feed publisher can point Delete, reap and media serving at any path
Opened
#319 Downloaded enclosure served same-origin with an extension-guessed type allows stored XSS
Opened
#320 Feed, enclosure, OPML and artwork fetches reach any internal address, and the responses come back to the user
Opened
#321 Every fresh install seeds an admin account with the public password 'ipodderx', usable through the unauthenticated login endpoint
Opened
#322 A deeply nested OPML, uploaded by any signed-in user or served by any feed publisher, can overflow the stack and abort the whole daemon
Opened
#323 ipx-web strips only the Cf-Access header names, while ipx trusts whatever header trusted_header names from Caddy's address
Opened
#324 Disconnecting sign-in requests escape the password-check limit and run unbounded Argon2 work on the blocking pool
Opened
#325 Private feed keys in the URL path reach every signed-in user through /api/events
Opened
#326 Item and enclosure links from feeds are used as href and window.open targets without a scheme check
Opened
#327 Feeds listed in a password-protected OPML inherit its username and password and send them to their own, unrelated hosts
Opened
#328 Enclosure downloads send the feed's basic-auth password to whatever host the feed names, unlike feed fetches
Opened
#329 The directory's refresher fetches LAN and container-network addresses named by an rw peer or by a listed feed's redirect
Opened
#330 A feed's .torrent URL, or a tracker it names, can make the daemon buffer an unbounded body in memory
Opened
#331 Torrent enclosures write with overwrite enabled straight into a folder other feeds share, so one publisher can replace another feed's downloaded episodes
Opened
#332 A kept feed from a private OPML loses its private mark when the OPML is removed and is shared to the directory
Opened
#333 Any signed-in user can mark a feed they do not subscribe to private, and promote an OPML-derived feed out of its OPML
Opened
#334 Changing a password leaves every existing session and API token valid
Opened
#335 An open /api/events stream keeps sending daemon events to an account after it is removed
Opened
#336 Bodyless POST routes accept cross-origin simple requests carrying ambient credentials
Opened
#337 A subscribed OPML with very many outlines causes quadratic sync work and an unbounded set of child feeds scanned on the shared worker
Opened
#338 One OPML upload of many same-titled outlines does quadratic work while holding the catalogue lock, and adds tens of thousands of permanent feeds to the shared scan
Opened
#339 One feed listing many distinct http artwork hosts holds the shared scan worker for hours, on every scan
Opened
#340 Any signed-in user can make unlimited TypeSafe calls on the server's key through the icon route, even with signals_on_server off
Opened
#341 Anonymous directory pages each run an unpaged query over the whole catalogue on a shared 10-connection pool
Opened
#342 One rw snapshot with an enormous subscriber count breaks the directory's listings for everyone
Opened
#343 On the server's key, one user's Signal text shares a Jev call with other users' Signals and may steer their verdicts
Opened
#344 A page of items reads every enclosure in the database to find its files
Opened
#345 Artwork kept on disk is read from FUSE, blocking the async threads
Opened
#346 The item list and feed list wait on queries one at a time that could run together
Opened
#347 Unread lists and counts read all of a person's items to find the few unread
Opened
#348 A Signal's counts run the same verdict query twice
Opened
#349 Two requests for the same missing artwork fetch it twice
Opened
#350 Traces of some routes show their time with nothing under it
Opened
#351 cargo deny: RUSTSEC-2026-0385 (ctutils 0.4.2) and RUSTSEC-2026-0382 (rustls-webpki 0.103.15)
Opened
#352 Unread counts still hash every read-state row a person has
Opened
#353 Rust: small departures from the style guide (imports, unwrap, for headers, must_use, bool parameters, SAFETY)
Opened
#354 Rust: ipx-feed and ipx-directory have public items without doc comments
Opened
#355 Rust: types written with their full path instead of imported
Opened
#356 Rust: the root modules hold most of the code