uchiyomi

uchiyomi

Docker app from irxs' Repository

Overview

A self-hosted manga and manhwa reader that also fetches new chapters: discover, grab, monitor, serve and read in one container. Point it at a folder of CBZ/CBR files and read them on any device through a true-black OLED interface built webtoon-first. Installs as a PWA, works offline, per-user progress and favourites, two-factor auth, nightly backups, no account, no telemetry. The database runs inside the container; there is nothing else to install.

Uchiyomi

A self-hosted manga and manhwa reader that also keeps up with new chapters: one installable PWA, true-black OLED, webtoon-first.

CI Latest release License: MPL-2.0 Container images

🌐 uchiyomi.com · 🐙 GitHub · ☕ Ko-fi · 📜 Changelog

A self-hosted, installable (PWA) manga / manhwa reader with a true-black OLED interface and a vertical-scroll webtoon reader as the centerpiece. Point it at your own CBZ library and read on any device.

Uchiyomi — a walk through the app

Uchiyomi is a bring-your-own-library reader first: like Komga / Kavita / Calibre-web, it reads comics you supply, and the library and reader work on nothing but files you already own.

It also fetches, by two routes, and both ship in the default install. Mihon / Tachiyomi extensions: a browsable catalogue of ~1,400 community extensions, installed with one click in the admin panel and searchable immediately, run by a bundled engine that starts with the stack. And generic engines for the common manga-site families, where you paste a site's URL yourself. Plus MangaDex, via its official public API.

No source is enabled until you choose one, and nothing is compiled into the image. But the catalogue arrives wired up and one click away, so calling this a reader alone would undersell what it does. You pick what to enable, and you are responsible for using it in line with those sites' terms and your local law.

📖 Full usage guide →: every screen walked through with screenshots (library, reader, Discover, admin, security, offline).

Features

  • Webtoon-first reader — vertical scroll or paged, RTL, double-page spreads, per-series settings.
  • Skips the pages that are not the story — the scanlator credit page that opens every chapter is found by repetition and left out of the flow, with a tap to bring it back.
  • True-black OLED interface, built for a phone and installable as a PWA.
  • Offline downloads — save chapters to the device and read them with no connection at all.
  • Your own library — CBZ, CBR, PDF, image EPUB or a folder of images, in any folder layout.
  • Also fetches — ~1,400 Mihon / Tachiyomi extensions installable in one click, generic engines for common site families, and MangaDex. Nothing is enabled until you choose it.
  • Discover — what your sources just published, grouped by language, plus search across every source.
  • Multi-user — accounts, per-user progress and favourites, age ratings, per-member library access.
  • Library management — several libraries, filters, bulk actions, editable metadata that survives a rescan, series merge, delete and restore.
  • Moments — star a page and it lands on its own screen as the panel itself, with notes.
  • Reading Studio & Wrapped — a year heat-map, chapters by month and weekday, your top series and genres.
  • Push notifications when a followed series gets a new chapter.
  • OPDS — read from Panels, Chunky or KOReader, page by page over OPDS-PSE.
  • A Mihon / Tachimanga extension — read your library from Mihon, any Tachiyomi fork, Tachimanga (iOS) or Suwayomi with one API token: uchiyomi-extension.
  • A Komga-compatible API — point Mihon's Komga extension at Uchiyomi instead and its built-in Komga tracker syncs reading progress back in both directions, forward-only: how to set it up.
  • Progress sync to AniList, MyAnimeList and Kitsu.
  • Nothing phones home. An update check reads GitHub's public releases page and sends nothing about your server; it can be turned off. An anonymous install count exists and is off unless you turn it on, and the settings page shows you the exact object it would send before you agree to it — a monthly-rotating id, the version, the CPU architecture and which deployment shape you run. No library, no titles, no accounts, no address. What leaves your server.

📖 Every screen walked through with screenshots: docs/USAGE.md

Install

Requirements: Docker and Docker Compose, plus a manga library on disk. Any folder layout works — a directory counts as a series when it directly contains chapters, at whatever depth.

Don't clone the repo to install it. The top-level docker-compose.yml builds from source and is the development stack. The two commands below are the whole install.

curl -O https://raw.githubusercontent.com/AngeloSha/uchiyomi/main/deploy/docker-compose.yml
docker compose up -d

Open http://localhost:8080 and create your admin account in the browser. Nothing to generate, no config file to edit. That is Uchiyomi in one container with Postgres inside it; multi-arch images (amd64 + arm64) mean it comes up in seconds on a NAS or a Raspberry Pi.

📦 CasaOS, Unraid, Umbrel, an external database, reverse proxies and updating: docs/INSTALL.md

Documentation

Usage Every screen, with screenshots
Install One-click stores, updating, HTTPS, external DB
Configuration Environment variables and source paths
Extensions The Mihon / Tachiyomi engine
API REST reference
Migrating Moving between layouts and versions
Comparison How it differs from Komga, Kavita, Mihon and Suwayomi

Translations

The interface ships in English, Spanish, French, German, Portuguese (Brazil), Russian, Japanese, Chinese and Arabic, with right-to-left layout for Arabic. Pick one under Profile → Settings → Language; the choice follows your account to other devices.

