{
"$type": "site.standard.document",
"bskyPostRef": {
"cid": "bafyreiba5neof6cqq63pss56vtru2y654ghkqfk7i42jk3gyp57x6odsga",
"uri": "at://did:plc:kdqmqcktioifzh7pkptg7msh/app.bsky.feed.post/3mo4ozlstydx2"
},
"coverImage": {
"$type": "blob",
"ref": {
"$link": "bafkreifucmmsnrvzn7lzyc3snroojdzskcg7r36uu33nczwgps3uhpn7um"
},
"mimeType": "image/png",
"size": 111600
},
"path": "/post/21656",
"publishedAt": "2026-06-11T20:52:17.000Z",
"site": "https://lemmy.porn",
"tags": [
"Selfhosted",
"n2024",
"50 comments",
"https://varbook.hophop.be/",
"varbook.hophop.be",
"…hophop.be/…/varbook-bibliotheque-epub-self-hoste…",
"github.com/ndieschburg/varbook",
"github.com/ndieschburg/varbook.koplugin"
],
"textContent": "submitted by n2024 to selfhosted\n215 points | 50 comments\nhttps://varbook.hophop.be/\n\nI read every single day. At home it’s on my Kobo running KOReader (yes, I’m _that_ open-source guy), and I love it. The problem: I don’t always have the e-reader on me. On the train, at work, waiting somewhere — I just have my phone.\n\nI tried Kobo’s own Android app to bridge the gap and… I really didn’t like it. Promos everywhere, adding your own books is a pain, the reader itself feels clunky, and the Wi-Fi handling is annoying.\n\nSo I built my own thing: **Varbook** , a small self-hosted EPUB library.\n\nYou drop EPUBs into it in one click. From there:\n\n * They’re readable on your phone through a simple but well-made **PWA**. Books are cached locally, so you can read offline; when you’re back online your reading position syncs to the server.\n * The server exposes everything over **OPDS** , so any compatible app works (KOReader, Moon+ Reader, etc.).\n * I also wrote a **KOReader plugin** that pushes/pulls your reading position to the server in a single gesture.\n\n\n\nMy actual daily workflow:\n\n * **Evening, at home:** I wake up my Kobo in KOReader, tap the top-right corner → Wi-Fi turns on, my current book jumps to the right position, Wi-Fi turns back off to save battery.\n * I read.\n * **Done reading:** tap the top-right corner again → Wi-Fi on, my reading time + position sync to the server.\n * **Next day, at work:** I open the PWA on my phone. It drops me exactly where I left off, and syncs my position on every page turn.\n * **Evening:** back to the Kobo, which picks up my position from the phone.\n\n\n\nAll of this with fully open-source software, no commercial service in the loop, my books staying on my own server.\n\nThe trickiest part was cross-device position sync — every reader engine (epub.js in the browser, KOReader’s CREngine, Moon+) tracks position differently. Varbook uses a “pivot” format based on EPUB spine items (chapter index + percentage) so your position survives the jump from one device to another without throwing you 30 pages off.\n\nIt’s **open source (MIT)** , built with Laravel + React, and ships as a single Docker container (SQLite by default, no external DB needed). The entire UI is translated in **English, French, and Spanish**.\n\n**Honest disclaimer:** a good chunk of this is vibe-coded. That said, I’ve been a developer for 20 years, so it’s _opinionated_ vibe-coding — I know what I’m looking at. It’s been used daily and intensively by about 5 people for the last 3 months, and I keep improving it regularly. It’s not bug-free, but I’d call it reasonably stable. I’m being upfront so you know what you’re getting into.\n\nThere’s a **free public instance if you just want to try it without installing anything** : varbook.hophop.be\n\n * Full write-up on my blog: …hophop.be/…/varbook-bibliotheque-epub-self-hoste…\n * Code: github.com/ndieschburg/varbook\n * KOReader plugin: github.com/ndieschburg/varbook.koplugin\n\n\n\nHappy to answer questions or hear what’s missing — it scratches my own itch, but I’d love to know if it’s useful to anyone else.",
"title": "I read every day but rarely have my e-reader on me — so I built a self-hosted EPUB library that syncs my reading position between my Kobo and my phone"
}