Skip to content
← Back to projects

Frank Mangaplus

Simple desktop app to read Manga Plus titles. Originally it's only available on smartphones, now it's on PC

FRANK MANGA+

FRANK MANGA+

A personal-use desktop reader for MANGA Plus by Shueisha.
Read on Linux, macOS, and Windows. Free tier works out of the box; paste a subscriber secret for premium chapters.

Latest release · Install guide · Get your secret: Android / iOS · Troubleshooting · Contributors

CI Release Platforms License


#What it looks like

Library / Search Title detail Reader
Library and full catalog search Title detail with chapter list Page-fit reader with snap scroll
Your bookmarked titles, plus the full catalog if you want to browse. Banner art, synopsis, the chapter list (virtualized — One Piece has 1100+ and it still scrolls fine). Single-page mode: one page snapped to the viewport. Left half of the page advances (manga RTL), right half goes back.

#Double-page mode

Press D (or click the layout icon in the header) and the reader pairs facing pages so a two-page spread fills the screen the way it was drawn:

Double-page spread on a widescreen monitor

The toggle switches between two layouts:

  • single: one page at a time
  • double: facing pages, paired as printed

Double mode reads the spread markers the API sends with every page and pairs each chapter the way it was printed. The chapter's first two-page spread shows where the facing pages fall: when it lines up with a solo cover, the cover shows alone and pairs start on the next page; when it lines up with page 1 (a cover drawn as a spread included), pairs start from page 1. A chapter without spreads opens on a solo cover, as a printed volume does. Every spread fills one frame, with the page before it shown solo if a spread ever falls out of step, so a spread is never cut in half.

The choice persists across chapters and sessions.

#Night-reading sepia filter

Press F (or click the crescent-moon icon in the header) to warm the page whites toward sepia. Bright LCD whites get harsh in the dark — this softens them without flattening contrast:

Reader with the eye-protection sepia filter active

Four levels cycle on the toggle: off → low → med → high → off. The button tints amber and shows one to three dots to indicate the active level. Persisted in localStorage like the other reader prefs.

Implemented as a CSS sepia + brightness + saturate filter on the whole page-stack — sepia shifts the hue toward amber while preserving the luminance range, so blacks stay black and the artwork's contrast is intact.

#Content languages

Use the header buttons to choose any combination of EN, ESP, FRA, IND, PT-BR, RUS, THA, VIE, and DEU. English is selected by default, at least one language must remain active, and the selection persists across sessions. Non-English editions have a badge on their cover.

Search combines the selected catalogs in the fixed order shown in the header. Editions with the same title are grouped in that order, regardless of which button was activated first. With EN and PT-BR selected, for example, the English edition appears immediately before its Brazilian Portuguese edition. An empty query shows curated titles; typing searches the full selected catalogs.

Search with English and Brazilian Portuguese catalogs active

The same filter and ordering apply to Library. In the Search example, both editions of One Piece are in the Library; with only PT-BR active below, only the Portuguese edition remains visible. The English favorite is hidden, not removed, and reappears when EN is selected again.

Library filtered to Brazilian Portuguese titles


#Why this exists

I pay for MANGA Plus and I wanted to read it on a desktop. Shueisha doesn't ship a desktop client. So you have two choices: sideload the Android app onto a tablet (works, but a tablet is a tablet), or squint at your phone. This is option three.

Under the hood it's the same API the official Android app uses. By default the app registers itself as a fresh device on first launch — same flow the official app uses when you install it — so you get free-tier access to the catalog out of the box. If you're already a paid subscriber and want subscription chapters on desktop, you can paste your phone's deviceSecret into the app to swap in your subscriber session. Nothing about the paywall is bypassed.

#What you need

Just a downloaded binary. Launch it, and the app registers itself with the official API on first run. That gives you free-tier access to everything MANGA Plus shows for free — the entire catalog, latest and first chapters of every series, the free-rotation backlog.

If you also want subscription-locked chapters on desktop:

  • An active MANGA Plus subscription on a phone install.
  • Your deviceSecret from that install. 5 minutes if your phone is rooted (adb shell), about 20 if it isn't (rooted Android emulator on your desktop — walkthrough in docs/android-secret.md). On iPhone you read it off the wire with mitmproxy instead — docs/ios-secret.md.
  • Paste it into the app's settings. Replaces the free-tier session with your subscriber one.

#Install

Grab the build for your OS from the Releases page:

