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.

  • bfg9k@lemmy.world
    link
    fedilink
    English
    arrow-up
    27
    arrow-down
    12
    ·
    22 hours ago

    Why not just use Audiobookshelf? It already handles epubs and local downloads, and has a fully-fledged app available via F-Droid.

    Plus it’s not AI-coded slop.

    Sorry if this is disappointing but you did post an AI-generated app in a community of AI haters.

    • n2024@lemmy.worldOP
      link
      fedilink
      English
      arrow-up
      27
      arrow-down
      3
      ·
      22 hours ago

      Thanks for the suggestion. I know Audiobookshelf, but it’s audiobook-first and the EPUB side is basic, it doesn’t do the KOReader ↔ web position sync I built this for. And no worries about the AI part, I was upfront in the post on purpose. You don’t have to use it or like it. I built it for myself, it works for me every day, and I shared it in case it’s useful to someone else. That’s all.

      • ikidd@lemmy.dbzer0.com
        link
        fedilink
        English
        arrow-up
        24
        arrow-down
        6
        ·
        19 hours ago

        Don’t let the anti-AI bullshit get you down. You built something that worked for you, it isn’t the basis of national security for everyone and you wanted to share it. And you opensourced it so if I want to bolt on an IRC downloader or something, it’s easy.

        I appreciates you.

          • ikidd@lemmy.dbzer0.com
            link
            fedilink
            English
            arrow-up
            15
            arrow-down
            7
            ·
            edit-2
            16 hours ago

            Just can’t resist eh.

            I have an old seed drill and the ECU smoked itself last fall. $6000-8000 if I can find a used one and then wait for it to show up, hopefully it works.

            Pulled out Hermes on GPT5.5, spent the weekend building a DIY unit that monitors shaft and airspeeds, controls clutches, and gives me a browser page that I can watch all that stuff. I’m currently sitting in the tractor and waiting for it to build me a new feature I didn’t have on the old monitor where I can manually enter acres done.

            captured_image1037892746433104354

            It would have taken me months to build this and I’d have done nothing but work on that. Now I can tweak this while I work, or even access it remotely and change things if someone else is using it.

            People can get on their high horse all they want, it cost me almost nothing to build something I can modify as I wish now. AI has democratized software. Hate it all you want, it works.

            • non_burglar@lemmy.world
              link
              fedilink
              English
              arrow-up
              1
              arrow-down
              1
              ·
              1 hour ago

              That project of yours is great. But that isn’t why ppl object to ai.

              The problem with ai is the massively ramped number of unnecessary undisclosed issues with software that normally take human review, sometimes in multiple rounds.

              AI only democratized the coding. All the rest of the cost of making software is absorbed by by nothing. No one is getting code parsed, or human reviewed before putting it out in the wild.

              So it’s awesome to make stuff for yourself, but it’s not appropriate to share with others without that code review.

            • n2024@lemmy.worldOP
              link
              fedilink
              English
              arrow-up
              5
              arrow-down
              1
              ·
              13 hours ago

              This is the perfect example, honestly. Same spirit: a real problem, solved fast with the tool in hand. Hope the acres-done feature compiles before you finish the field 😄

              • ikidd@lemmy.dbzer0.com
                link
                fedilink
                English
                arrow-up
                2
                ·
                6 hours ago

                What’s cool is that I can watch it build the feature in another page (actually, I have a ttyd session in the app so I can bring up a terminal on the Pi to work with Hermes or Opencode) and it will run pytests against a test instance of the service, then swap it into the production files and restart the service. I get about 2 seconds of disconnect where the cards don’t update, and then I refresh the browser and it’s live. If I don’t like it, I can tell it to revert to the earlier commit or change things. It’s magical.

                Then I blew a hydraulic hose and went to bed. AI can’t help me with that.

            • Natanox@discuss.tchncs.de
              link
              fedilink
              English
              arrow-up
              4
              arrow-down
              3
              ·
              10 hours ago

              AI has democratized software.

              If you mean that everyone can now build something that most likely will fall apart in the future, where nobody knows what’s actually inside as nobody reads it, where you might get hit with copyright claims because you stole code willy-nilly (you can’t hide behind the AI, you did it), that is full of security issues as well as structural nonsense and you may never know if the LLM decides to delete everything star anew while blasting a 6000€ hole in your pocket doing do…

              …well then yes, it “democratized” something.

    • irmadlad@lemmy.world
      link
      fedilink
      English
      arrow-up
      25
      arrow-down
      10
      ·
      edit-2
      21 hours 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

    • mushroommunk@lemmy.today
      link
      fedilink
      English
      arrow-up
      8
      arrow-down
      4
      ·
      22 hours ago

      And if one of the many amazing open source projects don’t do what you want, make a few of them better rather than spinning off yet another slop app that does the same thing that will split people and support.