[project] name = "paperless-ngx" version = "2.14.7" description = "A community-supported supercharged version of paperless: scan, index and archive all your physical documents" readme = "README.md" requires-python = ">=3.10" classifiers = [ "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", ] dependencies = [ "bleach~=6.2.0", "celery[redis]~=5.4.0", "channels~=4.2", "channels-redis~=4.2", "concurrent-log-handler~=0.9.25", "dateparser~=1.2", # WARNING: django does not use semver. # Only patch versions are guaranteed to not introduce breaking changes. "django~=5.1.6", "django-allauth[socialaccount,mfa]~=65.4.0", "django-auditlog~=3.0.0", "django-celery-results~=2.5.1", "django-compression-middleware~=0.5.0", "django-cors-headers~=4.7.0", "django-extensions~=3.2.3", "django-filter~=25.1", "django-guardian~=2.4.0", "django-multiselectfield~=0.1.13", "django-soft-delete~=1.0.18", "djangorestframework~=3.15", "djangorestframework-guardian~=0.3.0", "drf-spectacular~=0.28", "drf-spectacular-sidecar~=2025.2.1", "drf-writable-nested~=0.7.1", "filelock~=3.17.0", "flower~=2.0.1", "gotenberg-client~=0.9.0", "granian~=1.7.6", "httpx-oauth~=0.16", "imap-tools~=1.10.0", "inotifyrecursive~=0.3", "jinja2~=3.1.5", "langdetect~=1.0.9", "mysqlclient~=2.2.7", "nltk~=3.9.1", "ocrmypdf~=16.9.0", "pathvalidate~=3.2.3", "pdf2image~=1.17.0", "psycopg[c]==3.2.4", # Direct dependency for proper resolution of the pre-build wheels "psycopg-c==3.2.4", "python-dateutil~=2.9.0", "python-dotenv~=1.0.1", "python-gnupg~=0.5.4", "python-ipware~=3.0.0", "python-magic~=0.4.27", "pyzbar~=0.1.9", "rapidfuzz~=3.12.1", "redis[hiredis]~=5.2.1", "scikit-learn~=1.6.1", "setproctitle~=1.3.4", "tika-client~=0.9.0", "tqdm~=4.67.1", "watchdog~=6.0", "whitenoise~=6.9", "whoosh~=2.7", "zxing-cpp~=2.3.0", ] # TODO: Move certain things to groups and then utilize that further # This will allow testing to not install a webserver, mysql, etc [dependency-groups] dev = [ { "include-group" = "docs" }, { "include-group" = "testing" }, { "include-group" = "lint" }, ] testing = [ "factory-boy~=3.3.1", "pytest~=8.3.3", "pytest-cov~=6.0.0", "pytest-django~=4.10.0", "pytest-httpx", "pytest-env", "pytest-sugar", "pytest-xdist", "pytest-mock", "pytest-rerunfailures", "imagehash", "daphne", ] lint = [ "pre-commit~=4.1.0", "pre-commit-uv~=4.1.3", "ruff~=0.9.9", ] docs = [ "mkdocs-material~=9.6.4", "mkdocs-glightbox~=0.4.0", ] typing = [ "mypy", "django-filter-stubs", "types-python-dateutil", "djangorestframework-stubs[compatible-mypy]", "celery-types", "django-stubs[compatible-mypy]", "types-dateparser", "types-bleach", "types-redis", "types-tqdm", "types-Markdown", "types-Pygments", "types-colorama", "types-setuptools", ] [tool.uv] required-version = ">=0.5.14" package = false environments = [ "sys_platform == 'darwin'", "sys_platform == 'linux'", ] [tool.uv.sources] # Markers are chosen to select these almost exclusively when building the Docker image psycopg-c = [ { url = "https://github.com/paperless-ngx/builder/releases/download/psycopg-3.2.4/psycopg_c-3.2.4-cp312-cp312-linux_x86_64.whl", marker = "sys_platform == 'linux' and platform_machine == 'x86_64' and python_version == '3.12'" }, { url = "https://github.com/paperless-ngx/builder/releases/download/psycopg-3.2.4/psycopg_c-3.2.4-cp312-cp312-linux_aarch64.whl", marker = "sys_platform == 'linux' and platform_machine == 'aarch64' and python_version == '3.12'" }, ] zxing-cpp = [ { url = "https://github.com/paperless-ngx/builder/releases/download/zxing-2.3.0/zxing_cpp-2.3.0-cp312-cp312-linux_x86_64.whl", marker = "sys_platform == 'linux' and platform_machine == 'x86_64' and python_version == '3.12'" }, { url = "https://github.com/paperless-ngx/builder/releases/download/zxing-2.3.0/zxing_cpp-2.3.0-cp312-cp312-linux_aarch64.whl", marker = "sys_platform == 'linux' and platform_machine == 'aarch64' and python_version == '3.12'" }, ]