Uchiyomi ships often. Each entry says what changed and why it changed, including the
bugs that shipped and what they cost · the full notes live on GitHub.
This is a reliability release for finding and fetching chapters from real-world sources: some are slow, some rate-limit bursts, and an otherwise good chapter can have one broken image. Discover now shows useful…
The profile: You · Settings · Connections · Account
The profile page and the admin Settings tab, reorganised. The profile had grown by accretion: identity shown three times, Sign out twice, a Reading tab that was mostly device settings plus one chart, an Account tab…
Read Uchiyomi in Mihon, and have what you read come back
Two things TIGamingTV asked for. PR #51 proposed a Komga-compatible API so that Mihon's built-in Komga tracker could sync reading progress back to Uchiyomi — the one thing the Uchiyomi extension cannot do, because…
The inbox after v0.36.0, all of it from TIGamingTV: PR #53, bulk actions for the Library page, rebuilt here under the house rules rather than merged as written; PR #56, a correct diagnosis of why an extension source kept
The two things v0.35.0 said were next, both asked for by TIGamingTV: the first half of #48 — bringing a reading list over from the AniList, MyAnimeList or Kitsu account already connected under Profile, through the…
Two contributions, three days after v0.34.0, both taken through the same pipeline as everything else: PR #52 by TIGamingTV, the review step that #48 asked for when a library is brought over from
The owner's verdict on v0.33.0, the evening it went live: the Who scanlates this card sitting open by default on every manga page — "that's not cool for the UX" — and all the sources-and-extensions business, on the…
The rest of #40. v0.32.0 answered it as it had been read: a per-source screen, so the ghost rows, the selection bar and the picker of known groups. TIGamingTV then made the ask plain with a MangaDot screenshot, and…
What one reader asked for after v0.31.0 shipped (#40: the scanlator rules and the second source were real but invisible from the series page), and the first outside contribution to the code — PR #41 by TIGamingTV,
An API token (Profile → Security) opened /api/* and nothing else: pictures were served only to the browser's cookie or to an OPDS reader's Basic credential. So a client that had just listed a chapter's pages could…
A series folder with a cover in it is still a series
Reported and diagnosed by @ThomasRunting in #34: a Tranga library — top-level series folders, each holding its .cbz chapters and a thumbnail — scanned to zero series in four seconds, with no error
Until now it could not: the version lived in package.json and nothing read it at runtime, so the app did not know what it was, let alone whether anything newer had been published. Admin → Health now has a Version…
Browse was a second Library. /browse?genre=Horror ran the same search over the same collection and drew it in the same grid as /library?genres=Horror — the only thing it had of its own was the wall of genre tiles. So…
The rest of the grey covers, and why they broke on their own
v0.26.2 fixed the covers that came from the extension engine. The ones that remained — some of a source's covers working and others not, on the same page — were a different fault with a much more ordinary cause.
Whole rails of Discover showed a grey box with a broken-image icon instead of cover art — every result from an affected source, permanently. The cause is a fix colliding with a design.
Fingerprinting ran once, five minutes after the server started, and never again. Nothing else asked for it either — not a library scan, not the updater sweep, not adding a series from Discover — so every chapter…
A repeated page folds down instead of disappearing
v0.25.0 removed the pages that are not the story — the credit page, the advert — from the chapter you were reading. That was the wrong shape, and reading with it for a day made the reason plain: a chapter was quietly…
Blank slices were being skipped as if they were the same page
The fingerprint asks, sixty-four times, whether a pixel is brighter than the one to its right. So the only variation it can see is variation across a row. The guard meant to refuse featureless pages measured…
Every chapter of a scanlated series opens with the same credit page. Some carry an advert, or a "read the rest at…" splash. You swipe past them, chapter after chapter, and they are the single most repetitive thing…
Launching the installed app in airplane mode showed the sign-in screen, with the chapters you had downloaded for exactly this sitting on the device, unreachable. Tapping a chapter inside an already-running app has…
three gradients start rendering what they were written to render
Tailwind v3's opacity scale is multiples of five. via-ink-950/88, to-ink-950/62 and via-ink-950/72 are not, so all three matched nothing and were dropped without a warning — the sign-in screen, the profile header and…
Next 16 and TypeScript 7, which had to arrive together
TypeScript 7 is the compiler rewritten in Go, and it removes options rather than deprecating them: baseUrl is gone, and so is the classic node10 module resolution that "moduleResolution": "Node" selected. The backend…
the cover proxy stops fetching whatever it is told to
/img/sources/cover took a URL and fetched it. It checked the scheme and nothing else, and any signed-in account — or anything holding an OPDS token — could point it at the server's own network: the database, the…
the pages you saved, and a reader that works without a network
The bookmark star in the reader has always written to an API that keeps the series, chapter, page and a note for up to five hundred saved pages, and nothing anywhere rendered that list. You could save a page and…
Every arm64 image used to be cross-built under emulation on an amd64 machine, and that broke four of the last five releases the same way: the native-module builds hung until the timeout or died on an illegal…
Leave DATABASE_URL unset and the container runs its own Postgres: initialised on first start in the uchiyomi_data volume, listening on a unix socket only -- nothing outside the container can reach it and there is no…
Every route the app has -- all 184 of them -- is described in one OpenAPI file, and the app serves it at /api/docs: a browsable reference with "try it out", authenticated with the same token you would use from a…
Until now an OPDS reader could do one thing with a chapter: download the whole CBZ. Panels, Chunky and KOReader all stream pages over OPDS-PSE when a feed offers it -- the reader fetches page one, then page two, and…
budgets that fit a Cloudflare challenge, and a retry cap
Every wait in the app was one number regardless of how a source answers. A plain site answers in a second; a site behind Cloudflare answers only after the solver has driven a real browser through a challenge, which…
Uchiyomi has had an automatic extension updater since v0.11. On the install it was written for it had, as far as can be told, never updated a single extension.
the fill scan stops calling sources broken for waiting their turn
With many sources installed, the scan asked all of them at once. The Cloudflare solver runs four at a time, so most of the queue spent its entire 45 second budget waiting for a slot and was then reported as "could…
Each of these was known and written down a week ago. None was the biggest thing at the time, and all of them are the kind of defect that produces no error and no log line.
stop recommending dead sources, and say which series are frozen
"Find missing chapters" checked one thing before offering a source: whether its cooldown had lapsed. Not its record. So a source could be offered as a clean option while sitting in a nineteen-deep failure streak, or…
the sweep gets a budget, takes turns, and writes its failures down
Last night's sweep reported ok=61, blocked=164. One chapter came up 25 images short, and those 25 had arrived as HTTP 200 with nothing in them, which turned out to be the one kind of page failure that set no status…
stop charging our own parsing and fan-out to the sites
Chapter pages are read out of the reader block on the page. When that block did not match, the code fell back to scanning the whole document, and these sites carry a sidebar of other series. Measured on one chapter:…
stop outrunning the sites, then blaming them for it
"Act Like a Boss Monster, Mr. Swallow!" would not fill its missing chapters, 34 to 92, from any source. Six attempts over three days put zero chapters into that gap. The sites were not the problem. We were.
follow a moved site, and stop hiding failed extension updates
"Mr Devourer, Please Act Like a Final Boss" would not download anything new, and nor would most of the library. Aqua Manga moved from aquareader.net to aquareader.org, the address was updated here, which is the right…
Uchiyomi checks GitHub's public releases page once a day and tells you in the admin panel when
there is something newer; it sends nothing about your server, and you can turn it off. Upgrading is
docker compose pull && docker compose up -d — accounts, reading progress,
downloads and settings live in named volumes and the database migrates itself on boot. The
self-host guide has the detail.