PdfDing - Self-Hosted PDF Manager and Viewer

Seamlessly manage and view your PDFs on multiple devices wherever you are while staying in control of your data with the self-hosted PDF Ding.

PdfDing - Self-Hosted PDF Manager and Viewer

We rely on PDFs for everything from reports to research papers, and sometimes it feels like they're everywhere. But finding a simple way to view and manage them across all your devices can be a challenge. That's where PdfDing comes in - a self-hosted PDF manager that lets you do just that, with a focus on simplicity, ease of use, and flexibility.

What is PdfDing?

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.

The name is a combination of PDF and ding. Ding is the German word for thing. Thus, PdfDing is a thing for your PDFs. If the name and the design feel familiar it's no surprise as PdfDing was inspired by the excellent bookmark manager linkding.

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.

PdfDing Key Features

  • Seamless browser based PDF viewing on multiple devices
  • Organize PDFs with tags
  • Clean and responsive UI
  • Dark Mode and colored themes
  • Remembers current position - continue where you stopped reading
  • SSO support via OIDC
  • Every user can upload its own PDFs. There is no admin curating the content.
  • Simple admin area for user management

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 were using the inbuilt PDF viewer of the browser. This works fine on desktops and laptops but on smart phones it will simply download the PDF file and not display it in the browser.
  • They were really feature rich and therefore resource-hungry. I did not need fancy AI or OCR. I just wanted to view and organize my PDFs.
  • The content was curated by an admin user. Normal users were not able to upload PDFs.
  • PDFs could not be uploaded via the UI.

In order to fix these issues I am developing PDfDing as a simple webapp with a clear focus on a single thing: viewing and managing PDFs.

Install PdfDing with Docker Compose

This Docker Compose stack can be used to install PdfDing on your server. If you need help, see noted's guides about getting started with self-hosting.

version: '3'

services:
  pdfding:
    container_name: pdfding
    image: mrmn/pdfding:latest
    volumes:
      - sqlite_data:/home/nonroot/pdfding/db
      - media:/home/nonroot/pdfding/media
    environment:
      # use a long random secret
      SECRET_KEY: some_secret
      # the domain where you want to access PdfDing, e.g. pdfding.com
      HOST_NAME: 127.0.0.1
      # In production set to TRUE
      CSRF_COOKIE_SECURE: FALSE
      # In production set to TRUE
      SESSION_COOKIE_SECURE: FALSE
#      # use this if you want to use OIDC
#      OIDC_ENABLE: TRUE
#      OIDC_CLIENT_ID: pdfding
#      OIDC_CLIENT_SECRET: client_secret
#      OIDC_AUTH_URL: https://auth.pdfding.com/.well-known/openid-configuration
    ports:
      - "8000:8000"

volumes:
  sqlite_data:
  media:

After running docker compose up you can access PdfDing via http://127.0.0.1:8000.

pdfding_login.png

For more information about the configuration options click here.

SSO

PdfDing supports SSO via OIDC. If you want to use SSO uncomment the OIDC variables above.

Once PdfDing is set up for using OIDC the same needs to be done on the OIDC identity provider's side. Of course, this configuration depends on the used identity provider. Here is an example configuration
for Authelia:

oidc:
    ## The other portions of the mandatory OpenID Connect 1.0 configuration go here.
    ## See: https://www.authelia.com/c/oidc
    clients:
      - id: pdfding
            description: PdfDing
            # create client secret and hash with
            # docker run --rm authelia/authelia:latest authelia crypto rand --length 64 --charset alphanumeric
            secret: '$pbkdf2-sha512$310000$<rest_of_hashed_secret>'
            public: false
            authorization_policy: two_factor
            scopes:
              - openid
              - email
              - profile
            redirect_uris:
              - https://pdfding.com/accountoidc/login/callback/

Admin Users

If needed or wished it is possible to create an admin user. Admin users can view and delete users. Creating an admin user is optional. To give a user admin rights execute

python pdfding/manage.py make_admin -e [email protected]

inside the shell of the running container and specify the correct email address. Admin users can also give other users admin rights via the ui.

Outlook

PdfDing is a work in progress. While it is already a fully functional PDF manager and viewer, more exciting features are already in the pipeline. For example:

  • Share PDFs via links
  • Share PDFs with password protection, expiration date and a maximum number of views
  • Automatically back up all data to S3 compatible storage
  • What you want. If you have an awesome feature idea, feel free to create an issue on Codeberg

Final Notes and Thoughts

Thanks for checking out PdfDing in this article.

If you enjoy PdfDing, be sure to swing by the PdfDing repo on Codeberg and give it a star. I would also ask that you ask any support related questions for PdfDing there on the Codeberg issue tracker.

As PdfDing is open source you are invited to modify or contribute. More information can be found here.