Overview
Discover what makes Mayan EDMS powerful
Mayan EDMS is a mature, open‑source document management system written primarily in **Python** and built on the **Django** web framework. It exposes a rich, RESTful API that can be consumed by any client capable of HTTP requests, making it an attractive backend for custom portals or integration with existing enterprise tools. The core of the application revolves around a *document* abstraction that supports **multiversioning**, granular permissions, and declarative workflows. From a developer’s perspective, the system is designed to be extensible: plugins can hook into Django signals or extend the REST API, while a comprehensive settings schema allows fine‑grained control over everything from storage backends to authentication providers.
Document Versioning
Fine‑Grained Permissions
Workflows
Linking & Referencing
Overview
Mayan EDMS is a mature, open‑source document management system written primarily in Python and built on the Django web framework. It exposes a rich, RESTful API that can be consumed by any client capable of HTTP requests, making it an attractive backend for custom portals or integration with existing enterprise tools. The core of the application revolves around a document abstraction that supports multiversioning, granular permissions, and declarative workflows. From a developer’s perspective, the system is designed to be extensible: plugins can hook into Django signals or extend the REST API, while a comprehensive settings schema allows fine‑grained control over everything from storage backends to authentication providers.
Technical Stack
| Layer | Technology |
|---|---|
| Web Framework | Django 5.x (Python 3.11+) |
| Database | PostgreSQL (primary), optional SQLite for lightweight dev setups |
| Search | ElasticSearch or PostgreSQL full‑text search |
| Storage | Django’s default storage backends; S3, Azure Blob, or local filesystem |
| API | Django REST Framework (DRF) with token‑based auth; optional OAuth2 support |
| Background Tasks | Celery (Redis or RabbitMQ broker) for OCR, indexing, and workflow actions |
| Frontend | Vanilla JS with Django templates; optional React/Angular SPA via REST |
The application ships with a Docker Compose stack that includes PostgreSQL, Redis, and an optional ElasticSearch container, enabling rapid provisioning of a production‑ready environment.
Core Capabilities
- Document Versioning – Every upload creates a new Version object; each can have independent ACLs, and the API exposes endpoints to retrieve or revert to any version.
- Fine‑Grained Permissions – Permissions are defined per atomic operation (e.g.,
document.view,document.edit) and can be assigned to users, groups, or roles. The permissions system is fully integrated with Django’s auth framework. - Workflows – Declarative workflow definitions (states, transitions, actions) are stored in the database and can be managed via the API. Custom actions (e.g., sending a Slack notification) can be implemented as Django signals or Celery tasks.
- Linking & Referencing – Smart links automatically create bidirectional relationships between documents based on configurable rules; the API exposes relationship endpoints for traversal.
- REST API – CRUD operations, search, bulk import/export, and workflow triggers are all available through a versioned REST API. Swagger/OpenAPI documentation is auto‑generated.
- Extensibility – A plugin system allows developers to add new document types, custom metadata fields, or integrate external services. The plugin API follows Django’s app‑registry pattern and can be discovered at runtime.
Deployment & Infrastructure
Mayan EDMS is designed for self‑hosting with minimal external dependencies beyond PostgreSQL, a Redis broker, and optional ElasticSearch. Docker images are available on Docker Hub; the included docker‑compose.yml sets up a fully functional stack. For high‑availability, deploy the Django app behind a WSGI server (Gunicorn) with Nginx as a reverse proxy, and use PostgreSQL replication or a managed service. The Celery worker can be scaled horizontally to handle heavy OCR or indexing workloads.
The system supports horizontal scaling of the web tier and can ingest millions of documents; the document store is sharded by default when using S3 or other object stores. Continuous indexing and search are handled asynchronously, ensuring that large collections do not block API responses.
Integration & Extensibility
- Webhooks – Trigger external services on events such as document upload, workflow transition, or permission change.
- OAuth2 & SAML – Optional integration with external identity providers for single sign‑on.
- Custom Metadata & Forms – Define new metadata schemas via the admin UI or API; forms can be rendered in custom frontends.
- SDKs – While no official SDK exists, the comprehensive OpenAPI spec allows generation of client libraries in any language.
Developers can also write Django management commands or custom Celery tasks to automate document ingestion from legacy systems, perform bulk transformations, or sync with external repositories.
Developer Experience
The project hosts extensive documentation covering architecture, API usage, and deployment. The community is active on GitHub (35 k commits per year) and the project has over 100 contributors, ensuring rapid issue resolution. The codebase follows Django best practices and is heavily typed with type hints, facilitating static analysis tools. Continuous integration pipelines run tests across multiple Python versions and database backends.
Configuration is driven by Django’s settings.py, but the application also exposes a web‑based settings panel that allows runtime changes without code modifications. Logging and metrics are integrated with standard Python logging and can be forwarded to Prometheus or Grafana.
Use Cases
| Scenario | Why Mayan EDMS? |
|---|---|
| Government Records Management | Compliance with strict audit trails, versioning, and fine‑grained access controls. |
| Legal Document Repository | Secure document workflows (e.g., review, approval) and automated version rollback. |
| Enterprise Knowledge Base | Centralized storage with full‑text search and dynamic linking between documents. |
| Non‑profit Grant Management | Custom metadata for grant applications, automated approval workflows, and bulk export. |
| Integration with Existing ERP | REST API can be consumed by an ERP to store invoices, contracts, and related documents. |
Advantages
- Open Source & Free – No licensing fees; the source code is available under a
Open SourceReady to get started?
Join the community and start self-hosting Mayan EDMS today
Related Apps in other
Immich
Self‑hosted photo and video manager
Syncthing
Peer‑to‑peer file sync, no central server
Strapi
Open-source headless CMS for modern developers
reveal.js
Create stunning web‑based presentations with HTML, CSS and JavaScript
Stirling-PDF
Local web PDF editor with split, merge, convert and more
MinIO
Fast, S3-compatible object storage for AI and analytics
Weekly Views
Repository Health
Information
Tags
Explore More Apps
Fusion
Lightweight RSS aggregator and reader
Watcharr
Self-hosted watch list for movies, shows and games
Wavelog
Self-hosted logbook for amateur radio enthusiasts

Taiga
Agile project management made simple and intuitive
Automatisch
Self‑hosted automation without coding
Starbase 80
Self-hosted other