When the App You Love Dies, Build Your Own — Introducing LibrisLog

I was a happy Dante user. For those who don’t know it, Dante was a solid Android book tracker. Scan a barcode, look up metadata, track your reading progress. Simple, effective, and most importantly: it worked. Until it didn’t.

Adding books by title or barcode? The search API the app relied on had stopped responding, so neither ISBN lookups nor name searches worked anymore. Backups? Gone too. Dante had gone quiet: No updates in a long time, and the features that depended on external services had stopped working. I get it, though. Focus shifts. I’ve been there myself. I recently handed one of my own projects over to a new maintainer because I couldn’t keep up anymore. But understanding why doesn’t make it any less frustrating when it’s your bookshelf that’s stuck.

And that’s where the real pain started. Getting my own data out of Dante was a nightmare. There was no export function anymore. Since my phone isn’t rooted, I had to write Python script that uses ADB and uiautomator2 that semi-automatically crawled every single screen in the app, then scraped my own reading data off those captures. Let that sink in: I had to literally crawl my own bookshelf, one screen at a time, to rescue my own data. That’s not how it should work.

The Search for Alternatives

Naturally, I looked around. Goodreads? Owned by Amazon, ad-heavy, and your data isn’t really yours. Hardcover.app? Nice, but SaaS. Your data lives on someone else’s server. Booklogr, Jelu, myBibliotheca: all self-hosted, but each had its own dealbreaker. One app didn’t store any book metadata locally. Instead, it queried Open Library live on every single page render. Open the app without internet? Nothing renders. Not a great experience. Others were missing the reading statistics I’d come to rely on, or gated basic features behind ads and paid tiers.

The common thread was always the same: my data was never fully mine. Either locked behind a service, or dependent on an internet connection, or held hostage by a pricing model that monetized my own reading history back to me.

So I did what any reasonable developer would do after exhausting all options. I built my own.

Meet LibrisLog

LibrisLogLibris — Latin for books. Log — as in keeping track. Your personal book library, on your own hardware.

It’s self-hosted, open source under the MIT license, and your data lives in a single SQLite file. You back it up, you move it, you own it. No ads, no tracking, no vendor lock-in, no premium tier gating your reading history behind a paywall.

   

What It Does

Your library, organized your way. Four reading lists: Want to Read, Currently Reading, Read, and Did Not Finish. Grid view for browsing, list view for scanning. Search and sort across everything.

Find and add books without leaving the app. Search Open Library, Google Books, and Hardcover.app right from the browser. Or point your phone at an ISBN barcode: LibrisLog has real-time barcode scanning built in, no native app required. If your book isn’t in any database, manual entry has you covered.

Reading progress that actually tracks. A page-level slider for quick updates, plus a full progress timeline per book with edit history. See exactly when you read what, not just a binary “read” or “not read.”

Statistics that tell a story. Calendar heatmap showing your reading activity over the year. Pages read per month. Books finished per period. Language distribution. Top authors. And many more. All rendered in clean, interactive charts.

Import whatever you’ve got. Coming from Goodreads? Drop your CSV and LibrisLog maps the fields automatically. Got a generic CSV from some other app? Define custom per-field transforms (yes, Python expressions) and import it. JSON?  Just throw it at LibrisLog and it’ll figure it out.

Cover art, handled. Automatic search over AbeBooks, Open Library, Amazon, and Hardcover. Not happy with the result? Paste a URL, upload a file, or pick from the search results. You’re always in control.

Multi-user from day one. Admin/user roles, per-user libraries, and optional OIDC single sign-on. One instance works for your whole household.

A proper API. The backend is a fully documented REST API with OpenAPI/Swagger docs. Create API keys from the web UI. Script it, automate it, build your own frontend on top. Whatever you need.

Bilingual. English and German, with a localization framework ready for more languages.

Building It, and Building It Differently

After twenty years of crafting code by hand, building LibrisLog was an eye-opening experience. I used AI-assisted coding tools throughout the project, but deliberately stayed in the driver’s seat. The workflow was: think through the architecture first, write a plan, review and adjust the plan until it met my requirements, then let the agent write the code and the tests. Finally, I manually reviewed every single change. Where necessary, I refined the solution until it met my expectations.

That’s not vibe-coding. It’s a faster hammer, but you still swing it yourself. At the end of the day, a human reviews, a human decides, and a human is accountable. That’s a principle I didn’t compromise on.

The stack is deliberately lightweight: Svelte 5 with SvelteKit on the frontend, FastAPI with SQLModel on the backend, SQLite for storage. Two Docker containers, one database file. It’ll run on a Raspberry Pi if you want it to.

Get It Running

LibrisLog is designed to be up and running in minutes:

mkdir librislog && cd librislog 
curl -O https://raw.githubusercontent.com/codebude/librislog/main/docker-compose.yml 
curl -O https://raw.githubusercontent.com/codebude/librislog/main/.env.example 
cp .env.example .env 
# generate a random secret key 
sed -i "s/CHANGE_ME_TO_32PLUS_CHARS/$(openssl rand -base64 32)/" .env 
docker compose up -d

Open http://localhost:8001, create your account, and start tracking. That’s it.

What’s Next

LibrisLog is actively developed and open to contributions. If you’ve been looking for a book tracker that respects your data and your privacy, give it a spin:

Found a bug? Got an idea? Want German to not be the only non-English option? Issues and pull requests are welcome on GitHub.


LibrisLog is released under the MIT License. No ads. No tracking. No subscription. Your data, your rules.

Leave a comment

Please be polite. We appreciate that. Your email address will not be published and required fields are marked