Milo is a multi-user, self-hosted web-based ebook reader application that supports multiple ebook formats, keeps track of your reading progress and has a touch-friendly web interface.
  • Java 78.6%
  • JavaScript 19%
  • CSS 2.2%
  • HTML 0.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Christian Wiwie 6338a8d08b fix(start): seal navbar-timeline sticky seam with 1px title overlap
offsetHeight already includes the navbar's 1px bottom border, so the
sticky offset was exact and any fudge just opens a gap. The original
leak was a subpixel rounding seam between navbar bottom edge and
pinned title top row. Seal it in CSS: .timeline-section-title sticks
at calc(--milo-sticky-top - 1px), tucking its top row under the opaque
navbar border (z-index 10 > 5), which paints over it — no transparent
row can remain regardless of rounding, for every pinned title.
2026-09-15 21:54:22 +02:00
docs/superpowers/specs docs(deploy): add Docker deployment design and Compose/Traefik setup 2026-09-12 20:43:02 +02:00
frontend fix(start): seal navbar-timeline sticky seam with 1px title overlap 2026-09-15 21:54:22 +02:00
gradle/wrapper * bumping deps 2025-05-29 14:44:57 +02:00
src fix(start): seal navbar-timeline sticky seam with 1px title overlap 2026-09-15 21:54:22 +02:00
.dockerignore docs(deploy): add Docker deployment design and Compose/Traefik setup 2026-09-12 20:43:02 +02:00
.env.example docs(deploy): add Docker deployment design and Compose/Traefik setup 2026-09-12 20:43:02 +02:00
.gitignore perf(start): make legacy host migration opt-in and fix servlet registration 2026-09-12 20:43:00 +02:00
AGENTS.md docs: document docker compose deployment in AGENTS.md 2026-09-15 21:38:54 +02:00
build.gradle * made AI feature optional (milo.ai.enabled / 'ai' profile), added missing spring-boot-h2console module for boot 4 2026-09-07 23:21:17 +02:00
compose.yaml chore(deploy): persist print render cache across container restarts 2026-09-14 13:29:59 +02:00
Dockerfile chore(deploy): persist print render cache across container restarts 2026-09-14 13:29:59 +02:00
gradle.properties * added vaadin-dev dependency for vaadin 25 dev mode, bumped gradle daemon heap 2026-09-07 22:35:32 +02:00
gradlew * Initial commit 2024-02-17 07:57:03 +01:00
gradlew.bat * Initial commit 2024-02-17 07:57:03 +01:00
README.md perf(start): make legacy host migration opt-in and fix servlet registration 2026-09-12 20:43:00 +02:00
settings.gradle * Renamed project to milo-reader 2024-07-17 10:46:21 +02:00

Milo

Milo is a multi-user, self-hosted web-based ebook reader application that supports multiple ebook formats, keeps track of your reading progress and has a touch-friendly web interface.

Legacy document host migration

Normal startup does not scan or rewrite the library. For an old library whose stored document URIs still reference castleblack, run the app once with --milo.migrations.legacy-document-host=true, then remove the flag. The migration replaces castleblack with nuc.lan and saves only changed documents; null and already migrated URIs are left alone. Do not leave this flag enabled in Compose.