Everything except English is machine-assisted and has not been checked by a native speaker. If something reads wrong, it is one JSON file per language in web/public/locales/ and the keys are the English source strings — edit a value, open a pull request, done. A missing key falls back to English rather than showing a blank or a placeholder, so a partial translation is always safe to ship.

Adding a language: copy en semantics into web/public/locales/<code>.json, add the code to LOCALES in web/lib/i18n.ts, and set dir if it is right-to-left.

Roadmap

Actively developed. On deck:

  • 🧭 Per-source genre & popular browsing — rounding out the newest-releases rails.

Everything already shipped is in the changelog.

Support

Uchiyomi is free and open-source. If it's useful to you, you can help fund continued development:

☕ Buy me a coffee on Ko-fi →

You'll also find a ♡ Sponsor button at the top of this repo's GitHub page, and a Support Uchiyomi link inside the app on the Profile rail.

Contributors

Uchiyomi is built and maintained by @AngeloSha. Pull requests, bug reports, and feature ideas are all welcome: start with CONTRIBUTING.md, or open an issue.

Thanks to everyone who has helped build Uchiyomi:

Uchiyomi contributors

That image is drawn from GitHub's contributors graph, which only counts the author of a commit. Some help arrives as a report or a diagnosis that lands as someone else's commit, and is invisible there — so it is named here instead:

  • Unraid install instructions, and a template that installs@hawwwwwk, who spotted that Unraid had removed the Template repositories field the docs told people to use, and opened pull requests against both this repo and unraid-templates; then came back with PR #50, which found that the very fix for that report had left the template invalid XML (a -- inside a comment, so nothing could install it), fixed it, and laid this repository out as the Community Applications template repository (templates/uchiyomi.xml, ca_profile.xml). unraid-templates is now only a pointer here.
  • The scanner finding zero series in a Tranga library@ThomasRunting, who did not stop at the bug report: they read the scanner, found the early return that made a cover image turn a whole series folder into a "chapter of the root", proved it against their own 38-series library, and proposed the one-line fix (#34).

License

MPL-2.0. Source plugins are not part of this repository; they fetch from third-party sites and are your responsibility to use in line with those sites' terms and your local law.

Install Uchiyomi on Unraid in a few clicks.

Find Uchiyomi in Community Apps on your Unraid server, review the template, and click Install. Unraid handles the Docker app or plugin setup from the published template.

Open the Apps tab on your Unraid server Search Community Apps for Uchiyomi Review the template variables and paths Click Install

Related apps

Explore more like this

Explore all

Details

Repository
ghcr.io/angelosha/uchiyomi
Last Updated2026-09-21
First Seen2026-09-21

Runtime arguments

Web UI
http://[IP]:[PORT:3000]/
Network
bridge
Shell
sh
Privileged
false
Extra Params
--stop-timeout 40

Template configuration

Web UI portPorttcp

The port you open in a browser.

Target
3000
Default
8080
Value
8080
LibraryPathrw

Your existing CBZ/CBR library. Any folder layout works. Set PUID/PGID to the owner of these files for renames and deletes; otherwise it is read-only.

Target
/library
Default
/mnt/user/media/comics
Value
/mnt/user/media/comics
Data (embedded database)Pathrw

Postgres lives here. Back it up like any appdata, or rely on the nightly dump in Backups.

Target
/data
Default
/mnt/user/appdata/uchiyomi/data
Value
/mnt/user/appdata/uchiyomi/data
ConfigPathrw

Secrets, custom sites, art overrides.

Target
/config
Default
/mnt/user/appdata/uchiyomi/config
Value
/mnt/user/appdata/uchiyomi/config
DownloadsPathrw

Chapters Uchiyomi fetches from sources.

Target
/library-dl
Default
/mnt/user/appdata/uchiyomi/downloads
Value
/mnt/user/appdata/uchiyomi/downloads
Image cachePathrw

Safe to delete.

Target
/cache
Default
/mnt/user/appdata/uchiyomi/cache
Value
/mnt/user/appdata/uchiyomi/cache
BackupsPathrw

Nightly database and config dumps. Ideally a different disk from Data.

Target
/backups
Default
/mnt/user/appdata/uchiyomi/backups
Value
/mnt/user/appdata/uchiyomi/backups
PUIDVariable

Run as this user id (Unraid's nobody is 99). Use the owner of your library to allow renames and deletes.

Default
99
Value
99
PGIDVariable

Run as this group id (Unraid's users is 100).

Default
100
Value
100
PUBLIC_ORIGINVariable

How you reach it, e.g. http://192.168.1.10:8080 or https://manga.example.com. Must match, or logins and cookies break.

FLARESOLVERR_URLVariable

A FlareSolverr instance for Cloudflare-protected sources, e.g. http://192.168.1.10:8191. Optional.

SUWAYOMI_URLVariable

A Suwayomi server for Mihon/Tachiyomi extensions, e.g. http://192.168.1.10:4567. Leave empty to go without extensions. The engine cannot solve Cloudflare on its own: set FLARESOLVERR_ENABLED=true and FLARESOLVERR_URL (your FlareSolverr, e.g. http://192.168.1.10:8191) on the Suwayomi container itself, or extension sources behind Cloudflare fail with Cloudflare bypass currently disabled.

BACKUP_KEEPVariable

How many nightly backups to keep.

Default
14
Value
14