Programming language: Python
License: Apache License 2.0
Tags: Document Management    
Latest version: v2.0.1

Papermerge alternatives and similar software solutions

Based on the "Document Management" category.
Alternatively, view Papermerge alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of Papermerge or a related project?

Add another 'Document Management' Software solution


Unittests Docker Image Docker Pulls Contributors


Papermerge - Document Management System

Papermerge is an open source document management system (DMS) primarily designed for archiving and retrieving your digital documents. Instead of having piles of paper documents all over your desk, office or drawers - you can quickly scan them and configure your scanner to directly upload to Papermerge DMS.

Papermerge DMS on its turn will OCR the document and index it. You will be able to quickly find any (scanned!) document using full text search capabilities.

It is built on Django 3.1.

Papermerge is actively developed and we release quite frequently.

This is web-based software. This means there is no executable file (aka no .exe files), and it must be run on a web server and accessed through a web browser.

[Screenshot 01](./img/screenshot-1.png)

Right Tool For You?

To be efficient you always need to choose right tool for the problem. Because Document Management is too generic - I think that a definition of what is a Document in context of this software is needed.

For Papermerge a document is anything which is a good candidate for archiving - some piece of information which is not editable but you need to store it for future reference. For example receipts are perfect examples - you don't need to read receipts everyday, but eventually you will need them for your tax declaration. In this sense - scanned documents, which are usually in PDF or TIFF format, are perfect match.

Out of scope (at least for near future) are Office documents (ODT, DOCX....), text files (notes) which usually are editable. In future Papermerge might support Office documents (ODT etc), but that feature will be provided as plugins.

Papermerge is simply not designed to store books. Yes, you can scan a book and import it in Papermege, but again - this is not what Papermerge was designed for.

Features Highlight

  • Documents of pdf, jpg, png, tiff formats are supported
  • Desktop like user interface
  • Per page OCR of the documents
  • Full Text Search of the scanned documents
  • Versioning
  • User defined metadata per folder/document/page
  • Import documents from multiple sources (local disk, email, web upload, REST API upload)
  • Tags - assign colored tags to documents or folders (screencast demo)
  • Documents and Folders - users can organize documents in folders
  • Multi-User (Groups, Roles)
  • User permissions management
  • Document permissions management
  • REST API (screencast demo)
  • Page Management - delete, reorder, cut & paste pages (screencast demo)
  • Basic automation (screencast demo)



Donations, Fundraising, Your Support

:heart: :heart: :heart:

In case you find Papermerge useful, I modestly ask you to support Papermerge via a small donation. Even an amount as small as $9 will make a huge difference.

For donations, you can use three channels paypal, patreon and github itself:

:green_heart: :green_heart: :green_heart:

Live Demo

In live demo some of the features are disabled. For example you cannot manage users, API tokens. Folders/documents with a red lock are read-only for guest user.

  • Live demo
  • Username: guest
  • Password: password77a

Repository Organization

At its very beginnings Papermerge perfectly fit into a single repository - this one.

As result, this repository is the central place for keeping track of releases, issues and discussions regarding Papermerge.

However, as source code grew and project accumulated more features - it morphed gradually into a monolithic giant. It is well known fact that dealing with monolithic architecture is very challenging. In order to deal with growing complexity, I decided to split the project into separate, reusable pieces. Each of resulting packages was moved one by one into Papermerge Organization.

Again, this repository is the central place to keep track of Papermerge issues.

Following is the list and a diagram of Papermerge projects ecosystem:

[Org Diagram](./img/org-diagram2.png)

Documentation and Other Resources

Papermerge has high quality, up-to-date and to the point documentation. Documentation contains lots of images, text and videos. It is regularly updated. If you spot outdated or incomplete article please open an issue on github - it will be handled immediately. Documentation issues have high priority.


We welcome contributions! In general, if change is very small, like fixing a documentation typo, remove unused variable or minor adjustments of docker related files - you can create a pull request right away. If your change is small and reasonable it will be (very likely) almost immediately accepted.

For bigger changes, like a new feature or even change/add/remove of whole paragraph in documentation - please first discuss the change you wish to make via GitHub issue, pull request or email.

For more information, see the contributing file.

More Screenshots

[Screenshot 02](./img/screenshot-2.png) [Screenshot 03](./img/screenshot-3.png)

Try it!

You can try it with just 3 simple commands (you need git and docker-compose):

git clone [email protected]:ciur/papermerge.git
cd docker/
docker-compose up

Docker compose command will pull all necessary docker images and start papermerge on http://localhost:8000. Access it with default username/password: admin/admin.


There are couple options:

Unit Tests

In order to run unit tests:

$ ./run_tests.sh

Which basically is same as:

$ DJANGO_SETTINGS_MODULE=config.settings.test
$ ./manage.py test papermerge/test/

Notice that you can pass any command line argument to run_tests.sh script and those arguments will be routed further to manage.py.

On multi-core processors it is much more efficient to use --parallel argument which splits test suite between CPU cores:

$ ./run_tests.sh  --parallel

On Dell-XPS laptop with 12-core i7 CPU it takes about 5 seconds to run all unit tests in parallel; without --parallel argument on same CPU it takes approximately 17 seconds to run them.

Another commonly used argument is --failfast. If --failfast argument is provided, a failed test will conveniently stop execution of entire test suite:

$ ./run_tests.sh --failfast

In order to run only views tests and stop if there is a failing test:

$ DJANGO_SETTINGS_MODULE=config.settings.test
$ ./manage.py test papermerge/test/views/ --failfast

Following command will run only tests from papermerge/test/views folder and show ALL python and django warnings:

$ DJANGO_SETTINGS_MODULE=config.settings.test
$ python -W all manage.py test papermerge/test/views/ 

Commercial Support

For commercial support, consulting and customization please contact us:

Other resources