I 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.

I 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.

So I built my own thing: Varbook, a small self-hosted EPUB library.

Varbook library on mobile: dark UI with a "Continue Reading" section showing progress bars and reading time, search bar, status/sort filters, and a book cover grid below

You drop EPUBs into it in one click. From there:

  • 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.
  • The server exposes everything over OPDS, so any compatible app works (KOReader, Moon+ Reader, etc.).
  • I also wrote a KOReader plugin that pushes/pulls your reading position to the server in a single gesture.

Varbook EPUB reader on mobile: dark theme, large serif font, chapter title and progress bar at the bottom showing 52.4%, reading time, and page count

My actual daily workflow:

  • 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.
  • I read.
  • Done reading: tap the top-right corner again → Wi-Fi on, my reading time + position sync to the server.
  • 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.
  • Evening: back to the Kobo, which picks up my position from the phone.

All of this with fully open-source software, no commercial service in the loop, my books staying on my own server.

The 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.

Varbook reading statistics on mobile: KPI cards (17 books, 3 finished, 80h59m reading time, 2017 sessions), book status breakdown, and reading time by device (KOReader 8.8h, Moon+ 0.6h, Web Reader 71.6h)

It’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.

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.

There’s a free public instance if you just want to try it without installing anything: https://varbook.hophop.be/

Happy 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.

  • irmadlad@lemmy.world
    link
    fedilink
    English
    arrow-up
    27
    arrow-down
    10
    ·
    edit-2
    2 days ago

    community of AI haters.

    Didn’t down vote…but not all of us are AI haters. A lot of us also have the unique ability to actually scroll right on by things we are uninterested in without leaving castigating remarks. If I were to launch into a diatribe every time someone mentioned the 'arr stack in here, I think most of you would be like 'Hey man, how about giving it a rest. We get it. You don’t like the ‘arr stack’, and you’d have a valid point.

    my 2p

    • SuspiciousCarrot78@aussie.zone
      link
      fedilink
      English
      arrow-up
      2
      ·
      edit-2
      5 hours ago

      “A lot” is doing some Olympic level, Gold medal performance lifting there lol.

      Lemmy is loud in its AI hate, nuance be damned. I’ve seen drivebys on !LocalLLama (notably on a project about AI infinite radio).

      Apparantly, everyone is now an expert on ML and AI (I sure hope they didn’t use Gboard or Apple to glide type their message or any sort of STT), just like everyone was an expert on epidemiology, politics, trans rights, ethics, pop culture etc 5 mins ago. You don’t need to be an expert to have a position but at the same time, empty cans make the most rattle.

      What’s up with arr stack tho? I’ve been pulling direct from 1337 of late (and even more recently, just using CloudStream). Are we “no one is gay for molemen” on the arr stack?

      • irmadlad@lemmy.world
        link
        fedilink
        English
        arrow-up
        2
        ·
        5 hours ago

        What’s up with arr stack tho?

        I have no qualms with the software itself. In fact, from what I’ve read, it’s pretty amazing as to how it all fits together. Some good software engineering there. However, my problem arises in what most people use the 'arr stack for. I don’t police your usage, and I don’t preach at those who use the 'arr stack to pirate content, I don’t leave castigating comments and down votes. I figure you are all autonomous adults capable of making your own decisions and living with them. I’ve heard all the pros and all the cons and everything in between, so no need to rehash all of that. Nothing I could possibly post would convince anyone to disband their 'arr stack, so why bother? What would I gain except some faux sense of superiority? I don’t know what people get out of slamming others for using AI. What does it do for you? Does it make you feel better to trash someone’s project? Let the end user decide if the project is worthy of them running on their server, not a consensus of AI haters.

        It all gets down to how you interpret Rule 1: ‘Be civil: we’re here to support and learn from one another. Insults won’t be tolerated.’ Everybody was all chatty about Rule 3, but Rule 1 seems to be a hit or miss. Like I said, it’s 2026 and AI isn’t going away. It is probably a good assumption that any project within the last 5 years is going to be using AI in some form or fashion.

        • SuspiciousCarrot78@aussie.zone
          link
          fedilink
          English
          arrow-up
          2
          ·
          5 hours ago

          Ah, I thought you meant there was some technical issue that I wasn’t aware of / it had been superseded by a superior method.

          Ethical issues aside, the arr stack is a good gateway drug for self hosting. It’s fiddly but probably in a useful way. JF/Radarr/Sonarr/Sabnzdb set up genuinely introduces a variety of branching skills.

          Arr leads to self hosting, self hosting leads to home assistant, home assistant leads to … suffering :)

          • irmadlad@lemmy.world
            link
            fedilink
            English
            arrow-up
            1
            ·
            5 hours ago

            home assistant

            One of these days I’m going to have to spin up HA and see what it’s all about.

            • SuspiciousCarrot78@aussie.zone
              link
              fedilink
              English
              arrow-up
              2
              ·
              edit-2
              5 hours ago

              Pain. Suffering. Death.

              (I’m kidding…or am I?).

              I always think of home assistant like that scene in V for Vendetta, where he set up an elaborate circle of dominoes, and everything is working perfectly right up until he gets to the last domino.