Self-hosted service
24eme/signaturepdf avatar
24eme/signaturepdf

Signature PDF: self-hosted PDF signing, page organizing and compression

Free open-source web software for signing PDF (alone or with others) and also organize pages, edit metadata and compress pdf

831 stars112 forksJavaScriptAGPL-3.0

At a glance

What is it?
A PHP web application that signs PDFs, reorders and compresses them, and lets several people sign in sequence. Multi-signature and digital signatures both need server-side setup before they work.
Who is it for?
Signature PDF suits a team or association that needs people to sign documents through a browser without sending them to a commercial signing service, and that is willing to host the instance and read the AGPL terms. It does not suit a workflow that forbids PDFs being stored on the server, since multi-signature mode requires it and server side encryption is optional rather than default.
Can I use it commercially?
Yes, with strict conditions. AGPL-3.0 is a network copyleft licence: if people use a modified version over a network, for example as a hosted service, you must offer them its source code under the same licence.
Is it still maintained?
Yes. The repository last received commits 1 day ago.
What is it written in?
Mainly JavaScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 22, 2026, and from our analysis. They are not legal advice.

Editorial analysis

A web application for signing, not a desktop PDF editor

Signature PDF is a PHP application that puts a set of PDF operations behind a browser interface. The README lists them as signing a document alone or with other people, organizing pages by merging, sorting, rotating, deleting and extracting, editing metadata, and compressing files. The distinction from a desktop tool matters for the audience: the point is that a person who does not have a PDF editor installed, or who is on a machine they do not administer, can open a link and sign a document. The project is AGPL V3 licensed and its documentation lives in the repository as installation.md, with a separate French README. The top level of the repository shows the shape of a PHP application: app.php as the entry point, lib/, templates/, public/, config/, locale/, tests/, a Debian packaging directory and a Dockerfile.

Multi-signature mode means uploaded PDFs stay on the server

The mode that lets several people sign the same document has a cost, and the README is direct about it: this mode allows multiple people to sign a PDF, but it requires that the PDFs be stored on the server. It is optional, and the application works without it. Enabling it starts with copying the example configuration file:

bash
cp config/config.ini{.example,}

Then the storage path is set in config/config.ini and the directory created:

bash
PDF_STORAGE_PATH=/path/to/folder
bash
mkdir /path/to/folder

The web server needs write access to that folder, which on Apache with Debian means changing ownership, for example chown www-data /path/to/folder/to/store/pdf. Files can additionally be stored encrypted with a symmetric key known only to the signers, which requires gpg to be installed and the PDF_STORAGE_ENCRYPTION option set to true in the same file.

Digital signatures pull in pdfsig and an NSS certificate store

Cryptographic signing is a separate feature from drawing a signature on a page, and it depends on two command line tools. The README names pdfsig from the poppler project and certutil from the libnss3 project, installed on Debian with:

bash
sudo apt-get install poppler-utils libnss3-tools

The certificates themselves live in an NSS database, and a helper script in the tools directory creates them:

bash
bash tools/create_nss_certs.sh NSS_DIRECORY/ MY_NSS_PASSWORD MY_CERT_NICK MY_SIGNATUREPDF_URL

The resulting values are then written into config/config.ini as NSS3_DIRECTORY, NSS3_PASSWORD and NSS3_NICK, and the folder has to be readable by the web server, for example chown www-data:www-data -R NSS_DIRECORY. So a deployment that wants real cryptographic signatures is a deployment that also administers a certificate store, not just a web server.

Organize mode, the demo link and retention periods are switches

The configuration file also decides what the interface offers. Adding DISABLE_ORGANIZATION=true to config/config.ini turns off the page organizing feature entirely, and PDF_DEMO_LINK=false hides the demo PDF link. A shared PDF's lifetime can be set with retention keys under a [signature] section, where the text after the colon is translated through the .po files, and the README shows an example setting a document to expire after ten days. Metadata editing is configurable in the same file, with one METADATA_DEFAULT_FIELDS entry per field and an HTML input type such as text, date, number or email to preload each PDF. A stylesheet at public/css/app-specific.css is loaded automatically when present, which is the supported way to change the look without forking the templates.

The Docker image bundles the whole PDF toolchain

The Dockerfile shows the real dependency list of the application, which is longer than a JavaScript project would need. It starts from php:8.2-apache and sets environment variables for upload limits, with UPLOAD_MAX_FILESIZE and POST_MAX_SIZE at 24M and MAX_FILE_UPLOADS at 201. The apt layer installs gettext, librsvg2-bin, pdftk, imagemagick, potrace, ghostscript, gpg and vim, which cover text translation, vector rendering, page assembly, image handling, tracing and encryption. Configuration files are templated through envsubst, the rewrite module is enabled and the site is activated, and the container ends with the entrypoint script. That image is also the easiest way to see the app running, but the Debian and Alpine routes in installation.md exist for people who would rather not run a container.

Use a hosted instance or run your own, with different privacy trade-offs

The README lists seventeen public instances of the software, run by organisations including 24eme, Libreon, Hostux, Nebulae, Ti Nuage, Les Ceméa, Spirio.fr, Sequanux, Deblan, OUVATON, Liber-IT, Linux07, Blabla Linux, Framasoft and s2s, and invites others to add theirs through an issue or a pull request. That list is the natural alternative to deploying your own copy, and the difference is where the documents go. A public instance handles your PDF on someone else's server, which is convenient and free of operations work. Your own instance keeps the files inside your infrastructure and lets you set the storage path, the retention period and the encryption option, and it obliges you to read the AGPL terms if you modify the code and offer it over a network. Updates on a self-hosted install are described as simple, since the latest stable version sits on the master branch and the documented step is git pull -r.

Editorial conclusion

Signature PDF suits a team or association that needs people to sign documents through a browser without sending them to a commercial signing service, and that is willing to host the instance and read the AGPL terms. It does not suit a workflow that forbids PDFs being stored on the server, since multi-signature mode requires it and server side encryption is optional rather than default. Before deploying, decide whether you want multi-signature and digital signatures at all, then set PDF_STORAGE_PATH and PDF_STORAGE_ENCRYPTION in config/config.ini accordingly.

Frequently asked questions

How do I install Signature PDF on Debian or Ubuntu?

The README links installation.md for the Debian and Ubuntu route, and lists Docker, Linux Alpine and a package as the other options. Digital signatures additionally require poppler-utils and libnss3-tools, installed with sudo apt-get install poppler-utils libnss3-tools.

How do I enable multi-signature mode in Signature PDF?

Copy config/config.ini from its example, set PDF_STORAGE_PATH to the folder where uploaded PDFs are stored, create that folder and give the web server write access to it. The mode requires PDFs to be stored on the server.

Can Signature PDF store uploaded PDFs encrypted?

Yes. Server side encryption with a symmetric key known only to the signers can be enabled by installing gpg and setting PDF_STORAGE_ENCRYPTION=true in config/config.ini.

How do I update a self-hosted Signature PDF install?

The latest stable version is on the master branch, and the documented update step is git pull -r.

What licence does Signature PDF use?

The project is open source software under the AGPL V3 licence, with the licence file in the repository root.

Official sources

  1. 24eme/signaturepdf on GitHub
  2. License: AGPL-3.0
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/24eme-signaturepdf.svg)](https://hysenlabs.com/projects/24eme-signaturepdf)