Android · fork

Makimono, my Android manga reader

A fork of Mihon, the open-source Android manga reader, in Kotlin. I forked it to add what the reader I use every day was missing. It installs next to the stock app, updates itself, and has shipped 21 releases. The newest feature shows where readers quit a series, measured honestly.

  • Kotlin
  • Jetpack Compose
  • Android
  • CI/CD
  • Statistics
  • API integration
21
releases shipped, latest 10-29
6 min 17 s
from push to a signed test APK
342
titles with a measured drop map
5
recommendation sources, ranked by agreement
Drop rate

Where readers quit, measured honestly

In one line: the series page shows how many readers dropped a title, whether that is low or high for its kind, and the chapters where they quit.

Popularity counts who started. It says nothing about who stayed. A small service on my homelab reads AniList's public reading-status counts and the latest 400 public "Dropped" lists for each title, then corrects three things a plain count gets wrong (below the chart). Pick a title, then drag to your chapter.

makimono · drop map real data · 10-31

Solo Leveling finished, 201 chapters

3.2% low for finished manhwa

of 243,957 readers who started it dropped it (interval 3.1-3.3%). Median for finished manhwa: 9.4%. This title is at the 1st percentile of 117.

cliff cliff ch 0 ch 1 ch 201
  • quit in this range
  • cliff (passed the test)
  • not counted as quitting

Latest 400 droppers: 289 quit at a chapter (median 87) and 110 dropped before chapter 1. A finished series has no newest chapter to catch up to.

The Divine Twilight's Return ongoing

8.3% typical for ongoing manhwa

of 11,893 readers who started it dropped it (interval 7.9-8.9%). Median for ongoing manhwa: 6.2%. This title is at the 70th percentile of 116.

cliff ch 0 ch 1 ch 118 caught up
  • quit in this range
  • cliff (passed the test)
  • not counted as quitting

Latest 400 droppers: 265 quit at a chapter (median 57), 76 dropped before chapter 1, and 59 had caught up with the newest release (18.2% of those checked), so they are not counted as quits.

The Legendary Moonlight Sculptor ongoing

10.0% high for ongoing manhwa

of 14,241 readers who started it dropped it (interval 9.5-10.5%). Median for ongoing manhwa: 6.2%. This title is at the 87th percentile of 116.

cliff cliff ch 0 ch 1 ch 141 caught up
  • quit in this range
  • cliff (passed the test)
  • not counted as quitting

Latest 400 droppers: 165 quit at a chapter (median 40), 125 dropped before chapter 1, and 110 had caught up with the newest release (40% of those checked), so they are not counted as quits.

01 · caught up

Catching up is not quitting

On an ongoing series, readers who reach the newest chapter often mark it Dropped.

Counted as quits, they pile up at the newest chapter and fake a cliff. The service checks each dropper's last chapter against the series' release history on the day they dropped. Within one chapter of the newest release means caught up, not quit. Median share across 138 ongoing titles: 11.4%.

02 · peers

Compared with its own kind

A 10% drop rate is below the median for finished manhua and in the top 13% for ongoing manhwa.

Median drop rate, four largest groups
GroupTitlesMedian
finished manhua4511.9%
finished manhwa1179.4%
ongoing manhua458.6%
ongoing manhwa1166.2%

Labels are shrunk toward the group median (empirical Bayes, K = 100), so a small title cannot earn an extreme label. Under 100 readers: no label (12 of 342).

03 · cliffs

A cliff has to pass a test

A busy chapter range is not automatically a cliff.

A range is marked only when it is a local peak and a Poisson test says the excess over its neighbours is unlikely to be noise. That cut titles with a "cliff" from 268 of 340 to 127. Today: 157 cliffs across 127 of 342 titles.

In the app, the drops server is optional, set by the user, used only on home Wi-Fi, and its address stays on the device. Readers' notes from past your chapter stay hidden until you ask. This page shows counts only: no reader names, no notes.

Release engineering

Shipped, then checked on a real phone

In one line: a push becomes a signed test build in about six minutes, and nothing ships until it passes on a real phone.

  • 21 stable releases (v0.19.10 to v0.19.30, latest 10-29) plus 22 public dev builds. Signed APKs; the app updates itself and installs next to stock Mihon.
  • Quick lane CI: push to signed test APK in 6 min 17 s (measured 10-21).
  • Tested on a Galaxy Z Fold over adb, folded and unfolded, with a written PASS or FAIL against what a user should see:
    • Tag search: 14 correct results became 121 after switching from tag names to tag ids with subtag families.
    • For You took about 20 s on every open. The first fix failed the check (the cache was not used on reopen) and went back. The second held: 2.2 s on reopen, still cached after a force-stop.
    • Library migration: 673 titles, 134,056 chapters and 50,816 read marks identical before and after.
  • Upstream kept current: Mihon 0.21.0 to 0.21.2 merged in v0.19.26.
  • Fails soft: when AniList's API is down, Discover, Similar and For You fall back to other sources (v0.19.28).
Privacy

Other people install it, so defaults are strict

  • Found and fixed: with verbose logging on, tracker login tokens were written to the app log. Fixed in v0.19.26.
  • AniList is opt-in. Features that use it run on the user's own login, off by default. Adult titles stay hidden in Discover, For You and Similar unless turned on (v0.19.27).
  • Bulk AniList linking never lowers progress, leaves out matches under 90% confidence by default, and shows a preview before it writes. My own run: 399 list entries became 708, with 0 downgrades.
The reader

The auto-scroll engine

In one line: webtoons are one long vertical strip, so the reader scrolls itself at a speed you set and stops at the end of a chapter.

makimono · reader press play
or tap the screen
120 px/s

press play, or tap the screen.

Placeholder panels. The engine is the real one: speed changes apply mid-scroll, a tap pauses, and it stops at the chapter seam instead of sliding through. In the app the same controller also binds to the volume keys.

Recommendations

Similar titles, ranked by agreement

In one line: a title that several independent services recommend outranks one that a single service pushes.

makimono · recommendations sample data

Turn sources off and watch the ranking move.

    Sample titles; the ranking rule is the app's. Each independent source that recommends a title adds one point, popularity only breaks ties. Hidden gems drops the most popular titles to surface what big lists bury.

    Scope

    What else ships in it

    • Discover: AniList and MangaBaka tags in one search, include and exclude, with tag families.
    • For You: weekly picks from your own library, cached on the device.
    • Similar: five sources ranked by agreement, plus a weekly Best matches row.
    • Comments and reviews from three platforms, read-only.
    • AniList tracking: bulk linking with preview, and automatic progress updates (off by default).
    • Fold-aware margins, an opt-in high-quality renderer, and six icon variants.

    The app source is private; the releases are public.

    what it demonstrates

    Kotlin and Jetpack Compose at feature scale; release engineering (signed APKs, CI, in-app updates); statistics applied with care (peer baselines, empirical Bayes shrinkage, a Poisson test for cliffs, intervals on every rate); rate-limited integration with five APIs; testing on a real phone against written expectations; and keeping a fork current with an active upstream.

    ethan@justice: ~