Awesome
PdfDing
PdfDing is a selfhosted PDF manager and viewer offering a seamless user experience on multiple devices.
Overview
Introduction
PdfDing is a PDF manager and viewer that you can host yourself. It offers a seamless user experience on multiple devices. It's designed be to be minimal, fast, and easy to set up using Docker. As all data stays on your server you have full control over your data and privacy.
With its simple, intuitive and adjustable UI, PdfDing makes it easy for users to keep track of their PDFs and access them whenever they need to. With a dark mode and colored themes users can style the app to their liking. As PdfDing offers SSO support via OIDC it can be easily integrated into existing setups.
The name is a combination of PDF and ding. Ding is the German word for thing. Thus, PdfDing is a thing for your PDFs. The name and PdfDing's design are inspired by the excellent bookmark manager linkding.
Feature Overview
- Seamless browser based PDF viewing on multiple devices
- Organize PDFs with tags
- Clean and responsive UI
- Dark Mode, colored themes and custom theme colors
- Inverted color mode for reading PDFs
- Remembers current position - continue where you stopped reading
- SSO support via OIDC
- Share PDFs with an external audience via a link or a QR Code
- Shared PDFs can be password protected and access can be controlled with a maximum number of views and an expiration date
- Progress bars show the reading progress of each PDF at a quick glance
- Every user can upload its own PDFs. There is no admin curating the content.
- Automated and encrypted backups to S3 compatible storage
- Consumption directory as an alternative way to add PDFs
- Simple Admin area for user management
Screenshots
Screenshots can be found here.
Why PdfDing?
I started developing PdfDing as I was searching for a solution for viewing and managing PDF files. I had a few simple requirements:
- view PDFs seamlessly in the browser of my desktop and mobile devices
- every user can upload files
- can be self-hosted via Docker
- minimal and resource-friendly
- SSO support
I was quite surprised to find out that there was no app matching my simple requirements. While there were some existing solutions they still had some problems:
- They are using the inbuilt PDF viewer of the browser. This works fine on desktops and laptops but on smartphones it will simply download the PDF file and not display it in the browser.
- They are really feature rich and therefore resource-hungry. I do not need fancy AI or OCR. I just want to view and organize my PDFs.
- The content needs to be curated by an admin user. Normal users are not allowed to add PDFs.
- PDFs can not be uploaded via the UI.
Thus, I am developing PDfDing as a simple webapp with a clear focus on a single thing: viewing and managing PDFs.
Installation
PdfDing is designed to be run with container solutions like Docker. The Docker image is compatible with ARM64 platforms, so it can be run on a Raspberry Pi 4.
PdfDing uses an SQLite database by default. Alternatively PdfDing supports PostgreSQL.
Using Docker
To install PdfDing using Docker you can just run the image from Docker Hub:
docker run --name pdfding \
-p 8000:8000 \
-v sqlite_data:/home/nonroot/pdfding/db -v media:/home/nonroot/pdfding/media \
-e HOST_NAME=127.0.0.1 -e SECRET_KEY=some_secret -e CSRF_COOKIE_SECURE=FALSE -e SESSION_COOKIE_SECURE=FALSE \
-d \
mrmn/pdfding:latest
If everything completed successfully, the application should now be running and can be accessed at http://127.0.0.1:8000.
If you use selinux it might be necessary to add the :Z
after the volumes, e.g.
sqlite_data:/home/nonroot/pdfding/db:Z
.
Using Docker Compose
To install PdfDing using Docker Compose, you can use one of the files in the deploy directory and run e.g.:
docker-compose -d -f sqlite.docker-compose.yaml
Configuration
Information about the different configuration options can be found in the configuration section of the docs.
Contributing
Small improvements, bugfixes and documentation improvements are always welcome. If you want to contribute a larger feature, consider opening an issue first to discuss it. I may choose to ignore PRs for features that don't align with the project's goals or that I don't want to maintain.
If you are interested in contributing more information can be found in the development section of the docs.
Acknowledements
- This project started by adjusting the django starter of Andreas Jud: django-starter, django-starter-assets
- As mentioned above, inspired by linkding.