OS File
Linux (AppImage) FRANK.MANGA+_*_amd64.AppImage
Linux (.deb) FRANK.MANGA+_*_amd64.deb
Linux (Arch) yay -S mangaplus-reader-bin
macOS (Apple Silicon) FRANK.MANGA+_*_aarch64.dmg
macOS (Intel) FRANK.MANGA+_*_x64.dmg
Windows FRANK.MANGA+_*_x64-setup.exe

Long-form install doc: docs/install.md. Hitting a blank screen on Linux? See docs/troubleshooting.md — the binary auto-recovers from EGL crashes on the second launch and there are render-mode overrides for stubborn cases.

On first launch the app calls the official /register endpoint and is issued a fresh free-tier deviceSecret. That gets saved locally and you're reading the catalog. If you're a paid subscriber and want subscription chapters too, open Settings and paste your phone-extracted deviceSecret to upgrade.

#What's in it

A library view of your bookmarked titles. The search page loads the catalogs for whichever content languages you selected in the header and filters locally as you type.

Title detail shows the banner art, the synopsis, and the full chapter list. The list is virtualized, so a series with a thousand chapters scrolls fine. Read chapters are hidden by default so what's left to read is what you see — a toggle next to the sort button cycles unread-only → read-collapsed → all chapters, and the choice sticks. There's also a "Continue ▶" button that jumps to the last chapter you opened.

The reader is page-fit and snap-scrolls. Click the left half of a page to advance, the right half to go back (manga RTL reading direction). Arrow keys, Space, j/k, PageUp/Down all work too. When you reach the end of a chapter the next one pre-fetches and appends to the scroll, so you don't have to bounce back to the chapter list every time. Per-chapter resume is automatic — leave mid-read and the next time you open that chapter you land on the page you stopped at.

Every page you load gets cached to ~/.cache/mangaplus-reader/. Re-opening the same chapter is instant after the first read.

Read state lives in localStorage. The chapter list marks whichever chapter you stopped at with a "Last opened" badge, and the title page surfaces a link back to it.

#How it works

┌─────────────────────────────┐      ┌──────────────────────────┐
│  Tauri WebView (SvelteKit)  │      │  Rust client (reqwest)   │
│                             │      │                          │
│  Library / Search / Reader  │◄────►│  get_chapter_pages…      │
│  <img src="https://raw.githubusercontent.com/akitaonrails/frank_mangaplus/main/mpimg://…">      │      │  get_title_detail…       │
└──────────┬──────────────────┘      │  fetch_image (cookies,   │
           │                         │       okhttp UA, cache)  │
           │ mpimg:// scheme         └────────────┬─────────────┘
           │ intercepted by Tauri                 │
           └─────────────────────────────────────►│ HTTPS
                                                  ▼
                                       jumpg-api.tokyo-cdn.com
                                       jumpg-assets3.tokyo-cdn.com

mangaplus-api is a pure Rust crate with fixture-based tests. It does the protobuf decode, the cookie threading, and the plus_vw_token handshake the premium image CDN expects. No Tauri deps.

mangaplus-desktop is the Tauri 2 + SvelteKit app. Image URLs go through an mpimg:// custom URI scheme that proxies the request back through the same Rust client. That's how the cookies survive the WebView/Rust boundary.

Every request goes directly to Shueisha's CDN, no proxy in between.

If you don't trust a random binary on the internet to do that honestly (you shouldn't), the actual on-the-wire format — every header, every gotcha I hit reverse-engineering this — is written up in docs/debugging.md. You can verify it yourself.

#Documentation

  • docs/install.md: end-user install. Free-tier auto-register and the optional subscriber upgrade.
  • docs/android-secret.md: the rooted-AVD walkthrough for extracting a subscriber deviceSecret. Doesn't touch your phone.
  • docs/ios-secret.md: the same secret on iOS, read off the wire with mitmproxy.
  • docs/troubleshooting.md: blank screen on Linux, render-mode overrides, WebKitGTK crash workarounds, and how the auto-recovery handles all of that for you.
  • docs/debugging.md: contributor notes. mitmproxy, Frida, the real headers, what tripped me up.

#Disclaimer

Not affiliated with Shueisha or Manga Plus. The default fresh-register flow reproduces the same handshake the official Android app performs on a new install — it grants free-tier access only. Subscription-locked content requires pasting in a deviceSecret extracted from your own paid phone install. No paywall, subscription, or DRM is bypassed.

#License

MIT.

New version available.