AI disclosure: the app has been developed by hand since 2023, the new features added this year have been developed with AI assistance. A detailed breakdown of how AI has been used can be read in the disclosure comment.
Gitlab: https://gitlab.com/Nystik/inkheart
Live demo: https://inkheart-demo.thiefling.com
I shared this earlier this year in January, and it's about time to provide an update on what's changed this year. But lets begin with a re-introduction:
Inkheart is a lightweight, focused application created to solve a specific problem: Self-hosting a library of PDF documents that were too large to properly open in Google Drive's PDF reader, and allow linking to specific pages. Over the years it has evolved to include a few more features and quality of life improvements, while still remaining close to its original narrow usecase.
Inkheart is not trying to be a complete self-hosting library for e-books, or comics, or textual media in general. It's not made to compete with library apps like Kavita or Komga, or document managers like Paperless. And it's never going to. But I am happy to take feature requests provided they remain within the scope I've set.
It is a simple PDF library indexer and reader, a svelte UI over a Rust backend for a small and light footprint. The library reflects your filesystem, showing your folder structure, and displaying your documents with minimal metadata. There's no database, the index is kept in-memory and only persisted to disk for faster startup if you configure it that way. If you enable full text search, the search index is the only substantial piece of metadata the app maintains. At this time the app is read-only, as in it does not handle uploads of documents. You'd place your PDFs on your server by some other method; personally I sync a folder with documents from google drive, mounted as the document root.
As for what has been added this year: There has been a full UI refresh where I have gone over the entire styling of the application and made it more uniform and consistent, I've added full text search, multi-document reader so you can have multiple documents open and switch between them quickly, and I've finally implemented my own skinned PDF.js reader instead of embedding the default one. There have also been a number of minor quality of life improvements like reading progress and settings for default reader page spread and zoom, as well as some memory optimizations.
Note: Inkheart is currently a single user application, and is designed to sit behind a reverse auth proxy for secure access, the included Firebase auth implementation is a legacy method from when I first built it, and works fine, but I have since personally moved on to using Cloudflare Access. Multi-user is a possible future feature if enough people request it or I find myself in a spur of motivation, along with other potential roadmap items you can see further down.
Features:
Filesystem based navigation
Integrated PDF reader built on PDF.js
Multi-document reader tabs
Direct linking to specific pages
Reading progress tracking
Collections for organizing PDFs into custom groups
Pinned folders for quick sidebar access
Filename search and full-text search across PDF content
Optional authentication via Firebase Auth with whitelisting
Light and dark color themes
Potential future additions (If enough people ask for them, and time allows):
Inkheart is one of dozens of projects I've been working on for years, most of them not yet ready for sharing. So development on Inkheart isn't particularly fast even with the assistence of AI. My process doesn't allow me to pump out feature after feature like some I see on this site. I put a lot of effort into reviewing and testing, and thinking through any code I am going to take responsibility for, and the project's pacing reflects that.
Anyway, maybe someone else finds this little app of mine useful, which is enough reason for me to share it.
Devlog for following updates when they happen: https://dev.thiefling.com/inkheart