Mayan EDMS “Tempest” version 3.0

Roberto Rosario
Jul 2, 2018 · 7 min read

It took months due to a natural disaster, but it is finally here!


It is now possible to launch a free demo using the “Play with Docker” project. All that is needed if a free Docker account. Free compute power is provided for up to 4 hours. Visit the “Demo” link in the homemade or if you are familiar with “Play with Docker” click this link.

Core team

With the merge of the Mayan EDMS NG fork back into the main repository, it was only natural to also merge the team behind this effort. Michael Price and Eric Riggs join the core team of Mayan EDMS and have already made great contributions.

Single page app

The project has been rewritten to operate as a Single Page App (SPA). This means that instead of requesting, loading and refreshing the entire page on each user interaction, only the parts that change are reloaded. This results on much less rendering on the backend, less data transmitted over the network and faster refresh on the browser. This make the whole project lighter and faster, even on slower computers, either browsing or doing the serving.

Upgrading to Django 1.11

The codebase was updated to work on top of Django 1.11. Even though Django 1.11 is advertised as a minor release, it broke compatibility and interfaces in several key areas. Because the code in many areas needed to be rewritten, [se aprovecho la ocasion] to modernize the Python dependencies and much progress was made towards the eventual move to Python 3.

Realtime notifications

A notification system was added where users can choose to subscribe to system or document events. For example an user wanting to know when a document has been approved can choose to subscribe to the workflow events of the document or its document type. The main menu now includes a bell icon that is updated regularly and show the number of unread notifications.

User can subscribe to global events or the events of a specific document or a document type.
Bell icon show the number of unread notifications.
User notifications list.

Improve search syntax

Support was added for literal terms and optional terms. Mayan will now return documents that only match all the entered search terms. To specify that documents match either the first, subsequent or both terms the “OR” command can be used. Support was added to allow searching for exact terms composed of multiple words. To use this feature enclose the terms in quotes.

Executing concurrent copies

The resource locking system has been updated to create a lock file that is unique to each installed version of Mayan in a system. This allows concurrent execution of many installations on a single non-virtualized host and a single flat filesystem.

Display resolution format changes

Previously a single display resolution setting options would be used for both, the width and height of one of the support display modes. Now there is a separate configuration option for the width and the height of each display mode.

Dynamic wizard steps

If is now possible to add custom wizard steps or disable existing steps. This allows third party apps to customize the document upload process.

New upload wizard step

A new default step was added to the upload wizard to allow specifying the final cabinet destination of a document.

New proposal system

As the project grows so grows the complexity of its systems and proposed changes. To create a better technical documentation a new proposal system has been put in place. This system works for techincal porposal and process proposals.

Storage API

It is now possible to pass arguments to the storage drivers to customize their behavior. This removes the need to create subclasses of the storage drivers is many situation where the only change was a simple argument change from a default value. The new configuration options are DOCUMENTS_STORAGE_BACKEND_ARGUMENTS, DOCUMENTS_CACHE_STORAGE_BACKEND_ARGUMENTS, and SIGNATURES_STORAGE_BACKEND_ARGUMENTS.

The original storage driver named FileBasedStorage has been removed since using the new storage argument configuration options the native Django storage driver can be used instead.

User event filtering

It is now possible to filter the event list by user. To do this just click on the username and the list will refresh to show only the events performed by that user.

Events list can be filtered by clicking on an username or by the user list view in the user administration view.

Smart checkbox selection

A faster way to select multiple item has been added. To use it just click the checkbox of the first item, and while holding the Shift key, click the checkbox of the last item of the selection.

Select multiple document with just two clicks or select all with just one click.

JavaScript dependency manager

Javascript libraries are no longer embedded and shipped with the program code. Instead these are downloaded at install or upgrade time. This makes the distributable package smaller.

Workflow changes

If a document type is disassociated from a workflow, all the running workflows of the documents of the document type disassociated will be removed.

Default database

A warning message will now appear in installations using SQLite as their database in production environments. The way Mayan EDMS uses SQLite causes it to exceed its concurrency limits causing database locking issues which were the root of many support requests. The recommended database for use with Mayan EDMS is PostgreSQL.

Automated installer for Docker.

Email source processing

The email and email attachment parsing code has been refactored to increase compatibility with email providers. Most of the processing is now done using Mailgun’s free flanker Python library which support the quirks and undocumented usage of many email providers.

Code testing improvements

The number and quality of tests was improve. The code test coverage was also increased. The total count of tests was increased to 753. These tests are performed for each code commit against 3 database backends and again inside a Docker container. This means that a total of 3012 tests are execute for each code commit.

Continuous integration and continuous deliver using GitLab and a robust test suit.

ACL support for roles, users and groups

Support for access control lists was added to these modules, making it possible for administrators to give access and delegate user managements tasks.

Easier deployment

The default deployment strategy now uses more Python components. Instead of the NGINX and uWSGI combination, Mayan EDMS now uses Gunicorn and Whitenoise. This means that the project can serve as its own webserver. The official Docker image now uses this approach. This reduces the number of steps required for a manual installation.

New environment variables


Installation artifacts

All files created during installation and user files now reside in the media folder for a complete separation of user data and code. The media folder can reside in any part of the filesystem and is controlled with the MAYAN_MEDIA_ROOT environment variable.

Default languages

The DOCUMENTS_LANGUAGE_CHOICES setting option has been replaces with the new DOCUMENTS_LANGUAGE_CODES. This makes customizing the language easier as only the language ISO codes need to be specified instead of the ISO code and language name combination.

The default list of language code choices was reduced from 7,800 to 100. The top 100 languages by speaker number were used. It is possible to re-add any language by setting the DOCUMENTS_LANGUAGE_CODES environment variable.

Quick downloads

A quick download action was added to download a document’s original file without using the download wizard.

Other changes

  • Cabinet pagination fixed
  • Permission filtering when performing document page searches was fixed.
  • Improve permission handling on the workflow app.
  • Fixes for many API endpoints.
  • More API endpoints added.
  • Fixes to the document printing system.

And many more features and issues fixed. For a complete list of changes view the changelog at

Photo by Jordan Wozniak on Unsplash

Roberto Rosario

Written by

Investor • Trader • Software developer • Maker • Machine learning • Crypto • Fitness • World travel