{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Home","text":"

Paperless-ngx is a community-supported open-source document management system that transforms your physical documents into a searchable online archive so you can keep, well, less paper.

Get started Demo

"},{"location":"#features","title":"Features","text":""},{"location":"#paperless-a-history","title":"Paperless, a history","text":"

Paperless-ngx is the official successor to the original Paperless & Paperless-ng projects and is designed to distribute the responsibility of advancing and supporting the project among a team of people. Consider joining us!

Further discussion of the transition between these projects can be found at ng#1599 and ng#1632.

"},{"location":"#screenshots","title":"Screenshots","text":"

Paperless-ngx aims to be as nice to use as it is useful. Check out some screenshots below.

The dashboard shows saved views which can be sorted. Documents can be uploaded with the button or dropped anywhere in the application.

The document list provides three different styles to browse your documents.

Use the 'slim' sidebar to focus on your docs and minimize the UI.

Of course, Paperless-ngx also supports dark mode:

Quickly find documents with extensive filtering mechanisms.

And perform bulk edit operations to set tags, correspondents, etc. as well as permissions.

Side-by-side editing of documents.

Support for custom fields.

A robust permissions system with support for 'global' and document / object permissions.

Searching provides auto complete and highlights the results.

Tag, correspondent, document type and storage path editing.

Mail rules support various filters and actions for incoming e-mails.

Workflows provide finer control over the document pipeline and trigger actions.

Mobile devices are supported.

"},{"location":"#support","title":"Support","text":"

Community support is available via GitHub Discussions and the Matrix chat room.

"},{"location":"#feature-requests","title":"Feature Requests","text":"

Feature requests can be submitted via GitHub Discussions where you can search for existing ideas, add your own and vote for the ones you care about.

"},{"location":"#bugs","title":"Bugs","text":"

For bugs please open an issue or start a discussion if you have questions.

"},{"location":"#contributing","title":"Contributing","text":"

People interested in continuing the work on paperless-ngx are encouraged to reach out on GitHub or the Matrix chat room. If you would like to contribute to the project on an ongoing basis there are multiple teams (frontend, ci/cd, etc) that could use your help so please reach out!

"},{"location":"#translation","title":"Translation","text":"

Paperless-ngx is available in many languages that are coordinated on Crowdin. If you want to help out by translating paperless-ngx into your language, please head over to the Paperless-ngx project at Crowdin, and thank you!

"},{"location":"#scanners-software","title":"Scanners & Software","text":"

Paperless-ngx is compatible with many different scanners and scanning tools. A user-maintained list of scanners and other software is available on the wiki.

  1. Office document and email consumption support is optional and provided by Apache Tika (see configuration)\u00a0\u21a9\u21a9

"},{"location":"administration/","title":"Administration","text":""},{"location":"administration/#administration","title":"Administration","text":""},{"location":"administration/#backup","title":"Making backups","text":"

Multiple options exist for making backups of your paperless instance, depending on how you installed paperless.

Before making a backup, it's probably best to make sure that paperless is not actively consuming documents at that time.

Options available to any installation of paperless:

Caution

You cannot import the export generated with one version of paperless in a different version of paperless. The export contains an exact image of the database, and migrations may change the database layout.

Options available to docker installations:

Options available to bare-metal and non-docker installations:

"},{"location":"administration/#migrating-restoring","title":"Restoring","text":"

If you've backed-up Paperless-ngx using the document exporter, restoring can simply be done with the document importer.

Of course, other backup strategies require restoring any volumes, folders and database copies you created in the steps above.

"},{"location":"administration/#updating","title":"Updating Paperless","text":""},{"location":"administration/#docker-updating","title":"Docker Route","text":"

If a new release of paperless-ngx is available, upgrading depends on how you installed paperless-ngx in the first place. The releases are available at the release page.

First of all, make sure no active processes (like consumption) are running, then make a backup.

After that, ensure that paperless is stopped:

$ cd /path/to/paperless\n$ docker compose down\n
  1. If you pull the image from the docker hub, all you need to do is:

    docker compose pull\ndocker compose up\n

    The Docker Compose files refer to the latest version, which is always the latest stable release.

  2. If you built the image yourself, do the following:

    git pull\ndocker compose build\ndocker compose up\n

Running docker compose up will also apply any new database migrations. If you see everything working, press CTRL+C once to gracefully stop paperless. Then you can start paperless-ngx with -d to have it run in the background.

Note

In version 0.9.14, the update process was changed. In 0.9.13 and earlier, the Docker Compose files specified exact versions and pull won't automatically update to newer versions. In order to enable updates as described above, either get the new docker-compose.yml file from here or edit the docker-compose.yml file, find the line that says

image: ghcr.io/paperless-ngx/paperless-ngx:0.9.x\n

and replace the version with latest:

image: ghcr.io/paperless-ngx/paperless-ngx:latest\n

Note

In version 1.7.1 and onwards, the Docker image can now be pinned to a release series. This is often combined with automatic updaters such as Watchtower to allow safer unattended upgrading to new bugfix releases only. It is still recommended to always review release notes before upgrading. To pin your install to a release series, edit the docker-compose.yml find the line that says

image: ghcr.io/paperless-ngx/paperless-ngx:latest\n

and replace the version with the series you want to track, for example:

image: ghcr.io/paperless-ngx/paperless-ngx:1.7\n
"},{"location":"administration/#bare-metal-updating","title":"Bare Metal Route","text":"

After grabbing the new release and unpacking the contents, do the following:

  1. Update dependencies. New paperless version may require additional dependencies. The dependencies required are listed in the section about bare metal installations.

  2. Update python requirements. Keep in mind to activate your virtual environment before that, if you use one.

    pip install -r requirements.txt\n

    Note

    At times, some dependencies will be removed from requirements.txt. Comparing the versions and removing no longer needed dependencies will keep your system or virtual environment clean and prevent possible conflicts.

  3. Migrate the database.

    cd src\npython3 manage.py migrate # (1)\n
    1. Including sudo -Hu <paperless_user> may be required

    This might not actually do anything. Not every new paperless version comes with new database migrations.

"},{"location":"administration/#database-upgrades","title":"Database Upgrades","text":"

Paperless-ngx is compatible with Django-supported versions of PostgreSQL and MariaDB and it is generally safe to update them to newer versions. However, you should always take a backup and follow the instructions from your database's documentation for how to upgrade between major versions.

Note

As of Paperless-ngx v2.18, the minimum supported version of PostgreSQL is 14.

For PostgreSQL, refer to Upgrading a PostgreSQL Cluster.

For MariaDB, refer to Upgrading MariaDB

You may also use the exporter and importer with the --data-only flag, after creating a new database with the updated version of PostgreSQL or MariaDB.

Warning

You should not change any settings, especially paths, when doing this or there is a risk of data loss

"},{"location":"administration/#management-commands","title":"Management utilities","text":"

Paperless comes with some management commands that perform various maintenance tasks on your paperless instance. You can invoke these commands in the following way:

With Docker Compose, while paperless is running:

$ cd /path/to/paperless\n$ docker compose exec webserver <command> <arguments>\n

With docker, while paperless is running:

$ docker exec -it <container-name> <command> <arguments>\n

Bare metal:

$ cd /path/to/paperless/src\n$ python3 manage.py <command> <arguments> # (1)\n
  1. Including sudo -Hu <paperless_user> may be required

All commands have built-in help, which can be accessed by executing them with the argument --help.

"},{"location":"administration/#exporter","title":"Document exporter","text":"

The document exporter exports all your data (including your settings and database contents) from paperless into a folder for backup or migration to another DMS.

If you use the document exporter within a cronjob to backup your data you might use the -T flag behind exec to suppress \"The input device is not a TTY\" errors. For example: docker compose exec -T webserver document_exporter ../export

document_exporter target [-c] [-d] [-f] [-na] [-nt] [-p] [-sm] [-z]\n\noptional arguments:\n-c,  --compare-checksums\n-cj, --compare-json\n-d,  --delete\n-f,  --use-filename-format\n-na, --no-archive\n-nt, --no-thumbnail\n-p,  --use-folder-prefix\n-sm, --split-manifest\n-z,  --zip\n-zn, --zip-name\n--data-only\n--no-progress-bar\n--passphrase\n

target is a folder to which the data gets written. This includes documents, thumbnails and a manifest.json file. The manifest contains all metadata from the database (correspondents, tags, etc).

When you use the provided docker compose script, specify ../export as the target. This path inside the container is automatically mounted on your host on the folder export.

If the target directory already exists and contains files, paperless will assume that the contents of the export directory are a previous export and will attempt to update the previous export. Paperless will only export changed and added files. Paperless determines whether a file has changed by inspecting the file attributes \"date/time modified\" and \"size\". If that does not work out for you, specify -c or --compare-checksums and paperless will attempt to compare file checksums instead. This is slower. The manifest and metadata json files are always updated, unless cj or --compare-json is specified.

Paperless will not remove any existing files in the export directory. If you want paperless to also remove files that do not belong to the current export such as files from deleted documents, specify -d or --delete. Be careful when pointing paperless to a directory that already contains other files.

The filenames generated by this command follow the format [date created] [correspondent] [title].[extension]. If you want paperless to use PAPERLESS_FILENAME_FORMAT for exported filenames instead, specify -f or --use-filename-format.

If -na or --no-archive is provided, no archive files will be exported, only the original files.

If -nt or --no-thumbnail is provided, thumbnail files will not be exported.

Note

When using the -na/--no-archive or -nt/--no-thumbnail options the exporter will not output these files for backup. After importing, the sanity checker will warn about missing thumbnails and archive files until they are regenerated with document_thumbnails or document_archiver. It can make sense to omit these files from backup as their content and checksum can change (new archiver algorithm) and may then cause additional used space in a deduplicated backup.

If -p or --use-folder-prefix is provided, files will be exported in dedicated folders according to their nature: archive, originals, thumbnails or json

If -sm or --split-manifest is provided, information about document will be placed in individual json files, instead of a single JSON file. The main manifest.json will still contain application wide information (e.g. tags, correspondent, document type, etc)

If -z or --zip is provided, the export will be a zip file in the target directory, named according to the current local date or the value set in -zn or --zip-name.

If --data-only is provided, only the database will be exported. This option is intended to facilitate database upgrades without needing to clean documents and thumbnails from the media directory.

If --no-progress-bar is provided, the progress bar will be hidden, rendering the exporter quiet. This option is useful for scripting scenarios, such as when using the exporter with crontab.

If --passphrase is provided, it will be used to encrypt certain fields in the export. This value must be provided to import. If this value is lost, the export cannot be imported.

Warning

If exporting with the file name format, there may be errors due to your operating system's maximum path lengths. Try adjusting the export target or consider not using the filename format.

"},{"location":"administration/#importer","title":"Document importer","text":"

The document importer takes the export produced by the Document exporter and imports it into paperless.

The importer works just like the exporter. You point it at a directory or the generated .zip file, and the script does the rest of the work:

document_importer source\n
Option Required Default Description source Yes N/A The directory containing an export --no-progress-bar No False If provided, the progress bar will be hidden --data-only No False If provided, only import data, do not import document files or thumbnails --passphrase No N/A If your export was encrypted with a passphrase, must be provided

When you use the provided docker compose script, put the export inside the export folder in your paperless source directory. Specify ../export as the source.

Note

Importing from a previous version of Paperless may work, but for best results it is suggested to match the versions.

Warning

The importer should be run against a completely empty installation (database and directories) of Paperless-ngx. If using a data only import, only the database must be empty.

"},{"location":"administration/#retagger","title":"Document retagger","text":"

Say you've imported a few hundred documents and now want to introduce a tag or set up a new correspondent, and apply its matching to all of the currently-imported docs. This problem is common enough that there are tools for it.

document_retagger [-h] [-c] [-T] [-t] [-i] [--id-range] [--use-first] [-f]\n\noptional arguments:\n-c, --correspondent\n-T, --tags\n-t, --document_type\n-s, --storage_path\n-i, --inbox-only\n--id-range\n--use-first\n-f, --overwrite\n

Run this after changing or adding matching rules. It'll loop over all of the documents in your database and attempt to match documents according to the new rules.

Specify any combination of -c, -T, -t and -s to have the retagger perform matching of the specified metadata type. If you don't specify any of these options, the document retagger won't do anything.

Specify -i to have the document retagger work on documents tagged with inbox tags only. This is useful when you don't want to mess with your already processed documents.

Specify --id-range 1 100 to have the document retagger work only on a specific range of document id\u00b4s. This can be useful if you have a lot of documents and want to test the matching rules only on a subset of documents.

When multiple document types or correspondents match a single document, the retagger won't assign these to the document. Specify --use-first to override this behavior and just use the first correspondent or type it finds. This option does not apply to tags, since any amount of tags can be applied to a document.

Finally, -f specifies that you wish to overwrite already assigned correspondents, types and/or tags. The default behavior is to not assign correspondents and types to documents that have this data already assigned. -f works differently for tags: By default, only additional tags get added to documents, no tags will be removed. With -f, tags that don't match a document anymore get removed as well.

"},{"location":"administration/#managing-the-automatic-matching-algorithm","title":"Managing the Automatic matching algorithm","text":"

The Auto matching algorithm requires a trained neural network to work. This network needs to be updated whenever something in your data changes. The docker image takes care of that automatically with the task scheduler. You can manually renew the classifier by invoking the following management command:

document_create_classifier\n

This command takes no arguments.

"},{"location":"administration/#thumbnails","title":"Document thumbnails","text":"

Use this command to re-create document thumbnails. Optionally include the --document {id} option to generate thumbnails for a specific document only.

You may also specify --processes to control the number of processes used to generate new thumbnails. The default is to utilize a quarter of the available processors.

document_thumbnails\n
"},{"location":"administration/#index","title":"Managing the document search index","text":"

The document search index is responsible for delivering search results for the website. The document index is automatically updated whenever documents get added to, changed, or removed from paperless. However, if the search yields non-existing documents or won't find anything, you may need to recreate the index manually.

document_index {reindex,optimize}\n

Specify reindex to have the index created from scratch. This may take some time.

Specify optimize to optimize the index. This updates certain aspects of the index and usually makes queries faster and also ensures that the autocompletion works properly. This command is regularly invoked by the task scheduler.

"},{"location":"administration/#clearing-the-database-read-cache","title":"Clearing the database read cache","text":"

If the database read cache is enabled, you must run this command after making any changes to the database outside the application context. This includes operations such as restoring a database backup or executing SQL statements like UPDATE, INSERT, DELETE, ALTER, CREATE, or DROP.

Failing to invalidate the cache after such modifications can lead to stale data being served from the cache, and may cause data corruption or inconsistent behavior in the application.

Use the following management command to clear the cache:

python3 manage.py invalidate_cachalot\n

Info

The database read cache is based on Django-Cachalot. You can refer to their documentation.

"},{"location":"administration/#renamer","title":"Managing filenames","text":"

If you use paperless' feature to assign custom filenames to your documents, you can use this command to move all your files after changing the naming scheme.

Warning

Since this command moves your documents, it is advised to do a backup beforehand. The renaming logic is robust and will never overwrite or delete a file, but you can't ever be careful enough.

document_renamer\n

The command takes no arguments and processes all your documents at once.

Learn how to use Management Utilities.

"},{"location":"administration/#sanity-checker","title":"Sanity checker","text":"

Paperless has a built-in sanity checker that inspects your document collection for issues.

The issues detected by the sanity checker are as follows:

document_sanity_checker\n

The command takes no arguments. Depending on the size of your document archive, this may take some time.

"},{"location":"administration/#fetching-e-mail","title":"Fetching e-mail","text":"

Paperless automatically fetches your e-mail every 10 minutes by default. If you want to invoke the email consumer manually, call the following management command:

mail_fetcher\n

The command takes no arguments and processes all your mail accounts and rules.

Tip

To use OAuth access tokens for mail fetching, select the box to indicate the password is actually a token when creating or editing a mail account. The details for creating a token depend on your email provider.

"},{"location":"administration/#archiver","title":"Creating archived documents","text":"

Paperless stores archived PDF/A documents alongside your original documents. These archived documents will also contain selectable text for image-only originals. These documents are derived from the originals, which are always stored unmodified. If coming from an earlier version of paperless, your documents won't have archived versions.

This command creates PDF/A documents for your documents.

document_archiver --overwrite --document <id>\n

This command will only attempt to create archived documents when no archived document exists yet, unless --overwrite is specified. If --document <id> is specified, the archiver will only process that document.

Note

This command essentially performs OCR on all your documents again, according to your settings. If you run this with PAPERLESS_OCR_MODE=redo, it will potentially run for a very long time. You can cancel the command at any time, since this command will skip already archived versions the next time it is run.

Note

Some documents will cause errors and cannot be converted into PDF/A documents, such as encrypted PDF documents. The archiver will skip over these documents each time it sees them.

"},{"location":"administration/#encryption","title":"Managing encryption","text":"

Warning

Encryption was removed in paperless-ng 0.9 because it did not really provide any additional security, the passphrase was stored in a configuration file on the same system as the documents. Furthermore, the entire text content of the documents is stored plain in the database, even if your documents are encrypted. Filenames are not encrypted as well. Finally, the web server provides transparent access to your encrypted documents.

Consider running paperless on an encrypted filesystem instead, which will then at least provide security against physical hardware theft.

"},{"location":"administration/#enabling-encryption","title":"Enabling encryption","text":"

Enabling encryption is no longer supported.

"},{"location":"administration/#disabling-encryption","title":"Disabling encryption","text":"

Basic usage to disable encryption of your document store:

(Note: If PAPERLESS_PASSPHRASE isn't set already, you need to specify it here)

decrypt_documents [--passphrase SECR3TP4SSPHRA$E]\n
"},{"location":"administration/#fuzzy_duplicate","title":"Detecting duplicates","text":"

Paperless already catches and prevents upload of exactly matching documents, however a new scan of an existing document may not produce an exact bit for bit duplicate. But the content should be exact or close, allowing detection.

This tool does a fuzzy match over document content, looking for those which look close according to a given ratio.

At this time, other metadata (such as correspondent or type) is not taken into account by the detection.

document_fuzzy_match [--ratio] [--processes N]\n
Option Required Default Description --ratio No 85.0 a number between 0 and 100, setting how similar a document must be for it to be reported. Higher numbers mean more similarity. --processes No 1/4 of system cores Number of processes to use for matching. Setting 1 disables multiple processes --delete No False If provided, one document of a matched pair above the ratio will be deleted.

Warning

If providing the --delete option, it is highly recommended to have a backup. While every effort has been taken to ensure proper operation, there is always the chance of deletion of a file you want to keep.

"},{"location":"administration/#prune-history","title":"Prune history (audit log) entries","text":"

If the audit log is enabled Paperless-ngx keeps an audit log of all changes made to documents. Functionality to automatically remove entries for deleted documents was added but entries created prior to this are not removed. This command allows you to prune the audit log of entries that are no longer needed.

prune_audit_logs\n
"},{"location":"administration/#create-superuser","title":"Create superuser","text":"

If you need to create a superuser, use the following command:

createsuperuser\n
"},{"location":"advanced_usage/","title":"Advanced Topics","text":""},{"location":"advanced_usage/#advanced-topics","title":"Advanced Topics","text":"

Paperless offers a couple of features that automate certain tasks and make your life easier.

"},{"location":"advanced_usage/#matching","title":"Matching tags, correspondents, document types, and storage paths","text":"

Paperless will compare the matching algorithms defined by every tag, correspondent, document type, and storage path in your database to see if they apply to the text in a document. In other words, if you define a tag called Home Utility that had a match property of bc hydro and a matching_algorithm of Exact, Paperless will automatically tag your newly-consumed document with your Home Utility tag so long as the text bc hydro appears in the body of the document somewhere.

The matching logic is quite powerful. It supports searching the text of your document with different algorithms, and as such, some experimentation may be necessary to get things right.

In order to have a tag, correspondent, document type, or storage path assigned automatically to newly consumed documents, assign a match and matching algorithm using the web interface. These settings define when to assign tags, correspondents, document types, and storage paths to documents.

The following algorithms are available:

When using the any or all matching algorithms, you can search for terms that consist of multiple words by enclosing them in double quotes. For example, defining a match text of \"Bank of America\" BofA using the any algorithm, will match documents that contain either \"Bank of America\" or \"BofA\", but will not match documents containing \"Bank of South America\".

Then just save your tag, correspondent, document type, or storage path and run another document through the consumer. Once complete, you should see the newly-created document, automatically tagged with the appropriate data.

"},{"location":"advanced_usage/#automatic-matching","title":"Automatic matching","text":"

Paperless-ngx comes with a new matching algorithm called Auto. This matching algorithm tries to assign tags, correspondents, document types, and storage paths to your documents based on how you have already assigned these on existing documents. It uses a neural network under the hood.

If, for example, all your bank statements of your account 123 at the Bank of America are tagged with the tag \"bofa123\" and the matching algorithm of this tag is set to Auto, this neural network will examine your documents and automatically learn when to assign this tag.

Paperless tries to hide much of the involved complexity with this approach. However, there are a couple caveats you need to keep in mind when using this feature:

"},{"location":"advanced_usage/#consume-hooks","title":"Hooking into the consumption process","text":"

Sometimes you may want to do something arbitrary whenever a document is consumed. Rather than try to predict what you may want to do, Paperless lets you execute scripts of your own choosing just before or after a document is consumed using a couple of simple hooks.

Just write a script, put it somewhere that Paperless can read & execute, and then put the path to that script in paperless.conf or docker-compose.env with the variable name of either PAPERLESS_PRE_CONSUME_SCRIPT or PAPERLESS_POST_CONSUME_SCRIPT.

Info

These scripts are executed in a blocking process, which means that if a script takes a long time to run, it can significantly slow down your document consumption flow. If you want things to run asynchronously, you'll have to fork the process in your script and exit.

"},{"location":"advanced_usage/#pre-consume-script","title":"Pre-consumption script","text":"

Executed after the consumer sees a new document in the consumption folder, but before any processing of the document is performed. This script can access the following relevant environment variables set:

Environment Variable Description DOCUMENT_SOURCE_PATH Original path of the consumed document DOCUMENT_WORKING_PATH Path to a copy of the original that consumption will work on TASK_ID UUID of the task used to process the new document (if any)

Note

Pre-consume scripts which modify the document should only change the DOCUMENT_WORKING_PATH file or a second consume task may be triggered, leading to failures as two tasks work on the same document path

Warning

If your script modifies DOCUMENT_WORKING_PATH in a non-deterministic way, this may allow duplicate documents to be stored

A simple but common example for this would be creating a simple script like this:

/usr/local/bin/ocr-pdf

#!/usr/bin/env bash\npdf2pdfocr.py -i ${DOCUMENT_WORKING_PATH}\n

/etc/paperless.conf

...\nPAPERLESS_PRE_CONSUME_SCRIPT=\"/usr/local/bin/ocr-pdf\"\n...\n

This will pass the path to the document about to be consumed to /usr/local/bin/ocr-pdf, which will in turn call pdf2pdfocr.py on your document, which will then overwrite the file with an OCR'd version of the file and exit. At which point, the consumption process will begin with the newly modified file.

The script's stdout and stderr will be logged line by line to the webserver log, along with the exit code of the script.

"},{"location":"advanced_usage/#post-consume-script","title":"Post-consumption script","text":"

Executed after the consumer has successfully processed a document and has moved it into paperless. It receives the following environment variables:

Environment Variable Description DOCUMENT_ID Database primary key of the document DOCUMENT_FILE_NAME Formatted filename, not including paths DOCUMENT_TYPE The document type (if any) DOCUMENT_CREATED Date & time when document created DOCUMENT_MODIFIED Date & time when document was last modified DOCUMENT_ADDED Date & time when document was added DOCUMENT_SOURCE_PATH Path to the original document file DOCUMENT_ARCHIVE_PATH Path to the generate archive file (if any) DOCUMENT_THUMBNAIL_PATH Path to the generated thumbnail DOCUMENT_DOWNLOAD_URL URL for document download DOCUMENT_THUMBNAIL_URL URL for the document thumbnail DOCUMENT_OWNER Username of the document owner (if any) DOCUMENT_CORRESPONDENT Assigned correspondent (if any) DOCUMENT_TAGS Comma separated list of tags applied (if any) DOCUMENT_ORIGINAL_FILENAME Filename of original document TASK_ID Task UUID used to import the document (if any)

The script can be in any language, A simple shell script example:

post-consumption-example
#!/usr/bin/env bash\n\necho \"\n\nA document with an id of ${DOCUMENT_ID} was just consumed.  I know the\nfollowing additional information about it:\n\n* Generated File Name: ${DOCUMENT_FILE_NAME}\n* Document type: ${DOCUMENT_TYPE}\n* Archive Path: ${DOCUMENT_ARCHIVE_PATH}\n* Source Path: ${DOCUMENT_SOURCE_PATH}\n* Created: ${DOCUMENT_CREATED}\n* Added: ${DOCUMENT_ADDED}\n* Modified: ${DOCUMENT_MODIFIED}\n* Thumbnail Path: ${DOCUMENT_THUMBNAIL_PATH}\n* Download URL: ${DOCUMENT_DOWNLOAD_URL}\n* Thumbnail URL: ${DOCUMENT_THUMBNAIL_URL}\n* Owner Name: ${DOCUMENT_OWNER}\n* Correspondent: ${DOCUMENT_CORRESPONDENT}\n* Tags: ${DOCUMENT_TAGS}\n\nIt was consumed with the passphrase ${PASSPHRASE}\n\n\"\n

Note

The post consumption script cannot cancel the consumption process.

Warning

The post consumption script should not modify the document files directly.

The script's stdout and stderr will be logged line by line to the webserver log, along with the exit code of the script.

"},{"location":"advanced_usage/#docker-consume-hooks","title":"Docker","text":"

To hook into the consumption process when using Docker, you will need to pass the scripts into the container via a host mount in your docker-compose.yml.

Assuming you have /home/paperless-ngx/scripts/post-consumption-example.sh as a script which you'd like to run.

You can pass that script into the consumer container via a host mount:

...\nwebserver:\n  ...\n  volumes:\n    ...\n    - /home/paperless-ngx/scripts:/path/in/container/scripts/ # (1)!\n  environment: # (3)!\n    ...\n    PAPERLESS_POST_CONSUME_SCRIPT: /path/in/container/scripts/post-consumption-example.sh # (2)!\n...\n
  1. The external scripts directory is mounted to a location inside the container.
  2. The internal location of the script is used to set the script to run
  3. This can also be set in docker-compose.env

Troubleshooting:

"},{"location":"advanced_usage/#file-name-handling","title":"File name handling","text":"

By default, paperless stores your documents in the media directory and renames them using the identifier which it has assigned to each document. You will end up getting files like 0000123.pdf in your media directory. This isn't necessarily a bad thing, because you normally don't have to access these files manually. However, if you wish to name your files differently, you can do that by adjusting the PAPERLESS_FILENAME_FORMAT configuration option or using storage paths (see below). Paperless adds the correct file extension e.g. .pdf, .jpg automatically.

This variable allows you to configure the filename (folders are allowed) using placeholders. For example, configuring this to

PAPERLESS_FILENAME_FORMAT={{ created_year }}/{{ correspondent }}/{{ title }}\n

will create a directory structure as follows:

2019/\n  My bank/\n    Statement January.pdf\n    Statement February.pdf\n2020/\n  My bank/\n    Statement January.pdf\n    Letter.pdf\n    Letter_01.pdf\n  Shoe store/\n    My new shoes.pdf\n

Warning

Do not manually move your files in the media folder. Paperless remembers the last filename a document was stored as. If you do rename a file, paperless will report your files as missing and won't be able to find them.

Tip

Paperless checks the filename of a document whenever it is saved. Changing (or deleting) a storage path will automatically be reflected in the file system. However, when changing PAPERLESS_FILENAME_FORMAT you will need to manually run the document renamer to move any existing documents.

"},{"location":"advanced_usage/#filename-format-variables","title":"Placeholders","text":"

Paperless provides the following variables for use within filenames:

Warning

When using file name placeholders, in particular when using {tag_list}, you may run into the limits of your operating system's maximum path lengths. In that case, files will retain the previous path instead and the issue logged.

Tip

These variables are all simple strings, but the format can be a full template. See Filename Templates for even more advanced formatting.

Paperless will try to conserve the information from your database as much as possible. However, some characters that you can use in document titles and correspondent names (such as : \\ / and a couple more) are not allowed in filenames and will be replaced with dashes.

If paperless detects that two documents share the same filename, paperless will automatically append _01, _02, etc to the filename. This happens if all the placeholders in a filename evaluate to the same value.

If there are any errors in the placeholders included in PAPERLESS_FILENAME_FORMAT, paperless will fall back to using the default naming scheme instead.

Caution

As of now, you could potentially tell paperless to store your files anywhere outside the media directory by setting

PAPERLESS_FILENAME_FORMAT=../../my/custom/location/{title}\n

However, keep in mind that inside docker, if files get stored outside of the predefined volumes, they will be lost after a restart.

"},{"location":"advanced_usage/#empty-placeholders","title":"Empty placeholders","text":"

You can affect how empty placeholders are treated by changing the PAPERLESS_FILENAME_FORMAT_REMOVE_NONE setting.

Enabling this results in all empty placeholders resolving to \"\" instead of \"none\" as stated above. Spaces before empty placeholders are removed as well, empty directories are omitted.

"},{"location":"advanced_usage/#storage-paths","title":"Storage paths","text":"

When a single storage layout is not sufficient for your use case, storage paths allow for more complex structure to set precisely where each document is stored in the file system.

For example, you could define the following two storage paths:

  1. Normal communications are put into a folder structure sorted by year/correspondent
  2. Communications with insurance companies are stored in a flat structure with longer file names, but containing the full date of the correspondence.
By Year = {{ created_year }}/{{ correspondent }}/{{ title }}\nInsurances = Insurances/{{ correspondent }}/{{ created_year }}-{{ created_month }}-{{ created_day }} {{ title }}\n

If you then map these storage paths to the documents, you might get the following result. For simplicity, By Year defines the same structure as in the previous example above.

2019/                                   # By Year\n   My bank/\n     Statement January.pdf\n     Statement February.pdf\n\nInsurances/                             # Insurances\n   Healthcare 123/\n     2022-01-01 Statement January.pdf\n     2022-02-02 Letter.pdf\n     2022-02-03 Letter.pdf\n   Dental 456/\n     2021-12-01 New Conditions.pdf\n

Tip

Defining a storage path is optional. If no storage path is defined for a document, the global PAPERLESS_FILENAME_FORMAT is applied.

"},{"location":"advanced_usage/#filename-templates","title":"Filename Templates","text":"

The filename formatting uses Jinja templates to build the filename. This allows for complex logic to be included in the format, including logical structures and filters to manipulate the variables provided. The template is provided as a string, potentially multiline, and rendered into a single line.

In addition, the entire Document instance is available to be utilized in a more advanced way, as well as some variables which only make sense to be accessed with more complex logic.

"},{"location":"advanced_usage/#custom-jinja2-filters","title":"Custom Jinja2 Filters","text":""},{"location":"advanced_usage/#custom-field-access","title":"Custom Field Access","text":"

The get_cf_value filter retrieves a value from custom field data with optional default fallback.

"},{"location":"advanced_usage/#syntax","title":"Syntax","text":"
{{ custom_fields | get_cf_value('field_name') }}\n{{ custom_fields | get_cf_value('field_name', 'default_value') }}\n
"},{"location":"advanced_usage/#parameters","title":"Parameters","text":""},{"location":"advanced_usage/#returns","title":"Returns","text":""},{"location":"advanced_usage/#examples","title":"Examples","text":"
<!-- Basic usage -->\n{{ custom_fields | get_cf_value('department') }}\n\n<!-- With default value -->\n{{ custom_fields | get_cf_value('phone', 'Not provided') }}\n
"},{"location":"advanced_usage/#datetime-formatting","title":"Datetime Formatting","text":"

The datetime filter formats a datetime string or datetime object using Python's strftime formatting.

"},{"location":"advanced_usage/#syntax_1","title":"Syntax","text":"
{{ datetime_value | datetime('%Y-%m-%d %H:%M:%S') }}\n
"},{"location":"advanced_usage/#parameters_1","title":"Parameters","text":""},{"location":"advanced_usage/#returns_1","title":"Returns","text":""},{"location":"advanced_usage/#examples_1","title":"Examples","text":"
<!-- Format datetime object -->\n{{ created | datetime('%B %d, %Y at %I:%M %p') }}\n<!-- Output: \"January 15, 2024 at 02:30 PM\" -->\n\n<!-- Custom formatting -->\n{{ custom_fields | get_cf_value('Date Field') | datetime('%A, %B %d, %Y') }}\n<!-- Output: \"Monday, January 15, 2024\" -->\n

See the strftime format code documentation for the possible codes and their meanings.

"},{"location":"advanced_usage/#date-localization","title":"Date Localization","text":"

The localize_date filter formats a date or datetime object into a localized string using Babel internationalization. This takes into account the provided locale for translation. Since this must be used on a date or datetime object, you must access the field directly, i.e. document.created. An ISO string can also be provided to control the output format.

"},{"location":"advanced_usage/#syntax_2","title":"Syntax","text":"
{{ date_value | localize_date('medium', 'en_US') }}\n{{ datetime_value | localize_date('short', 'fr_FR') }}\n
"},{"location":"advanced_usage/#parameters_2","title":"Parameters","text":""},{"location":"advanced_usage/#returns_2","title":"Returns","text":""},{"location":"advanced_usage/#examples_2","title":"Examples","text":"
<!-- Preset formats -->\n{{ document.created | localize_date('short', 'en_US') }}\n<!-- Output: \"1/15/24\" -->\n\n{{ document.created | localize_date('medium', 'en_US') }}\n<!-- Output: \"Jan 15, 2024\" -->\n\n{{ document.created | localize_date('long', 'en_US') }}\n<!-- Output: \"January 15, 2024\" -->\n\n{{ document.created | localize_date('full', 'en_US') }}\n<!-- Output: \"Monday, January 15, 2024\" -->\n\n<!-- Different locales -->\n{{ document.created | localize_date('medium', 'fr_FR') }}\n<!-- Output: \"15 janv. 2024\" -->\n\n{{ document.created | localize_date('medium', 'de_DE') }}\n<!-- Output: \"15.01.2024\" -->\n\n<!-- Custom patterns -->\n{{ document.created | localize_date('dd/MM/yyyy', 'en_GB') }}\n<!-- Output: \"15/01/2024\" -->\n

See the supported format codes for more options.

"},{"location":"advanced_usage/#format-presets","title":"Format Presets","text":""},{"location":"advanced_usage/#additional-variables","title":"Additional Variables","text":"

Tip

To access a custom field which has a space in the name, use the get_cf_value filter. See the examples below. This helps get fields by name and handle a default value if the named field is not attached to a Document.

"},{"location":"advanced_usage/#examples_3","title":"Examples","text":"

This example will construct a path based on the archive serial number range:

somepath/\n{% if document.archive_serial_number >= 0 and document.archive_serial_number <= 200 %}\n  asn-000-200/{{title}}\n{% elif document.archive_serial_number >= 201 and document.archive_serial_number <= 400 %}\n  asn-201-400\n  {% if document.archive_serial_number >= 201 and document.archive_serial_number < 300 %}\n    /asn-2xx\n  {% elif document.archive_serial_number >= 300 and document.archive_serial_number < 400 %}\n    /asn-3xx\n  {% endif %}\n{% endif %}\n/{{ title }}\n

For a document with an ASN of 205, it would result in somepath/asn-201-400/asn-2xx/Title.pdf, but a document with an ASN of 355 would be placed in somepath/asn-201-400/asn-3xx/Title.pdf.

{% if document.mime_type == \"application/pdf\" %}\n  pdfs\n{% elif document.mime_type == \"image/png\" %}\n  pngs\n{% else %}\n  others\n{% endif %}\n/{{ title }}\n

For a PDF document, it would result in pdfs/Title.pdf, but for a PNG document, the path would be pngs/Title.png.

To use custom fields:

{% if \"Invoice\" in custom_fields %}\n  invoices/{{ custom_fields.Invoice.value }}\n{% else %}\n  not-invoices/{{ title }}\n{% endif %}\n

If the document has a custom field named \"Invoice\" with a value of 123, it would be filed into the invoices/123.pdf, but a document without the custom field would be filed to not-invoices/Title.pdf

If the custom field is named \"Invoice Number\", you would access the value of it via the get_cf_value filter due to quirks of the Django Template Language:

\"invoices/{{ custom_fields|get_cf_value('Invoice Number') }}\"\n

You can also use a custom datetime filter to format dates:

invoices/\n{{ custom_fields|get_cf_value(\"Date Field\",\"2024-01-01\")|datetime('%Y') }}/\n{{ custom_fields|get_cf_value(\"Date Field\",\"2024-01-01\")|datetime('%m') }}/\n{{ custom_fields|get_cf_value(\"Date Field\",\"2024-01-01\")|datetime('%d') }}/\nInvoice_{{ custom_fields|get_cf_value(\"Select Field\") }}_{{ custom_fields|get_cf_value(\"Date Field\",\"2024-01-01\")|replace(\"-\", \"\") }}.pdf\n

This will create a path like invoices/2022/01/01/Invoice_OptionTwo_20220101.pdf if the custom field \"Date Field\" is set to January 1, 2022 and \"Select Field\" is set to OptionTwo.

You can also use a custom slugify filter to slufigy text:

{{ title | slugify }}\n
"},{"location":"advanced_usage/#pdf-recovery","title":"Automatic recovery of invalid PDFs","text":"

Paperless will attempt to \"clean\" certain invalid PDFs with qpdf before processing if, for example, the mime_type detection is incorrect. This can happen if the PDF is not properly formatted or contains errors.

"},{"location":"advanced_usage/#celery-monitoring","title":"Celery Monitoring","text":"

The monitoring tool Flower can be used to view more detailed information about the health of the celery workers used for asynchronous tasks. This includes details on currently running, queued and completed tasks, timing and more. Flower can also be used with Prometheus, as it exports metrics. For details on its capabilities, refer to the Flower documentation.

Flower can be enabled with the setting PAPERLESS_ENABLE_FLOWER. To configure Flower further, create a flowerconfig.py and place it into the src/paperless directory. For a Docker installation, you can use volumes to accomplish this:

services:\n    # ...\n    webserver:\n        environment:\n            - PAPERLESS_ENABLE_FLOWER\n        ports:\n            - 5555:5555 # (2)!\n        # ...\n        volumes:\n            - /path/to/my/flowerconfig.py:/usr/src/paperless/src/paperless/flowerconfig.py:ro # (1)!\n
  1. Note the :ro tag means the file will be mounted as read only.
  2. By default, Flower runs on port 5555, but this can be configured.
"},{"location":"advanced_usage/#custom-container-initialization","title":"Custom Container Initialization","text":"

The Docker image includes the ability to run custom user scripts during startup. This could be utilized for installing additional tools or Python packages, for example. Scripts are expected to be shell scripts.

To utilize this, mount a folder containing your scripts to the custom initialization directory, /custom-cont-init.d and place scripts you wish to run inside. For security, the folder must be owned by root and should have permissions of a=rx. Additionally, scripts must only be writable by root.

Your scripts will be run directly before the webserver completes startup. Scripts will be run by the root user. If you would like to switch users, the utility gosu is available and preferred over sudo.

This is an advanced functionality with which you could break functionality or lose data. If you experience issues, please disable any custom scripts and try again before reporting an issue.

For example, using Docker Compose:

services:\n    # ...\n    webserver:\n        # ...\n        volumes:\n            - /path/to/my/scripts:/custom-cont-init.d:ro # (1)!\n
  1. Note the :ro tag means the folder will be mounted as read only. This is for extra security against changes
"},{"location":"advanced_usage/#mysql-caveats","title":"MySQL Caveats","text":""},{"location":"advanced_usage/#case-sensitivity","title":"Case Sensitivity","text":"

The database interface does not provide a method to configure a MySQL database to be case-sensitive. A case-insensitive database prevents a user from creating a tag Name and NAME as they are considered the same.

However, there is a downside to turning on case sensitivity, as it also makes searches case-sensitive, so for example a document with the title Invoice won't be found when searching for invoice.

Per Django documentation, making a database case-sensitive requires manual intervention. To enable case sensitive tables, you can execute the following command against each table:

ALTER TABLE <table_name> CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

You can also set the default for new tables (this does NOT affect existing tables) with:

ALTER DATABASE <db_name> CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

Warning

Using mariadb version 10.4+ is recommended. Using the utf8mb3 character set on an older system may fix issues that can arise while setting up Paperless-ngx but utf8mb3 can cause issues with consumption (where utf8mb4 does not).

For more information on this topic, you can refer to this Django issue.

"},{"location":"advanced_usage/#missing-timezones","title":"Missing timezones","text":"

MySQL as well as MariaDB do not have any timezone information by default (though some docker images such as the official MariaDB image take care of this for you) which will cause unexpected behavior with date-based queries.

To fix this, execute one of the following commands:

MySQL: mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql -p

MariaDB: mariadb-tzinfo-to-sql /usr/share/zoneinfo | mariadb -u root mysql -p

"},{"location":"advanced_usage/#barcodes","title":"Barcodes","text":"

Paperless is able to utilize barcodes for automatically performing some tasks.

At this time, the library utilized for detection of barcodes supports the following types:

You may check for updates on the zbar library homepage. For usage in Paperless, the type of barcode does not matter, only the contents of it.

For how to enable barcode usage, see the configuration. The two settings may be enabled independently, but do have interactions as explained below.

"},{"location":"advanced_usage/#document-splitting","title":"Document Splitting","text":"

When enabled, Paperless will look for a barcode with the configured value and create a new document starting from the next page. The page with the barcode on it will not be retained. It is expected to be a page existing only for triggering the split.

"},{"location":"advanced_usage/#archive-serial-number-assignment","title":"Archive Serial Number Assignment","text":"

When enabled, the value of the barcode (as an integer) will be used to set the document's archive serial number, allowing quick reference back to the original, paper document.

If document splitting via barcode is also enabled, documents will be split when an ASN barcode is located. However, differing from the splitting, the page with the barcode will be retained. This allows application of a barcode to any page, including one which holds data to keep in the document.

"},{"location":"advanced_usage/#tag-assignment","title":"Tag Assignment","text":"

When enabled, Paperless will parse barcodes and attempt to interpret and assign tags.

See the relevant settings PAPERLESS_CONSUMER_ENABLE_TAG_BARCODE and PAPERLESS_CONSUMER_TAG_BARCODE_MAPPING for more information.

"},{"location":"advanced_usage/#collate","title":"Automatic collation of double-sided documents","text":"

Note

If your scanner supports double-sided scanning natively, you do not need this feature.

This feature is turned off by default, see configuration on how to turn it on.

"},{"location":"advanced_usage/#summary","title":"Summary","text":"

If you have a scanner with an automatic document feeder (ADF) that only scans a single side, this feature makes scanning double-sided documents much more convenient by automatically collating two separate scans into one document, reordering the pages as necessary.

"},{"location":"advanced_usage/#usage-example","title":"Usage example","text":"

Suppose you have a double-sided document with 6 pages (3 sheets of paper). First, put the stack into your ADF as normal, ensuring that page 1 is scanned first. Your ADF will now scan pages 1, 3, and 5. Then you (or your scanner, if it supports it) upload the scan into the correct sub-directory of the consume folder (double-sided by default; keep in mind that Paperless will not automatically create the directory for you.) Paperless will then process the scan and move it into an internal staging area.

The next step is to turn your stack upside down (without reordering the sheets of paper), and scan it once again, your ADF will now scan pages 6, 4, and 2, in that order. Once this scan is copied into the sub-directory, Paperless will collate the previous scan with the new one, reversing the order of the pages on the second, \"even numbered\" scan. The resulting document will have the pages 1-6 in the correct order, and this new file will then be processed as normal.

Tip

When scanning the even numbered pages, you can omit the last empty pages, if there are any. For example, if page 6 is empty, you only need to scan pages 2 and 4. Do not omit empty pages in the middle of the document.

"},{"location":"advanced_usage/#things-that-could-go-wrong","title":"Things that could go wrong","text":"

Paperless will notice when the first, \"odd numbered\" scan has less pages than the second scan (this can happen when e.g. the ADF skipped a few pages in the first pass). In that case, Paperless will remove the staging copy as well as the scan, and give you an error message asking you to restart the process from scratch, by scanning the odd pages again, followed by the even pages.

It's important that the scan files get consumed in the correct order, and one at a time. You therefore need to make sure that Paperless is running while you upload the files into the directory; and if you're using polling, make sure that CONSUMER_POLLING is set to a value lower than it takes for the second scan to appear, like 5-10 or even lower.

Another thing that might happen is that you start a double sided scan, but then forget to upload the second file. To avoid collating the wrong documents if you then come back a day later to scan a new double-sided document, Paperless will only keep an \"odd numbered pages\" file for up to 30 minutes. If more time passes, it will consider the next incoming scan a completely new \"odd numbered pages\" one. The old staging file will get discarded.

"},{"location":"advanced_usage/#interaction-with-subdirs-as-tags","title":"Interaction with \"subdirs as tags\"","text":"

The collation feature can be used together with the subdirs as tags feature (but this is not a requirement). Just create a correctly named double-sided subdir in the hierarchy and upload your scans there. For example, both double-sided/foo/bar as well as foo/bar/double-sided will cause the collated document to be treated as if it were uploaded into foo/bar and receive both foo and bar tags, but not double-sided.

"},{"location":"advanced_usage/#interaction-with-document-splitting","title":"Interaction with document splitting","text":"

You can use the document splitting feature, but if you use a normal single-sided split marker page, the split document(s) will have an empty page at the front (or whatever else was on the backside of the split marker page.) You can work around that by having a split marker page that has the split barcode on both sides. This way, the extra page will get automatically removed.

"},{"location":"advanced_usage/#sso-and-third-party-authentication-with-paperless-ngx","title":"SSO and third party authentication with Paperless-ngx","text":"

Paperless-ngx has a built-in authentication system from Django but you can easily integrate an external authentication solution using one of the following methods:

"},{"location":"advanced_usage/#remote-user-authentication","title":"Remote User authentication","text":"

This is a simple option that uses remote user authentication made available by certain SSO applications. See the relevant configuration options for more information: PAPERLESS_ENABLE_HTTP_REMOTE_USER, PAPERLESS_HTTP_REMOTE_USER_HEADER_NAME and PAPERLESS_LOGOUT_REDIRECT_URL

"},{"location":"advanced_usage/#openid-connect-and-social-authentication","title":"OpenID Connect and social authentication","text":"

Version 2.5.0 of Paperless-ngx added support for integrating other authentication systems via the django-allauth package. Once set up, users can either log in or (optionally) sign up using any third party systems you integrate. See the relevant configuration settings and django-allauth docs for more information.

To associate an existing Paperless-ngx account with a social account, first login with your regular credentials and then choose \"My Profile\" from the user dropdown in the app and you will see options to connect social account(s). If enabled, signup options will be available on the login page.

As an example, to set up login via Github, the following environment variables would need to be set:

PAPERLESS_APPS=\"allauth.socialaccount.providers.github\"\nPAPERLESS_SOCIALACCOUNT_PROVIDERS='{\"github\": {\"APPS\": [{\"provider_id\": \"github\",\"name\": \"Github\",\"client_id\": \"<CLIENT_ID>\",\"secret\": \"<CLIENT_SECRET>\"}]}}'\n

Or, to use OpenID Connect (\"OIDC\"), via Keycloak in this example:

PAPERLESS_APPS=\"allauth.socialaccount.providers.openid_connect\"\nPAPERLESS_SOCIALACCOUNT_PROVIDERS='\n{\"openid_connect\": {\"APPS\": [{\"provider_id\": \"keycloak\",\"name\": \"Keycloak\",\"client_id\": \"paperless\",\"secret\": \"<CLIENT_SECRET>\",\"settings\": { \"server_url\": \"https://<KEYCLOAK_SERVER>/realms/<REALM>/.well-known/openid-configuration\"}}]}}'\n

More details about configuration option for various providers can be found in the allauth documentation.

"},{"location":"advanced_usage/#disabling-regular-login","title":"Disabling Regular Login","text":"

Once external auth is set up, 'regular' login can be disabled with the PAPERLESS_DISABLE_REGULAR_LOGIN setting and / or users can be automatically redirected with the PAPERLESS_REDIRECT_LOGIN_TO_SSO setting.

"},{"location":"advanced_usage/#gpg-decryptor","title":"Decryption of encrypted emails before consumption","text":"

Paperless-ngx can be configured to decrypt gpg encrypted emails before consumption.

"},{"location":"advanced_usage/#requirements","title":"Requirements","text":"

You need a recent version of gpg-agent >= 2.1.1 installed on your host. Your host needs to be setup for decrypting your emails via gpg-agent, see this tutorial for instance. Test your setup and make sure that you can encrypt and decrypt files using your key

gpg --encrypt --armor -r person@email.com name_of_file\ngpg --decrypt name_of_file.asc\n
"},{"location":"advanced_usage/#setup","title":"Setup","text":"

First, enable the PAPERLESS_ENABLE_GPG_DECRYPTOR environment variable.

Then determine your local gpg-agent socket by invoking

gpgconf --list-dir agent-socket\n

on your host. A possible output is ~/.gnupg/S.gpg-agent. Also find the location of your public keyring.

If using docker, you'll need to add the following volume mounts to your docker-compose.yml file:

webserver:\n    volumes:\n        - /home/user/.gnupg/pubring.gpg:/usr/src/paperless/.gnupg/pubring.gpg\n        - <path to gpg-agent socket>:/usr/src/paperless/.gnupg/S.gpg-agent\n

For a 'bare-metal' installation no further configuration is necessary. If you want to use a separate GNUPG_HOME, you can do so by configuring the PAPERLESS_EMAIL_GNUPG_HOME environment variable.

"},{"location":"advanced_usage/#troubleshooting","title":"Troubleshooting","text":"
paperless@9da1865df327:~/.gnupg$ ls -al\ndrwx------ 1 paperless paperless   4096 Aug 18 17:52 .\ndrwxr-xr-x 1 paperless paperless   4096 Aug 18 17:52 ..\nsrw------- 1 paperless paperless      0 Aug 18 17:22 S.gpg-agent\n-rw------- 1 paperless paperless 147940 Jul 24 10:23 pubring.gpg\n
"},{"location":"api/","title":"REST API","text":""},{"location":"api/#the-rest-api","title":"The REST API","text":"

Paperless-ngx now ships with a fully-documented REST API and a browsable web interface to explore it. The API browsable interface is available at /api/schema/view/.

Further documentation is provided here for some endpoints and features.

"},{"location":"api/#authorization","title":"Authorization","text":"

The REST api provides four different forms of authentication.

  1. Basic authentication

    Authorize by providing a HTTP header in the form

    Authorization: Basic <credentials>\n

    where credentials is a base64-encoded string of <username>:<password>

  2. Session authentication

    When you're logged into paperless in your browser, you're automatically logged into the API as well and don't need to provide any authorization headers.

  3. Token authentication

    You can create (or re-create) an API token by opening the \"My Profile\" link in the user dropdown found in the web UI and clicking the circular arrow button.

    Paperless also offers an endpoint to acquire authentication tokens.

    POST a username and password as a form or json string to /api/token/ and paperless will respond with a token, if the login data is correct. This token can be used to authenticate other requests with the following HTTP header:

    Authorization: Token <token>\n

    Tokens can also be managed in the Django admin.

  4. Remote User authentication

    If enabled (see configuration), you can authenticate against the API using Remote User auth.

"},{"location":"api/#searching-for-documents","title":"Searching for documents","text":"

Full text searching is available on the /api/documents/ endpoint. Two specific query parameters cause the API to return full text search results:

Pagination works exactly the same as it does for normal requests on this endpoint.

Furthermore, each returned document has an additional __search_hit__ attribute with various information about the search results:

{\n    \"count\": 31,\n    \"next\": \"http://localhost:8000/api/documents/?page=2&query=test\",\n    \"previous\": null,\n    \"results\": [\n\n        ...\n\n        {\n            \"id\": 123,\n            \"title\": \"title\",\n            \"content\": \"content\",\n\n            ...\n\n            \"__search_hit__\": {\n                \"score\": 0.343,\n                \"highlights\": \"text <span class=\"match\">Test</span> text\",\n                \"rank\": 23\n            }\n        },\n\n        ...\n\n    ]\n}\n
"},{"location":"api/#filtering-by-custom-fields","title":"Filtering by custom fields","text":"

You can filter documents by their custom field values by specifying the custom_field_query query parameter. Here are some recipes for common use cases:

  1. Documents with a custom field \"due\" (date) between Aug 1, 2024 and Sept 1, 2024 (inclusive):

    ?custom_field_query=[\"due\", \"range\", [\"2024-08-01\", \"2024-09-01\"]]

  2. Documents with a custom field \"customer\" (text) that equals \"bob\" (case sensitive):

    ?custom_field_query=[\"customer\", \"exact\", \"bob\"]

  3. Documents with a custom field \"answered\" (boolean) set to true:

    ?custom_field_query=[\"answered\", \"exact\", true]

  4. Documents with a custom field \"favorite animal\" (select) set to either \"cat\" or \"dog\":

    ?custom_field_query=[\"favorite animal\", \"in\", [\"cat\", \"dog\"]]

  5. Documents with a custom field \"address\" (text) that is empty:

    ?custom_field_query=[\"OR\", [[\"address\", \"isnull\", true], [\"address\", \"exact\", \"\"]]]

  6. Documents that don't have a field called \"foo\":

    ?custom_field_query=[\"foo\", \"exists\", false]

  7. Documents that have document links \"references\" to both document 3 and 7:

    ?custom_field_query=[\"references\", \"contains\", [3, 7]]

All field types support basic operations including exact, in, isnull, and exists. String, URL, and monetary fields support case-insensitive substring matching operations including icontains, istartswith, and iendswith. Integer, float, and date fields support arithmetic comparisons including gt (>), gte (>=), lt (<), lte (<=), and range. Lastly, document link fields support a contains operator that behaves like a \"is superset of\" check.

"},{"location":"api/#apisearchautocomplete","title":"/api/search/autocomplete/","text":"

Get auto completions for a partial search term.

Query parameters:

Results returned by the endpoint are ordered by importance of the term in the document index. The first result is the term that has the highest Tf/Idf score in the index.

[\"term1\", \"term3\", \"term6\", \"term4\"]\n
"},{"location":"api/#file-uploads","title":"POSTing documents","text":"

The API provides a special endpoint for file uploads:

/api/documents/post_document/

POST a multipart form to this endpoint, where the form field document contains the document that you want to upload to paperless. The filename is sanitized and then used to store the document in a temporary directory, and the consumer will be instructed to consume the document from there.

The endpoint supports the following optional form fields:

The endpoint will immediately return HTTP 200 if the document consumption process was started successfully, with the UUID of the consumption task as the data. No additional status information about the consumption process itself is available immediately, since that happens in a different process. However, querying the tasks endpoint with the returned UUID e.g. /api/tasks/?task_id={uuid} will provide information on the state of the consumption including the ID of a created document if consumption succeeded.

"},{"location":"api/#permissions","title":"Permissions","text":"

All objects (documents, tags, etc.) allow setting object-level permissions with optional owner and / or a set_permissions parameters which are of the form:

\"owner\": ...,\n\"set_permissions\": {\n    \"view\": {\n        \"users\": [...],\n        \"groups\": [...],\n    },\n    \"change\": {\n        \"users\": [...],\n        \"groups\": [...],\n    },\n}\n

Note

Arrays should contain user or group ID numbers.

If these parameters are supplied the object's permissions will be overwritten, assuming the authenticated user has permission to do so (the user must be the object owner or a superuser).

"},{"location":"api/#retrieving-full-permissions","title":"Retrieving full permissions","text":"

By default, the API will return a truncated version of object-level permissions, returning user_can_change indicating whether the current user can edit the object (either because they are the object owner or have permissions granted). You can pass the parameter full_perms=true to API calls to view the full permissions of objects in a format that mirrors the set_permissions parameter above.

"},{"location":"api/#bulk-editing","title":"Bulk Editing","text":"

The API supports various bulk-editing operations which are executed asynchronously.

"},{"location":"api/#documents","title":"Documents","text":"

For bulk operations on documents, use the endpoint /api/documents/bulk_edit/ which accepts a json payload of the format:

{\n  \"documents\": [LIST_OF_DOCUMENT_IDS],\n  \"method\": METHOD, // see below\n  \"parameters\": args // see below\n}\n

The following methods are supported:

"},{"location":"api/#objects","title":"Objects","text":"

Bulk editing for objects (tags, document types etc.) currently supports set permissions or delete operations, using the endpoint: /api/bulk_edit_objects/, which requires a json payload of the format:

{\n  \"objects\": [LIST_OF_OBJECT_IDS],\n  \"object_type\": \"tags\", \"correspondents\", \"document_types\" or \"storage_paths\",\n  \"operation\": \"set_permissions\" or \"delete\",\n  \"owner\": OWNER_ID, // optional\n  \"permissions\": { \"view\": { \"users\": [] ... }, \"change\": { ... } }, // (see 'set_permissions' format above)\n  \"merge\": true / false // defaults to false, see above\n}\n
"},{"location":"api/#api-versioning","title":"API Versioning","text":"

The REST API is versioned since Paperless-ngx 1.3.0.

API versions are specified by submitting an additional HTTP Accept header with every request:

Accept: application/json; version=6\n

If an invalid version is specified, Paperless 1.3.0 will respond with \"406 Not Acceptable\" and an error message in the body. Earlier versions of Paperless will serve API version 1 regardless of whether a version is specified via the Accept header.

If a client wishes to verify whether it is compatible with any given server, the following procedure should be performed:

  1. Perform an authenticated request against any API endpoint. If the server is on version 1.3.0 or newer, the server will add two custom headers to the response:

    X-Api-Version: 2\nX-Version: 1.3.0\n
  2. Determine whether the client is compatible with this server based on the presence/absence of these headers and their values if present.

"},{"location":"api/#api-version-deprecation-policy","title":"API Version Deprecation Policy","text":"

Older API versions are guaranteed to be supported for at least one year after the release of a new API version. After that, support for older API versions may be (but is not guaranteed to be) dropped.

"},{"location":"api/#api-changelog","title":"API Changelog","text":""},{"location":"api/#version-1","title":"Version 1","text":"

Initial API version.

"},{"location":"api/#version-2","title":"Version 2","text":""},{"location":"api/#version-3","title":"Version 3","text":""},{"location":"api/#version-4","title":"Version 4","text":""},{"location":"api/#version-5","title":"Version 5","text":""},{"location":"api/#version-6","title":"Version 6","text":""},{"location":"api/#version-7","title":"Version 7","text":""},{"location":"api/#version-8","title":"Version 8","text":""},{"location":"api/#version-9","title":"Version 9","text":""},{"location":"changelog/","title":"Changelog","text":""},{"location":"changelog/#changelog","title":"Changelog","text":""},{"location":"changelog/#paperless-ngx-2190","title":"paperless-ngx 2.19.0","text":""},{"location":"changelog/#notable-changes","title":"Notable Changes","text":""},{"location":"changelog/#features-enhancements","title":"Features / Enhancements","text":""},{"location":"changelog/#bug-fixes","title":"Bug Fixes","text":""},{"location":"changelog/#maintenance","title":"Maintenance","text":""},{"location":"changelog/#dependencies","title":"Dependencies","text":"29 changes - docker(deps): bump astral-sh/uv from 0.9.2-python3.12-bookworm-slim to 0.9.4-python3.12-bookworm-slim @[dependabot[bot]](https://github.com/apps/dependabot) ([#11091](https://github.com/paperless-ngx/paperless-ngx/pull/11091)) - docker-compose(deps): Bump gotenberg/gotenberg from 8.23 to 8.24 in /docker/compose @[dependabot[bot]](https://github.com/apps/dependabot) ([#11050](https://github.com/paperless-ngx/paperless-ngx/pull/11050)) - Chore(deps): Bump the small-changes group across 1 directory with 8 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#11065](https://github.com/paperless-ngx/paperless-ngx/pull/11065)) - docker(deps): Bump astral-sh/uv from 0.8.22-python3.12-bookworm-slim to 0.9.2-python3.12-bookworm-slim @[dependabot[bot]](https://github.com/apps/dependabot) ([#11052](https://github.com/paperless-ngx/paperless-ngx/pull/11052)) - Chore(deps): Bump the actions group with 5 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10978](https://github.com/paperless-ngx/paperless-ngx/pull/10978)) - Chore(deps): Bump uuid from 11.1.0 to 13.0.0 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10983](https://github.com/paperless-ngx/paperless-ngx/pull/10983)) - Chore(deps-dev): Bump @playwright/test from 1.55.0 to 1.55.1 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10982](https://github.com/paperless-ngx/paperless-ngx/pull/10982)) - Chore(deps-dev): Bump the frontend-eslint-dependencies group in /src-ui with 4 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10981](https://github.com/paperless-ngx/paperless-ngx/pull/10981)) - Chore(deps-dev): Bump webpack from 5.101.3 to 5.102.0 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10986](https://github.com/paperless-ngx/paperless-ngx/pull/10986)) - Chore(deps-dev): Bump prettier-plugin-organize-imports from 4.2.0 to 4.3.0 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10985](https://github.com/paperless-ngx/paperless-ngx/pull/10985)) - Chore(deps-dev): Bump the frontend-jest-dependencies group in /src-ui with 3 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10980](https://github.com/paperless-ngx/paperless-ngx/pull/10980)) - Chore(deps-dev): Bump @types/node from 24.3.0 to 24.6.1 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10984](https://github.com/paperless-ngx/paperless-ngx/pull/10984)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 21 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10979](https://github.com/paperless-ngx/paperless-ngx/pull/10979)) - docker-compose(deps): Bump library/postgres from 17 to 18 in /docker/compose @[dependabot[bot]](https://github.com/apps/dependabot) ([#10965](https://github.com/paperless-ngx/paperless-ngx/pull/10965)) - Chore(deps): Bump the major-versions group with 2 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10960](https://github.com/paperless-ngx/paperless-ngx/pull/10960)) - Chore(deps): Bump types-colorama from 0.4.15.20240311 to 0.4.15.20250801 @[dependabot[bot]](https://github.com/apps/dependabot) ([#10961](https://github.com/paperless-ngx/paperless-ngx/pull/10961)) - Chore(deps): Bump django-guardian from 3.1.3 to 3.2.0 @[dependabot[bot]](https://github.com/apps/dependabot) ([#10909](https://github.com/paperless-ngx/paperless-ngx/pull/10909)) - Chore(deps): Bump django-soft-delete from 1.0.19 to 1.0.21 @[dependabot[bot]](https://github.com/apps/dependabot) ([#10908](https://github.com/paperless-ngx/paperless-ngx/pull/10908)) - Chore(deps): Bump whitenoise from 6.10.0 to 6.11.0 @[dependabot[bot]](https://github.com/apps/dependabot) ([#10910](https://github.com/paperless-ngx/paperless-ngx/pull/10910)) - Chore(deps): Bump django-cors-headers from 4.8.0 to 4.9.0 @[dependabot[bot]](https://github.com/apps/dependabot) ([#10907](https://github.com/paperless-ngx/paperless-ngx/pull/10907)) - docker(deps): bump astral-sh/uv from 0.8.17-python3.12-bookworm-slim to 0.8.19-python3.12-bookworm-slim @[dependabot[bot]](https://github.com/apps/dependabot) ([#10906](https://github.com/paperless-ngx/paperless-ngx/pull/10906)) - docker(deps): Bump astral-sh/uv from 0.8.15-python3.12-bookworm-slim to 0.8.17-python3.12-bookworm-slim @[dependabot[bot]](https://github.com/apps/dependabot) ([#10864](https://github.com/paperless-ngx/paperless-ngx/pull/10864)) - Chore(deps): Bump the small-changes group across 1 directory with 3 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10880](https://github.com/paperless-ngx/paperless-ngx/pull/10880)) - Chore(deps): Bump django-guardian from 3.1.2 to 3.1.3 in the django group @[dependabot[bot]](https://github.com/apps/dependabot) ([#10863](https://github.com/paperless-ngx/paperless-ngx/pull/10863)) - Chore(deps): Bump pytest-cov from 6.2.1 to 7.0.0 in the development group across 1 directory @[dependabot[bot]](https://github.com/apps/dependabot) ([#10822](https://github.com/paperless-ngx/paperless-ngx/pull/10822)) - Chore(deps): Bump the django group with 4 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10811](https://github.com/paperless-ngx/paperless-ngx/pull/10811)) - docker-compose(deps): Bump gotenberg/gotenberg from 8.22 to 8.23 in /docker/compose @[dependabot[bot]](https://github.com/apps/dependabot) ([#10812](https://github.com/paperless-ngx/paperless-ngx/pull/10812)) - Chore(deps): Bump the small-changes group across 1 directory with 8 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10821](https://github.com/paperless-ngx/paperless-ngx/pull/10821)) - docker(deps): Bump astral-sh/uv from 0.8.13-python3.12-bookworm-slim to 0.8.15-python3.12-bookworm-slim @[dependabot[bot]](https://github.com/apps/dependabot) ([#10810](https://github.com/paperless-ngx/paperless-ngx/pull/10810))"},{"location":"changelog/#all-app-changes","title":"All App Changes","text":"51 changes - Tweak: improve tag parent validation error handling [@shamoon](https://github.com/shamoon) ([#11096](https://github.com/paperless-ngx/paperless-ngx/pull/11096)) - Fix: remove obsolete warning for custom field value index [@shamoon](https://github.com/shamoon) ([#11083](https://github.com/paperless-ngx/paperless-ngx/pull/11083)) - Chore(deps): Bump the small-changes group across 1 directory with 8 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#11065](https://github.com/paperless-ngx/paperless-ngx/pull/11065)) - Enhancement: use friendly file names when emailing documents [@JanKleine](https://github.com/JanKleine) ([#11055](https://github.com/paperless-ngx/paperless-ngx/pull/11055)) - Fix: set min-height for drag-drop items container [@shamoon](https://github.com/shamoon) ([#11064](https://github.com/paperless-ngx/paperless-ngx/pull/11064)) - Feature: Advanced Workflow Filters [@shamoon](https://github.com/shamoon) ([#11029](https://github.com/paperless-ngx/paperless-ngx/pull/11029)) - Feature: add support for emailing multiple documents [@JanKleine](https://github.com/JanKleine) ([#10666](https://github.com/paperless-ngx/paperless-ngx/pull/10666)) - Fix custom field query dropdown toggle corners [@shamoon](https://github.com/shamoon) ([#11028](https://github.com/paperless-ngx/paperless-ngx/pull/11028)) - Fix: correct save hotkey action when no next document exists [@shamoon](https://github.com/shamoon) ([#11027](https://github.com/paperless-ngx/paperless-ngx/pull/11027)) - Fix: require only change permissions for task dismissal, add frontend error handling [@shamoon](https://github.com/shamoon) ([#11023](https://github.com/paperless-ngx/paperless-ngx/pull/11023)) - Enhancement: ignore same files in sanity checker as consumer [@shamoon](https://github.com/shamoon) ([#10999](https://github.com/paperless-ngx/paperless-ngx/pull/10999)) - Enhancement: open color picker on swatch button click [@shamoon](https://github.com/shamoon) ([#10994](https://github.com/paperless-ngx/paperless-ngx/pull/10994)) - Chore(deps): Bump uuid from 11.1.0 to 13.0.0 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10983](https://github.com/paperless-ngx/paperless-ngx/pull/10983)) - Chore(deps-dev): Bump @playwright/test from 1.55.0 to 1.55.1 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10982](https://github.com/paperless-ngx/paperless-ngx/pull/10982)) - Chore(deps-dev): Bump the frontend-eslint-dependencies group in /src-ui with 4 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10981](https://github.com/paperless-ngx/paperless-ngx/pull/10981)) - Chore(deps-dev): Bump webpack from 5.101.3 to 5.102.0 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10986](https://github.com/paperless-ngx/paperless-ngx/pull/10986)) - Chore(deps-dev): Bump prettier-plugin-organize-imports from 4.2.0 to 4.3.0 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10985](https://github.com/paperless-ngx/paperless-ngx/pull/10985)) - Chore(deps-dev): Bump the frontend-jest-dependencies group in /src-ui with 3 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10980](https://github.com/paperless-ngx/paperless-ngx/pull/10980)) - Chore(deps-dev): Bump @types/node from 24.3.0 to 24.6.1 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10984](https://github.com/paperless-ngx/paperless-ngx/pull/10984)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 21 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10979](https://github.com/paperless-ngx/paperless-ngx/pull/10979)) - Performance: Cache django-guardian permissions when counting documents [@Merinorus](https://github.com/Merinorus) ([#10657](https://github.com/paperless-ngx/paperless-ngx/pull/10657)) - Chore(deps): Bulk upgrade backend dependencies [@stumpylog](https://github.com/stumpylog) ([#10971](https://github.com/paperless-ngx/paperless-ngx/pull/10971)) - Chore(deps): Bump the major-versions group with 2 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10960](https://github.com/paperless-ngx/paperless-ngx/pull/10960)) - Chore(deps): Bump types-colorama from 0.4.15.20240311 to 0.4.15.20250801 @[dependabot[bot]](https://github.com/apps/dependabot) ([#10961](https://github.com/paperless-ngx/paperless-ngx/pull/10961)) - Chore(deps): Bump django-guardian from 3.1.3 to 3.2.0 @[dependabot[bot]](https://github.com/apps/dependabot) ([#10909](https://github.com/paperless-ngx/paperless-ngx/pull/10909)) - Chore(deps): Bump django-soft-delete from 1.0.19 to 1.0.21 @[dependabot[bot]](https://github.com/apps/dependabot) ([#10908](https://github.com/paperless-ngx/paperless-ngx/pull/10908)) - Chore(deps): Bump whitenoise from 6.10.0 to 6.11.0 @[dependabot[bot]](https://github.com/apps/dependabot) ([#10910](https://github.com/paperless-ngx/paperless-ngx/pull/10910)) - Tweakhancement: reorganize some list \\& bulk editing buttons [@shamoon](https://github.com/shamoon) ([#10944](https://github.com/paperless-ngx/paperless-ngx/pull/10944)) - Chore(deps): Bump django-cors-headers from 4.8.0 to 4.9.0 @[dependabot[bot]](https://github.com/apps/dependabot) ([#10907](https://github.com/paperless-ngx/paperless-ngx/pull/10907)) - Fix: fix select option removal and pagination update [@shamoon](https://github.com/shamoon) ([#10933](https://github.com/paperless-ngx/paperless-ngx/pull/10933)) - Enhancement: support workflow path matching of barcode-split documents [@DerRockWolf](https://github.com/DerRockWolf) ([#10723](https://github.com/paperless-ngx/paperless-ngx/pull/10723)) - Fix: skip fuzzy matching for empty document content [@shamoon](https://github.com/shamoon) ([#10914](https://github.com/paperless-ngx/paperless-ngx/pull/10914)) - Feature: processed mail UI [@shamoon](https://github.com/shamoon) ([#10866](https://github.com/paperless-ngx/paperless-ngx/pull/10866)) - Fix: add extra error handling to \\_consume for file checks [@shamoon](https://github.com/shamoon) ([#10897](https://github.com/paperless-ngx/paperless-ngx/pull/10897)) - Fix: restore str celery beat schedule filename [@shamoon](https://github.com/shamoon) ([#10893](https://github.com/paperless-ngx/paperless-ngx/pull/10893)) - Enhancement: support custom field values on post document [@shamoon](https://github.com/shamoon) ([#10859](https://github.com/paperless-ngx/paperless-ngx/pull/10859)) - Feature: Nested Tags [@shamoon](https://github.com/shamoon) ([#10833](https://github.com/paperless-ngx/paperless-ngx/pull/10833)) - Chore(deps): Bump the small-changes group across 1 directory with 3 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10880](https://github.com/paperless-ngx/paperless-ngx/pull/10880)) - Chore(deps): Bump django-guardian from 3.1.2 to 3.1.3 in the django group @[dependabot[bot]](https://github.com/apps/dependabot) ([#10863](https://github.com/paperless-ngx/paperless-ngx/pull/10863)) - Enhancement: long text custom field [@jojo2357](https://github.com/jojo2357) ([#10846](https://github.com/paperless-ngx/paperless-ngx/pull/10846)) - Fix: fix pdf editor hover rotate counterclockwise button [@shamoon](https://github.com/shamoon) ([#10848](https://github.com/paperless-ngx/paperless-ngx/pull/10848)) - Fix: warp long words in toast content [@shamoon](https://github.com/shamoon) ([#10839](https://github.com/paperless-ngx/paperless-ngx/pull/10839)) - Fix: fix error when bulk adding empty doc link custom fields [@shamoon](https://github.com/shamoon) ([#10832](https://github.com/paperless-ngx/paperless-ngx/pull/10832)) - Enhancement: Add print button [@mpaletti](https://github.com/mpaletti) ([#10626](https://github.com/paperless-ngx/paperless-ngx/pull/10626)) - Enhancement: add storage path as workflow trigger filter @david-loe ([#10771](https://github.com/paperless-ngx/paperless-ngx/pull/10771)) - Enhancement: jinja template support for workflow title assignment [@sidey79](https://github.com/sidey79) ([#10700](https://github.com/paperless-ngx/paperless-ngx/pull/10700)) - Chore(deps): Bump pytest-cov from 6.2.1 to 7.0.0 in the development group across 1 directory @[dependabot[bot]](https://github.com/apps/dependabot) ([#10822](https://github.com/paperless-ngx/paperless-ngx/pull/10822)) - Chore(deps): Bump the django group with 4 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10811](https://github.com/paperless-ngx/paperless-ngx/pull/10811)) - Enhancement: Limit excessively long content length when computing suggestions [@Merinorus](https://github.com/Merinorus) ([#10656](https://github.com/paperless-ngx/paperless-ngx/pull/10656)) - Chore(deps): Bump the small-changes group across 1 directory with 8 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10821](https://github.com/paperless-ngx/paperless-ngx/pull/10821)) - Fix: set match value for correspondents created by mail rule [@shamoon](https://github.com/shamoon) ([#10820](https://github.com/paperless-ngx/paperless-ngx/pull/10820))"},{"location":"changelog/#paperless-ngx-2184","title":"paperless-ngx 2.18.4","text":""},{"location":"changelog/#features-enhancements_1","title":"Features / Enhancements","text":""},{"location":"changelog/#bug-fixes_1","title":"Bug Fixes","text":""},{"location":"changelog/#dependencies_1","title":"Dependencies","text":"8 changes - Chore(deps-dev): Bump the frontend-jest-dependencies group in /src-ui with 2 updates [@shamoon](https://github.com/shamoon) ([#10770](https://github.com/paperless-ngx/paperless-ngx/pull/10770)) - Chore(deps-dev): Bump the frontend-eslint-dependencies group in /src-ui with 4 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10745](https://github.com/paperless-ngx/paperless-ngx/pull/10745)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 22 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10744](https://github.com/paperless-ngx/paperless-ngx/pull/10744)) - Chore(deps): Bump bootstrap from 5.3.7 to 5.3.8 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10740](https://github.com/paperless-ngx/paperless-ngx/pull/10740)) - Chore(deps-dev): Bump @playwright/test from 1.54.2 to 1.55.0 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10743](https://github.com/paperless-ngx/paperless-ngx/pull/10743)) - Chore(deps-dev): Bump webpack from 5.101.0 to 5.101.3 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10751](https://github.com/paperless-ngx/paperless-ngx/pull/10751)) - Chore(deps-dev): Bump @types/node from 24.1.0 to 24.3.0 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10750](https://github.com/paperless-ngx/paperless-ngx/pull/10750)) - Chore(deps): Bump the actions group with 3 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10757](https://github.com/paperless-ngx/paperless-ngx/pull/10757))"},{"location":"changelog/#all-app-changes_1","title":"All App Changes","text":"13 changes - Revert \"Performance: Enable virtual scrolling for large custom field \u2026 @shamoon ([#10803](https://github.com/paperless-ngx/paperless-ngx/pull/10803)) - Fixhancement: update sidebar view counts on save \\& next also @shamoon ([#10793](https://github.com/paperless-ngx/paperless-ngx/pull/10793)) - Enhancement: report websocket status @shamoon ([#10777](https://github.com/paperless-ngx/paperless-ngx/pull/10777)) - Chore(deps-dev): Bump the frontend-jest-dependencies group in /src-ui with 2 updates @shamoon ([#10770](https://github.com/paperless-ngx/paperless-ngx/pull/10770)) - Chore(deps-dev): Bump the frontend-eslint-dependencies group in /src-ui with 4 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10745](https://github.com/paperless-ngx/paperless-ngx/pull/10745)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 22 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10744](https://github.com/paperless-ngx/paperless-ngx/pull/10744)) - Chore(deps): Bump bootstrap from 5.3.7 to 5.3.8 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10740](https://github.com/paperless-ngx/paperless-ngx/pull/10740)) - Chore(deps-dev): Bump @playwright/test from 1.54.2 to 1.55.0 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10743](https://github.com/paperless-ngx/paperless-ngx/pull/10743)) - Chore(deps-dev): Bump webpack from 5.101.0 to 5.101.3 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10751](https://github.com/paperless-ngx/paperless-ngx/pull/10751)) - Chore(deps-dev): Bump @types/node from 24.1.0 to 24.3.0 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10750](https://github.com/paperless-ngx/paperless-ngx/pull/10750)) - Chore: switch from os.path to pathlib.Path @gothicVI ([#10539](https://github.com/paperless-ngx/paperless-ngx/pull/10539)) - Performance fix: add paging for custom field select options @shamoon ([#10755](https://github.com/paperless-ngx/paperless-ngx/pull/10755))"},{"location":"changelog/#paperless-ngx-2183","title":"paperless-ngx 2.18.3","text":""},{"location":"changelog/#bug-fixes_2","title":"Bug Fixes","text":""},{"location":"changelog/#dependencies_2","title":"Dependencies","text":"5 changes - Chore(deps): Update granian[uvloop] requirement from ~=2.4.1 to ~=2.5.1 @[dependabot[bot]](https://github.com/apps/dependabot) ([#10529](https://github.com/paperless-ngx/paperless-ngx/pull/10529)) - Chore(deps): Bump the small-changes group across 1 directory with 6 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10714](https://github.com/paperless-ngx/paperless-ngx/pull/10714)) - docker-compose(deps): Bump library/mariadb from 11 to 12 in /docker/compose @[dependabot[bot]](https://github.com/apps/dependabot) ([#10621](https://github.com/paperless-ngx/paperless-ngx/pull/10621)) - docker-compose(deps): Bump gotenberg/gotenberg from 8.20 to 8.22 in /docker/compose @[dependabot[bot]](https://github.com/apps/dependabot) ([#10687](https://github.com/paperless-ngx/paperless-ngx/pull/10687)) - docker(deps): Bump astral-sh/uv from 0.8.8-python3.12-bookworm-slim to 0.8.13-python3.12-bookworm-slim @[dependabot[bot]](https://github.com/apps/dependabot) ([#10685](https://github.com/paperless-ngx/paperless-ngx/pull/10685))"},{"location":"changelog/#all-app-changes_2","title":"All App Changes","text":"11 changes - Fix: include application config language settings for dateparser auto-detection [@shamoon](https://github.com/shamoon) ([#10722](https://github.com/paperless-ngx/paperless-ngx/pull/10722)) - Chore(deps): Update granian[uvloop] requirement from ~=2.4.1 to ~=2.5.1 @[dependabot[bot]](https://github.com/apps/dependabot) ([#10529](https://github.com/paperless-ngx/paperless-ngx/pull/10529)) - Chore(deps): Bump the small-changes group across 1 directory with 6 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10714](https://github.com/paperless-ngx/paperless-ngx/pull/10714)) - Fix: hide sidebar counts during saved views organization [@shamoon](https://github.com/shamoon) ([#10716](https://github.com/paperless-ngx/paperless-ngx/pull/10716)) - Fix: wrap long view titles in sidebar [@shamoon](https://github.com/shamoon) ([#10715](https://github.com/paperless-ngx/paperless-ngx/pull/10715)) - Performance: Enable virtual scrolling for large custom field selects @david-loe ([#10708](https://github.com/paperless-ngx/paperless-ngx/pull/10708)) - Chore: refactor document details component [@shamoon](https://github.com/shamoon) ([#10662](https://github.com/paperless-ngx/paperless-ngx/pull/10662)) - Fixhancement: more saved view count refreshes [@shamoon](https://github.com/shamoon) ([#10694](https://github.com/paperless-ngx/paperless-ngx/pull/10694)) - Fix: include pagination array items for valid openapi schema [@shamoon](https://github.com/shamoon) ([#10682](https://github.com/paperless-ngx/paperless-ngx/pull/10682)) - Fix: prevent scroll for view name in sidebar [@shamoon](https://github.com/shamoon) ([#10676](https://github.com/paperless-ngx/paperless-ngx/pull/10676)) - Tweak: center document close button in app frame [@shamoon](https://github.com/shamoon) ([#10661](https://github.com/paperless-ngx/paperless-ngx/pull/10661))"},{"location":"changelog/#paperless-ngx-2182","title":"paperless-ngx 2.18.2","text":""},{"location":"changelog/#bug-fixes_3","title":"Bug Fixes","text":""},{"location":"changelog/#dependencies_3","title":"Dependencies","text":""},{"location":"changelog/#all-app-changes_3","title":"All App Changes","text":"6 changes - Fix: prevent loss of changes when switching between open docs [@shamoon](https://github.com/shamoon) ([#10659](https://github.com/paperless-ngx/paperless-ngx/pull/10659)) - Fix: ignore incomplete tasks for system status 'last run' [@shamoon](https://github.com/shamoon) ([#10641](https://github.com/paperless-ngx/paperless-ngx/pull/10641)) - Tweak: improve dateparser auto-detection messages [@shamoon](https://github.com/shamoon) ([#10640](https://github.com/paperless-ngx/paperless-ngx/pull/10640)) - Fix: increase legibility of date filter clear button in light mode [@shamoon](https://github.com/shamoon) ([#10649](https://github.com/paperless-ngx/paperless-ngx/pull/10649)) - Fix: ensure saved view count is visible with long names [@shamoon](https://github.com/shamoon) ([#10616](https://github.com/paperless-ngx/paperless-ngx/pull/10616)) - Chore(deps): Bump the development group across 1 directory with 3 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10578](https://github.com/paperless-ngx/paperless-ngx/pull/10578))"},{"location":"changelog/#paperless-ngx-2181","title":"paperless-ngx 2.18.1","text":""},{"location":"changelog/#features-enhancements_2","title":"Features / Enhancements","text":""},{"location":"changelog/#bug-fixes_4","title":"Bug Fixes","text":""},{"location":"changelog/#documentation","title":"Documentation","text":""},{"location":"changelog/#all-app-changes_4","title":"All App Changes","text":"4 changes - Fix: fix app logo validation with no file [@shamoon](https://github.com/shamoon) ([#10599](https://github.com/paperless-ngx/paperless-ngx/pull/10599)) - Tweak: fix some button consistency [@shamoon](https://github.com/shamoon) ([#10593](https://github.com/paperless-ngx/paperless-ngx/pull/10593)) - Development: restore version tag display [@shamoon](https://github.com/shamoon) ([#10592](https://github.com/paperless-ngx/paperless-ngx/pull/10592)) - Fixhancement: mobile layout improvements for pdf editor [@shamoon](https://github.com/shamoon) ([#10588](https://github.com/paperless-ngx/paperless-ngx/pull/10588))"},{"location":"changelog/#paperless-ngx-2180","title":"paperless-ngx 2.18.0","text":""},{"location":"changelog/#notable-changes_1","title":"Notable Changes","text":""},{"location":"changelog/#features-enhancements_3","title":"Features / Enhancements","text":""},{"location":"changelog/#bug-fixes_5","title":"Bug Fixes","text":""},{"location":"changelog/#security","title":"Security","text":""},{"location":"changelog/#maintenance_1","title":"Maintenance","text":""},{"location":"changelog/#dependencies_4","title":"Dependencies","text":"23 changes - chore: Small targeted upgrades to dependencies [@stumpylog](https://github.com/stumpylog) ([#10561](https://github.com/paperless-ngx/paperless-ngx/pull/10561)) - docker(deps): Bump astral-sh/uv from 0.8.4-python3.12-bookworm-slim to 0.8.8-python3.12-bookworm-slim @[dependabot[bot]](https://github.com/apps/dependabot) ([#10564](https://github.com/paperless-ngx/paperless-ngx/pull/10564)) - Chore(deps): Bump the django group across 1 directory with 9 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10538](https://github.com/paperless-ngx/paperless-ngx/pull/10538)) - Chore(deps): Bump the small-changes group with 3 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10528](https://github.com/paperless-ngx/paperless-ngx/pull/10528)) - Chore(deps-dev): Bump the frontend-jest-dependencies group in /src-ui with 4 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10497](https://github.com/paperless-ngx/paperless-ngx/pull/10497)) - Chore(deps-dev): Bump the frontend-eslint-dependencies group in /src-ui with 4 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10498](https://github.com/paperless-ngx/paperless-ngx/pull/10498)) - Chore(deps-dev): Bump @playwright/test from 1.53.2 to 1.54.2 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10499](https://github.com/paperless-ngx/paperless-ngx/pull/10499)) - Chore(deps-dev): Bump webpack from 5.99.9 to 5.101.0 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10501](https://github.com/paperless-ngx/paperless-ngx/pull/10501)) - Chore(deps-dev): Bump prettier-plugin-organize-imports from 4.1.0 to 4.2.0 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10500](https://github.com/paperless-ngx/paperless-ngx/pull/10500)) - Chore(deps-dev): Bump @types/node from 24.0.10 to 24.1.0 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10502](https://github.com/paperless-ngx/paperless-ngx/pull/10502)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 16 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10496](https://github.com/paperless-ngx/paperless-ngx/pull/10496)) - Chore(deps): Bump the small-changes group across 1 directory with 8 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10481](https://github.com/paperless-ngx/paperless-ngx/pull/10481)) - docker(deps): bump astral-sh/uv from 0.7.19-python3.12-bookworm-slim to 0.8.3-python3.12-bookworm-slim @[dependabot[bot]](https://github.com/apps/dependabot) ([#10465](https://github.com/paperless-ngx/paperless-ngx/pull/10465)) - docker(deps): Bump astral-sh/uv from 0.7.9-python3.12-bookworm-slim to 0.7.19-python3.12-bookworm-slim @[dependabot[bot]](https://github.com/apps/dependabot) ([#10343](https://github.com/paperless-ngx/paperless-ngx/pull/10343)) - Chore(deps): Bump the small-changes group across 1 directory with 7 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10347](https://github.com/paperless-ngx/paperless-ngx/pull/10347)) - Chore(deps): Bump stefanzweifel/git-auto-commit-action from 5 to 6 in the actions group @[dependabot[bot]](https://github.com/apps/dependabot) ([#10302](https://github.com/paperless-ngx/paperless-ngx/pull/10302)) - Chore(deps-dev): Bump the frontend-eslint-dependencies group across 1 directory with 4 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10311](https://github.com/paperless-ngx/paperless-ngx/pull/10311)) - Chore(deps-dev): Bump @types/node from 22.15.29 to 24.0.10 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10306](https://github.com/paperless-ngx/paperless-ngx/pull/10306)) - Chore(deps): Bump bootstrap from 5.3.6 to 5.3.7 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10308](https://github.com/paperless-ngx/paperless-ngx/pull/10308)) - Chore(deps-dev): Bump webpack from 5.98.0 to 5.99.9 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10309](https://github.com/paperless-ngx/paperless-ngx/pull/10309)) - Chore(deps-dev): Bump @playwright/test from 1.51.1 to 1.53.2 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10307](https://github.com/paperless-ngx/paperless-ngx/pull/10307)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 13 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10303](https://github.com/paperless-ngx/paperless-ngx/pull/10303)) - Chore: update to Angular 20 [@shamoon](https://github.com/shamoon) ([#10273](https://github.com/paperless-ngx/paperless-ngx/pull/10273))"},{"location":"changelog/#all-app-changes_5","title":"All App Changes","text":"44 changes - chore: Small targeted upgrades to dependencies [@stumpylog](https://github.com/stumpylog) ([#10561](https://github.com/paperless-ngx/paperless-ngx/pull/10561)) - Feature: Add filter to localize dates for filepath templating [@stumpylog](https://github.com/stumpylog) ([#10559](https://github.com/paperless-ngx/paperless-ngx/pull/10559)) - Chore: Removes duplication and spread out config for codespell [@stumpylog](https://github.com/stumpylog) ([#10560](https://github.com/paperless-ngx/paperless-ngx/pull/10560)) - Chore(deps): Bump the django group across 1 directory with 9 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10538](https://github.com/paperless-ngx/paperless-ngx/pull/10538)) - Feature: PDF editor [@shamoon](https://github.com/shamoon) ([#10318](https://github.com/paperless-ngx/paperless-ngx/pull/10318)) - Enhancement: support webhook restrictions [@shamoon](https://github.com/shamoon) ([#10555](https://github.com/paperless-ngx/paperless-ngx/pull/10555)) - Performance: Classifier performance optimizations [@Merinorus](https://github.com/Merinorus) ([#10363](https://github.com/paperless-ngx/paperless-ngx/pull/10363)) - Chore: switch from os.path to pathlib.Path [@gothicVI](https://github.com/gothicVI) ([#10397](https://github.com/paperless-ngx/paperless-ngx/pull/10397)) - Chore(deps): Bump the small-changes group with 3 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10528](https://github.com/paperless-ngx/paperless-ngx/pull/10528)) - Performance: add setting to enable DB connection pooling for PostgreSQL [@Merinorus](https://github.com/Merinorus) ([#10354](https://github.com/paperless-ngx/paperless-ngx/pull/10354)) - Chore(deps-dev): Bump the frontend-jest-dependencies group in /src-ui with 4 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10497](https://github.com/paperless-ngx/paperless-ngx/pull/10497)) - Chore(deps-dev): Bump the frontend-eslint-dependencies group in /src-ui with 4 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10498](https://github.com/paperless-ngx/paperless-ngx/pull/10498)) - Chore(deps-dev): Bump @playwright/test from 1.53.2 to 1.54.2 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10499](https://github.com/paperless-ngx/paperless-ngx/pull/10499)) - Chore(deps-dev): Bump webpack from 5.99.9 to 5.101.0 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10501](https://github.com/paperless-ngx/paperless-ngx/pull/10501)) - Chore(deps-dev): Bump prettier-plugin-organize-imports from 4.1.0 to 4.2.0 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10500](https://github.com/paperless-ngx/paperless-ngx/pull/10500)) - Chore(deps-dev): Bump @types/node from 24.0.10 to 24.1.0 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10502](https://github.com/paperless-ngx/paperless-ngx/pull/10502)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 16 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10496](https://github.com/paperless-ngx/paperless-ngx/pull/10496)) - Fixhancement: improve text thumbnail generation for large files [@shamoon](https://github.com/shamoon) ([#10483](https://github.com/paperless-ngx/paperless-ngx/pull/10483)) - Enhancement: disable auto spellcheck on filtering dropdowns [@TheDodger](https://github.com/TheDodger) ([#10487](https://github.com/paperless-ngx/paperless-ngx/pull/10487)) - Chore(deps): Bump the small-changes group across 1 directory with 8 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10481](https://github.com/paperless-ngx/paperless-ngx/pull/10481)) - Fix: include ignore for config logos in sanity checker [@shamoon](https://github.com/shamoon) ([#10473](https://github.com/paperless-ngx/paperless-ngx/pull/10473)) - Chore: add tasks task_id param to openapi spec [@shamoon](https://github.com/shamoon) ([#10469](https://github.com/paperless-ngx/paperless-ngx/pull/10469)) - Fix: track and restore changed document fields from session storage [@shamoon](https://github.com/shamoon) ([#10468](https://github.com/paperless-ngx/paperless-ngx/pull/10468)) - Chore: include advanced search query param in API spec [@shamoon](https://github.com/shamoon) ([#10449](https://github.com/paperless-ngx/paperless-ngx/pull/10449)) - Enhancement: display saved view counts [@shamoon](https://github.com/shamoon) ([#10246](https://github.com/paperless-ngx/paperless-ngx/pull/10246)) - Fix: Make some natural keyword date searches timezone-aware [@shamoon](https://github.com/shamoon) ([#10416](https://github.com/paperless-ngx/paperless-ngx/pull/10416)) - Fixhancement: add missing exact operator for boolean CF queries [@shamoon](https://github.com/shamoon) ([#10402](https://github.com/paperless-ngx/paperless-ngx/pull/10402)) - Fix: dont use translated verbose_name for getting object perms [@shamoon](https://github.com/shamoon) ([#10399](https://github.com/paperless-ngx/paperless-ngx/pull/10399)) - Fix: fix date format for 'today' in DateComponent [@shamoon](https://github.com/shamoon) ([#10369](https://github.com/paperless-ngx/paperless-ngx/pull/10369)) - Feature: add Vietnamese translation [@shamoon](https://github.com/shamoon) ([#10352](https://github.com/paperless-ngx/paperless-ngx/pull/10352)) - Chore(deps): Bump the small-changes group across 1 directory with 7 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10347](https://github.com/paperless-ngx/paperless-ngx/pull/10347)) - Fix: default to empty permissions for group creation [@shamoon](https://github.com/shamoon) ([#10337](https://github.com/paperless-ngx/paperless-ngx/pull/10337)) - Chore(deps-dev): Bump the frontend-eslint-dependencies group across 1 directory with 4 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10311](https://github.com/paperless-ngx/paperless-ngx/pull/10311)) - Chore(deps-dev): Bump @types/node from 22.15.29 to 24.0.10 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10306](https://github.com/paperless-ngx/paperless-ngx/pull/10306)) - Chore(deps): Bump bootstrap from 5.3.6 to 5.3.7 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10308](https://github.com/paperless-ngx/paperless-ngx/pull/10308)) - Chore(deps-dev): Bump webpack from 5.98.0 to 5.99.9 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10309](https://github.com/paperless-ngx/paperless-ngx/pull/10309)) - Chore(deps-dev): Bump @playwright/test from 1.51.1 to 1.53.2 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10307](https://github.com/paperless-ngx/paperless-ngx/pull/10307)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 13 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10303](https://github.com/paperless-ngx/paperless-ngx/pull/10303)) - Performance: Add support for configuring date parser languages [@Merinorus](https://github.com/Merinorus) ([#10181](https://github.com/paperless-ngx/paperless-ngx/pull/10181)) - Enhancement: Add a database caching for improved performance [@Merinorus](https://github.com/Merinorus) ([#9784](https://github.com/paperless-ngx/paperless-ngx/pull/9784)) - Fix: correct api created coercion with timezone [@shamoon](https://github.com/shamoon) ([#10287](https://github.com/paperless-ngx/paperless-ngx/pull/10287)) - Fix: reset search query for preview on reset filter [@shamoon](https://github.com/shamoon) ([#10279](https://github.com/paperless-ngx/paperless-ngx/pull/10279)) - Chore: update to Angular 20 [@shamoon](https://github.com/shamoon) ([#10273](https://github.com/paperless-ngx/paperless-ngx/pull/10273)) - Chore: reject absurd max age values [@shamoon](https://github.com/shamoon) ([#10243](https://github.com/paperless-ngx/paperless-ngx/pull/10243))"},{"location":"changelog/#paperless-ngx-2171","title":"paperless-ngx 2.17.1","text":""},{"location":"changelog/#bug-fixes_6","title":"Bug Fixes","text":""},{"location":"changelog/#all-app-changes_6","title":"All App Changes","text":""},{"location":"changelog/#paperless-ngx-2170","title":"paperless-ngx 2.17.0","text":""},{"location":"changelog/#breaking-changes","title":"Breaking Changes","text":""},{"location":"changelog/#features-enhancements_4","title":"Features / Enhancements","text":""},{"location":"changelog/#bug-fixes_7","title":"Bug Fixes","text":""},{"location":"changelog/#dependencies_5","title":"Dependencies","text":""},{"location":"changelog/#all-app-changes_7","title":"All App Changes","text":"14 changes - QoL: log version at startup, show backend vs frontend mismatch in system status [@shamoon](https://github.com/shamoon) ([#10214](https://github.com/paperless-ngx/paperless-ngx/pull/10214)) - Fix: more api fixes [@shamoon](https://github.com/shamoon) ([#10204](https://github.com/paperless-ngx/paperless-ngx/pull/10204)) - Fix: restore expected pre-2.16 scheduled workflow offset behavior [@shamoon](https://github.com/shamoon) ([#10218](https://github.com/paperless-ngx/paperless-ngx/pull/10218)) - Chore: switch from os.path to pathlib.Path [@gothicVI](https://github.com/gothicVI) ([#9933](https://github.com/paperless-ngx/paperless-ngx/pull/9933)) - Chore: bump angular/common to 19.12.14 [@shamoon](https://github.com/shamoon) ([#10212](https://github.com/paperless-ngx/paperless-ngx/pull/10212)) - Fix: fix some API crashes [@shamoon](https://github.com/shamoon) ([#10196](https://github.com/paperless-ngx/paperless-ngx/pull/10196)) - Fix: remove duplicate base path in websocket urls [@robertmx](https://github.com/robertmx) ([#10194](https://github.com/paperless-ngx/paperless-ngx/pull/10194)) - Fix: use hard delete for custom fields with workflow removal [@shamoon](https://github.com/shamoon) ([#10191](https://github.com/paperless-ngx/paperless-ngx/pull/10191)) - Feature: add Persian translation [@shamoon](https://github.com/shamoon) ([#10183](https://github.com/paperless-ngx/paperless-ngx/pull/10183)) - Enhancement: support import of zipped export [@kaerbr](https://github.com/kaerbr) ([#10073](https://github.com/paperless-ngx/paperless-ngx/pull/10073)) - Fix: fix mail account test api schema [@shamoon](https://github.com/shamoon) ([#10164](https://github.com/paperless-ngx/paperless-ngx/pull/10164)) - Fix: correct api schema for mail_account process [@shamoon](https://github.com/shamoon) ([#10157](https://github.com/paperless-ngx/paperless-ngx/pull/10157)) - Fix: correct api schema for next_asn [@shamoon](https://github.com/shamoon) ([#10151](https://github.com/paperless-ngx/paperless-ngx/pull/10151)) - Fix: fix email and notes endpoints api spec [@shamoon](https://github.com/shamoon) ([#10148](https://github.com/paperless-ngx/paperless-ngx/pull/10148))"},{"location":"changelog/#paperless-ngx-2163","title":"paperless-ngx 2.16.3","text":""},{"location":"changelog/#features-enhancements_5","title":"Features / Enhancements","text":""},{"location":"changelog/#bug-fixes_8","title":"Bug Fixes","text":""},{"location":"changelog/#dependencies_6","title":"Dependencies","text":"10 changes - Chore(deps): Bump the small-changes group across 1 directory with 3 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10085](https://github.com/paperless-ngx/paperless-ngx/pull/10085)) - Chore(deps): Update granian[uvloop] requirement from ~=2.2.0 to ~=2.3.2 @[dependabot[bot]](https://github.com/apps/dependabot) ([#10055](https://github.com/paperless-ngx/paperless-ngx/pull/10055)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 18 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10099](https://github.com/paperless-ngx/paperless-ngx/pull/10099)) - Chore(deps-dev): Bump the frontend-eslint-dependencies group in /src-ui with 4 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10100](https://github.com/paperless-ngx/paperless-ngx/pull/10100)) - Chore(deps): Bump bootstrap from 5.3.3 to 5.3.6 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10091](https://github.com/paperless-ngx/paperless-ngx/pull/10091)) - Chore(deps-dev): Bump @codecov/webpack-plugin from 1.9.0 to 1.9.1 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10090](https://github.com/paperless-ngx/paperless-ngx/pull/10090)) - Chore(deps-dev): Bump @types/node from 22.15.3 to 22.15.29 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10089](https://github.com/paperless-ngx/paperless-ngx/pull/10089)) - Chore(deps): Bump zone.js from 0.15.0 to 0.15.1 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10088](https://github.com/paperless-ngx/paperless-ngx/pull/10088)) - docker(deps): bump astral-sh/uv from 0.7.8-python3.12-bookworm-slim to 0.7.9-python3.12-bookworm-slim @[dependabot[bot]](https://github.com/apps/dependabot) ([#10084](https://github.com/paperless-ngx/paperless-ngx/pull/10084)) - docker(deps): Bump astral-sh/uv from 0.6.16-python3.12-bookworm-slim to 0.7.8-python3.12-bookworm-slim @[dependabot[bot]](https://github.com/apps/dependabot) ([#10056](https://github.com/paperless-ngx/paperless-ngx/pull/10056))"},{"location":"changelog/#all-app-changes_8","title":"All App Changes","text":"16 changes - Fix: handle whoosh query correction errors [@shamoon](https://github.com/shamoon) ([#10121](https://github.com/paperless-ngx/paperless-ngx/pull/10121)) - Performance: pre-filter document list in scheduled workflow checks [@shamoon](https://github.com/shamoon) ([#10031](https://github.com/paperless-ngx/paperless-ngx/pull/10031)) - Chore(deps): Bump the small-changes group across 1 directory with 3 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10085](https://github.com/paperless-ngx/paperless-ngx/pull/10085)) - Chore: refactor consumer plugin checks to a pre-flight plugin [@shamoon](https://github.com/shamoon) ([#9994](https://github.com/paperless-ngx/paperless-ngx/pull/9994)) - Chore(deps): Update granian[uvloop] requirement from ~=2.2.0 to ~=2.3.2 @[dependabot[bot]](https://github.com/apps/dependabot) ([#10055](https://github.com/paperless-ngx/paperless-ngx/pull/10055)) - Fix: handle favicon with non-default static dir [@shamoon](https://github.com/shamoon) ([#10107](https://github.com/paperless-ngx/paperless-ngx/pull/10107)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 18 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10099](https://github.com/paperless-ngx/paperless-ngx/pull/10099)) - Chore(deps-dev): Bump the frontend-eslint-dependencies group in /src-ui with 4 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10100](https://github.com/paperless-ngx/paperless-ngx/pull/10100)) - Chore(deps): Bump bootstrap from 5.3.3 to 5.3.6 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10091](https://github.com/paperless-ngx/paperless-ngx/pull/10091)) - Chore(deps-dev): Bump @codecov/webpack-plugin from 1.9.0 to 1.9.1 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10090](https://github.com/paperless-ngx/paperless-ngx/pull/10090)) - Chore(deps-dev): Bump @types/node from 22.15.3 to 22.15.29 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10089](https://github.com/paperless-ngx/paperless-ngx/pull/10089)) - Chore(deps): Bump zone.js from 0.15.0 to 0.15.1 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10088](https://github.com/paperless-ngx/paperless-ngx/pull/10088)) - Fixhancement: cleanup user or group references in settings upon deletion [@shamoon](https://github.com/shamoon) ([#10049](https://github.com/paperless-ngx/paperless-ngx/pull/10049)) - Enhancement: include DOCUMENT_TYPE to post consume scripts [@matthesrieke](https://github.com/matthesrieke) ([#9977](https://github.com/paperless-ngx/paperless-ngx/pull/9977)) - Fix: Add exception to in [@Freilichtbuehne](https://github.com/Freilichtbuehne) ([#10070](https://github.com/paperless-ngx/paperless-ngx/pull/10070)) - Fix: include base href when opening global search result in new window [@shamoon](https://github.com/shamoon) ([#10066](https://github.com/paperless-ngx/paperless-ngx/pull/10066))"},{"location":"changelog/#paperless-ngx-2162","title":"paperless-ngx 2.16.2","text":""},{"location":"changelog/#bug-fixes_9","title":"Bug Fixes","text":""},{"location":"changelog/#dependencies_7","title":"Dependencies","text":""},{"location":"changelog/#all-app-changes_9","title":"All App Changes","text":"5 changes - Fix: accept datetime for created [@shamoon](https://github.com/shamoon) ([#10021](https://github.com/paperless-ngx/paperless-ngx/pull/10021)) - Fix: add fallback to copyfile on PermissionError @samuel-kosmann ([#10023](https://github.com/paperless-ngx/paperless-ngx/pull/10023)) - Fix: created date fixes in v2.16 [@shamoon](https://github.com/shamoon) ([#10026](https://github.com/paperless-ngx/paperless-ngx/pull/10026)) - Fix: mark fields for created objects as dirty [@shamoon](https://github.com/shamoon) ([#10022](https://github.com/paperless-ngx/paperless-ngx/pull/10022)) - Chore: warn users about removal of postgres v13 support [@shamoon](https://github.com/shamoon) ([#9980](https://github.com/paperless-ngx/paperless-ngx/pull/9980))"},{"location":"changelog/#paperless-ngx-2161","title":"paperless-ngx 2.16.1","text":""},{"location":"changelog/#bug-fixes_10","title":"Bug Fixes","text":""},{"location":"changelog/#all-app-changes_10","title":"All App Changes","text":""},{"location":"changelog/#paperless-ngx-2160","title":"paperless-ngx 2.16.0","text":""},{"location":"changelog/#breaking-changes_1","title":"Breaking Changes","text":""},{"location":"changelog/#features","title":"Features","text":""},{"location":"changelog/#bug-fixes_11","title":"Bug Fixes","text":""},{"location":"changelog/#maintenance_2","title":"Maintenance","text":""},{"location":"changelog/#dependencies_8","title":"Dependencies","text":"14 changes - Chore(deps): Bump the small-changes group across 1 directory with 6 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#9921](https://github.com/paperless-ngx/paperless-ngx/pull/9921)) - docker-compose(deps): Bump library/redis from 7 to 8 in /docker/compose @[dependabot[bot]](https://github.com/apps/dependabot) ([#9879](https://github.com/paperless-ngx/paperless-ngx/pull/9879)) - Chore(deps): Bump astral-sh/setup-uv from 5 to 6 in the actions group @[dependabot[bot]](https://github.com/apps/dependabot) ([#9842](https://github.com/paperless-ngx/paperless-ngx/pull/9842)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 14 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#9848](https://github.com/paperless-ngx/paperless-ngx/pull/9848)) - Chore(deps-dev): Bump the frontend-eslint-dependencies group in /src-ui with 3 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#9849](https://github.com/paperless-ngx/paperless-ngx/pull/9849)) - Chore(deps-dev): Bump @types/node from 22.13.17 to 22.15.3 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#9850](https://github.com/paperless-ngx/paperless-ngx/pull/9850)) - docker(deps): Bump astral-sh/uv from 0.6.14-python3.12-bookworm-slim to 0.6.16-python3.12-bookworm-slim @[dependabot[bot]](https://github.com/apps/dependabot) ([#9767](https://github.com/paperless-ngx/paperless-ngx/pull/9767)) - docker-compose(deps): bump gotenberg/gotenberg from 8.19 to 8.20 in /docker/compose @[dependabot[bot]](https://github.com/apps/dependabot) ([#9661](https://github.com/paperless-ngx/paperless-ngx/pull/9661)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 17 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#9768](https://github.com/paperless-ngx/paperless-ngx/pull/9768)) - Chore(deps-dev): Bump the frontend-eslint-dependencies group in /src-ui with 4 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#9770](https://github.com/paperless-ngx/paperless-ngx/pull/9770)) - Chore(deps-dev): Bump jest-preset-angular from 14.5.4 to 14.5.5 in /src-ui in the frontend-jest-dependencies group @[dependabot[bot]](https://github.com/apps/dependabot) ([#9769](https://github.com/paperless-ngx/paperless-ngx/pull/9769)) - Chore(deps): Bump the small-changes group across 1 directory with 6 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#9764](https://github.com/paperless-ngx/paperless-ngx/pull/9764)) - Chore(deps): Bump the django group across 1 directory with 6 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#9753](https://github.com/paperless-ngx/paperless-ngx/pull/9753)) - docker(deps): bump astral-sh/uv from 0.6.13-python3.12-bookworm-slim to 0.6.14-python3.12-bookworm-slim @[dependabot[bot]](https://github.com/apps/dependabot) ([#9656](https://github.com/paperless-ngx/paperless-ngx/pull/9656))"},{"location":"changelog/#all-app-changes_11","title":"All App Changes","text":"29 changes - Chore(deps): Bump the small-changes group across 1 directory with 6 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#9921](https://github.com/paperless-ngx/paperless-ngx/pull/9921)) - Fix: handle created change with api version increment, use created only on frontend, deprecate created_date [@shamoon](https://github.com/shamoon) ([#9962](https://github.com/paperless-ngx/paperless-ngx/pull/9962)) - Fixhancement: automatically disable email verification if no smtp setup [@shamoon](https://github.com/shamoon) ([#9949](https://github.com/paperless-ngx/paperless-ngx/pull/9949)) - Fix: ignore logo file from sanity checker [@shamoon](https://github.com/shamoon) ([#9946](https://github.com/paperless-ngx/paperless-ngx/pull/9946)) - [BREAKING] Change: treat created as date not datetime [@shamoon](https://github.com/shamoon) ([#9793](https://github.com/paperless-ngx/paperless-ngx/pull/9793)) - Fix/Chore: replace file drop package [@shamoon](https://github.com/shamoon) ([#9926](https://github.com/paperless-ngx/paperless-ngx/pull/9926)) - Chore: resolve dynamic import warnings from pdfjs, again [@shamoon](https://github.com/shamoon) ([#9924](https://github.com/paperless-ngx/paperless-ngx/pull/9924)) - Enhancement: support negative offset in scheduled workflows [@shamoon](https://github.com/shamoon) ([#9746](https://github.com/paperless-ngx/paperless-ngx/pull/9746)) - Fixhancement: better handle removed social apps in profile [@shamoon](https://github.com/shamoon) ([#9876](https://github.com/paperless-ngx/paperless-ngx/pull/9876)) - Enhancement: add barcode frontend config [@shamoon](https://github.com/shamoon) ([#9742](https://github.com/paperless-ngx/paperless-ngx/pull/9742)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 14 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#9848](https://github.com/paperless-ngx/paperless-ngx/pull/9848)) - Chore(deps-dev): Bump the frontend-eslint-dependencies group in /src-ui with 3 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#9849](https://github.com/paperless-ngx/paperless-ngx/pull/9849)) - Chore(deps-dev): Bump @types/node from 22.13.17 to 22.15.3 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#9850](https://github.com/paperless-ngx/paperless-ngx/pull/9850)) - Fix: correctly handle empty user for old notes api format, fix frontend API version [@shamoon](https://github.com/shamoon) ([#9846](https://github.com/paperless-ngx/paperless-ngx/pull/9846)) - Fix: fix single select in filterable dropdowns when editing [@shamoon](https://github.com/shamoon) ([#9834](https://github.com/paperless-ngx/paperless-ngx/pull/9834)) - Fix: always update classifier task result [@shamoon](https://github.com/shamoon) ([#9817](https://github.com/paperless-ngx/paperless-ngx/pull/9817)) - Fixhancement: check more permissions for status consumer messages [@shamoon](https://github.com/shamoon) ([#9804](https://github.com/paperless-ngx/paperless-ngx/pull/9804)) - Enhancement: support heic images [@shamoon](https://github.com/shamoon) ([#9771](https://github.com/paperless-ngx/paperless-ngx/pull/9771)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 17 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#9768](https://github.com/paperless-ngx/paperless-ngx/pull/9768)) - Chore(deps-dev): Bump the frontend-eslint-dependencies group in /src-ui with 4 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#9770](https://github.com/paperless-ngx/paperless-ngx/pull/9770)) - Chore(deps-dev): Bump jest-preset-angular from 14.5.4 to 14.5.5 in /src-ui in the frontend-jest-dependencies group @[dependabot[bot]](https://github.com/apps/dependabot) ([#9769](https://github.com/paperless-ngx/paperless-ngx/pull/9769)) - Enhancement: support allauth disable unknown account emails [@shamoon](https://github.com/shamoon) ([#9743](https://github.com/paperless-ngx/paperless-ngx/pull/9743)) - Enhancement: use patch instead of put for frontend document changes [@shamoon](https://github.com/shamoon) ([#9744](https://github.com/paperless-ngx/paperless-ngx/pull/9744)) - Chore(deps): Bump the small-changes group across 1 directory with 6 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#9764](https://github.com/paperless-ngx/paperless-ngx/pull/9764)) - Chore(deps): Bump the django group across 1 directory with 6 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#9753](https://github.com/paperless-ngx/paperless-ngx/pull/9753)) - Fixhancement: tag plus button should add tag to doc [@shamoon](https://github.com/shamoon) ([#9762](https://github.com/paperless-ngx/paperless-ngx/pull/9762)) - Fix: fix zoom increase/decrease buttons in FF [@shamoon](https://github.com/shamoon) ([#9761](https://github.com/paperless-ngx/paperless-ngx/pull/9761)) - Chore: switch from os.path to pathlib.Path [@gothicVI](https://github.com/gothicVI) ([#9339](https://github.com/paperless-ngx/paperless-ngx/pull/9339)) - Fix: include subpath in drf-spectacular settings if set [@shamoon](https://github.com/shamoon) ([#9738](https://github.com/paperless-ngx/paperless-ngx/pull/9738))"},{"location":"changelog/#paperless-ngx-2153","title":"paperless-ngx 2.15.3","text":""},{"location":"changelog/#bug-fixes_12","title":"Bug Fixes","text":""},{"location":"changelog/#all-app-changes_12","title":"All App Changes","text":"5 changes - Fix: do not try deleting original file that was moved to trash dir [@shamoon](https://github.com/shamoon) ([#9684](https://github.com/paperless-ngx/paperless-ngx/pull/9684)) - Fix: preserve non-ASCII filenames in document downloads [@shamoon](https://github.com/shamoon) ([#9702](https://github.com/paperless-ngx/paperless-ngx/pull/9702)) - Fix: fix breaking api change to document notes user field [@shamoon](https://github.com/shamoon) ([#9714](https://github.com/paperless-ngx/paperless-ngx/pull/9714)) - Fix: another doc link fix [@shamoon](https://github.com/shamoon) ([#9700](https://github.com/paperless-ngx/paperless-ngx/pull/9700)) - Fix: correctly handle dict data with webhook [@shamoon](https://github.com/shamoon) ([#9674](https://github.com/paperless-ngx/paperless-ngx/pull/9674))"},{"location":"changelog/#paperless-ngx-2152","title":"paperless-ngx 2.15.2","text":""},{"location":"changelog/#bug-fixes_13","title":"Bug Fixes","text":""},{"location":"changelog/#dependencies_9","title":"Dependencies","text":""},{"location":"changelog/#all-app-changes_13","title":"All App Changes","text":"4 changes - Tweak: consistently use created date when displaying doc in list [@shamoon](https://github.com/shamoon) ([#9651](https://github.com/paperless-ngx/paperless-ngx/pull/9651)) - Fix: Adds better handling during folder checking/creation/permissions for non-root [@stumpylog](https://github.com/stumpylog) ([#9616](https://github.com/paperless-ngx/paperless-ngx/pull/9616)) - Fix: Explicitly set the HOME environment to resolve issues running as root with database certificates [@stumpylog](https://github.com/stumpylog) ([#9643](https://github.com/paperless-ngx/paperless-ngx/pull/9643)) - Fix: prevent self-linking when bulk edit doc link [@shamoon](https://github.com/shamoon) ([#9629](https://github.com/paperless-ngx/paperless-ngx/pull/9629))"},{"location":"changelog/#paperless-ngx-2151","title":"paperless-ngx 2.15.1","text":""},{"location":"changelog/#bug-fixes_14","title":"Bug Fixes","text":""},{"location":"changelog/#maintenance_3","title":"Maintenance","text":""},{"location":"changelog/#dependencies_10","title":"Dependencies","text":""},{"location":"changelog/#all-app-changes_14","title":"All App Changes","text":"4 changes - Fix: Run migration lock as the correct user [@stumpylog](https://github.com/stumpylog) ([#9604](https://github.com/paperless-ngx/paperless-ngx/pull/9604)) - Fix: Adds a warning to the user if their secret file includes a trailing newline [@stumpylog](https://github.com/stumpylog) ([#9601](https://github.com/paperless-ngx/paperless-ngx/pull/9601)) - Fix: correct download filename in 2.15.0 [@shamoon](https://github.com/shamoon) ([#9599](https://github.com/paperless-ngx/paperless-ngx/pull/9599)) - Fix: dont exclude matching check for scheduled workflows [@shamoon](https://github.com/shamoon) ([#9594](https://github.com/paperless-ngx/paperless-ngx/pull/9594))"},{"location":"changelog/#paperless-ngx-2150","title":"paperless-ngx 2.15.0","text":""},{"location":"changelog/#features_1","title":"Features","text":""},{"location":"changelog/#bug-fixes_15","title":"Bug Fixes","text":""},{"location":"changelog/#maintenance_4","title":"Maintenance","text":""},{"location":"changelog/#dependencies_11","title":"Dependencies","text":"43 changes - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 20 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#9536](https://github.com/paperless-ngx/paperless-ngx/pull/9536)) - Chore(deps-dev): Bump the frontend-eslint-dependencies group in /src-ui with 4 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#9538](https://github.com/paperless-ngx/paperless-ngx/pull/9538)) - Chore(deps-dev): Bump @types/node from 22.13.9 to 22.13.17 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#9539](https://github.com/paperless-ngx/paperless-ngx/pull/9539)) - Chore(deps-dev): Bump jest-preset-angular from 14.5.3 to 14.5.4 in /src-ui in the frontend-jest-dependencies group @[dependabot[bot]](https://github.com/apps/dependabot) ([#9537](https://github.com/paperless-ngx/paperless-ngx/pull/9537)) - Chore(deps-dev): Bump @playwright/test from 1.50.1 to 1.51.1 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#9540](https://github.com/paperless-ngx/paperless-ngx/pull/9540)) - Chore(deps): Bump django from 5.1.6 to 5.1.7 in the django group @[dependabot[bot]](https://github.com/apps/dependabot) ([#9486](https://github.com/paperless-ngx/paperless-ngx/pull/9486)) - docker(deps): Bump astral-sh/uv from 0.6.5-python3.12-bookworm-slim to 0.6.9-python3.12-bookworm-slim @[dependabot[bot]](https://github.com/apps/dependabot) ([#9488](https://github.com/paperless-ngx/paperless-ngx/pull/9488)) - Chore(deps-dev): Bump the frontend-eslint-dependencies group in /src-ui with 4 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#9372](https://github.com/paperless-ngx/paperless-ngx/pull/9372)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 20 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#9371](https://github.com/paperless-ngx/paperless-ngx/pull/9371)) - Chore(deps): Update ocrmypdf requirement from ~=16.9.0 to ~=16.10.0 @[dependabot[bot]](https://github.com/apps/dependabot) ([#9348](https://github.com/paperless-ngx/paperless-ngx/pull/9348)) - Chore(deps): Update drf-spectacular-sidecar requirement from ~=2025.2.1 to ~=2025.3.1 @[dependabot[bot]](https://github.com/apps/dependabot) ([#9347](https://github.com/paperless-ngx/paperless-ngx/pull/9347)) - Chore(deps): Bump the small-changes group with 2 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#9345](https://github.com/paperless-ngx/paperless-ngx/pull/9345)) - docker-compose(deps): Bump library/postgres from 16 to 17 in /docker/compose @[dependabot[bot]](https://github.com/apps/dependabot) ([#9353](https://github.com/paperless-ngx/paperless-ngx/pull/9353)) - docker(deps): Bump astral-sh/uv from 0.6.3-python3.12-bookworm-slim to 0.6.5-python3.12-bookworm-slim @[dependabot[bot]](https://github.com/apps/dependabot) ([#9344](https://github.com/paperless-ngx/paperless-ngx/pull/9344)) - Chore(deps-dev): Bump the frontend-angular-dependencies group in /src-ui with 5 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#9288](https://github.com/paperless-ngx/paperless-ngx/pull/9288)) - Chore(deps-dev): Bump @types/node from 22.13.8 to 22.13.9 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#9290](https://github.com/paperless-ngx/paperless-ngx/pull/9290)) - Chore(deps-dev): Bump the frontend-eslint-dependencies group in /src-ui with 3 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#9289](https://github.com/paperless-ngx/paperless-ngx/pull/9289)) - Chore(deps-dev): Bump @types/node from 22.13.5 to 22.13.8 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#9267](https://github.com/paperless-ngx/paperless-ngx/pull/9267)) - Chore(deps): Bump stumpylog/image-cleaner-action from 0.9.0 to 0.10.0 in the actions group @[dependabot[bot]](https://github.com/apps/dependabot) ([#9252](https://github.com/paperless-ngx/paperless-ngx/pull/9252)) - Chore(deps-dev): Bump the development group with 2 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#9253](https://github.com/paperless-ngx/paperless-ngx/pull/9253)) - Chore(deps-dev): Bump @codecov/webpack-plugin from 1.8.0 to 1.9.0 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#9260](https://github.com/paperless-ngx/paperless-ngx/pull/9260)) - Chore(deps-dev): Bump the frontend-eslint-dependencies group in /src-ui with 4 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#9256](https://github.com/paperless-ngx/paperless-ngx/pull/9256)) - Chore(deps): Bump uuid from 11.0.5 to 11.1.0 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#9259](https://github.com/paperless-ngx/paperless-ngx/pull/9259)) - Chore(deps-dev): Bump jest-preset-angular from 14.5.1 to 14.5.3 in /src-ui in the frontend-jest-dependencies group @[dependabot[bot]](https://github.com/apps/dependabot) ([#9255](https://github.com/paperless-ngx/paperless-ngx/pull/9255)) - Chore(deps): Bump rxjs from 7.8.1 to 7.8.2 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#9258](https://github.com/paperless-ngx/paperless-ngx/pull/9258)) - Chore(deps-dev): Bump @types/node from 22.13.0 to 22.13.5 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#9257](https://github.com/paperless-ngx/paperless-ngx/pull/9257)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 22 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#9254](https://github.com/paperless-ngx/paperless-ngx/pull/9254)) - Chore(deps): Bump django-filter from 24.3 to 25.1 in the django group @[dependabot[bot]](https://github.com/apps/dependabot) ([#9143](https://github.com/paperless-ngx/paperless-ngx/pull/9143)) - Chore(deps-dev): Bump mkdocs-material from 9.6.3 to 9.6.4 in the development group @[dependabot[bot]](https://github.com/apps/dependabot) ([#9142](https://github.com/paperless-ngx/paperless-ngx/pull/9142)) - Dependencies: Updates to jbig2enc 0.30 [@stumpylog](https://github.com/stumpylog) ([#9092](https://github.com/paperless-ngx/paperless-ngx/pull/9092)) - Chore(deps): Bump cryptography from 44.0.0 to 44.0.1 @[dependabot[bot]](https://github.com/apps/dependabot) ([#9080](https://github.com/paperless-ngx/paperless-ngx/pull/9080)) - Chore(deps): Bump the small-changes group with 7 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#9064](https://github.com/paperless-ngx/paperless-ngx/pull/9064)) - Chore(deps-dev): Bump the development group with 3 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#9061](https://github.com/paperless-ngx/paperless-ngx/pull/9061)) - Chore(deps): Bump the django group across 1 directory with 2 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#9065](https://github.com/paperless-ngx/paperless-ngx/pull/9065)) - Chore(deps): Bump drf-spectacular-sidecar from 2024.11.1 to 2025.2.1 in the major-versions group @[dependabot[bot]](https://github.com/apps/dependabot) ([#9063](https://github.com/paperless-ngx/paperless-ngx/pull/9063)) - Chore(deps-dev): Bump the development group with 2 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#9013](https://github.com/paperless-ngx/paperless-ngx/pull/9013)) - Chore(deps): Bump django-soft-delete from 1.0.16 to 1.0.18 in the django group @[dependabot[bot]](https://github.com/apps/dependabot) ([#9014](https://github.com/paperless-ngx/paperless-ngx/pull/9014)) - Chore(deps): Bump uuid from 11.0.2 to 11.0.5 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#8992](https://github.com/paperless-ngx/paperless-ngx/pull/8992)) - Chore(deps-dev): Bump @codecov/webpack-plugin from 1.2.1 to 1.8.0 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#8991](https://github.com/paperless-ngx/paperless-ngx/pull/8991)) - Chore(deps-dev): Bump @playwright/test from 1.48.2 to 1.50.1 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#8993](https://github.com/paperless-ngx/paperless-ngx/pull/8993)) - Chore(deps-dev): Bump @types/node from 22.8.6 to 22.13.0 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#8989](https://github.com/paperless-ngx/paperless-ngx/pull/8989)) - Chore(deps-dev): Bump the frontend-eslint-dependencies group in /src-ui with 4 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#8988](https://github.com/paperless-ngx/paperless-ngx/pull/8988)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 23 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#8986](https://github.com/paperless-ngx/paperless-ngx/pull/8986))"},{"location":"changelog/#all-app-changes_15","title":"All App Changes","text":"109 changes - Fix: ensure only matched scheduled workflows are applied [@shamoon](https://github.com/shamoon) ([#9580](https://github.com/paperless-ngx/paperless-ngx/pull/9580)) - Fix: fix large doc thumb hidden at unexpected screen sizes [@shamoon](https://github.com/shamoon) ([#9559](https://github.com/paperless-ngx/paperless-ngx/pull/9559)) - Fix: fix potential race condition when creating new cf from doc details [@shamoon](https://github.com/shamoon) ([#9542](https://github.com/paperless-ngx/paperless-ngx/pull/9542)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 20 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#9536](https://github.com/paperless-ngx/paperless-ngx/pull/9536)) - Chore(deps-dev): Bump the frontend-eslint-dependencies group in /src-ui with 4 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#9538](https://github.com/paperless-ngx/paperless-ngx/pull/9538)) - Chore(deps-dev): Bump @types/node from 22.13.9 to 22.13.17 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#9539](https://github.com/paperless-ngx/paperless-ngx/pull/9539)) - Chore(deps-dev): Bump jest-preset-angular from 14.5.3 to 14.5.4 in /src-ui in the frontend-jest-dependencies group @[dependabot[bot]](https://github.com/apps/dependabot) ([#9537](https://github.com/paperless-ngx/paperless-ngx/pull/9537)) - Chore(deps-dev): Bump @playwright/test from 1.50.1 to 1.51.1 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#9540](https://github.com/paperless-ngx/paperless-ngx/pull/9540)) - Fix: fix doc link input [@shamoon](https://github.com/shamoon) ([#9533](https://github.com/paperless-ngx/paperless-ngx/pull/9533)) - Enhancement: allow webUI first account signup [@shamoon](https://github.com/shamoon) ([#9500](https://github.com/paperless-ngx/paperless-ngx/pull/9500)) - Fix: fix cf dropdown placement on mobile [@shamoon](https://github.com/shamoon) ([#9508](https://github.com/paperless-ngx/paperless-ngx/pull/9508)) - Chore(deps): Bump django from 5.1.6 to 5.1.7 in the django group @[dependabot[bot]](https://github.com/apps/dependabot) ([#9486](https://github.com/paperless-ngx/paperless-ngx/pull/9486)) - Fix: only overwrite existing cf values in workflow if set [@shamoon](https://github.com/shamoon) ([#9459](https://github.com/paperless-ngx/paperless-ngx/pull/9459)) - Fix: fix auto-close when doc update no longer has permissions [@shamoon](https://github.com/shamoon) ([#9453](https://github.com/paperless-ngx/paperless-ngx/pull/9453)) - Enhancement: support more 'not assigned' filtering, refactor [@shamoon](https://github.com/shamoon) ([#9429](https://github.com/paperless-ngx/paperless-ngx/pull/9429)) - Change: better handle permissions in patch requests [@shamoon](https://github.com/shamoon) ([#9393](https://github.com/paperless-ngx/paperless-ngx/pull/9393)) - Fix: use correct filename with webhook [@shamoon](https://github.com/shamoon) ([#9392](https://github.com/paperless-ngx/paperless-ngx/pull/9392)) - Change: sync OIDC groups on first login too [@shamoon](https://github.com/shamoon) ([#9387](https://github.com/paperless-ngx/paperless-ngx/pull/9387)) - Fix: only parse custom field queries when valid [@shamoon](https://github.com/shamoon) ([#9384](https://github.com/paperless-ngx/paperless-ngx/pull/9384)) - Chore(deps-dev): Bump the frontend-eslint-dependencies group in /src-ui with 4 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#9372](https://github.com/paperless-ngx/paperless-ngx/pull/9372)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 20 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#9371](https://github.com/paperless-ngx/paperless-ngx/pull/9371)) - Development: change frontend package manager to pnpm [@shamoon](https://github.com/shamoon) ([#9363](https://github.com/paperless-ngx/paperless-ngx/pull/9363)) - Fix: Allow setting of other Granian options [@stumpylog](https://github.com/stumpylog) ([#9360](https://github.com/paperless-ngx/paperless-ngx/pull/9360)) - Fix: Always clean up INotify [@stumpylog](https://github.com/stumpylog) ([#9359](https://github.com/paperless-ngx/paperless-ngx/pull/9359)) - Tweak: add saved views hint to dashboard [@shamoon](https://github.com/shamoon) ([#9362](https://github.com/paperless-ngx/paperless-ngx/pull/9362)) - Chore(deps): Update ocrmypdf requirement from ~=16.9.0 to ~=16.10.0 @[dependabot[bot]](https://github.com/apps/dependabot) ([#9348](https://github.com/paperless-ngx/paperless-ngx/pull/9348)) - Chore(deps): Update drf-spectacular-sidecar requirement from ~=2025.2.1 to ~=2025.3.1 @[dependabot[bot]](https://github.com/apps/dependabot) ([#9347](https://github.com/paperless-ngx/paperless-ngx/pull/9347)) - Chore(deps): Bump the small-changes group with 2 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#9345](https://github.com/paperless-ngx/paperless-ngx/pull/9345)) - Ensure the directories have been overridden and created for this test [@stumpylog](https://github.com/stumpylog) ([#9354](https://github.com/paperless-ngx/paperless-ngx/pull/9354)) - Fix typo in inactive account template [@ocean90](https://github.com/ocean90) ([#9356](https://github.com/paperless-ngx/paperless-ngx/pull/9356)) - Fix: fix notes serializing in API document response [@shamoon](https://github.com/shamoon) ([#9336](https://github.com/paperless-ngx/paperless-ngx/pull/9336)) - Fix: correct all results with whoosh queries [@shamoon](https://github.com/shamoon) ([#9331](https://github.com/paperless-ngx/paperless-ngx/pull/9331)) - Fix: fix typo in altered migration [@gothicVI](https://github.com/gothicVI) ([#9321](https://github.com/paperless-ngx/paperless-ngx/pull/9321)) - Fix: add account_inactive template / url [@shamoon](https://github.com/shamoon) ([#9322](https://github.com/paperless-ngx/paperless-ngx/pull/9322)) - Chore: Switch from os.path to pathlib.Path [@gothicVI](https://github.com/gothicVI) ([#9060](https://github.com/paperless-ngx/paperless-ngx/pull/9060)) - Enhancement: reorganize dates dropdown, add more relative options [@shamoon](https://github.com/shamoon) ([#9307](https://github.com/paperless-ngx/paperless-ngx/pull/9307)) - Chore: remove popper preventOverflow fix [@shamoon](https://github.com/shamoon) ([#9306](https://github.com/paperless-ngx/paperless-ngx/pull/9306)) - Enhancement: add switch to allow merging non-PDFs with archive version [@shamoon](https://github.com/shamoon) ([#9305](https://github.com/paperless-ngx/paperless-ngx/pull/9305)) - Enhancement: support assigning custom field values in workflows [@shamoon](https://github.com/shamoon) ([#9272](https://github.com/paperless-ngx/paperless-ngx/pull/9272)) - Chore: add codecov frontend test results [@shamoon](https://github.com/shamoon) ([#9296](https://github.com/paperless-ngx/paperless-ngx/pull/9296)) - Chore: Removes undocumented FileInfo [@stumpylog](https://github.com/stumpylog) ([#9298](https://github.com/paperless-ngx/paperless-ngx/pull/9298)) - Chore(deps-dev): Bump the frontend-angular-dependencies group in /src-ui with 5 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#9288](https://github.com/paperless-ngx/paperless-ngx/pull/9288)) - Fix: Switches data to content to upload raw bytes/text content [@stumpylog](https://github.com/stumpylog) ([#9293](https://github.com/paperless-ngx/paperless-ngx/pull/9293)) - Chore: Removes the unused Log model and LogFilterSet [@stumpylog](https://github.com/stumpylog) ([#9294](https://github.com/paperless-ngx/paperless-ngx/pull/9294)) - Chore: Combine Python settings files [@stumpylog](https://github.com/stumpylog) ([#9292](https://github.com/paperless-ngx/paperless-ngx/pull/9292)) - Chore(deps-dev): Bump @types/node from 22.13.8 to 22.13.9 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#9290](https://github.com/paperless-ngx/paperless-ngx/pull/9290)) - Chore(deps-dev): Bump the frontend-eslint-dependencies group in /src-ui with 3 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#9289](https://github.com/paperless-ngx/paperless-ngx/pull/9289)) - Chore: Switch from pipenv to uv [@stumpylog](https://github.com/stumpylog) ([#9251](https://github.com/paperless-ngx/paperless-ngx/pull/9251)) - Enhancement: Add slugify filter in templating [@hwaterke](https://github.com/hwaterke) ([#9269](https://github.com/paperless-ngx/paperless-ngx/pull/9269)) - Fix: handle null workflow body and email subject [@shamoon](https://github.com/shamoon) ([#9271](https://github.com/paperless-ngx/paperless-ngx/pull/9271)) - Chore(deps-dev): Bump @types/node from 22.13.5 to 22.13.8 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#9267](https://github.com/paperless-ngx/paperless-ngx/pull/9267)) - Chore(deps-dev): Bump the development group with 2 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#9253](https://github.com/paperless-ngx/paperless-ngx/pull/9253)) - Chore(deps-dev): Bump @codecov/webpack-plugin from 1.8.0 to 1.9.0 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#9260](https://github.com/paperless-ngx/paperless-ngx/pull/9260)) - Chore(deps-dev): Bump the frontend-eslint-dependencies group in /src-ui with 4 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#9256](https://github.com/paperless-ngx/paperless-ngx/pull/9256)) - Chore(deps): Bump uuid from 11.0.5 to 11.1.0 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#9259](https://github.com/paperless-ngx/paperless-ngx/pull/9259)) - Chore(deps-dev): Bump jest-preset-angular from 14.5.1 to 14.5.3 in /src-ui in the frontend-jest-dependencies group @[dependabot[bot]](https://github.com/apps/dependabot) ([#9255](https://github.com/paperless-ngx/paperless-ngx/pull/9255)) - Chore(deps): Bump rxjs from 7.8.1 to 7.8.2 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#9258](https://github.com/paperless-ngx/paperless-ngx/pull/9258)) - Chore(deps-dev): Bump @types/node from 22.13.0 to 22.13.5 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#9257](https://github.com/paperless-ngx/paperless-ngx/pull/9257)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 22 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#9254](https://github.com/paperless-ngx/paperless-ngx/pull/9254)) - Feature: Switch webserver to granian [@stumpylog](https://github.com/stumpylog) ([#9218](https://github.com/paperless-ngx/paperless-ngx/pull/9218)) - Enhancement: relocate and smaller upload widget, dont limit upload list [@shamoon](https://github.com/shamoon) ([#9244](https://github.com/paperless-ngx/paperless-ngx/pull/9244)) - Enhancement: run tasks from system status, report sanity check, simpler classifier check, styling updates [@shamoon](https://github.com/shamoon) ([#9106](https://github.com/paperless-ngx/paperless-ngx/pull/9106)) - Chore: Switch remote version check to HTTPx [@stumpylog](https://github.com/stumpylog) ([#9232](https://github.com/paperless-ngx/paperless-ngx/pull/9232)) - Fix: cleanup saved view references on custom field deletion, auto-refresh views, show error on saved view save [@shamoon](https://github.com/shamoon) ([#9225](https://github.com/paperless-ngx/paperless-ngx/pull/9225)) - Fix: revert thumbnail CSS workaround in favor of GPU workaround [@shamoon](https://github.com/shamoon) ([#9219](https://github.com/paperless-ngx/paperless-ngx/pull/9219)) - Chore: Reduce imports for a slight memory improvement [@stumpylog](https://github.com/stumpylog) ([#9217](https://github.com/paperless-ngx/paperless-ngx/pull/9217)) - Enhancement: include celery log in logs view [@shamoon](https://github.com/shamoon) ([#9214](https://github.com/paperless-ngx/paperless-ngx/pull/9214)) - Enhancement: support default groups for regular and social account signup, syncing on login [@shamoon](https://github.com/shamoon) ([#9039](https://github.com/paperless-ngx/paperless-ngx/pull/9039)) - Enhancement: allow disabling the filesystem consumer [@shamoon](https://github.com/shamoon) ([#9199](https://github.com/paperless-ngx/paperless-ngx/pull/9199)) - Fix: correct split confirm removal [@shamoon](https://github.com/shamoon) ([#9195](https://github.com/paperless-ngx/paperless-ngx/pull/9195)) - Feature: email document [@shamoon](https://github.com/shamoon) ([#8950](https://github.com/paperless-ngx/paperless-ngx/pull/8950)) - Enhancement: webui workflowtrigger source option [@shamoon](https://github.com/shamoon) ([#9170](https://github.com/paperless-ngx/paperless-ngx/pull/9170)) - Fix: saved views do not return to default display fields after setting and then removing [@shamoon](https://github.com/shamoon) ([#9168](https://github.com/paperless-ngx/paperless-ngx/pull/9168)) - Chore(deps): Bump django-filter from 24.3 to 25.1 in the django group @[dependabot[bot]](https://github.com/apps/dependabot) ([#9143](https://github.com/paperless-ngx/paperless-ngx/pull/9143)) - Chore(deps-dev): Bump mkdocs-material from 9.6.3 to 9.6.4 in the development group @[dependabot[bot]](https://github.com/apps/dependabot) ([#9142](https://github.com/paperless-ngx/paperless-ngx/pull/9142)) - Fix: correct logged number of deleted documents on trash empty [@shamoon](https://github.com/shamoon) ([#9148](https://github.com/paperless-ngx/paperless-ngx/pull/9148)) - Fix: include account confirm email allauth URL [@shamoon](https://github.com/shamoon) ([#9147](https://github.com/paperless-ngx/paperless-ngx/pull/9147)) - Fix: remove additional scrollbar from popup preview [@shamoon](https://github.com/shamoon) ([#9140](https://github.com/paperless-ngx/paperless-ngx/pull/9140)) - Fix: wrap selected display fields [@shamoon](https://github.com/shamoon) ([#9139](https://github.com/paperless-ngx/paperless-ngx/pull/9139)) - Enhancement: use charfield for webhook url, custom validation [@shamoon](https://github.com/shamoon) ([#9128](https://github.com/paperless-ngx/paperless-ngx/pull/9128)) - Fix: reset documents sort field if user deletes the custom field [@shamoon](https://github.com/shamoon) ([#9127](https://github.com/paperless-ngx/paperless-ngx/pull/9127)) - Chore: more efficient select cf update handler [@shamoon](https://github.com/shamoon) ([#9099](https://github.com/paperless-ngx/paperless-ngx/pull/9099)) - Fix: limit document title length in workflows [@shamoon](https://github.com/shamoon) ([#9085](https://github.com/paperless-ngx/paperless-ngx/pull/9085)) - Feature: Chinese Traditional translation [@LokiHung](https://github.com/LokiHung) ([#9076](https://github.com/paperless-ngx/paperless-ngx/pull/9076)) - Enhancement: Use cached sessions for a minor performance improvement [@stumpylog](https://github.com/stumpylog) ([#9074](https://github.com/paperless-ngx/paperless-ngx/pull/9074)) - Chore(deps): Bump the small-changes group with 7 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#9064](https://github.com/paperless-ngx/paperless-ngx/pull/9064)) - Chore(deps-dev): Bump the development group with 3 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#9061](https://github.com/paperless-ngx/paperless-ngx/pull/9061)) - Chore(deps): Bump the django group across 1 directory with 2 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#9065](https://github.com/paperless-ngx/paperless-ngx/pull/9065)) - Chore(deps): Bump drf-spectacular-sidecar from 2024.11.1 to 2025.2.1 in the major-versions group @[dependabot[bot]](https://github.com/apps/dependabot) ([#9063](https://github.com/paperless-ngx/paperless-ngx/pull/9063)) - Feature: openapi spec, full api browser [@shamoon](https://github.com/shamoon) ([#8948](https://github.com/paperless-ngx/paperless-ngx/pull/8948)) - Fix: include doc link input import in custom fields query dropdown [@shamoon](https://github.com/shamoon) ([#9058](https://github.com/paperless-ngx/paperless-ngx/pull/9058)) - Enhancement: filter by file type [@shamoon](https://github.com/shamoon) ([#8946](https://github.com/paperless-ngx/paperless-ngx/pull/8946)) - Enhancement: add layout options for email conversion [@RazielleS](https://github.com/RazielleS) ([#8907](https://github.com/paperless-ngx/paperless-ngx/pull/8907)) - Chore: Enable ruff FBT [@gothicVI](https://github.com/gothicVI) ([#8645](https://github.com/paperless-ngx/paperless-ngx/pull/8645)) - Feature: better toast notifications management [@shamoon](https://github.com/shamoon) ([#8980](https://github.com/paperless-ngx/paperless-ngx/pull/8980)) - Enhancement: date picker and date filter dropdown improvements [@shamoon](https://github.com/shamoon) ([#9033](https://github.com/paperless-ngx/paperless-ngx/pull/9033)) - Fix: deselect and trigger refresh for deleted documents from bulk operations with delete originals [@shamoon](https://github.com/shamoon) ([#8996](https://github.com/paperless-ngx/paperless-ngx/pull/8996)) - Tweak: improve date matching regex for dates after numbers [@XstreamGit](https://github.com/XstreamGit) ([#8964](https://github.com/paperless-ngx/paperless-ngx/pull/8964)) - Tweak: more accurate classifier last trained time [@shamoon](https://github.com/shamoon) ([#9004](https://github.com/paperless-ngx/paperless-ngx/pull/9004)) - Enhancement: allow setting default pdf zoom [@shamoon](https://github.com/shamoon) ([#9017](https://github.com/paperless-ngx/paperless-ngx/pull/9017)) - Chore(deps-dev): Bump the development group with 2 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#9013](https://github.com/paperless-ngx/paperless-ngx/pull/9013)) - Chore(deps): Bump django-soft-delete from 1.0.16 to 1.0.18 in the django group @[dependabot[bot]](https://github.com/apps/dependabot) ([#9014](https://github.com/paperless-ngx/paperless-ngx/pull/9014)) - Fix: allow empty email in profile [@shamoon](https://github.com/shamoon) ([#9012](https://github.com/paperless-ngx/paperless-ngx/pull/9012)) - Chore(deps): Bump uuid from 11.0.2 to 11.0.5 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#8992](https://github.com/paperless-ngx/paperless-ngx/pull/8992)) - Chore(deps-dev): Bump @codecov/webpack-plugin from 1.2.1 to 1.8.0 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#8991](https://github.com/paperless-ngx/paperless-ngx/pull/8991)) - Chore(deps-dev): Bump @playwright/test from 1.48.2 to 1.50.1 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#8993](https://github.com/paperless-ngx/paperless-ngx/pull/8993)) - Chore(deps-dev): Bump @types/node from 22.8.6 to 22.13.0 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#8989](https://github.com/paperless-ngx/paperless-ngx/pull/8989)) - Chore(deps-dev): Bump the frontend-eslint-dependencies group in /src-ui with 4 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#8988](https://github.com/paperless-ngx/paperless-ngx/pull/8988)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 23 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#8986](https://github.com/paperless-ngx/paperless-ngx/pull/8986))"},{"location":"changelog/#paperless-ngx-2147","title":"paperless-ngx 2.14.7","text":""},{"location":"changelog/#features_2","title":"Features","text":""},{"location":"changelog/#bug-fixes_16","title":"Bug Fixes","text":""},{"location":"changelog/#all-app-changes_16","title":"All App Changes","text":"4 changes - Chore(deps-dev): Bump ruff from 0.9.2 to 0.9.3 in the development group by @[dependabot[bot]](https://github.com/apps/dependabot) [#8928](https://github.com/paperless-ngx/paperless-ngx/pull/8928) - Enhancement: require totp code for obtain auth token by [@shamoon](https://github.com/shamoon) [#8936](https://github.com/paperless-ngx/paperless-ngx/pull/8936) - Fix: reflect doc links in bulk modify custom fields by [@shamoon](https://github.com/shamoon) [#8962](https://github.com/paperless-ngx/paperless-ngx/pull/8962) - Fix: also ensure symmetric doc link removal on bulk edit by [@shamoon](https://github.com/shamoon) [#8963](https://github.com/paperless-ngx/paperless-ngx/pull/8963)"},{"location":"changelog/#paperless-ngx-2146","title":"paperless-ngx 2.14.6","text":""},{"location":"changelog/#bug-fixes_17","title":"Bug Fixes","text":""},{"location":"changelog/#all-app-changes_17","title":"All App Changes","text":"10 changes - Fix: backwards-compatible versioned API response for custom field select fields, update default API version [@shamoon](https://github.com/shamoon) ([#8912](https://github.com/paperless-ngx/paperless-ngx/pull/8912)) - Tweak: place items with 0 documents at bottom of filterable list, retain alphabetical [@shamoon](https://github.com/shamoon) ([#8924](https://github.com/paperless-ngx/paperless-ngx/pull/8924)) - Fix: set larger page size for abstract service getFew [@shamoon](https://github.com/shamoon) ([#8920](https://github.com/paperless-ngx/paperless-ngx/pull/8920)) - Fix/refactor: remove doc observables, fix username async [@shamoon](https://github.com/shamoon) ([#8908](https://github.com/paperless-ngx/paperless-ngx/pull/8908)) - Fix: include missing fields for saved view widgets [@shamoon](https://github.com/shamoon) ([#8905](https://github.com/paperless-ngx/paperless-ngx/pull/8905)) - Chore: Upgrades dependencies and hook versions [@stumpylog](https://github.com/stumpylog) ([#8895](https://github.com/paperless-ngx/paperless-ngx/pull/8895)) - Fix: force set document not dirty before close after save [@shamoon](https://github.com/shamoon) ([#8888](https://github.com/paperless-ngx/paperless-ngx/pull/8888)) - Change: Revert dropdown sorting by doc count [@shamoon](https://github.com/shamoon) ([#8887](https://github.com/paperless-ngx/paperless-ngx/pull/8887)) - Fixhancement: restore search highlighting and add for built-in viewer [@shamoon](https://github.com/shamoon) ([#8885](https://github.com/paperless-ngx/paperless-ngx/pull/8885)) - Fix: resolve cpu usage due to incorrect interval use [@shamoon](https://github.com/shamoon) ([#8884](https://github.com/paperless-ngx/paperless-ngx/pull/8884))"},{"location":"changelog/#paperless-ngx-2145","title":"paperless-ngx 2.14.5","text":""},{"location":"changelog/#features_3","title":"Features","text":""},{"location":"changelog/#bug-fixes_18","title":"Bug Fixes","text":""},{"location":"changelog/#dependencies_12","title":"Dependencies","text":""},{"location":"changelog/#all-app-changes_18","title":"All App Changes","text":"9 changes - Chore(deps-dev): Bump undici from 5.28.4 to 5.28.5 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#8851](https://github.com/paperless-ngx/paperless-ngx/pull/8851)) - Chore(deps-dev): Bump the development group with 2 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#8841](https://github.com/paperless-ngx/paperless-ngx/pull/8841)) - Chore: use simpler method for attaching files to emails [@shamoon](https://github.com/shamoon) ([#8845](https://github.com/paperless-ngx/paperless-ngx/pull/8845)) - Change: restrict altering and creation of superusers to superusers only [@shamoon](https://github.com/shamoon) ([#8837](https://github.com/paperless-ngx/paperless-ngx/pull/8837)) - Fix: fix long tag visual wrapping [@shamoon](https://github.com/shamoon) ([#8833](https://github.com/paperless-ngx/paperless-ngx/pull/8833)) - Change: allow generate auth token without a usable password [@shamoon](https://github.com/shamoon) ([#8824](https://github.com/paperless-ngx/paperless-ngx/pull/8824)) - Fix: Enforce classifier training ordering to prevent extra training [@stumpylog](https://github.com/stumpylog) ([#8822](https://github.com/paperless-ngx/paperless-ngx/pull/8822)) - Fix: import router module to not found component [@shamoon](https://github.com/shamoon) ([#8821](https://github.com/paperless-ngx/paperless-ngx/pull/8821)) - Fix: better reflect some mail account / rule permissions in UI [@shamoon](https://github.com/shamoon) ([#8812](https://github.com/paperless-ngx/paperless-ngx/pull/8812))"},{"location":"changelog/#paperless-ngx-2144","title":"paperless-ngx 2.14.4","text":""},{"location":"changelog/#features_4","title":"Features","text":""},{"location":"changelog/#bug-fixes_19","title":"Bug Fixes","text":""},{"location":"changelog/#all-app-changes_19","title":"All App Changes","text":"5 changes - Enhancement: allow specifying JSON encoding for webhooks [@shamoon](https://github.com/shamoon) ([#8799](https://github.com/paperless-ngx/paperless-ngx/pull/8799)) - Change: disable API basic auth if MFA enabled [@shamoon](https://github.com/shamoon) ([#8792](https://github.com/paperless-ngx/paperless-ngx/pull/8792)) - Fix: Include email and webhook objects in the export [@stumpylog](https://github.com/stumpylog) ([#8790](https://github.com/paperless-ngx/paperless-ngx/pull/8790)) - Fix: use MIMEBase for email attachments [@shamoon](https://github.com/shamoon) ([#8762](https://github.com/paperless-ngx/paperless-ngx/pull/8762)) - Fix: handle page out of range in mgmt lists after delete [@shamoon](https://github.com/shamoon) ([#8771](https://github.com/paperless-ngx/paperless-ngx/pull/8771))"},{"location":"changelog/#paperless-ngx-2143","title":"paperless-ngx 2.14.3","text":""},{"location":"changelog/#bug-fixes_20","title":"Bug Fixes","text":""},{"location":"changelog/#all-app-changes_20","title":"All App Changes","text":"5 changes - Fix: Adds a default 30s timeout for emails, instead of no timeout [@stumpylog](https://github.com/stumpylog) ([#8757](https://github.com/paperless-ngx/paperless-ngx/pull/8757)) - Enhancement: set autofocus on MFA code field [@mxmehl](https://github.com/mxmehl) ([#8756](https://github.com/paperless-ngx/paperless-ngx/pull/8756)) - Fix: import forms modules for entries component [@shamoon](https://github.com/shamoon) ([#8752](https://github.com/paperless-ngx/paperless-ngx/pull/8752)) - Fix: fix email/wh actions on consume started [@shamoon](https://github.com/shamoon) ([#8750](https://github.com/paperless-ngx/paperless-ngx/pull/8750)) - Fix: import date picker module in cf query dropdown [@shamoon](https://github.com/shamoon) ([#8749](https://github.com/paperless-ngx/paperless-ngx/pull/8749))"},{"location":"changelog/#paperless-ngx-2142","title":"paperless-ngx 2.14.2","text":""},{"location":"changelog/#bug-fixes_21","title":"Bug Fixes","text":""},{"location":"changelog/#dependencies_13","title":"Dependencies","text":""},{"location":"changelog/#all-app-changes_21","title":"All App Changes","text":"7 changes - Fix: dont try to parse empty webhook params [@shamoon](https://github.com/shamoon) ([#8742](https://github.com/paperless-ngx/paperless-ngx/pull/8742)) - Fix: pass working file to workflows, pickle file bytes [@shamoon](https://github.com/shamoon) ([#8741](https://github.com/paperless-ngx/paperless-ngx/pull/8741)) - Fix: use hard delete when bulk editing custom fields [@shamoon](https://github.com/shamoon) ([#8740](https://github.com/paperless-ngx/paperless-ngx/pull/8740)) - Fix: Ensure email attachments use the latest document path for attachments [@stumpylog](https://github.com/stumpylog) ([#8737](https://github.com/paperless-ngx/paperless-ngx/pull/8737)) - Fix: include tooltip module for custom fields display [@shamoon](https://github.com/shamoon) ([#8739](https://github.com/paperless-ngx/paperless-ngx/pull/8739)) - Fix: remove id of webhook/email actions on copy [@shamoon](https://github.com/shamoon) ([#8729](https://github.com/paperless-ngx/paperless-ngx/pull/8729)) - Fix: import dnd module for merge confirm dialog [@shamoon](https://github.com/shamoon) ([#8727](https://github.com/paperless-ngx/paperless-ngx/pull/8727))"},{"location":"changelog/#paperless-ngx-2141","title":"paperless-ngx 2.14.1","text":""},{"location":"changelog/#bug-fixes_22","title":"Bug Fixes","text":""},{"location":"changelog/#all-app-changes_22","title":"All App Changes","text":"4 changes - Fix: prevent error if bulk edit method not in MODIFIED_FIELD_BY_METHOD [@shamoon](https://github.com/shamoon) ([#8710](https://github.com/paperless-ngx/paperless-ngx/pull/8710)) - Fix: include tag component in list view [@shamoon](https://github.com/shamoon) ([#8706](https://github.com/paperless-ngx/paperless-ngx/pull/8706)) - Fix: use unmodified original for checksum if exists [@shamoon](https://github.com/shamoon) ([#8693](https://github.com/paperless-ngx/paperless-ngx/pull/8693)) - Fix: complete load with native PDF viewer [@shamoon](https://github.com/shamoon) ([#8699](https://github.com/paperless-ngx/paperless-ngx/pull/8699))"},{"location":"changelog/#paperless-ngx-2140","title":"paperless-ngx 2.14.0","text":""},{"location":"changelog/#features_5","title":"Features","text":""},{"location":"changelog/#bug-fixes_23","title":"Bug Fixes","text":""},{"location":"changelog/#maintenance_5","title":"Maintenance","text":""},{"location":"changelog/#dependencies_14","title":"Dependencies","text":"16 changes - Chore(deps): Bump the small-changes group with 3 updates [@dependabot](https://github.com/dependabot) ([#8627](https://github.com/paperless-ngx/paperless-ngx/pull/8627)) - Chore(deps-dev): Bump ruff from 0.8.4 to 0.8.6 in the development group [@dependabot](https://github.com/dependabot) ([#8626](https://github.com/paperless-ngx/paperless-ngx/pull/8626)) - Chore(deps): Bump django-allauth from 65.3.0 to 65.3.1 in the django group [@dependabot](https://github.com/dependabot) ([#8574](https://github.com/paperless-ngx/paperless-ngx/pull/8574)) - Chore(deps-dev): Bump ruff from 0.8.3 to 0.8.4 in the development group [@dependabot](https://github.com/dependabot) ([#8546](https://github.com/paperless-ngx/paperless-ngx/pull/8546)) - Chore(deps): Bump the small-changes group with 6 updates [@dependabot](https://github.com/dependabot) ([#8547](https://github.com/paperless-ngx/paperless-ngx/pull/8547)) - Chore: update ng2 pdf viewer [@shamoon](https://github.com/shamoon) ([#8462](https://github.com/paperless-ngx/paperless-ngx/pull/8462)) - Chore(deps-dev): Bump the development group with 2 updates [@dependabot](https://github.com/dependabot) ([#8458](https://github.com/paperless-ngx/paperless-ngx/pull/8458)) - Chore(deps): Bump django-soft-delete from 1.0.15 to 1.0.16 in the django group [@dependabot](https://github.com/dependabot) ([#8459](https://github.com/paperless-ngx/paperless-ngx/pull/8459)) - Chore(deps): Bump the small-changes group with 4 updates [@dependabot](https://github.com/dependabot) ([#8460](https://github.com/paperless-ngx/paperless-ngx/pull/8460)) - Chore(deps): Bump django from 5.1.3 to 5.1.4 [@dependabot](https://github.com/dependabot) ([#8445](https://github.com/paperless-ngx/paperless-ngx/pull/8445)) - Chore(deps-dev): Bump the development group with 4 updates [@dependabot](https://github.com/dependabot) ([#8414](https://github.com/paperless-ngx/paperless-ngx/pull/8414)) - Chore(deps): Bump codecov/codecov-action from 4 to 5 in the actions group [@dependabot](https://github.com/dependabot) ([#8401](https://github.com/paperless-ngx/paperless-ngx/pull/8401)) - Chore(deps-dev): Bump the development group with 4 updates [@dependabot](https://github.com/dependabot) ([#8352](https://github.com/paperless-ngx/paperless-ngx/pull/8352)) - Chore(deps): Bump the small-changes group across 1 directory with 7 updates [@dependabot](https://github.com/dependabot) ([#8399](https://github.com/paperless-ngx/paperless-ngx/pull/8399)) - Chore(deps): Bump tornado from 6.4.1 to 6.4.2 [@dependabot](https://github.com/dependabot) ([#8336](https://github.com/paperless-ngx/paperless-ngx/pull/8336)) - Chore(deps): Bump watchdog from 5.0.3 to 6.0.0 in the major-versions group [@dependabot](https://github.com/dependabot) ([#8257](https://github.com/paperless-ngx/paperless-ngx/pull/8257))"},{"location":"changelog/#all-app-changes_23","title":"All App Changes","text":"65 changes - Fix: use state param with oauth [@shamoon](https://github.com/shamoon) ([#8636](https://github.com/paperless-ngx/paperless-ngx/pull/8636)) - Fix: check permissions for all documents via bulk download [@shamoon](https://github.com/shamoon) ([#8631](https://github.com/paperless-ngx/paperless-ngx/pull/8631)) - Chore(deps): Bump the small-changes group with 3 updates [@dependabot](https://github.com/dependabot) ([#8627](https://github.com/paperless-ngx/paperless-ngx/pull/8627)) - Chore(deps-dev): Bump ruff from 0.8.4 to 0.8.6 in the development group [@dependabot](https://github.com/dependabot) ([#8626](https://github.com/paperless-ngx/paperless-ngx/pull/8626)) - Chore: Switch from os.path to pathlib.Path [@gothicVI](https://github.com/gothicVI) ([#8325](https://github.com/paperless-ngx/paperless-ngx/pull/8325)) - Chore: disable max-age for some document endpoints [@tsia](https://github.com/tsia) ([#8611](https://github.com/paperless-ngx/paperless-ngx/pull/8611)) - Fix: do not accept empty string for doc link value via API [@shamoon](https://github.com/shamoon) ([#8596](https://github.com/paperless-ngx/paperless-ngx/pull/8596)) - Enhancement: angular 19 [@shamoon](https://github.com/shamoon) ([#8584](https://github.com/paperless-ngx/paperless-ngx/pull/8584)) - Fix: fix hotkey arrows [@shamoon](https://github.com/shamoon) ([#8583](https://github.com/paperless-ngx/paperless-ngx/pull/8583)) - Chore: remove outdated admin logentry handler [@shamoon](https://github.com/shamoon) ([#8580](https://github.com/paperless-ngx/paperless-ngx/pull/8580)) - Chore(deps): Bump django-allauth from 65.3.0 to 65.3.1 in the django group [@dependabot](https://github.com/dependabot) ([#8574](https://github.com/paperless-ngx/paperless-ngx/pull/8574)) - Enhancement: custom field sorting [@shamoon](https://github.com/shamoon) ([#8494](https://github.com/paperless-ngx/paperless-ngx/pull/8494)) - Fix: fix occasional error toast overflow [@shamoon](https://github.com/shamoon) ([#8552](https://github.com/paperless-ngx/paperless-ngx/pull/8552)) - Fix: fix share link archive version detection [@shamoon](https://github.com/shamoon) ([#8551](https://github.com/paperless-ngx/paperless-ngx/pull/8551)) - Chore(deps-dev): Bump ruff from 0.8.3 to 0.8.4 in the development group [@dependabot](https://github.com/dependabot) ([#8546](https://github.com/paperless-ngx/paperless-ngx/pull/8546)) - Chore(deps): Bump the small-changes group with 6 updates [@dependabot](https://github.com/dependabot) ([#8547](https://github.com/paperless-ngx/paperless-ngx/pull/8547)) - Enhancement: add timeout for Tika client [@HiranChaudhuri](https://github.com/HiranChaudhuri) ([#8520](https://github.com/paperless-ngx/paperless-ngx/pull/8520)) - Fix: add some minor frontend permissions checks [@shamoon](https://github.com/shamoon) ([#8524](https://github.com/paperless-ngx/paperless-ngx/pull/8524)) - FIx: obliquely trim spaces from global search [@shamoon](https://github.com/shamoon) ([#8484](https://github.com/paperless-ngx/paperless-ngx/pull/8484)) - Fix: include global perms for bulk edit endpoint [@shamoon](https://github.com/shamoon) ([#8468](https://github.com/paperless-ngx/paperless-ngx/pull/8468)) - Enhancement: process mail button [@shamoon](https://github.com/shamoon) ([#8466](https://github.com/paperless-ngx/paperless-ngx/pull/8466)) - Fix: frontend better reflect global perms for bulk edit, disabled form state [@shamoon](https://github.com/shamoon) ([#8469](https://github.com/paperless-ngx/paperless-ngx/pull/8469)) - Chore: update ng2 pdf viewer [@shamoon](https://github.com/shamoon) ([#8462](https://github.com/paperless-ngx/paperless-ngx/pull/8462)) - Chore(deps-dev): Bump the development group with 2 updates [@dependabot](https://github.com/dependabot) ([#8458](https://github.com/paperless-ngx/paperless-ngx/pull/8458)) - Chore(deps): Bump django-soft-delete from 1.0.15 to 1.0.16 in the django group [@dependabot](https://github.com/dependabot) ([#8459](https://github.com/paperless-ngx/paperless-ngx/pull/8459)) - Chore(deps): Bump the small-changes group with 4 updates [@dependabot](https://github.com/dependabot) ([#8460](https://github.com/paperless-ngx/paperless-ngx/pull/8460)) - Chore: use rxjs instead of JS setInterval for timers [@shamoon](https://github.com/shamoon) ([#8461](https://github.com/paperless-ngx/paperless-ngx/pull/8461)) - Feature: bulk edit custom field values [@shamoon](https://github.com/shamoon) ([#8428](https://github.com/paperless-ngx/paperless-ngx/pull/8428)) - Enhancement: improved loading visuals [@shamoon](https://github.com/shamoon) ([#8435](https://github.com/paperless-ngx/paperless-ngx/pull/8435)) - Enhancement: prune audit logs and management command [@shamoon](https://github.com/shamoon) ([#8416](https://github.com/paperless-ngx/paperless-ngx/pull/8416)) - Change: make saved views manage its own component [@shamoon](https://github.com/shamoon) ([#8423](https://github.com/paperless-ngx/paperless-ngx/pull/8423)) - Enhancement: file task filtering [@shamoon](https://github.com/shamoon) ([#8421](https://github.com/paperless-ngx/paperless-ngx/pull/8421)) - Enhancement: auto-link duplicate document [@shamoon](https://github.com/shamoon) ([#8415](https://github.com/paperless-ngx/paperless-ngx/pull/8415)) - Enhancement: include current filename placeholder in workflows @Lu-Fi ([#8319](https://github.com/paperless-ngx/paperless-ngx/pull/8319)) - Feature: email, webhook workflow actions [@shamoon](https://github.com/shamoon) ([#8108](https://github.com/paperless-ngx/paperless-ngx/pull/8108)) - Chore(deps-dev): Bump the development group with 4 updates [@dependabot](https://github.com/dependabot) ([#8414](https://github.com/paperless-ngx/paperless-ngx/pull/8414)) - Enhancement: use stable unique IDs for custom field select options [@shamoon](https://github.com/shamoon) ([#8299](https://github.com/paperless-ngx/paperless-ngx/pull/8299)) - Chore(deps-dev): Bump the development group with 4 updates [@dependabot](https://github.com/dependabot) ([#8352](https://github.com/paperless-ngx/paperless-ngx/pull/8352)) - Enhancement: better TIFF display browser support [@shamoon](https://github.com/shamoon) ([#8087](https://github.com/paperless-ngx/paperless-ngx/pull/8087)) - Chore(deps): Bump the small-changes group across 1 directory with 7 updates [@dependabot](https://github.com/dependabot) ([#8399](https://github.com/paperless-ngx/paperless-ngx/pull/8399)) - Enhancement: History (audit log) for bulk edit operations [@shamoon](https://github.com/shamoon) ([#8196](https://github.com/paperless-ngx/paperless-ngx/pull/8196)) - Enhancement: larger previews in action dialogs [@shamoon](https://github.com/shamoon) ([#8387](https://github.com/paperless-ngx/paperless-ngx/pull/8387)) - Enhancement: filterable list count sorting and opacification [@shamoon](https://github.com/shamoon) ([#8386](https://github.com/paperless-ngx/paperless-ngx/pull/8386)) - Enhancement: preview button for document list and trash, refactor [@shamoon](https://github.com/shamoon) ([#8384](https://github.com/paperless-ngx/paperless-ngx/pull/8384)) - Fixhancement: dispatch change event from current field prior to save [@shamoon](https://github.com/shamoon) ([#8369](https://github.com/paperless-ngx/paperless-ngx/pull/8369)) - Enhancement: use theme-color meta tag [@shamoon](https://github.com/shamoon) ([#8359](https://github.com/paperless-ngx/paperless-ngx/pull/8359)) - Chore: cleanup urls, use actions for some views [@shamoon](https://github.com/shamoon) ([#8346](https://github.com/paperless-ngx/paperless-ngx/pull/8346)) - Feature: scheduled workflow trigger [@shamoon](https://github.com/shamoon) ([#8036](https://github.com/paperless-ngx/paperless-ngx/pull/8036)) - Fix: handle very old dates with positive offset too [@shamoon](https://github.com/shamoon) ([#8335](https://github.com/paperless-ngx/paperless-ngx/pull/8335)) - Refactor: fix unnecessary use of filterable dropdown sorting [@shamoon](https://github.com/shamoon) ([#8328](https://github.com/paperless-ngx/paperless-ngx/pull/8328)) - Enhancement: offer link to restored document [@shamoon](https://github.com/shamoon) ([#8321](https://github.com/paperless-ngx/paperless-ngx/pull/8321)) - Enhancement: support owner permissions for file tasks [@shamoon](https://github.com/shamoon) ([#8195](https://github.com/paperless-ngx/paperless-ngx/pull/8195)) - Fixhancement: change update content to handle archive disabled [@shamoon](https://github.com/shamoon) ([#8315](https://github.com/paperless-ngx/paperless-ngx/pull/8315)) - Chore(deps): Bump watchdog from 5.0.3 to 6.0.0 in the major-versions group [@dependabot](https://github.com/dependabot) ([#8257](https://github.com/paperless-ngx/paperless-ngx/pull/8257)) - Enhancement: Add --compare-json option to document_exporter to write json files only if changed [@kdoren](https://github.com/kdoren) ([#8261](https://github.com/paperless-ngx/paperless-ngx/pull/8261)) - Enhancement: next / previous shortcuts for document list [@shamoon](https://github.com/shamoon) ([#8309](https://github.com/paperless-ngx/paperless-ngx/pull/8309)) - Feature: two-factor authentication [@shamoon](https://github.com/shamoon) ([#8012](https://github.com/paperless-ngx/paperless-ngx/pull/8012)) - Fix: include db_index caveat in squashed migrations [@shamoon](https://github.com/shamoon) ([#8292](https://github.com/paperless-ngx/paperless-ngx/pull/8292)) - Tweak: use fixed position for navbar [@shamoon](https://github.com/shamoon) ([#8279](https://github.com/paperless-ngx/paperless-ngx/pull/8279)) - Fix: prevent duplicate workflow runs [@shamoon](https://github.com/shamoon) ([#8268](https://github.com/paperless-ngx/paperless-ngx/pull/8268)) - Fix: add note about select options to edit dialog [@shamoon](https://github.com/shamoon) ([#8267](https://github.com/paperless-ngx/paperless-ngx/pull/8267)) - Enhancement: save \\& next / close shortcut key [@shamoon](https://github.com/shamoon) ([#8243](https://github.com/paperless-ngx/paperless-ngx/pull/8243)) - Feature: loading preview, better text popup preview [@shamoon](https://github.com/shamoon) ([#8011](https://github.com/paperless-ngx/paperless-ngx/pull/8011)) - Chore: switch src/documents/bulk\\*.py from os.path to pathlib.Path [@gothicVI](https://github.com/gothicVI) ([#7862](https://github.com/paperless-ngx/paperless-ngx/pull/7862)) - Chore: Bulk backend dependency updates [@stumpylog](https://github.com/stumpylog) ([#8212](https://github.com/paperless-ngx/paperless-ngx/pull/8212))"},{"location":"changelog/#paperless-ngx-2135","title":"paperless-ngx 2.13.5","text":""},{"location":"changelog/#bug-fixes_24","title":"Bug Fixes","text":""},{"location":"changelog/#maintenance_6","title":"Maintenance","text":""},{"location":"changelog/#dependencies_15","title":"Dependencies","text":""},{"location":"changelog/#all-app-changes_24","title":"All App Changes","text":"7 changes - Fix: handle page count exception for pw-protected files [@shamoon](https://github.com/shamoon) ([#8240](https://github.com/paperless-ngx/paperless-ngx/pull/8240)) - Fix: correctly track task id in list for change detection [@shamoon](https://github.com/shamoon) ([#8230](https://github.com/paperless-ngx/paperless-ngx/pull/8230)) - Fix: Admin pages should show trashed documents [@stumpylog](https://github.com/stumpylog) ([#8068](https://github.com/paperless-ngx/paperless-ngx/pull/8068)) - Fix: tag colors shouldn't change when selected in list [@shamoon](https://github.com/shamoon) ([#8225](https://github.com/paperless-ngx/paperless-ngx/pull/8225)) - Fix: fix re-activation of save button when changing array items [@shamoon](https://github.com/shamoon) ([#8208](https://github.com/paperless-ngx/paperless-ngx/pull/8208)) - Fix: fix thumbnail clipping, select inverted color in safari dark mode not system [@shamoon](https://github.com/shamoon) ([#8193](https://github.com/paperless-ngx/paperless-ngx/pull/8193)) - Fix: select checkbox should remain visible [@shamoon](https://github.com/shamoon) ([#8185](https://github.com/paperless-ngx/paperless-ngx/pull/8185)) - Fix: warn with proper error on ASN exists in trash [@shamoon](https://github.com/shamoon) ([#8176](https://github.com/paperless-ngx/paperless-ngx/pull/8176))"},{"location":"changelog/#paperless-ngx-2134","title":"paperless-ngx 2.13.4","text":""},{"location":"changelog/#bug-fixes_25","title":"Bug Fixes","text":""},{"location":"changelog/#all-app-changes_25","title":"All App Changes","text":"2 changes - Fix: fix dark mode icon blend mode in 2.13.3 [@shamoon](https://github.com/shamoon) ([#8166](https://github.com/paperless-ngx/paperless-ngx/pull/8166)) - Fix: fix clipped popup preview in 2.13.3 [@shamoon](https://github.com/shamoon) ([#8165](https://github.com/paperless-ngx/paperless-ngx/pull/8165))"},{"location":"changelog/#paperless-ngx-2133","title":"paperless-ngx 2.13.3","text":""},{"location":"changelog/#bug-fixes_26","title":"Bug Fixes","text":""},{"location":"changelog/#dependencies_16","title":"Dependencies","text":"8 changes - Chore(deps-dev): Bump the frontend-eslint-dependencies group in /src-ui with 4 updates [@dependabot](https://github.com/dependabot) ([#8145](https://github.com/paperless-ngx/paperless-ngx/pull/8145)) - Chore(deps-dev): Bump @types/node from 22.7.4 to 22.8.6 in /src-ui [@dependabot](https://github.com/dependabot) ([#8148](https://github.com/paperless-ngx/paperless-ngx/pull/8148)) - Chore(deps-dev): Bump @playwright/test from 1.47.2 to 1.48.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#8147](https://github.com/paperless-ngx/paperless-ngx/pull/8147)) - Chore(deps): Bump uuid from 10.0.0 to 11.0.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#8146](https://github.com/paperless-ngx/paperless-ngx/pull/8146)) - Chore(deps): Bump tslib from 2.7.0 to 2.8.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#8149](https://github.com/paperless-ngx/paperless-ngx/pull/8149)) - Chore(deps-dev): Bump @codecov/webpack-plugin from 1.2.0 to 1.2.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#8150](https://github.com/paperless-ngx/paperless-ngx/pull/8150)) - Chore(deps-dev): Bump @types/jest from 29.5.13 to 29.5.14 in /src-ui in the frontend-jest-dependencies group [@dependabot](https://github.com/dependabot) ([#8144](https://github.com/paperless-ngx/paperless-ngx/pull/8144)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 21 updates [@dependabot](https://github.com/dependabot) ([#8143](https://github.com/paperless-ngx/paperless-ngx/pull/8143))"},{"location":"changelog/#all-app-changes_26","title":"All App Changes","text":"14 changes - Fix: fix auto-clean PDFs, create parent dir for storing unmodified original [@shamoon](https://github.com/shamoon) ([#8157](https://github.com/paperless-ngx/paperless-ngx/pull/8157)) - Fix: correctly handle exists, false in custom field query filter @yichi-yang ([#8158](https://github.com/paperless-ngx/paperless-ngx/pull/8158)) - Chore(deps-dev): Bump the frontend-eslint-dependencies group in /src-ui with 4 updates [@dependabot](https://github.com/dependabot) ([#8145](https://github.com/paperless-ngx/paperless-ngx/pull/8145)) - Chore(deps-dev): Bump @types/node from 22.7.4 to 22.8.6 in /src-ui [@dependabot](https://github.com/dependabot) ([#8148](https://github.com/paperless-ngx/paperless-ngx/pull/8148)) - Chore(deps-dev): Bump @playwright/test from 1.47.2 to 1.48.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#8147](https://github.com/paperless-ngx/paperless-ngx/pull/8147)) - Chore(deps): Bump uuid from 10.0.0 to 11.0.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#8146](https://github.com/paperless-ngx/paperless-ngx/pull/8146)) - Chore(deps): Bump tslib from 2.7.0 to 2.8.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#8149](https://github.com/paperless-ngx/paperless-ngx/pull/8149)) - Chore(deps-dev): Bump @codecov/webpack-plugin from 1.2.0 to 1.2.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#8150](https://github.com/paperless-ngx/paperless-ngx/pull/8150)) - Chore(deps-dev): Bump @types/jest from 29.5.13 to 29.5.14 in /src-ui in the frontend-jest-dependencies group [@dependabot](https://github.com/dependabot) ([#8144](https://github.com/paperless-ngx/paperless-ngx/pull/8144)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 21 updates [@dependabot](https://github.com/dependabot) ([#8143](https://github.com/paperless-ngx/paperless-ngx/pull/8143)) - Fix: dont use filters for inverted thumbnails in Safari [@shamoon](https://github.com/shamoon) ([#8121](https://github.com/paperless-ngx/paperless-ngx/pull/8121)) - Fix: use static object for activedisplayfields to prevent changes [@shamoon](https://github.com/shamoon) ([#8120](https://github.com/paperless-ngx/paperless-ngx/pull/8120)) - Fix: dont invert pdf colors in FF [@shamoon](https://github.com/shamoon) ([#8110](https://github.com/paperless-ngx/paperless-ngx/pull/8110)) - Fix: make mail account password and refresh token text fields [@shamoon](https://github.com/shamoon) ([#8107](https://github.com/paperless-ngx/paperless-ngx/pull/8107))"},{"location":"changelog/#paperless-ngx-2132","title":"paperless-ngx 2.13.2","text":""},{"location":"changelog/#bug-fixes_27","title":"Bug Fixes","text":""},{"location":"changelog/#all-app-changes_27","title":"All App Changes","text":"2 changes - Fix: remove auth tokens from export [@shamoon](https://github.com/shamoon) ([#8100](https://github.com/paperless-ngx/paperless-ngx/pull/8100)) - Fix: cf query dropdown styling affecting other components [@shamoon](https://github.com/shamoon) ([#8095](https://github.com/paperless-ngx/paperless-ngx/pull/8095))"},{"location":"changelog/#paperless-ngx-2131","title":"paperless-ngx 2.13.1","text":""},{"location":"changelog/#bug-fixes_28","title":"Bug Fixes","text":""},{"location":"changelog/#maintenance_7","title":"Maintenance","text":""},{"location":"changelog/#all-app-changes_28","title":"All App Changes","text":"12 changes - Fix: allow removing dead document links from UI, validate via API [@shamoon](https://github.com/shamoon) ([#8081](https://github.com/paperless-ngx/paperless-ngx/pull/8081)) - Fix: Make all document related objects soft delete, fix filepath when deleted [@shamoon](https://github.com/shamoon) ([#8067](https://github.com/paperless-ngx/paperless-ngx/pull/8067)) - Fix: handle uuid fields created under mariadb and Django 4 [@shamoon](https://github.com/shamoon) ([#8034](https://github.com/paperless-ngx/paperless-ngx/pull/8034)) - Fix: Update filename correctly if the document is in the trash [@stumpylog](https://github.com/stumpylog) ([#8066](https://github.com/paperless-ngx/paperless-ngx/pull/8066)) - Fix: Handle a special case where removing none marker could result in an absolute path [@stumpylog](https://github.com/stumpylog) ([#8060](https://github.com/paperless-ngx/paperless-ngx/pull/8060)) - Fix: disable custom field signals during import in 2.13.0 [@shamoon](https://github.com/shamoon) ([#8065](https://github.com/paperless-ngx/paperless-ngx/pull/8065)) - Fix: doc link documents search should exclude null [@shamoon](https://github.com/shamoon) ([#8064](https://github.com/paperless-ngx/paperless-ngx/pull/8064)) - Enhancement: auto-rename document files when select type custom fields are changed [@shamoon](https://github.com/shamoon) ([#8045](https://github.com/paperless-ngx/paperless-ngx/pull/8045)) - Fix: fix custom field query empty element removal [@shamoon](https://github.com/shamoon) ([#8056](https://github.com/paperless-ngx/paperless-ngx/pull/8056)) - Fix: dont include all allauth urls [@shamoon](https://github.com/shamoon) ([#8010](https://github.com/paperless-ngx/paperless-ngx/pull/8010)) - Enhancement / fix: include social accounts and api tokens in export [@shamoon](https://github.com/shamoon) ([#8016](https://github.com/paperless-ngx/paperless-ngx/pull/8016)) - Fix: oauth settings without base url [@shamoon](https://github.com/shamoon) ([#8020](https://github.com/paperless-ngx/paperless-ngx/pull/8020))"},{"location":"changelog/#paperless-ngx-2130","title":"paperless-ngx 2.13.0","text":""},{"location":"changelog/#notable-changes_2","title":"Notable Changes","text":""},{"location":"changelog/#features_6","title":"Features","text":""},{"location":"changelog/#bug-fixes_29","title":"Bug Fixes","text":""},{"location":"changelog/#maintenance_8","title":"Maintenance","text":""},{"location":"changelog/#dependencies_17","title":"Dependencies","text":"10 changes - Chore(deps-dev): Bump @codecov/webpack-plugin from 1.0.1 to 1.2.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#7830](https://github.com/paperless-ngx/paperless-ngx/pull/7830)) - Chore(deps-dev): Bump @types/node from 22.5.2 to 22.7.4 in /src-ui [@dependabot](https://github.com/dependabot) ([#7829](https://github.com/paperless-ngx/paperless-ngx/pull/7829)) - Chore(deps-dev): Bump the frontend-eslint-dependencies group in /src-ui with 4 updates [@dependabot](https://github.com/dependabot) ([#7827](https://github.com/paperless-ngx/paperless-ngx/pull/7827)) - Chore(deps-dev): Bump the frontend-jest-dependencies group in /src-ui with 2 updates [@dependabot](https://github.com/dependabot) ([#7826](https://github.com/paperless-ngx/paperless-ngx/pull/7826)) - Chore(deps-dev): Bump @playwright/test from 1.46.1 to 1.47.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#7828](https://github.com/paperless-ngx/paperless-ngx/pull/7828)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 21 updates [@dependabot](https://github.com/dependabot) ([#7825](https://github.com/paperless-ngx/paperless-ngx/pull/7825)) - Chore: Upgrades OCRMyPDF to v16 [@stumpylog](https://github.com/stumpylog) ([#7815](https://github.com/paperless-ngx/paperless-ngx/pull/7815)) - Chore: Upgrades the Docker image to use Python 3.12 [@stumpylog](https://github.com/stumpylog) ([#7796](https://github.com/paperless-ngx/paperless-ngx/pull/7796)) - Chore: Upgrade Django to 5.1 [@stumpylog](https://github.com/stumpylog) ([#7795](https://github.com/paperless-ngx/paperless-ngx/pull/7795)) - Chore(deps-dev): Bump the development group with 2 updates [@dependabot](https://github.com/dependabot) ([#7723](https://github.com/paperless-ngx/paperless-ngx/pull/7723))"},{"location":"changelog/#all-app-changes_29","title":"All App Changes","text":"43 changes - Change: Use a TextField for the storage path field [@stumpylog](https://github.com/stumpylog) ([#7967](https://github.com/paperless-ngx/paperless-ngx/pull/7967)) - Fix: remove space before my profile button in dropdown [@tooomm](https://github.com/tooomm) ([#7963](https://github.com/paperless-ngx/paperless-ngx/pull/7963)) - Enhancement: QoL, auto-focus default select field in custom field dropdown [@shamoon](https://github.com/shamoon) ([#7961](https://github.com/paperless-ngx/paperless-ngx/pull/7961)) - Change: open not edit [@shamoon](https://github.com/shamoon) ([#7942](https://github.com/paperless-ngx/paperless-ngx/pull/7942)) - Fix: v2.13.0 RC1 - Handling of Nones when using custom fields in filepath templating [@stumpylog](https://github.com/stumpylog) ([#7933](https://github.com/paperless-ngx/paperless-ngx/pull/7933)) - Fix: v2.13.0 RC1 - trigger move and rename after CustomFieldInstance saved [@shamoon](https://github.com/shamoon) ([#7927](https://github.com/paperless-ngx/paperless-ngx/pull/7927)) - Fix: v2.13.0 RC1 - increase field max lengths to accommodate larger tokens [@shamoon](https://github.com/shamoon) ([#7916](https://github.com/paperless-ngx/paperless-ngx/pull/7916)) - Enhancement: support retain barcode split pages [@shamoon](https://github.com/shamoon) ([#7912](https://github.com/paperless-ngx/paperless-ngx/pull/7912)) - Fix: preserve text linebreaks in doc edit [@shamoon](https://github.com/shamoon) ([#7908](https://github.com/paperless-ngx/paperless-ngx/pull/7908)) - Enhancement: don't wait for doc API to load preview [@shamoon](https://github.com/shamoon) ([#7894](https://github.com/paperless-ngx/paperless-ngx/pull/7894)) - Fix: only show colon on cards if correspondent and title shown [@shamoon](https://github.com/shamoon) ([#7893](https://github.com/paperless-ngx/paperless-ngx/pull/7893)) - Feature: OAuth2 Gmail and Outlook email support [@shamoon](https://github.com/shamoon) ([#7866](https://github.com/paperless-ngx/paperless-ngx/pull/7866)) - Chore: Consolidate workflow logic [@shamoon](https://github.com/shamoon) ([#7880](https://github.com/paperless-ngx/paperless-ngx/pull/7880)) - Enhancement: live preview of storage path [@shamoon](https://github.com/shamoon) ([#7870](https://github.com/paperless-ngx/paperless-ngx/pull/7870)) - Fix: Allow ASN values of 0 from barcodes [@stumpylog](https://github.com/stumpylog) ([#7878](https://github.com/paperless-ngx/paperless-ngx/pull/7878)) - Fix: fix auto-dismiss completed tasks on open document [@shamoon](https://github.com/shamoon) ([#7869](https://github.com/paperless-ngx/paperless-ngx/pull/7869)) - Fix: trigger change warning for saved views with default fields if changed [@shamoon](https://github.com/shamoon) ([#7865](https://github.com/paperless-ngx/paperless-ngx/pull/7865)) - Feature: Enhanced templating for filename format [@stumpylog](https://github.com/stumpylog) ([#7836](https://github.com/paperless-ngx/paperless-ngx/pull/7836)) - Enhancement: management list button improvements [@shamoon](https://github.com/shamoon) ([#7848](https://github.com/paperless-ngx/paperless-ngx/pull/7848)) - Enhancement: check for mail destination directory, log post-consume errors [@mrichtarsky](https://github.com/mrichtarsky) ([#7808](https://github.com/paperless-ngx/paperless-ngx/pull/7808)) - Feature: custom fields queries [@shamoon](https://github.com/shamoon) ([#7761](https://github.com/paperless-ngx/paperless-ngx/pull/7761)) - Chore(deps-dev): Bump @codecov/webpack-plugin from 1.0.1 to 1.2.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#7830](https://github.com/paperless-ngx/paperless-ngx/pull/7830)) - Chore(deps-dev): Bump @types/node from 22.5.2 to 22.7.4 in /src-ui [@dependabot](https://github.com/dependabot) ([#7829](https://github.com/paperless-ngx/paperless-ngx/pull/7829)) - Chore(deps-dev): Bump the frontend-eslint-dependencies group in /src-ui with 4 updates [@dependabot](https://github.com/dependabot) ([#7827](https://github.com/paperless-ngx/paperless-ngx/pull/7827)) - Chore(deps-dev): Bump the frontend-jest-dependencies group in /src-ui with 2 updates [@dependabot](https://github.com/dependabot) ([#7826](https://github.com/paperless-ngx/paperless-ngx/pull/7826)) - Chore(deps-dev): Bump @playwright/test from 1.46.1 to 1.47.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#7828](https://github.com/paperless-ngx/paperless-ngx/pull/7828)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 21 updates [@dependabot](https://github.com/dependabot) ([#7825](https://github.com/paperless-ngx/paperless-ngx/pull/7825)) - Chore: Upgrades OCRMyPDF to v16 [@stumpylog](https://github.com/stumpylog) ([#7815](https://github.com/paperless-ngx/paperless-ngx/pull/7815)) - Enhancement: workflow overview toggle enable button [@shamoon](https://github.com/shamoon) ([#7818](https://github.com/paperless-ngx/paperless-ngx/pull/7818)) - Enhancement: disable-able mail rules, add toggle to overview [@shamoon](https://github.com/shamoon) ([#7810](https://github.com/paperless-ngx/paperless-ngx/pull/7810)) - Chore: Upgrades the Docker image to use Python 3.12 [@stumpylog](https://github.com/stumpylog) ([#7796](https://github.com/paperless-ngx/paperless-ngx/pull/7796)) - Chore: Upgrade Django to 5.1 [@stumpylog](https://github.com/stumpylog) ([#7795](https://github.com/paperless-ngx/paperless-ngx/pull/7795)) - Chore: Drop Python 3.9 support [@stumpylog](https://github.com/stumpylog) ([#7774](https://github.com/paperless-ngx/paperless-ngx/pull/7774)) - Feature: auto-clean some invalid pdfs [@shamoon](https://github.com/shamoon) ([#7651](https://github.com/paperless-ngx/paperless-ngx/pull/7651)) - Feature: page count [@s0llvan](https://github.com/s0llvan) ([#7750](https://github.com/paperless-ngx/paperless-ngx/pull/7750)) - Fix: hidden canvas element causes scroll bug [@shamoon](https://github.com/shamoon) ([#7770](https://github.com/paperless-ngx/paperless-ngx/pull/7770)) - Enhancement: compactify dates dropdown [@shamoon](https://github.com/shamoon) ([#7759](https://github.com/paperless-ngx/paperless-ngx/pull/7759)) - Fix: handle overflowing dropdowns on mobile [@shamoon](https://github.com/shamoon) ([#7758](https://github.com/paperless-ngx/paperless-ngx/pull/7758)) - Enhancement: set Django SESSION_EXPIRE_AT_BROWSER_CLOSE from PAPERLESS_ACCOUNT_SESSION_REMEMBER [@shamoon](https://github.com/shamoon) ([#7748](https://github.com/paperless-ngx/paperless-ngx/pull/7748)) - Enhancement: allow setting session cookie age [@shamoon](https://github.com/shamoon) ([#7743](https://github.com/paperless-ngx/paperless-ngx/pull/7743)) - Fix: chrome scrolling in >= 129 [@shamoon](https://github.com/shamoon) ([#7738](https://github.com/paperless-ngx/paperless-ngx/pull/7738)) - Feature: copy workflows and mail rules, improve layout [@shamoon](https://github.com/shamoon) ([#7727](https://github.com/paperless-ngx/paperless-ngx/pull/7727)) - Chore(deps-dev): Bump the development group with 2 updates [@dependabot](https://github.com/dependabot) ([#7723](https://github.com/paperless-ngx/paperless-ngx/pull/7723))"},{"location":"changelog/#paperless-ngx-2121","title":"paperless-ngx 2.12.1","text":""},{"location":"changelog/#bug-fixes_30","title":"Bug Fixes","text":""},{"location":"changelog/#all-app-changes_30","title":"All App Changes","text":"7 changes - Fix: wait to apply tag changes until other changes saved with multiple workflow actions [@shamoon](https://github.com/shamoon) ([#7711](https://github.com/paperless-ngx/paperless-ngx/pull/7711)) - Fix: delete_pages should require ownership (not just change perms) [@shamoon](https://github.com/shamoon) ([#7714](https://github.com/paperless-ngx/paperless-ngx/pull/7714)) - Enhancement: improve text contrast for selected documents in list view dark mode [@shamoon](https://github.com/shamoon) ([#7712](https://github.com/paperless-ngx/paperless-ngx/pull/7712)) - Fix: filter out shown custom fields that have been deleted from saved\u2026 [@shamoon](https://github.com/shamoon) ([#7710](https://github.com/paperless-ngx/paperless-ngx/pull/7710)) - Fix: only filter by string or number properties for filter pipe [@shamoon](https://github.com/shamoon) ([#7699](https://github.com/paperless-ngx/paperless-ngx/pull/7699)) - Fix: saved view permissions fixes [@shamoon](https://github.com/shamoon) ([#7672](https://github.com/paperless-ngx/paperless-ngx/pull/7672)) - Fix: add permissions for OPTIONS requests for notes [@shamoon](https://github.com/shamoon) ([#7661](https://github.com/paperless-ngx/paperless-ngx/pull/7661))"},{"location":"changelog/#paperless-ngx-2120","title":"paperless-ngx 2.12.0","text":""},{"location":"changelog/#features-enhancements_6","title":"Features / Enhancements","text":""},{"location":"changelog/#bug-fixes_31","title":"Bug Fixes","text":""},{"location":"changelog/#dependencies_18","title":"Dependencies","text":"11 changes - Chore(deps): Bump cryptography from 42.0.8 to 43.0.1 [@dependabot](https://github.com/dependabot) ([#7620](https://github.com/paperless-ngx/paperless-ngx/pull/7620)) - Chore(deps-dev): Bump the development group with 3 updates [@dependabot](https://github.com/dependabot) ([#7608](https://github.com/paperless-ngx/paperless-ngx/pull/7608)) - Chore(deps): Bump rapidfuzz from 3.9.6 to 3.9.7 in the small-changes group [@dependabot](https://github.com/dependabot) ([#7611](https://github.com/paperless-ngx/paperless-ngx/pull/7611)) - Chore(deps): Bump tslib from 2.6.3 to 2.7.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#7606](https://github.com/paperless-ngx/paperless-ngx/pull/7606)) - Chore(deps-dev): Bump [@playwright/test from 1.45.3 to 1.46.1 in /src-ui @dependabot](https://github.com/playwright/test from 1.45.3 to 1.46.1 in /src-ui @dependabot) ([#7603](https://github.com/paperless-ngx/paperless-ngx/pull/7603)) - Chore(deps-dev): Bump typescript from 5.4.5 to 5.5.4 in /src-ui [@dependabot](https://github.com/dependabot) ([#7604](https://github.com/paperless-ngx/paperless-ngx/pull/7604)) - Chore(deps-dev): Bump the frontend-eslint-dependencies group in /src-ui with 4 updates [@dependabot](https://github.com/dependabot) ([#7600](https://github.com/paperless-ngx/paperless-ngx/pull/7600)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 21 updates [@dependabot](https://github.com/dependabot) ([#7599](https://github.com/paperless-ngx/paperless-ngx/pull/7599)) - Chore(deps): Bump pathvalidate from 3.2.0 to 3.2.1 in the small-changes group [@dependabot](https://github.com/dependabot) ([#7548](https://github.com/paperless-ngx/paperless-ngx/pull/7548)) - Chore(deps): Bump micromatch from 4.0.5 to 4.0.8 in /src-ui [@dependabot](https://github.com/dependabot) ([#7551](https://github.com/paperless-ngx/paperless-ngx/pull/7551)) - Chore(deps-dev): Bump the development group with 2 updates [@dependabot](https://github.com/dependabot) ([#7545](https://github.com/paperless-ngx/paperless-ngx/pull/7545))"},{"location":"changelog/#all-app-changes_31","title":"All App Changes","text":"27 changes - Chore: Update backend dependencies in bulk [@stumpylog](https://github.com/stumpylog) ([#7656](https://github.com/paperless-ngx/paperless-ngx/pull/7656)) - Fix: Rework system check so it won't crash if tesseract is not found [@stumpylog](https://github.com/stumpylog) ([#7640](https://github.com/paperless-ngx/paperless-ngx/pull/7640)) - Refactor: performance and storage optimization of barcode scanning [@loewexy](https://github.com/loewexy) ([#7646](https://github.com/paperless-ngx/paperless-ngx/pull/7646)) - Fix: use JSON for note audit log entries [@shamoon](https://github.com/shamoon) ([#7650](https://github.com/paperless-ngx/paperless-ngx/pull/7650)) - Enhancement: re-work mail rule dialog, support multiple include patterns [@shamoon](https://github.com/shamoon) ([#7635](https://github.com/paperless-ngx/paperless-ngx/pull/7635)) - Fix: correct broken pdfjs worker src after upgrade to pdfjs v4 [@shamoon](https://github.com/shamoon) ([#7626](https://github.com/paperless-ngx/paperless-ngx/pull/7626)) - Chore(deps-dev): Bump the development group with 3 updates [@dependabot](https://github.com/dependabot) ([#7608](https://github.com/paperless-ngx/paperless-ngx/pull/7608)) - Chore(deps): Bump rapidfuzz from 3.9.6 to 3.9.7 in the small-changes group [@dependabot](https://github.com/dependabot) ([#7611](https://github.com/paperless-ngx/paperless-ngx/pull/7611)) - Chore: remove unused frontend dependencies [@shamoon](https://github.com/shamoon) ([#7607](https://github.com/paperless-ngx/paperless-ngx/pull/7607)) - Chore(deps): Bump tslib from 2.6.3 to 2.7.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#7606](https://github.com/paperless-ngx/paperless-ngx/pull/7606)) - Chore(deps-dev): Bump [@playwright/test from 1.45.3 to 1.46.1 in /src-ui @dependabot](https://github.com/playwright/test from 1.45.3 to 1.46.1 in /src-ui @dependabot) ([#7603](https://github.com/paperless-ngx/paperless-ngx/pull/7603)) - Chore(deps-dev): Bump typescript from 5.4.5 to 5.5.4 in /src-ui [@dependabot](https://github.com/dependabot) ([#7604](https://github.com/paperless-ngx/paperless-ngx/pull/7604)) - Chore(deps-dev): Bump the frontend-eslint-dependencies group in /src-ui with 4 updates [@dependabot](https://github.com/dependabot) ([#7600](https://github.com/paperless-ngx/paperless-ngx/pull/7600)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 21 updates [@dependabot](https://github.com/dependabot) ([#7599](https://github.com/paperless-ngx/paperless-ngx/pull/7599)) - Fix: fix non-clickable scroll wheel in file uploads list [@shamoon](https://github.com/shamoon) ([#7591](https://github.com/paperless-ngx/paperless-ngx/pull/7591)) - Fix: deselect file tasks select all button on dismiss [@shamoon](https://github.com/shamoon) ([#7592](https://github.com/paperless-ngx/paperless-ngx/pull/7592)) - Fix: saved view sidebar heading not always visible [@shamoon](https://github.com/shamoon) ([#7584](https://github.com/paperless-ngx/paperless-ngx/pull/7584)) - Enhancement: add Korean language [@shamoon](https://github.com/shamoon) ([#7573](https://github.com/paperless-ngx/paperless-ngx/pull/7573)) - Enhancement: mail message preprocessor for gpg encrypted mails [@dbankmann](https://github.com/dbankmann) ([#7456](https://github.com/paperless-ngx/paperless-ngx/pull/7456)) - Fix: correct select field wrapping with long text [@shamoon](https://github.com/shamoon) ([#7572](https://github.com/paperless-ngx/paperless-ngx/pull/7572)) - Fix: update ng-bootstrap to fix datepicker bug [@shamoon](https://github.com/shamoon) ([#7567](https://github.com/paperless-ngx/paperless-ngx/pull/7567)) - Enhancement: allow multiple filename attachment exclusion patterns for a mail rule [@MelleD](https://github.com/MelleD) ([#5524](https://github.com/paperless-ngx/paperless-ngx/pull/5524)) - Chore(deps): Bump pathvalidate from 3.2.0 to 3.2.1 in the small-changes group [@dependabot](https://github.com/dependabot) ([#7548](https://github.com/paperless-ngx/paperless-ngx/pull/7548)) - Chore(deps): Bump micromatch from 4.0.5 to 4.0.8 in /src-ui [@dependabot](https://github.com/dependabot) ([#7551](https://github.com/paperless-ngx/paperless-ngx/pull/7551)) - Chore(deps-dev): Bump the development group with 2 updates [@dependabot](https://github.com/dependabot) ([#7545](https://github.com/paperless-ngx/paperless-ngx/pull/7545)) - Refactor: Use django-filter logic for filtering full text search queries [@yichi-yang](https://github.com/yichi-yang) ([#7507](https://github.com/paperless-ngx/paperless-ngx/pull/7507)) - Refactor: Reduce number of SQL queries when serializing List[Document] [@yichi-yang](https://github.com/yichi-yang) ([#7505](https://github.com/paperless-ngx/paperless-ngx/pull/7505))"},{"location":"changelog/#paperless-ngx-2116","title":"paperless-ngx 2.11.6","text":""},{"location":"changelog/#bug-fixes_32","title":"Bug Fixes","text":""},{"location":"changelog/#all-app-changes_32","title":"All App Changes","text":"1 change - Fix: fix nltk tokenizer breaking change [@shamoon](https://github.com/shamoon) ([#7522](https://github.com/paperless-ngx/paperless-ngx/pull/7522))"},{"location":"changelog/#paperless-ngx-2115","title":"paperless-ngx 2.11.5","text":""},{"location":"changelog/#bug-fixes_33","title":"Bug Fixes","text":""},{"location":"changelog/#dependencies_19","title":"Dependencies","text":"5 changes - Chore(deps): Bump the small-changes group across 1 directory with 6 updates [@dependabot](https://github.com/dependabot) ([#7502](https://github.com/paperless-ngx/paperless-ngx/pull/7502)) - Chore(deps-dev): Bump the development group with 2 updates [@dependabot](https://github.com/dependabot) ([#7497](https://github.com/paperless-ngx/paperless-ngx/pull/7497)) - Chore(deps-dev): Bump axios from 1.6.7 to 1.7.4 in /src-ui [@dependabot](https://github.com/dependabot) ([#7472](https://github.com/paperless-ngx/paperless-ngx/pull/7472)) - Chore(deps-dev): Bump ruff from 0.5.6 to 0.5.7 in the development group [@dependabot](https://github.com/dependabot) ([#7457](https://github.com/paperless-ngx/paperless-ngx/pull/7457)) - Chore(deps): Bump the small-changes group with 3 updates [@dependabot](https://github.com/dependabot) ([#7460](https://github.com/paperless-ngx/paperless-ngx/pull/7460))"},{"location":"changelog/#all-app-changes_33","title":"All App Changes","text":"7 changes - Fix: use JSON for update archive file auditlog entries [@shamoon](https://github.com/shamoon) ([#7503](https://github.com/paperless-ngx/paperless-ngx/pull/7503)) - Chore(deps): Bump the small-changes group across 1 directory with 6 updates [@dependabot](https://github.com/dependabot) ([#7502](https://github.com/paperless-ngx/paperless-ngx/pull/7502)) - Fix: respect deskew / rotate pages from AppConfig if set [@shamoon](https://github.com/shamoon) ([#7501](https://github.com/paperless-ngx/paperless-ngx/pull/7501)) - Chore(deps-dev): Bump the development group with 2 updates [@dependabot](https://github.com/dependabot) ([#7497](https://github.com/paperless-ngx/paperless-ngx/pull/7497)) - Chore(deps-dev): Bump axios from 1.6.7 to 1.7.4 in /src-ui [@dependabot](https://github.com/dependabot) ([#7472](https://github.com/paperless-ngx/paperless-ngx/pull/7472)) - Chore(deps-dev): Bump ruff from 0.5.6 to 0.5.7 in the development group [@dependabot](https://github.com/dependabot) ([#7457](https://github.com/paperless-ngx/paperless-ngx/pull/7457)) - Chore(deps): Bump the small-changes group with 3 updates [@dependabot](https://github.com/dependabot) ([#7460](https://github.com/paperless-ngx/paperless-ngx/pull/7460))"},{"location":"changelog/#paperless-ngx-2114","title":"paperless-ngx 2.11.4","text":""},{"location":"changelog/#bug-fixes_34","title":"Bug Fixes","text":""},{"location":"changelog/#all-app-changes_34","title":"All App Changes","text":""},{"location":"changelog/#paperless-ngx-2113","title":"paperless-ngx 2.11.3","text":""},{"location":"changelog/#features_7","title":"Features","text":""},{"location":"changelog/#bug-fixes_35","title":"Bug Fixes","text":""},{"location":"changelog/#maintenance_9","title":"Maintenance","text":""},{"location":"changelog/#dependencies_20","title":"Dependencies","text":"11 changes - Chore(deps): Bump django from 4.2.14 to 4.2.15 [@dependabot](https://github.com/dependabot) ([#7412](https://github.com/paperless-ngx/paperless-ngx/pull/7412)) - Chore(deps-dev): Bump the development group with 3 updates [@dependabot](https://github.com/dependabot) ([#7394](https://github.com/paperless-ngx/paperless-ngx/pull/7394)) - Chore(deps): Bump the small-changes group with 5 updates [@dependabot](https://github.com/dependabot) ([#7397](https://github.com/paperless-ngx/paperless-ngx/pull/7397)) - Chore(deps-dev): Bump [@playwright/test from 1.42.1 to 1.45.3 in /src-ui @dependabot](https://github.com/playwright/test from 1.42.1 to 1.45.3 in /src-ui @dependabot) ([#7367](https://github.com/paperless-ngx/paperless-ngx/pull/7367)) - Chore(deps-dev): Bump [@types/node from 20.12.2 to 22.0.2 in /src-ui @dependabot](https://github.com/types/node from 20.12.2 to 22.0.2 in /src-ui @dependabot) ([#7366](https://github.com/paperless-ngx/paperless-ngx/pull/7366)) - Chore(deps-dev): Bump the frontend-eslint-dependencies group in /src-ui with 4 updates [@dependabot](https://github.com/dependabot) ([#7365](https://github.com/paperless-ngx/paperless-ngx/pull/7365)) - Chore(deps): Bump uuid from 9.0.1 to 10.0.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#7370](https://github.com/paperless-ngx/paperless-ngx/pull/7370)) - Chore(deps): Bump stumpylog/image-cleaner-action from 0.7.0 to 0.8.0 in the actions group [@dependabot](https://github.com/dependabot) ([#7371](https://github.com/paperless-ngx/paperless-ngx/pull/7371)) - Chore(deps): Bump zone.js from 0.14.4 to 0.14.8 in /src-ui [@dependabot](https://github.com/dependabot) ([#7368](https://github.com/paperless-ngx/paperless-ngx/pull/7368)) - Chore(deps-dev): Bump jest-preset-angular from 14.1.1 to 14.2.2 in /src-ui in the frontend-jest-dependencies group [@dependabot](https://github.com/dependabot) ([#7364](https://github.com/paperless-ngx/paperless-ngx/pull/7364)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 20 updates [@dependabot](https://github.com/dependabot) ([#7363](https://github.com/paperless-ngx/paperless-ngx/pull/7363))"},{"location":"changelog/#all-app-changes_35","title":"All App Changes","text":"15 changes - Fix: clear selection after reload for management lists [@shamoon](https://github.com/shamoon) ([#7421](https://github.com/paperless-ngx/paperless-ngx/pull/7421)) - Enhancement: optimize tasks / stats reload [@shamoon](https://github.com/shamoon) ([#7402](https://github.com/paperless-ngx/paperless-ngx/pull/7402)) - Enhancement: allow specifying default currency for Monetary custom field [@shamoon](https://github.com/shamoon) ([#7381](https://github.com/paperless-ngx/paperless-ngx/pull/7381)) - Enhancement: specify when pre-check fails for documents in trash [@shamoon](https://github.com/shamoon) ([#7355](https://github.com/paperless-ngx/paperless-ngx/pull/7355)) - Chore(deps-dev): Bump the development group with 3 updates [@dependabot](https://github.com/dependabot) ([#7394](https://github.com/paperless-ngx/paperless-ngx/pull/7394)) - Fix: disable inline create buttons if insufficient permissions [@shamoon](https://github.com/shamoon) ([#7401](https://github.com/paperless-ngx/paperless-ngx/pull/7401)) - Chore(deps): Bump the small-changes group with 5 updates [@dependabot](https://github.com/dependabot) ([#7397](https://github.com/paperless-ngx/paperless-ngx/pull/7397)) - Chore(deps-dev): Bump [@playwright/test from 1.42.1 to 1.45.3 in /src-ui @dependabot](https://github.com/playwright/test from 1.42.1 to 1.45.3 in /src-ui @dependabot) ([#7367](https://github.com/paperless-ngx/paperless-ngx/pull/7367)) - Chore(deps-dev): Bump [@types/node from 20.12.2 to 22.0.2 in /src-ui @dependabot](https://github.com/types/node from 20.12.2 to 22.0.2 in /src-ui @dependabot) ([#7366](https://github.com/paperless-ngx/paperless-ngx/pull/7366)) - Chore(deps-dev): Bump the frontend-eslint-dependencies group in /src-ui with 4 updates [@dependabot](https://github.com/dependabot) ([#7365](https://github.com/paperless-ngx/paperless-ngx/pull/7365)) - Chore(deps): Bump uuid from 9.0.1 to 10.0.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#7370](https://github.com/paperless-ngx/paperless-ngx/pull/7370)) - Chore(deps): Bump zone.js from 0.14.4 to 0.14.8 in /src-ui [@dependabot](https://github.com/dependabot) ([#7368](https://github.com/paperless-ngx/paperless-ngx/pull/7368)) - Chore(deps-dev): Bump jest-preset-angular from 14.1.1 to 14.2.2 in /src-ui in the frontend-jest-dependencies group [@dependabot](https://github.com/dependabot) ([#7364](https://github.com/paperless-ngx/paperless-ngx/pull/7364)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 20 updates [@dependabot](https://github.com/dependabot) ([#7363](https://github.com/paperless-ngx/paperless-ngx/pull/7363)) - Fix: use entire document for dropzone [@shamoon](https://github.com/shamoon) ([#7342](https://github.com/paperless-ngx/paperless-ngx/pull/7342))"},{"location":"changelog/#paperless-ngx-2112","title":"paperless-ngx 2.11.2","text":""},{"location":"changelog/#changes","title":"Changes","text":""},{"location":"changelog/#dependencies_21","title":"Dependencies","text":""},{"location":"changelog/#all-app-changes_36","title":"All App Changes","text":"5 changes - Change: more clearly handle init permissions error [@shamoon](https://github.com/shamoon) ([#7334](https://github.com/paperless-ngx/paperless-ngx/pull/7334)) - Chore: add permissions info link from webUI [@shamoon](https://github.com/shamoon) ([#7310](https://github.com/paperless-ngx/paperless-ngx/pull/7310)) - Fix: increase search input text contrast with light custom theme colors [@JayBkr](https://github.com/JayBkr) ([#7303](https://github.com/paperless-ngx/paperless-ngx/pull/7303)) - Chore(deps-dev): Bump the development group with 2 updates [@dependabot](https://github.com/dependabot) ([#7296](https://github.com/paperless-ngx/paperless-ngx/pull/7296)) - Chore(deps): Bump tika-client from 0.5.0 to 0.6.0 in the small-changes group [@dependabot](https://github.com/dependabot) ([#7297](https://github.com/paperless-ngx/paperless-ngx/pull/7297))"},{"location":"changelog/#paperless-ngx-2111","title":"paperless-ngx 2.11.1","text":""},{"location":"changelog/#features_8","title":"Features","text":""},{"location":"changelog/#bug-fixes_36","title":"Bug Fixes","text":""},{"location":"changelog/#dependencies_22","title":"Dependencies","text":""},{"location":"changelog/#all-app-changes_37","title":"All App Changes","text":"7 changes - Fix: support multiple inbox tags from stats widget [@shamoon](https://github.com/shamoon) ([#7281](https://github.com/paperless-ngx/paperless-ngx/pull/7281)) - Chore(deps-dev): Bump the development group with 2 updates [@dependabot](https://github.com/dependabot) ([#7261](https://github.com/paperless-ngx/paperless-ngx/pull/7261)) - Chore(deps): Bump the small-changes group across 1 directory with 2 updates [@dependabot](https://github.com/dependabot) ([#7266](https://github.com/paperless-ngx/paperless-ngx/pull/7266)) - Enhancement: include owner username in post-consumption variables [@Freddy-0](https://github.com/Freddy-0) ([#7270](https://github.com/paperless-ngx/paperless-ngx/pull/7270)) - Chore: Squash older automatic migrations [@stumpylog](https://github.com/stumpylog) ([#7267](https://github.com/paperless-ngx/paperless-ngx/pull/7267)) - Fix: Removes Turkish from the NLTK languages [@stumpylog](https://github.com/stumpylog) ([#7246](https://github.com/paperless-ngx/paperless-ngx/pull/7246)) - Fix: include trashed docs in existing doc check [@shamoon](https://github.com/shamoon) ([#7229](https://github.com/paperless-ngx/paperless-ngx/pull/7229))"},{"location":"changelog/#paperless-ngx-2110","title":"paperless-ngx 2.11.0","text":""},{"location":"changelog/#breaking-changes_2","title":"Breaking Changes","text":""},{"location":"changelog/#features_9","title":"Features","text":""},{"location":"changelog/#bug-fixes_37","title":"Bug Fixes","text":""},{"location":"changelog/#maintenance_10","title":"Maintenance","text":""},{"location":"changelog/#dependencies_23","title":"Dependencies","text":"11 changes - Chore: Bulk backend updates [@stumpylog](https://github.com/stumpylog) ([#7209](https://github.com/paperless-ngx/paperless-ngx/pull/7209)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 14 updates [@dependabot](https://github.com/dependabot) ([#7200](https://github.com/paperless-ngx/paperless-ngx/pull/7200)) - Chore(deps): Bump certifi from 2024.6.2 to 2024.7.4 [@dependabot](https://github.com/dependabot) ([#7166](https://github.com/paperless-ngx/paperless-ngx/pull/7166)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 6 updates [@dependabot](https://github.com/dependabot) ([#7148](https://github.com/paperless-ngx/paperless-ngx/pull/7148)) - Chore(deps): Bump django-multiselectfield from 0.1.12 to 0.1.13 in the django group [@dependabot](https://github.com/dependabot) ([#7147](https://github.com/paperless-ngx/paperless-ngx/pull/7147)) - Chore(deps): Bump docker/build-push-action from 5 to 6 in the actions group [@dependabot](https://github.com/dependabot) ([#7125](https://github.com/paperless-ngx/paperless-ngx/pull/7125)) - Chore(deps): Bump the small-changes group across 1 directory with 4 updates [@dependabot](https://github.com/dependabot) ([#7128](https://github.com/paperless-ngx/paperless-ngx/pull/7128)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 16 updates [@dependabot](https://github.com/dependabot) ([#7126](https://github.com/paperless-ngx/paperless-ngx/pull/7126)) - Chore(deps-dev): Bump ruff from 0.4.9 to 0.5.0 in the development group across 1 directory [@dependabot](https://github.com/dependabot) ([#7120](https://github.com/paperless-ngx/paperless-ngx/pull/7120)) - Chore(deps-dev): Bump ws from 8.17.0 to 8.17.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#7114](https://github.com/paperless-ngx/paperless-ngx/pull/7114)) - Chore: update to Angular v18 [@shamoon](https://github.com/shamoon) ([#7106](https://github.com/paperless-ngx/paperless-ngx/pull/7106))"},{"location":"changelog/#all-app-changes_38","title":"All App Changes","text":"25 changes - Enhancement: disable add split button when appropriate [@shamoon](https://github.com/shamoon) ([#7215](https://github.com/paperless-ngx/paperless-ngx/pull/7215)) - Enhancement: wrapping of saved view fields d-n-d UI [@shamoon](https://github.com/shamoon) ([#7216](https://github.com/paperless-ngx/paperless-ngx/pull/7216)) - Chore: Bulk backend updates [@stumpylog](https://github.com/stumpylog) ([#7209](https://github.com/paperless-ngx/paperless-ngx/pull/7209)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 14 updates [@dependabot](https://github.com/dependabot) ([#7200](https://github.com/paperless-ngx/paperless-ngx/pull/7200)) - Enhancement: support custom field icontains filter for select type [@shamoon](https://github.com/shamoon) ([#7199](https://github.com/paperless-ngx/paperless-ngx/pull/7199)) - Chore: upgrade to DRF 3.15 [@shamoon](https://github.com/shamoon) ([#7134](https://github.com/paperless-ngx/paperless-ngx/pull/7134)) - Feature: select custom field type [@shamoon](https://github.com/shamoon) ([#7167](https://github.com/paperless-ngx/paperless-ngx/pull/7167)) - Feature: automatic sso redirect [@shamoon](https://github.com/shamoon) ([#7168](https://github.com/paperless-ngx/paperless-ngx/pull/7168)) - Fix: include documents in trash for existing asn check [@shamoon](https://github.com/shamoon) ([#7189](https://github.com/paperless-ngx/paperless-ngx/pull/7189)) - Chore: Initial conversion to pytest fixtures [@stumpylog](https://github.com/stumpylog) ([#7110](https://github.com/paperless-ngx/paperless-ngx/pull/7110)) - Enhancement: show more columns in mail frontend admin [@shamoon](https://github.com/shamoon) ([#7158](https://github.com/paperless-ngx/paperless-ngx/pull/7158)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 6 updates [@dependabot](https://github.com/dependabot) ([#7148](https://github.com/paperless-ngx/paperless-ngx/pull/7148)) - Chore(deps): Bump django-multiselectfield from 0.1.12 to 0.1.13 in the django group [@dependabot](https://github.com/dependabot) ([#7147](https://github.com/paperless-ngx/paperless-ngx/pull/7147)) - Fix: include documents in trash in sanity check [@shamoon](https://github.com/shamoon) ([#7133](https://github.com/paperless-ngx/paperless-ngx/pull/7133)) - Chore(deps): Bump the small-changes group across 1 directory with 4 updates [@dependabot](https://github.com/dependabot) ([#7128](https://github.com/paperless-ngx/paperless-ngx/pull/7128)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 16 updates [@dependabot](https://github.com/dependabot) ([#7126](https://github.com/paperless-ngx/paperless-ngx/pull/7126)) - Enhancement: use request user as owner of split / merge docs [@shamoon](https://github.com/shamoon) ([#7112](https://github.com/paperless-ngx/paperless-ngx/pull/7112)) - Fix: handle errors for trash actions and only show documents user can restore or delete [@shamoon](https://github.com/shamoon) ([#7119](https://github.com/paperless-ngx/paperless-ngx/pull/7119)) - Chore(deps-dev): Bump ruff from 0.4.9 to 0.5.0 in the development group across 1 directory [@dependabot](https://github.com/dependabot) ([#7120](https://github.com/paperless-ngx/paperless-ngx/pull/7120)) - Chore(deps-dev): Bump ws from 8.17.0 to 8.17.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#7114](https://github.com/paperless-ngx/paperless-ngx/pull/7114)) - Chore: update to Angular v18 [@shamoon](https://github.com/shamoon) ([#7106](https://github.com/paperless-ngx/paperless-ngx/pull/7106)) - Enhancement: improve date parsing with accented characters [@fdubuy](https://github.com/fdubuy) ([#7100](https://github.com/paperless-ngx/paperless-ngx/pull/7100)) - Feature: improve history display of object names etc [@shamoon](https://github.com/shamoon) ([#7102](https://github.com/paperless-ngx/paperless-ngx/pull/7102)) - Fix: dont include documents in trash in counts [@shamoon](https://github.com/shamoon) ([#7111](https://github.com/paperless-ngx/paperless-ngx/pull/7111)) - Fix: use temp dir for split / merge [@shamoon](https://github.com/shamoon) ([#7105](https://github.com/paperless-ngx/paperless-ngx/pull/7105))"},{"location":"changelog/#paperless-ngx-2102","title":"paperless-ngx 2.10.2","text":""},{"location":"changelog/#bug-fixes_38","title":"Bug Fixes","text":""},{"location":"changelog/#all-app-changes_39","title":"All App Changes","text":"5 changes - Fix: always update document modified property on bulk edit operations [@shamoon](https://github.com/shamoon) ([#7079](https://github.com/paperless-ngx/paperless-ngx/pull/7079)) - Fix: correct frontend retrieval of trash delay setting [@shamoon](https://github.com/shamoon) ([#7067](https://github.com/paperless-ngx/paperless-ngx/pull/7067)) - Fix: index fresh document data after update archive file [@shamoon](https://github.com/shamoon) ([#7057](https://github.com/paperless-ngx/paperless-ngx/pull/7057)) - Fix: Safari browser PDF viewer not loading in 2.10.x [@shamoon](https://github.com/shamoon) ([#7056](https://github.com/paperless-ngx/paperless-ngx/pull/7056)) - Fix: Prefer the exporter metadata JSON file over the version JSON file [@stumpylog](https://github.com/stumpylog) ([#7048](https://github.com/paperless-ngx/paperless-ngx/pull/7048))"},{"location":"changelog/#paperless-ngx-2101","title":"paperless-ngx 2.10.1","text":""},{"location":"changelog/#bug-fixes_39","title":"Bug Fixes","text":""},{"location":"changelog/#paperless-ngx-2100","title":"paperless-ngx 2.10.0","text":""},{"location":"changelog/#features_10","title":"Features","text":""},{"location":"changelog/#bug-fixes_40","title":"Bug Fixes","text":""},{"location":"changelog/#documentation_1","title":"Documentation","text":""},{"location":"changelog/#maintenance_11","title":"Maintenance","text":""},{"location":"changelog/#dependencies_24","title":"Dependencies","text":"10 changes - Chore(deps): Bump pipenv from 2023.12.1 to 2024.0.1 [@stumpylog](https://github.com/stumpylog) ([#7019](https://github.com/paperless-ngx/paperless-ngx/pull/7019)) - Chore(deps): Bump the small-changes group with 2 updates [@dependabot](https://github.com/dependabot) ([#7013](https://github.com/paperless-ngx/paperless-ngx/pull/7013)) - Chore(deps-dev): Bump the development group with 2 updates [@dependabot](https://github.com/dependabot) ([#7012](https://github.com/paperless-ngx/paperless-ngx/pull/7012)) - Chore(deps-dev): Bump ws from 8.15.1 to 8.17.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#7015](https://github.com/paperless-ngx/paperless-ngx/pull/7015)) - Chore(deps): Bump urllib3 from 2.2.1 to 2.2.2 [@dependabot](https://github.com/dependabot) ([#7014](https://github.com/paperless-ngx/paperless-ngx/pull/7014)) - Chore: update packages used by mail parser html template [@shamoon](https://github.com/shamoon) ([#6970](https://github.com/paperless-ngx/paperless-ngx/pull/6970)) - Chore(deps): Bump stumpylog/image-cleaner-action from 0.6.0 to 0.7.0 in the actions group [@dependabot](https://github.com/dependabot) ([#6968](https://github.com/paperless-ngx/paperless-ngx/pull/6968)) - Chore(deps-dev): Bump the development group with 3 updates [@dependabot](https://github.com/dependabot) ([#6953](https://github.com/paperless-ngx/paperless-ngx/pull/6953)) - Chore: Updates to latest Trixie version of Ghostscript 10.03.1 [@stumpylog](https://github.com/stumpylog) ([#6956](https://github.com/paperless-ngx/paperless-ngx/pull/6956)) - Chore(deps): Bump tornado from 6.4 to 6.4.1 [@dependabot](https://github.com/dependabot) ([#6930](https://github.com/paperless-ngx/paperless-ngx/pull/6930))"},{"location":"changelog/#all-app-changes_40","title":"All App Changes","text":"17 changes - Chore(deps): Bump the small-changes group with 2 updates [@dependabot](https://github.com/dependabot) ([#7013](https://github.com/paperless-ngx/paperless-ngx/pull/7013)) - Chore(deps-dev): Bump the development group with 2 updates [@dependabot](https://github.com/dependabot) ([#7012](https://github.com/paperless-ngx/paperless-ngx/pull/7012)) - Chore(deps-dev): Bump ws from 8.15.1 to 8.17.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#7015](https://github.com/paperless-ngx/paperless-ngx/pull/7015)) - Feature: documents trash aka soft delete [@shamoon](https://github.com/shamoon) ([#6944](https://github.com/paperless-ngx/paperless-ngx/pull/6944)) - Enhancement: better boolean custom field display [@shamoon](https://github.com/shamoon) ([#7001](https://github.com/paperless-ngx/paperless-ngx/pull/7001)) - Fix: default order of documents gets lost in QuerySet pipeline [@madduck](https://github.com/madduck) ([#6982](https://github.com/paperless-ngx/paperless-ngx/pull/6982)) - Fix: Document history could include extra fields [@stumpylog](https://github.com/stumpylog) ([#6989](https://github.com/paperless-ngx/paperless-ngx/pull/6989)) - Fix: use local pdf worker js [@shamoon](https://github.com/shamoon) ([#6990](https://github.com/paperless-ngx/paperless-ngx/pull/6990)) - Fix: Revert masking the content field from auditlog [@tribut](https://github.com/tribut) ([#6981](https://github.com/paperless-ngx/paperless-ngx/pull/6981)) - Chore: update packages used by mail parser html template [@shamoon](https://github.com/shamoon) ([#6970](https://github.com/paperless-ngx/paperless-ngx/pull/6970)) - Chore(deps-dev): Bump the development group with 3 updates [@dependabot](https://github.com/dependabot) ([#6953](https://github.com/paperless-ngx/paperless-ngx/pull/6953)) - Fix: respect model permissions for tasks API endpoint [@shamoon](https://github.com/shamoon) ([#6958](https://github.com/paperless-ngx/paperless-ngx/pull/6958)) - Feature: Allow encrypting sensitive fields in export [@stumpylog](https://github.com/stumpylog) ([#6927](https://github.com/paperless-ngx/paperless-ngx/pull/6927)) - Enhancement: allow consumption of odg files [@daniel-boehme](https://github.com/daniel-boehme) ([#6940](https://github.com/paperless-ngx/paperless-ngx/pull/6940)) - Enhancement: use note model permissions for notes [@shamoon](https://github.com/shamoon) ([#6913](https://github.com/paperless-ngx/paperless-ngx/pull/6913)) - Chore: Resolves test issues with Python 3.12 [@stumpylog](https://github.com/stumpylog) ([#6902](https://github.com/paperless-ngx/paperless-ngx/pull/6902)) - Fix: Make the logging of an email message to be something useful [@stumpylog](https://github.com/stumpylog) ([#6901](https://github.com/paperless-ngx/paperless-ngx/pull/6901))"},{"location":"changelog/#paperless-ngx-290","title":"paperless-ngx 2.9.0","text":""},{"location":"changelog/#features_11","title":"Features","text":""},{"location":"changelog/#bug-fixes_41","title":"Bug Fixes","text":""},{"location":"changelog/#maintenance_12","title":"Maintenance","text":""},{"location":"changelog/#dependencies_25","title":"Dependencies","text":"12 changes - Chore(deps-dev): Bump jest-preset-angular from 14.0.4 to 14.1.0 in /src-ui in the frontend-jest-dependencies group [@dependabot](https://github.com/dependabot) ([#6879](https://github.com/paperless-ngx/paperless-ngx/pull/6879)) - Chore: Backend dependencies update [@stumpylog](https://github.com/stumpylog) ([#6892](https://github.com/paperless-ngx/paperless-ngx/pull/6892)) - Chore(deps): Bump crowdin/github-action from 1 to 2 in the actions group [@dependabot](https://github.com/dependabot) ([#6881](https://github.com/paperless-ngx/paperless-ngx/pull/6881)) - Chore: Updates Ghostscript to 10.03.1 [@stumpylog](https://github.com/stumpylog) ([#6854](https://github.com/paperless-ngx/paperless-ngx/pull/6854)) - Chore(deps-dev): Bump the development group across 1 directory with 2 updates [@dependabot](https://github.com/dependabot) ([#6851](https://github.com/paperless-ngx/paperless-ngx/pull/6851)) - Chore(deps): Bump the small-changes group with 3 updates [@dependabot](https://github.com/dependabot) ([#6843](https://github.com/paperless-ngx/paperless-ngx/pull/6843)) - Chore(deps): Use psycopg as recommended [@stumpylog](https://github.com/stumpylog) ([#6811](https://github.com/paperless-ngx/paperless-ngx/pull/6811)) - Chore(deps-dev): Bump the development group with 2 updates [@dependabot](https://github.com/dependabot) ([#6793](https://github.com/paperless-ngx/paperless-ngx/pull/6793)) - Chore(deps): Bump requests from 2.31.0 to 2.32.0 [@dependabot](https://github.com/dependabot) ([#6795](https://github.com/paperless-ngx/paperless-ngx/pull/6795)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 19 updates [@dependabot](https://github.com/dependabot) ([#6761](https://github.com/paperless-ngx/paperless-ngx/pull/6761)) - Chore: Backend updates [@stumpylog](https://github.com/stumpylog) ([#6755](https://github.com/paperless-ngx/paperless-ngx/pull/6755)) - Chore: revert pngx pdf viewer to third party package [@shamoon](https://github.com/shamoon) ([#6741](https://github.com/paperless-ngx/paperless-ngx/pull/6741))"},{"location":"changelog/#all-app-changes_41","title":"All App Changes","text":"19 changes - Chore(deps-dev): Bump jest-preset-angular from 14.0.4 to 14.1.0 in /src-ui in the frontend-jest-dependencies group [@dependabot](https://github.com/dependabot) ([#6879](https://github.com/paperless-ngx/paperless-ngx/pull/6879)) - Fix: including ordering param for id\\_\\_in retrievals [@shamoon](https://github.com/shamoon) ([#6875](https://github.com/paperless-ngx/paperless-ngx/pull/6875)) - Feature: Allow a data only export/import cycle [@stumpylog](https://github.com/stumpylog) ([#6871](https://github.com/paperless-ngx/paperless-ngx/pull/6871)) - Change: rename 'redo OCR' to 'reprocess' to clarify behavior [@shamoon](https://github.com/shamoon) ([#6866](https://github.com/paperless-ngx/paperless-ngx/pull/6866)) - Enhancement: Support custom path for the classification file [@lino-b](https://github.com/lino-b) ([#6858](https://github.com/paperless-ngx/paperless-ngx/pull/6858)) - Chore(deps-dev): Bump the development group across 1 directory with 2 updates [@dependabot](https://github.com/dependabot) ([#6851](https://github.com/paperless-ngx/paperless-ngx/pull/6851)) - Chore(deps): Bump the small-changes group with 3 updates [@dependabot](https://github.com/dependabot) ([#6843](https://github.com/paperless-ngx/paperless-ngx/pull/6843)) - Fix: Don't allow the workflow save to override other process updates [@stumpylog](https://github.com/stumpylog) ([#6849](https://github.com/paperless-ngx/paperless-ngx/pull/6849)) - Chore(deps): Use psycopg as recommended [@stumpylog](https://github.com/stumpylog) ([#6811](https://github.com/paperless-ngx/paperless-ngx/pull/6811)) - Enhancement: default to title/content search, allow choosing full search link from global search [@shamoon](https://github.com/shamoon) ([#6805](https://github.com/paperless-ngx/paperless-ngx/pull/6805)) - Enhancement: only include correspondent 'last_correspondence' if requested [@shamoon](https://github.com/shamoon) ([#6792](https://github.com/paperless-ngx/paperless-ngx/pull/6792)) - Enhancement: accessibility improvements for tags, doc links, dashboard views [@shamoon](https://github.com/shamoon) ([#6786](https://github.com/paperless-ngx/paperless-ngx/pull/6786)) - Enhancement: delete pages PDF action [@shamoon](https://github.com/shamoon) ([#6772](https://github.com/paperless-ngx/paperless-ngx/pull/6772)) - Chore(deps-dev): Bump the development group with 2 updates [@dependabot](https://github.com/dependabot) ([#6793](https://github.com/paperless-ngx/paperless-ngx/pull/6793)) - Enhancement: support custom logo / title on login page [@shamoon](https://github.com/shamoon) ([#6775](https://github.com/paperless-ngx/paperless-ngx/pull/6775)) - Chore: Change the code formatter to Ruff [@stumpylog](https://github.com/stumpylog) ([#6756](https://github.com/paperless-ngx/paperless-ngx/pull/6756)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 19 updates [@dependabot](https://github.com/dependabot) ([#6761](https://github.com/paperless-ngx/paperless-ngx/pull/6761)) - Fix: consistently use created_date for doc display [@shamoon](https://github.com/shamoon) ([#6758](https://github.com/paperless-ngx/paperless-ngx/pull/6758)) - Chore: revert pngx pdf viewer to third party package [@shamoon](https://github.com/shamoon) ([#6741](https://github.com/paperless-ngx/paperless-ngx/pull/6741))"},{"location":"changelog/#paperless-ngx-286","title":"paperless-ngx 2.8.6","text":""},{"location":"changelog/#bug-fixes_42","title":"Bug Fixes","text":""},{"location":"changelog/#all-app-changes_42","title":"All App Changes","text":"2 changes - Security: disallow API remote-user auth if disabled [@shamoon](https://github.com/shamoon) ([#6739](https://github.com/paperless-ngx/paperless-ngx/pull/6739)) - Fix: retain sort field from global search filtering, use FILTER_HAS_TAGS_ALL [@shamoon](https://github.com/shamoon) ([#6737](https://github.com/paperless-ngx/paperless-ngx/pull/6737))"},{"location":"changelog/#paperless-ngx-285","title":"paperless-ngx 2.8.5","text":""},{"location":"changelog/#bug-fixes_43","title":"Bug Fixes","text":""},{"location":"changelog/#all-app-changes_43","title":"All App Changes","text":"4 changes - Fix: restore search highlighting on large cards results [@shamoon](https://github.com/shamoon) ([#6728](https://github.com/paperless-ngx/paperless-ngx/pull/6728)) - Fix: global search filtering links broken in 2.8.4 [@shamoon](https://github.com/shamoon) ([#6726](https://github.com/paperless-ngx/paperless-ngx/pull/6726)) - Fix: some buttons incorrectly aligned in 2.8.4 [@shamoon](https://github.com/shamoon) ([#6715](https://github.com/paperless-ngx/paperless-ngx/pull/6715)) - Fix: don't format ASN as number on dashboard [@shamoon](https://github.com/shamoon) ([#6708](https://github.com/paperless-ngx/paperless-ngx/pull/6708))"},{"location":"changelog/#paperless-ngx-284","title":"paperless-ngx 2.8.4","text":""},{"location":"changelog/#features_12","title":"Features","text":""},{"location":"changelog/#bug-fixes_44","title":"Bug Fixes","text":""},{"location":"changelog/#all-app-changes_44","title":"All App Changes","text":"5 changes - Enhancement: global search tweaks [@shamoon](https://github.com/shamoon) ([#6674](https://github.com/paperless-ngx/paperless-ngx/pull/6674)) - Security: Correctly disable in pdfjs [@shamoon](https://github.com/shamoon) ([#6702](https://github.com/paperless-ngx/paperless-ngx/pull/6702)) - Fix: history timestamp tooltip illegible in dark mode [@shamoon](https://github.com/shamoon) ([#6696](https://github.com/paperless-ngx/paperless-ngx/pull/6696)) - Enhancement: display current ASN in statistics [@darmiel](https://github.com/darmiel) ([#6692](https://github.com/paperless-ngx/paperless-ngx/pull/6692)) - Fix: only count inbox documents from inbox tags with permissions [@shamoon](https://github.com/shamoon) ([#6670](https://github.com/paperless-ngx/paperless-ngx/pull/6670))"},{"location":"changelog/#paperless-ngx-283","title":"paperless-ngx 2.8.3","text":""},{"location":"changelog/#bug-fixes_45","title":"Bug Fixes","text":""},{"location":"changelog/#documentation_2","title":"Documentation","text":""},{"location":"changelog/#all-app-changes_45","title":"All App Changes","text":"7 changes - Fix: respect superuser for document history [@shamoon](https://github.com/shamoon) ([#6661](https://github.com/paperless-ngx/paperless-ngx/pull/6661)) - Fix: allow 0 in monetary field [@shamoon](https://github.com/shamoon) ([#6658](https://github.com/paperless-ngx/paperless-ngx/pull/6658)) - Fix: custom field removal doesn't always trigger change detection [@shamoon](https://github.com/shamoon) ([#6653](https://github.com/paperless-ngx/paperless-ngx/pull/6653)) - Fix: correctly handle global search esc key when open and button foucsed [@shamoon](https://github.com/shamoon) ([#6644](https://github.com/paperless-ngx/paperless-ngx/pull/6644)) - Fix: consistent monetary field display in list and cards [@shamoon](https://github.com/shamoon) ([#6645](https://github.com/paperless-ngx/paperless-ngx/pull/6645)) - Fix: doc links and more illegible in light mode [@shamoon](https://github.com/shamoon) ([#6643](https://github.com/paperless-ngx/paperless-ngx/pull/6643)) - Fix: Allow auditlog to be disabled [@stumpylog](https://github.com/stumpylog) ([#6638](https://github.com/paperless-ngx/paperless-ngx/pull/6638))"},{"location":"changelog/#paperless-ngx-282","title":"paperless-ngx 2.8.2","text":""},{"location":"changelog/#bug-fixes_46","title":"Bug Fixes","text":""},{"location":"changelog/#all-app-changes_46","title":"All App Changes","text":"10 changes - Fix: Restore the compression of static files for x86_64 [@stumpylog](https://github.com/stumpylog) ([#6627](https://github.com/paperless-ngx/paperless-ngx/pull/6627)) - Fix: make backend monetary validation accept unpadded decimals [@shamoon](https://github.com/shamoon) ([#6626](https://github.com/paperless-ngx/paperless-ngx/pull/6626)) - Fix: allow bulk edit with existing fields [@shamoon](https://github.com/shamoon) ([#6625](https://github.com/paperless-ngx/paperless-ngx/pull/6625)) - Enhancement: show custom field name on cards if empty, add tooltip [@shamoon](https://github.com/shamoon) ([#6620](https://github.com/paperless-ngx/paperless-ngx/pull/6620)) - Security: Disable in pdfjs [@shamoon](https://github.com/shamoon) ([#6615](https://github.com/paperless-ngx/paperless-ngx/pull/6615)) - Fix: table view doesn't immediately display custom fields on app startup [@shamoon](https://github.com/shamoon) ([#6600](https://github.com/paperless-ngx/paperless-ngx/pull/6600)) - Fix: dont use limit in subqueries in global search for mariadb compatibility [@shamoon](https://github.com/shamoon) ([#6611](https://github.com/paperless-ngx/paperless-ngx/pull/6611)) - Fix: exclude admin perms from group permissions serializer [@shamoon](https://github.com/shamoon) ([#6608](https://github.com/paperless-ngx/paperless-ngx/pull/6608)) - Fix: global search text illegible in light mode [@shamoon](https://github.com/shamoon) ([#6602](https://github.com/paperless-ngx/paperless-ngx/pull/6602)) - Fix: document history text color illegible in light mode [@shamoon](https://github.com/shamoon) ([#6601](https://github.com/paperless-ngx/paperless-ngx/pull/6601))"},{"location":"changelog/#paperless-ngx-281","title":"paperless-ngx 2.8.1","text":""},{"location":"changelog/#bug-fixes_47","title":"Bug Fixes","text":""},{"location":"changelog/#dependencies_26","title":"Dependencies","text":""},{"location":"changelog/#all-app-changes_47","title":"All App Changes","text":"3 changes - Fix: saved views dont immediately display custom fields in table view [@shamoon](https://github.com/shamoon) ([#6594](https://github.com/paperless-ngx/paperless-ngx/pull/6594)) - Chore(deps-dev): Bump mkdocs-glightbox from 0.3.7 to 0.4.0 in the small-changes group [@dependabot](https://github.com/dependabot) ([#6581](https://github.com/paperless-ngx/paperless-ngx/pull/6581)) - Fix: bulk edit custom fields should support multiple items [@shamoon](https://github.com/shamoon) ([#6589](https://github.com/paperless-ngx/paperless-ngx/pull/6589))"},{"location":"changelog/#paperless-ngx-280","title":"paperless-ngx 2.8.0","text":""},{"location":"changelog/#breaking-changes_3","title":"Breaking Changes","text":""},{"location":"changelog/#notable-changes_3","title":"Notable Changes","text":""},{"location":"changelog/#features_13","title":"Features","text":""},{"location":"changelog/#bug-fixes_48","title":"Bug Fixes","text":""},{"location":"changelog/#maintenance_13","title":"Maintenance","text":""},{"location":"changelog/#dependencies_27","title":"Dependencies","text":"10 changes - Chore(deps): Bump stumpylog/image-cleaner-action from 0.5.0 to 0.6.0 in the actions group [@dependabot](https://github.com/dependabot) ([#6541](https://github.com/paperless-ngx/paperless-ngx/pull/6541)) - Chore(deps-dev): Bump ejs from 3.1.9 to 3.1.10 in /src-ui [@dependabot](https://github.com/dependabot) ([#6540](https://github.com/paperless-ngx/paperless-ngx/pull/6540)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 13 updates [@dependabot](https://github.com/dependabot) ([#6539](https://github.com/paperless-ngx/paperless-ngx/pull/6539)) - Chore(deps): Bump python-ipware from 2.0.3 to 3.0.0 in the major-versions group [@dependabot](https://github.com/dependabot) ([#6468](https://github.com/paperless-ngx/paperless-ngx/pull/6468)) - Chore(deps-dev): Bump the development group with 2 updates [@dependabot](https://github.com/dependabot) ([#6466](https://github.com/paperless-ngx/paperless-ngx/pull/6466)) - Chore: Updates Docker bundled QPDF to 11.9.0 [@stumpylog](https://github.com/stumpylog) ([#6423](https://github.com/paperless-ngx/paperless-ngx/pull/6423)) - Chore(deps): Bump gunicorn from 21.2.0 to 22.0.0 [@dependabot](https://github.com/dependabot) ([#6416](https://github.com/paperless-ngx/paperless-ngx/pull/6416)) - Chore(deps): Bump the small-changes group with 11 updates [@dependabot](https://github.com/dependabot) ([#6405](https://github.com/paperless-ngx/paperless-ngx/pull/6405)) - Chore(deps): Bump idna from 3.6 to 3.7 [@dependabot](https://github.com/dependabot) ([#6377](https://github.com/paperless-ngx/paperless-ngx/pull/6377)) - Chore(deps): Bump tar from 6.2.0 to 6.2.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#6373](https://github.com/paperless-ngx/paperless-ngx/pull/6373))"},{"location":"changelog/#all-app-changes_48","title":"All App Changes","text":"23 changes - Feature: global search, keyboard shortcuts / hotkey support [@shamoon](https://github.com/shamoon) ([#6449](https://github.com/paperless-ngx/paperless-ngx/pull/6449)) - Chore(deps-dev): Bump ejs from 3.1.9 to 3.1.10 in /src-ui [@dependabot](https://github.com/dependabot) ([#6540](https://github.com/paperless-ngx/paperless-ngx/pull/6540)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 13 updates [@dependabot](https://github.com/dependabot) ([#6539](https://github.com/paperless-ngx/paperless-ngx/pull/6539)) - Chore: Hand craft SQL queries [@stumpylog](https://github.com/stumpylog) ([#6489](https://github.com/paperless-ngx/paperless-ngx/pull/6489)) - Feature: custom fields filtering \\& bulk editing [@shamoon](https://github.com/shamoon) ([#6484](https://github.com/paperless-ngx/paperless-ngx/pull/6484)) - Feature: customizable fields display for documents, saved views \\& dashboard widgets [@shamoon](https://github.com/shamoon) ([#6439](https://github.com/paperless-ngx/paperless-ngx/pull/6439)) - Chore(deps): Bump python-ipware from 2.0.3 to 3.0.0 in the major-versions group [@dependabot](https://github.com/dependabot) ([#6468](https://github.com/paperless-ngx/paperless-ngx/pull/6468)) - Feature: document history (audit log UI) [@shamoon](https://github.com/shamoon) ([#6388](https://github.com/paperless-ngx/paperless-ngx/pull/6388)) - Chore(deps-dev): Bump the development group with 2 updates [@dependabot](https://github.com/dependabot) ([#6466](https://github.com/paperless-ngx/paperless-ngx/pull/6466)) - Fix: always check workflow if set [@shamoon](https://github.com/shamoon) ([#6474](https://github.com/paperless-ngx/paperless-ngx/pull/6474)) - Fix: use responsive tables for management lists [@DlieBG](https://github.com/DlieBG) ([#6460](https://github.com/paperless-ngx/paperless-ngx/pull/6460)) - Fix: password reset done template [@shamoon](https://github.com/shamoon) ([#6444](https://github.com/paperless-ngx/paperless-ngx/pull/6444)) - Enhancement: refactor monetary field [@shamoon](https://github.com/shamoon) ([#6370](https://github.com/paperless-ngx/paperless-ngx/pull/6370)) - Enhancement: improve layout, button labels for custom fields dropdown [@shamoon](https://github.com/shamoon) ([#6362](https://github.com/paperless-ngx/paperless-ngx/pull/6362)) - Chore: Convert the consumer to a plugin [@stumpylog](https://github.com/stumpylog) ([#6361](https://github.com/paperless-ngx/paperless-ngx/pull/6361)) - Chore(deps): Bump the small-changes group with 11 updates [@dependabot](https://github.com/dependabot) ([#6405](https://github.com/paperless-ngx/paperless-ngx/pull/6405)) - Enhancement: Hide columns in document list if user does not have permissions [@theomega](https://github.com/theomega) ([#6415](https://github.com/paperless-ngx/paperless-ngx/pull/6415)) - Fix: show message on empty group list [@DlieBG](https://github.com/DlieBG) ([#6393](https://github.com/paperless-ngx/paperless-ngx/pull/6393)) - Fix: remove admin.logentry perm, use admin (staff) status [@shamoon](https://github.com/shamoon) ([#6380](https://github.com/paperless-ngx/paperless-ngx/pull/6380)) - Chore(deps): Bump tar from 6.2.0 to 6.2.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#6373](https://github.com/paperless-ngx/paperless-ngx/pull/6373)) - Fix: dont dismiss active alerts on dismiss completed [@shamoon](https://github.com/shamoon) ([#6364](https://github.com/paperless-ngx/paperless-ngx/pull/6364)) - Fix: Allow lowercase letters in monetary currency code field [@shamoon](https://github.com/shamoon) ([#6359](https://github.com/paperless-ngx/paperless-ngx/pull/6359)) - Fix: Allow negative monetary values with a current code [@stumpylog](https://github.com/stumpylog) ([#6358](https://github.com/paperless-ngx/paperless-ngx/pull/6358))"},{"location":"changelog/#paperless-ngx-272","title":"paperless-ngx 2.7.2","text":""},{"location":"changelog/#bug-fixes_49","title":"Bug Fixes","text":""},{"location":"changelog/#all-app-changes_49","title":"All App Changes","text":"4 changes - Fix: select dropdown background colors not visible in light mode [@shamoon](https://github.com/shamoon) ([#6323](https://github.com/paperless-ngx/paperless-ngx/pull/6323)) - Fix: spacing in reset and incorrect display in saved views [@shamoon](https://github.com/shamoon) ([#6324](https://github.com/paperless-ngx/paperless-ngx/pull/6324)) - Fix: disable invalid create endpoints [@shamoon](https://github.com/shamoon) ([#6320](https://github.com/paperless-ngx/paperless-ngx/pull/6320)) - Fix: dont initialize page numbers, allow split with browser pdf viewer [@shamoon](https://github.com/shamoon) ([#6314](https://github.com/paperless-ngx/paperless-ngx/pull/6314))"},{"location":"changelog/#paperless-ngx-271","title":"paperless-ngx 2.7.1","text":""},{"location":"changelog/#bug-fixes_50","title":"Bug Fixes","text":""},{"location":"changelog/#all-app-changes_50","title":"All App Changes","text":"4 changes - Fix: Only disable split button if pages = 1 [@shamoon](https://github.com/shamoon) ([#6304](https://github.com/paperless-ngx/paperless-ngx/pull/6304)) - Fix: Use correct custom field id when splitting [@shamoon](https://github.com/shamoon) ([#6303](https://github.com/paperless-ngx/paperless-ngx/pull/6303)) - Fix: Rotation fails due to celery chord [@stumpylog](https://github.com/stumpylog) ([#6306](https://github.com/paperless-ngx/paperless-ngx/pull/6306)) - Fix: split user / group objects error [@shamoon](https://github.com/shamoon) ([#6302](https://github.com/paperless-ngx/paperless-ngx/pull/6302))"},{"location":"changelog/#paperless-ngx-270","title":"paperless-ngx 2.7.0","text":""},{"location":"changelog/#notable-changes_4","title":"Notable Changes","text":""},{"location":"changelog/#enhancements","title":"Enhancements","text":""},{"location":"changelog/#maintenance_14","title":"Maintenance","text":""},{"location":"changelog/#bug-fixes_51","title":"Bug Fixes","text":""},{"location":"changelog/#dependencies_28","title":"Dependencies","text":"9 changes - Chore(deps): Bump pillow from 10.2.0 to 10.3.0 [@dependabot](https://github.com/dependabot) ([#6268](https://github.com/paperless-ngx/paperless-ngx/pull/6268)) - Chore(deps-dev): Bump the development group with 2 updates [@dependabot](https://github.com/dependabot) ([#6276](https://github.com/paperless-ngx/paperless-ngx/pull/6276)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 17 updates [@dependabot](https://github.com/dependabot) ([#6248](https://github.com/paperless-ngx/paperless-ngx/pull/6248)) - Chore(deps-dev): Bump [@playwright/test from 1.42.0 to 1.42.1 in /src-ui @dependabot](https://github.com/playwright/test from 1.42.0 to 1.42.1 in /src-ui @dependabot) ([#6250](https://github.com/paperless-ngx/paperless-ngx/pull/6250)) - Chore(deps-dev): Bump [@types/node from 20.11.24 to 20.12.2 in /src-ui @dependabot](https://github.com/types/node from 20.11.24 to 20.12.2 in /src-ui @dependabot) ([#6251](https://github.com/paperless-ngx/paperless-ngx/pull/6251)) - Chore(deps-dev): Bump the frontend-eslint-dependencies group in /src-ui with 2 updates [@dependabot](https://github.com/dependabot) ([#6249](https://github.com/paperless-ngx/paperless-ngx/pull/6249)) - Chore(deps-dev): Bump express from 4.18.3 to 4.19.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#6207](https://github.com/paperless-ngx/paperless-ngx/pull/6207)) - Chore(deps-dev): Bump webpack-dev-middleware from 5.3.3 to 5.3.4 in /src-ui [@dependabot](https://github.com/dependabot) ([#6161](https://github.com/paperless-ngx/paperless-ngx/pull/6161)) - Chore(deps-dev): Bump the development group with 4 updates [@dependabot](https://github.com/dependabot) ([#6131](https://github.com/paperless-ngx/paperless-ngx/pull/6131))"},{"location":"changelog/#all-app-changes_51","title":"All App Changes","text":"20 changes - Chore(deps-dev): Bump the development group with 2 updates [@dependabot](https://github.com/dependabot) ([#6276](https://github.com/paperless-ngx/paperless-ngx/pull/6276)) - Chore: Standardize subprocess running and logging [@stumpylog](https://github.com/stumpylog) ([#6275](https://github.com/paperless-ngx/paperless-ngx/pull/6275)) - Change: enable auditlog by default, fix import / export [@shamoon](https://github.com/shamoon) ([#6267](https://github.com/paperless-ngx/paperless-ngx/pull/6267)) - Fix: Hide sidebar labels if group is empty [@shamoon](https://github.com/shamoon) ([#6254](https://github.com/paperless-ngx/paperless-ngx/pull/6254)) - Fix: management list clear all should clear header checkbox [@shamoon](https://github.com/shamoon) ([#6253](https://github.com/paperless-ngx/paperless-ngx/pull/6253)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 17 updates [@dependabot](https://github.com/dependabot) ([#6248](https://github.com/paperless-ngx/paperless-ngx/pull/6248)) - Chore(deps-dev): Bump [@playwright/test from 1.42.0 to 1.42.1 in /src-ui @dependabot](https://github.com/playwright/test from 1.42.0 to 1.42.1 in /src-ui @dependabot) ([#6250](https://github.com/paperless-ngx/paperless-ngx/pull/6250)) - Chore(deps-dev): Bump [@types/node from 20.11.24 to 20.12.2 in /src-ui @dependabot](https://github.com/types/node from 20.11.24 to 20.12.2 in /src-ui @dependabot) ([#6251](https://github.com/paperless-ngx/paperless-ngx/pull/6251)) - Chore(deps-dev): Bump the frontend-eslint-dependencies group in /src-ui with 2 updates [@dependabot](https://github.com/dependabot) ([#6249](https://github.com/paperless-ngx/paperless-ngx/pull/6249)) - Enhancement: support custom fields in post_document endpoint [@shamoon](https://github.com/shamoon) ([#6222](https://github.com/paperless-ngx/paperless-ngx/pull/6222)) - Enhancement: add ASN to consume rejection message [@eliasp](https://github.com/eliasp) ([#6217](https://github.com/paperless-ngx/paperless-ngx/pull/6217)) - Chore(deps-dev): Bump express from 4.18.3 to 4.19.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#6207](https://github.com/paperless-ngx/paperless-ngx/pull/6207)) - Feature: PDF actions - merge, split \\& rotate [@shamoon](https://github.com/shamoon) ([#6094](https://github.com/paperless-ngx/paperless-ngx/pull/6094)) - Fix: start-align object names in some UI lists [@shamoon](https://github.com/shamoon) ([#6188](https://github.com/paperless-ngx/paperless-ngx/pull/6188)) - Fix: allow scroll long upload files alerts list [@shamoon](https://github.com/shamoon) ([#6184](https://github.com/paperless-ngx/paperless-ngx/pull/6184)) - Fix: document_renamer fails with audit_log enabled [@shamoon](https://github.com/shamoon) ([#6175](https://github.com/paperless-ngx/paperless-ngx/pull/6175)) - Chore(deps-dev): Bump webpack-dev-middleware from 5.3.3 to 5.3.4 in /src-ui [@dependabot](https://github.com/dependabot) ([#6161](https://github.com/paperless-ngx/paperless-ngx/pull/6161)) - Enhancement: always place search term first in autocomplete results [@shamoon](https://github.com/shamoon) ([#6142](https://github.com/paperless-ngx/paperless-ngx/pull/6142)) - Fix: catch sessionStorage errors for large documents [@shamoon](https://github.com/shamoon) ([#6150](https://github.com/paperless-ngx/paperless-ngx/pull/6150)) - Chore(deps-dev): Bump the development group with 4 updates [@dependabot](https://github.com/dependabot) ([#6131](https://github.com/paperless-ngx/paperless-ngx/pull/6131))"},{"location":"changelog/#paperless-ngx-263","title":"paperless-ngx 2.6.3","text":""},{"location":"changelog/#bug-fixes_52","title":"Bug Fixes","text":""},{"location":"changelog/#dependencies_29","title":"Dependencies","text":"4 changes - Chore(deps-dev): Bump follow-redirects from 1.15.5 to 1.15.6 in /src-ui [@dependabot](https://github.com/dependabot) ([#6120](https://github.com/paperless-ngx/paperless-ngx/pull/6120)) - Chore(deps-dev): Bump the development group with 3 updates [@dependabot](https://github.com/dependabot) ([#6079](https://github.com/paperless-ngx/paperless-ngx/pull/6079)) - Chore(deps): Bump the django group with 1 update [@dependabot](https://github.com/dependabot) ([#6080](https://github.com/paperless-ngx/paperless-ngx/pull/6080)) - Chore(deps): Bump the small-changes group with 2 updates [@dependabot](https://github.com/dependabot) ([#6081](https://github.com/paperless-ngx/paperless-ngx/pull/6081))"},{"location":"changelog/#all-app-changes_52","title":"All App Changes","text":"8 changes - Chore(deps-dev): Bump follow-redirects from 1.15.5 to 1.15.6 in /src-ui [@dependabot](https://github.com/dependabot) ([#6120](https://github.com/paperless-ngx/paperless-ngx/pull/6120)) - Fix: allow setting allauth [@shamoon](https://github.com/shamoon) ([#6105](https://github.com/paperless-ngx/paperless-ngx/pull/6105)) - Change: remove credentials from redis url in system status [@shamoon](https://github.com/shamoon) ([#6104](https://github.com/paperless-ngx/paperless-ngx/pull/6104)) - Chore(deps-dev): Bump the development group with 3 updates [@dependabot](https://github.com/dependabot) ([#6079](https://github.com/paperless-ngx/paperless-ngx/pull/6079)) - Chore(deps): Bump the django group with 1 update [@dependabot](https://github.com/dependabot) ([#6080](https://github.com/paperless-ngx/paperless-ngx/pull/6080)) - Chore(deps): Bump the small-changes group with 2 updates [@dependabot](https://github.com/dependabot) ([#6081](https://github.com/paperless-ngx/paperless-ngx/pull/6081)) - Change: dont require empty bulk edit parameters [@shamoon](https://github.com/shamoon) ([#6059](https://github.com/paperless-ngx/paperless-ngx/pull/6059)) - Fix: missing translation string [@DimitriDR](https://github.com/DimitriDR) ([#6054](https://github.com/paperless-ngx/paperless-ngx/pull/6054))"},{"location":"changelog/#paperless-ngx-262","title":"paperless-ngx 2.6.2","text":""},{"location":"changelog/#features_14","title":"Features","text":""},{"location":"changelog/#bug-fixes_53","title":"Bug Fixes","text":""},{"location":"changelog/#all-app-changes_53","title":"All App Changes","text":"3 changes - Enhancement: move and rename files when storage paths deleted, update file handling docs [@shamoon](https://github.com/shamoon) ([#6033](https://github.com/paperless-ngx/paperless-ngx/pull/6033)) - Fix: make document counts in object lists permissions-aware [@shamoon](https://github.com/shamoon) ([#6019](https://github.com/paperless-ngx/paperless-ngx/pull/6019)) - Enhancement: better detection of default currency code [@shamoon](https://github.com/shamoon) ([#6020](https://github.com/paperless-ngx/paperless-ngx/pull/6020))"},{"location":"changelog/#paperless-ngx-261","title":"paperless-ngx 2.6.1","text":""},{"location":"changelog/#all-app-changes_54","title":"All App Changes","text":""},{"location":"changelog/#paperless-ngx-260","title":"paperless-ngx 2.6.0","text":""},{"location":"changelog/#features_15","title":"Features","text":""},{"location":"changelog/#bug-fixes_54","title":"Bug Fixes","text":""},{"location":"changelog/#maintenance_15","title":"Maintenance","text":""},{"location":"changelog/#dependencies_30","title":"Dependencies","text":"15 changes - Chore(deps): Bump the small-changes group with 3 updates [@dependabot](https://github.com/dependabot) ([#6001](https://github.com/paperless-ngx/paperless-ngx/pull/6001)) - Chore(deps-dev): Bump the development group with 2 updates [@dependabot](https://github.com/dependabot) ([#5998](https://github.com/paperless-ngx/paperless-ngx/pull/5998)) - Chore(deps): Bump the django group with 1 update [@dependabot](https://github.com/dependabot) ([#6000](https://github.com/paperless-ngx/paperless-ngx/pull/6000)) - Chore(deps-dev): Bump [@playwright/test from 1.41.2 to 1.42.0 in /src-ui @dependabot](https://github.com/playwright/test from 1.41.2 to 1.42.0 in /src-ui @dependabot) ([#5964](https://github.com/paperless-ngx/paperless-ngx/pull/5964)) - Chore(deps-dev): Bump [@types/node from 20.11.20 to 20.11.24 in /src-ui @dependabot](https://github.com/types/node from 20.11.20 to 20.11.24 in /src-ui @dependabot) ([#5965](https://github.com/paperless-ngx/paperless-ngx/pull/5965)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 11 updates [@dependabot](https://github.com/dependabot) ([#5963](https://github.com/paperless-ngx/paperless-ngx/pull/5963)) - Chore(deps-dev): Bump the frontend-eslint-dependencies group in /src-ui with 3 updates [@dependabot](https://github.com/dependabot) ([#5918](https://github.com/paperless-ngx/paperless-ngx/pull/5918)) - Chore(deps-dev): Bump [@types/node from 20.11.16 to 20.11.20 in /src-ui @dependabot](https://github.com/types/node from 20.11.16 to 20.11.20 in /src-ui @dependabot) ([#5912](https://github.com/paperless-ngx/paperless-ngx/pull/5912)) - Chore(deps): Bump zone.js from 0.14.3 to 0.14.4 in /src-ui [@dependabot](https://github.com/dependabot) ([#5913](https://github.com/paperless-ngx/paperless-ngx/pull/5913)) - Chore(deps): Bump bootstrap from 5.3.2 to 5.3.3 in /src-ui [@dependabot](https://github.com/dependabot) ([#5911](https://github.com/paperless-ngx/paperless-ngx/pull/5911)) - Chore(deps-dev): Bump typescript from 5.2.2 to 5.3.3 in /src-ui [@dependabot](https://github.com/dependabot) ([#5915](https://github.com/paperless-ngx/paperless-ngx/pull/5915)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 15 updates [@dependabot](https://github.com/dependabot) ([#5908](https://github.com/paperless-ngx/paperless-ngx/pull/5908)) - Chore(deps): Bump the small-changes group with 4 updates [@dependabot](https://github.com/dependabot) ([#5916](https://github.com/paperless-ngx/paperless-ngx/pull/5916)) - Chore(deps-dev): Bump the development group with 4 updates [@dependabot](https://github.com/dependabot) ([#5914](https://github.com/paperless-ngx/paperless-ngx/pull/5914)) - Chore(deps): Bump the actions group with 3 updates [@dependabot](https://github.com/dependabot) ([#5907](https://github.com/paperless-ngx/paperless-ngx/pull/5907))"},{"location":"changelog/#all-app-changes_55","title":"All App Changes","text":"33 changes - Feature: Allow user to control PIL image pixel limit [@stumpylog](https://github.com/stumpylog) ([#5997](https://github.com/paperless-ngx/paperless-ngx/pull/5997)) - Enhancement: show ID when editing objects [@shamoon](https://github.com/shamoon) ([#6003](https://github.com/paperless-ngx/paperless-ngx/pull/6003)) - Feature: Allow a user to disable the pixel limit for OCR entirely [@stumpylog](https://github.com/stumpylog) ([#5996](https://github.com/paperless-ngx/paperless-ngx/pull/5996)) - Chore(deps): Bump the small-changes group with 3 updates [@dependabot](https://github.com/dependabot) ([#6001](https://github.com/paperless-ngx/paperless-ngx/pull/6001)) - Chore(deps-dev): Bump the development group with 2 updates [@dependabot](https://github.com/dependabot) ([#5998](https://github.com/paperless-ngx/paperless-ngx/pull/5998)) - Chore(deps): Bump the django group with 1 update [@dependabot](https://github.com/dependabot) ([#6000](https://github.com/paperless-ngx/paperless-ngx/pull/6000)) - Feature: workflow removal action [@shamoon](https://github.com/shamoon) ([#5928](https://github.com/paperless-ngx/paperless-ngx/pull/5928)) - Feature: system status [@shamoon](https://github.com/shamoon) ([#5743](https://github.com/paperless-ngx/paperless-ngx/pull/5743)) - Fix: refactor base path settings, correct logout redirect [@shamoon](https://github.com/shamoon) ([#5976](https://github.com/paperless-ngx/paperless-ngx/pull/5976)) - Chore(deps-dev): Bump [@playwright/test from 1.41.2 to 1.42.0 in /src-ui @dependabot](https://github.com/playwright/test from 1.41.2 to 1.42.0 in /src-ui @dependabot) ([#5964](https://github.com/paperless-ngx/paperless-ngx/pull/5964)) - Chore(deps-dev): Bump [@types/node from 20.11.20 to 20.11.24 in /src-ui @dependabot](https://github.com/types/node from 20.11.20 to 20.11.24 in /src-ui @dependabot) ([#5965](https://github.com/paperless-ngx/paperless-ngx/pull/5965)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 11 updates [@dependabot](https://github.com/dependabot) ([#5963](https://github.com/paperless-ngx/paperless-ngx/pull/5963)) - Fix: always pass from UI, dont require in API [@shamoon](https://github.com/shamoon) ([#5962](https://github.com/paperless-ngx/paperless-ngx/pull/5962)) - Fix: Clear metadata cache when the filename(s) change [@stumpylog](https://github.com/stumpylog) ([#5957](https://github.com/paperless-ngx/paperless-ngx/pull/5957)) - Fix: include monetary, float and doc link values in search filters [@shamoon](https://github.com/shamoon) ([#5951](https://github.com/paperless-ngx/paperless-ngx/pull/5951)) - Fix: Better handling of a corrupted index [@stumpylog](https://github.com/stumpylog) ([#5950](https://github.com/paperless-ngx/paperless-ngx/pull/5950)) - Chore: Includes OCRMyPdf logging into the log file [@stumpylog](https://github.com/stumpylog) ([#5947](https://github.com/paperless-ngx/paperless-ngx/pull/5947)) - Fix: ensure document title always limited to 128 chars [@shamoon](https://github.com/shamoon) ([#5934](https://github.com/paperless-ngx/paperless-ngx/pull/5934)) - Enhancement: better monetary field with currency code [@shamoon](https://github.com/shamoon) ([#5858](https://github.com/paperless-ngx/paperless-ngx/pull/5858)) - Change: add Thumbs.db to default ignores [@DennisGaida](https://github.com/DennisGaida) ([#5924](https://github.com/paperless-ngx/paperless-ngx/pull/5924)) - Fix: use for password reset emails, if set [@shamoon](https://github.com/shamoon) ([#5902](https://github.com/paperless-ngx/paperless-ngx/pull/5902)) - Fix: respect global permissions for UI settings [@shamoon](https://github.com/shamoon) ([#5919](https://github.com/paperless-ngx/paperless-ngx/pull/5919)) - Chore(deps-dev): Bump the frontend-eslint-dependencies group in /src-ui with 3 updates [@dependabot](https://github.com/dependabot) ([#5918](https://github.com/paperless-ngx/paperless-ngx/pull/5918)) - Chore(deps-dev): Bump [@types/node from 20.11.16 to 20.11.20 in /src-ui @dependabot](https://github.com/types/node from 20.11.16 to 20.11.20 in /src-ui @dependabot) ([#5912](https://github.com/paperless-ngx/paperless-ngx/pull/5912)) - Chore(deps): Bump zone.js from 0.14.3 to 0.14.4 in /src-ui [@dependabot](https://github.com/dependabot) ([#5913](https://github.com/paperless-ngx/paperless-ngx/pull/5913)) - Chore(deps): Bump bootstrap from 5.3.2 to 5.3.3 in /src-ui [@dependabot](https://github.com/dependabot) ([#5911](https://github.com/paperless-ngx/paperless-ngx/pull/5911)) - Chore(deps-dev): Bump typescript from 5.2.2 to 5.3.3 in /src-ui [@dependabot](https://github.com/dependabot) ([#5915](https://github.com/paperless-ngx/paperless-ngx/pull/5915)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 15 updates [@dependabot](https://github.com/dependabot) ([#5908](https://github.com/paperless-ngx/paperless-ngx/pull/5908)) - Fix: allow disable email verification during signup [@shamoon](https://github.com/shamoon) ([#5895](https://github.com/paperless-ngx/paperless-ngx/pull/5895)) - Fix: refactor accounts templates and create signup template [@shamoon](https://github.com/shamoon) ([#5899](https://github.com/paperless-ngx/paperless-ngx/pull/5899)) - Chore(deps): Bump the small-changes group with 4 updates [@dependabot](https://github.com/dependabot) ([#5916](https://github.com/paperless-ngx/paperless-ngx/pull/5916)) - Chore(deps-dev): Bump the development group with 4 updates [@dependabot](https://github.com/dependabot) ([#5914](https://github.com/paperless-ngx/paperless-ngx/pull/5914)) - Enhancement: support disabling regular login [@shamoon](https://github.com/shamoon) ([#5816](https://github.com/paperless-ngx/paperless-ngx/pull/5816))"},{"location":"changelog/#paperless-ngx-254","title":"paperless-ngx 2.5.4","text":""},{"location":"changelog/#bug-fixes_55","title":"Bug Fixes","text":""},{"location":"changelog/#dependencies_31","title":"Dependencies","text":""},{"location":"changelog/#all-app-changes_56","title":"All App Changes","text":"8 changes - Fix: handle title placeholder for docs without original_filename [@shamoon](https://github.com/shamoon) ([#5828](https://github.com/paperless-ngx/paperless-ngx/pull/5828)) - Fix: bulk edit objects does not respect global permissions [@shamoon](https://github.com/shamoon) ([#5888](https://github.com/paperless-ngx/paperless-ngx/pull/5888)) - Fix: intermittent save \\& close warnings [@shamoon](https://github.com/shamoon) ([#5838](https://github.com/paperless-ngx/paperless-ngx/pull/5838)) - Fix: inotify read timeout not in ms [@grembo](https://github.com/grembo) ([#5876](https://github.com/paperless-ngx/paperless-ngx/pull/5876)) - Chore(deps-dev): Bump ip from 2.0.0 to 2.0.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#5835](https://github.com/paperless-ngx/paperless-ngx/pull/5835)) - Chore(deps): Bump undici and [@angular-devkit/build-angular in /src-ui @dependabot](https://github.com/angular-devkit/build-angular in /src-ui @dependabot) ([#5796](https://github.com/paperless-ngx/paperless-ngx/pull/5796)) - Fix: allow relative date queries not in quick list [@shamoon](https://github.com/shamoon) ([#5801](https://github.com/paperless-ngx/paperless-ngx/pull/5801)) - Fix: pass rule id to consumed .eml files [@shamoon](https://github.com/shamoon) ([#5800](https://github.com/paperless-ngx/paperless-ngx/pull/5800))"},{"location":"changelog/#paperless-ngx-253","title":"paperless-ngx 2.5.3","text":""},{"location":"changelog/#bug-fixes_56","title":"Bug Fixes","text":""},{"location":"changelog/#all-app-changes_57","title":"All App Changes","text":"3 changes - Fix: dont allow allauth redirects to any host [@shamoon](https://github.com/shamoon) ([#5783](https://github.com/paperless-ngx/paperless-ngx/pull/5783)) - Fix: Interaction when both splitting and ASN are enabled [@stumpylog](https://github.com/stumpylog) ([#5779](https://github.com/paperless-ngx/paperless-ngx/pull/5779)) - Fix: moved ssl_mode parameter for mysql backend engine [@MaciejSzczurek](https://github.com/MaciejSzczurek) ([#5771](https://github.com/paperless-ngx/paperless-ngx/pull/5771))"},{"location":"changelog/#paperless-ngx-252","title":"paperless-ngx 2.5.2","text":""},{"location":"changelog/#bug-fixes_57","title":"Bug Fixes","text":""},{"location":"changelog/#dependencies_32","title":"Dependencies","text":""},{"location":"changelog/#all-app-changes_58","title":"All App Changes","text":"4 changes - Fix: consumer status alerts container blocks elements [@shamoon](https://github.com/shamoon) ([#5762](https://github.com/paperless-ngx/paperless-ngx/pull/5762)) - Fix: handle document notes user format api change [@shamoon](https://github.com/shamoon) ([#5751](https://github.com/paperless-ngx/paperless-ngx/pull/5751)) - Fix: Assign ASN from barcode only after any splitting [@stumpylog](https://github.com/stumpylog) ([#5745](https://github.com/paperless-ngx/paperless-ngx/pull/5745)) - Chore(deps): Bump the major-versions group with 1 update [@dependabot](https://github.com/dependabot) ([#5741](https://github.com/paperless-ngx/paperless-ngx/pull/5741))"},{"location":"changelog/#paperless-ngx-251","title":"paperless-ngx 2.5.1","text":""},{"location":"changelog/#bug-fixes_58","title":"Bug Fixes","text":""},{"location":"changelog/#dependencies_33","title":"Dependencies","text":""},{"location":"changelog/#all-app-changes_59","title":"All App Changes","text":"3 changes - Chore(deps-dev): Bump the development group with 2 updates [@dependabot](https://github.com/dependabot) ([#5737](https://github.com/paperless-ngx/paperless-ngx/pull/5737)) - Chore(deps): Bump the django group with 1 update [@dependabot](https://github.com/dependabot) ([#5739](https://github.com/paperless-ngx/paperless-ngx/pull/5739)) - Fix: Splitting on ASN barcodes even if not enabled [@stumpylog](https://github.com/stumpylog) ([#5740](https://github.com/paperless-ngx/paperless-ngx/pull/5740))"},{"location":"changelog/#paperless-ngx-250","title":"paperless-ngx 2.5.0","text":""},{"location":"changelog/#breaking-changes_4","title":"Breaking Changes","text":""},{"location":"changelog/#notable-changes_5","title":"Notable Changes","text":""},{"location":"changelog/#features_16","title":"Features","text":""},{"location":"changelog/#bug-fixes_59","title":"Bug Fixes","text":""},{"location":"changelog/#documentation_3","title":"Documentation","text":""},{"location":"changelog/#maintenance_16","title":"Maintenance","text":""},{"location":"changelog/#dependencies_34","title":"Dependencies","text":"9 changes - Chore: Backend dependencies update [@stumpylog](https://github.com/stumpylog) ([#5676](https://github.com/paperless-ngx/paperless-ngx/pull/5676)) - Chore(deps-dev): Bump [@playwright/test from 1.40.1 to 1.41.2 in /src-ui @dependabot](https://github.com/playwright/test from 1.40.1 to 1.41.2 in /src-ui @dependabot) ([#5634](https://github.com/paperless-ngx/paperless-ngx/pull/5634)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 19 updates [@dependabot](https://github.com/dependabot) ([#5630](https://github.com/paperless-ngx/paperless-ngx/pull/5630)) - Chore(deps-dev): Bump the frontend-jest-dependencies group in /src-ui with 2 updates [@dependabot](https://github.com/dependabot) ([#5631](https://github.com/paperless-ngx/paperless-ngx/pull/5631)) - Chore(deps-dev): Bump the frontend-eslint-dependencies group in /src-ui with 2 updates [@dependabot](https://github.com/dependabot) ([#5632](https://github.com/paperless-ngx/paperless-ngx/pull/5632)) - Chore(deps): Bump zone.js from 0.14.2 to 0.14.3 in /src-ui [@dependabot](https://github.com/dependabot) ([#5633](https://github.com/paperless-ngx/paperless-ngx/pull/5633)) - Chore(deps-dev): Bump [@types/node from 20.10.6 to 20.11.16 in /src-ui @dependabot](https://github.com/types/node from 20.10.6 to 20.11.16 in /src-ui @dependabot) ([#5635](https://github.com/paperless-ngx/paperless-ngx/pull/5635)) - Chore(deps): Bump the actions group with 1 update [@dependabot](https://github.com/dependabot) ([#5629](https://github.com/paperless-ngx/paperless-ngx/pull/5629)) - Chore(deps): Bump the actions group with 1 update [@dependabot](https://github.com/dependabot) ([#5597](https://github.com/paperless-ngx/paperless-ngx/pull/5597))"},{"location":"changelog/#all-app-changes_60","title":"All App Changes","text":"28 changes - Chore: Ensure all creations of directories create the parents too [@stumpylog](https://github.com/stumpylog) ([#5711](https://github.com/paperless-ngx/paperless-ngx/pull/5711)) - Fix: Test metadata items for Unicode issues [@stumpylog](https://github.com/stumpylog) ([#5707](https://github.com/paperless-ngx/paperless-ngx/pull/5707)) - Change: try to show preview even if metadata fails [@shamoon](https://github.com/shamoon) ([#5706](https://github.com/paperless-ngx/paperless-ngx/pull/5706)) - Fix: only check workflow trigger source if not empty [@shamoon](https://github.com/shamoon) ([#5701](https://github.com/paperless-ngx/paperless-ngx/pull/5701)) - Enhancement: confirm buttons [@shamoon](https://github.com/shamoon) ([#5680](https://github.com/paperless-ngx/paperless-ngx/pull/5680)) - Enhancement: bulk delete objects [@shamoon](https://github.com/shamoon) ([#5688](https://github.com/paperless-ngx/paperless-ngx/pull/5688)) - Chore: Backend dependencies update [@stumpylog](https://github.com/stumpylog) ([#5676](https://github.com/paperless-ngx/paperless-ngx/pull/5676)) - Feature: OIDC \\& social authentication [@mpflanzer](https://github.com/mpflanzer) ([#5190](https://github.com/paperless-ngx/paperless-ngx/pull/5190)) - Chore: Don't write Python bytecode in the Docker image [@stumpylog](https://github.com/stumpylog) ([#5677](https://github.com/paperless-ngx/paperless-ngx/pull/5677)) - Feature: allow create objects from bulk edit [@shamoon](https://github.com/shamoon) ([#5667](https://github.com/paperless-ngx/paperless-ngx/pull/5667)) - Chore: Use memory cache backend in debug mode [@shamoon](https://github.com/shamoon) ([#5666](https://github.com/paperless-ngx/paperless-ngx/pull/5666)) - Chore: Adds additional rules for Ruff linter [@stumpylog](https://github.com/stumpylog) ([#5660](https://github.com/paperless-ngx/paperless-ngx/pull/5660)) - Feature: Allow tagging by putting barcodes on documents [@pkrahmer](https://github.com/pkrahmer) ([#5580](https://github.com/paperless-ngx/paperless-ngx/pull/5580)) - Feature: Cache metadata and suggestions in Redis [@stumpylog](https://github.com/stumpylog) ([#5638](https://github.com/paperless-ngx/paperless-ngx/pull/5638)) - Fix: frontend validation of number fields fails upon save [@shamoon](https://github.com/shamoon) ([#5646](https://github.com/paperless-ngx/paperless-ngx/pull/5646)) - Fix: Explicit validation of custom field name unique constraint [@shamoon](https://github.com/shamoon) ([#5647](https://github.com/paperless-ngx/paperless-ngx/pull/5647)) - Feature: Japanese translation [@shamoon](https://github.com/shamoon) ([#5641](https://github.com/paperless-ngx/paperless-ngx/pull/5641)) - Chore(deps-dev): Bump [@playwright/test from 1.40.1 to 1.41.2 in /src-ui @dependabot](https://github.com/playwright/test from 1.40.1 to 1.41.2 in /src-ui @dependabot) ([#5634](https://github.com/paperless-ngx/paperless-ngx/pull/5634)) - Feature: option for auto-remove inbox tags on save [@shamoon](https://github.com/shamoon) ([#5562](https://github.com/paperless-ngx/paperless-ngx/pull/5562)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 19 updates [@dependabot](https://github.com/dependabot) ([#5630](https://github.com/paperless-ngx/paperless-ngx/pull/5630)) - Chore(deps-dev): Bump the frontend-jest-dependencies group in /src-ui with 2 updates [@dependabot](https://github.com/dependabot) ([#5631](https://github.com/paperless-ngx/paperless-ngx/pull/5631)) - Chore(deps-dev): Bump the frontend-eslint-dependencies group in /src-ui with 2 updates [@dependabot](https://github.com/dependabot) ([#5632](https://github.com/paperless-ngx/paperless-ngx/pull/5632)) - Chore(deps): Bump zone.js from 0.14.2 to 0.14.3 in /src-ui [@dependabot](https://github.com/dependabot) ([#5633](https://github.com/paperless-ngx/paperless-ngx/pull/5633)) - Chore(deps-dev): Bump [@types/node from 20.10.6 to 20.11.16 in /src-ui @dependabot](https://github.com/types/node from 20.10.6 to 20.11.16 in /src-ui @dependabot) ([#5635](https://github.com/paperless-ngx/paperless-ngx/pull/5635)) - Enhancement: mergeable bulk edit permissions [@shamoon](https://github.com/shamoon) ([#5508](https://github.com/paperless-ngx/paperless-ngx/pull/5508)) - Enhancement: re-implement remote user auth for unsafe API requests as opt-in [@shamoon](https://github.com/shamoon) ([#5561](https://github.com/paperless-ngx/paperless-ngx/pull/5561)) - Enhancement: Respect PDF cropbox for thumbnail generation [@henningBunk](https://github.com/henningBunk) ([#5531](https://github.com/paperless-ngx/paperless-ngx/pull/5531)) - Fix: Don't attempt to retrieve object types user doesn't have permissions to [@shamoon](https://github.com/shamoon) ([#5612](https://github.com/paperless-ngx/paperless-ngx/pull/5612))"},{"location":"changelog/#paperless-ngx-243","title":"paperless-ngx 2.4.3","text":""},{"location":"changelog/#bug-fixes_60","title":"Bug Fixes","text":""},{"location":"changelog/#all-app-changes_61","title":"All App Changes","text":""},{"location":"changelog/#paperless-ngx-242","title":"paperless-ngx 2.4.2","text":""},{"location":"changelog/#bug-fixes_61","title":"Bug Fixes","text":""},{"location":"changelog/#all-app-changes_62","title":"All App Changes","text":"2 changes - Fix: improve one of the date matching regexes [@shamoon](https://github.com/shamoon) ([#5540](https://github.com/paperless-ngx/paperless-ngx/pull/5540)) - Fix: tweak doc detail component behavior while awaiting metadata [@shamoon](https://github.com/shamoon) ([#5546](https://github.com/paperless-ngx/paperless-ngx/pull/5546))"},{"location":"changelog/#paperless-ngx-241","title":"paperless-ngx 2.4.1","text":""},{"location":"changelog/#breaking-changes_5","title":"Breaking Changes","text":""},{"location":"changelog/#bug-fixes_62","title":"Bug Fixes","text":""},{"location":"changelog/#maintenance_17","title":"Maintenance","text":""},{"location":"changelog/#dependencies_35","title":"Dependencies","text":""},{"location":"changelog/#all-app-changes_63","title":"All App Changes","text":"7 changes - Revert \"Enhancement: support remote user auth directly against API (DRF)\" @shamoon ([#5534](https://github.com/paperless-ngx/paperless-ngx/pull/5534)) - Fix: Minor frontend things in 2.4.0 [@shamoon](https://github.com/shamoon) ([#5514](https://github.com/paperless-ngx/paperless-ngx/pull/5514)) - Fix: enforce permissions for app config [@shamoon](https://github.com/shamoon) ([#5516](https://github.com/paperless-ngx/paperless-ngx/pull/5516)) - Change: merge workflow permissions assignments instead of overwrite [@shamoon](https://github.com/shamoon) ([#5496](https://github.com/paperless-ngx/paperless-ngx/pull/5496)) - Chore(deps-dev): Bump the development group with 1 update [@dependabot](https://github.com/dependabot) ([#5503](https://github.com/paperless-ngx/paperless-ngx/pull/5503)) - Fix: render images not converted to pdf, refactor doc detail rendering [@shamoon](https://github.com/shamoon) ([#5475](https://github.com/paperless-ngx/paperless-ngx/pull/5475)) - Fix: Dont parse numbers with exponent as integer [@shamoon](https://github.com/shamoon) ([#5457](https://github.com/paperless-ngx/paperless-ngx/pull/5457))"},{"location":"changelog/#paperless-ngx-240","title":"paperless-ngx 2.4.0","text":""},{"location":"changelog/#features_17","title":"Features","text":""},{"location":"changelog/#bug-fixes_63","title":"Bug Fixes","text":""},{"location":"changelog/#maintenance_18","title":"Maintenance","text":""},{"location":"changelog/#dependencies_36","title":"Dependencies","text":""},{"location":"changelog/#all-app-changes_64","title":"All App Changes","text":"16 changes - Fix: doc link removal when has never been assigned [@shamoon](https://github.com/shamoon) ([#5451](https://github.com/paperless-ngx/paperless-ngx/pull/5451)) - Chore: better bootstrap icons [@shamoon](https://github.com/shamoon) ([#5403](https://github.com/paperless-ngx/paperless-ngx/pull/5403)) - Fix: dont lose permissions ui if owner changed from [@shamoon](https://github.com/shamoon) ([#5433](https://github.com/paperless-ngx/paperless-ngx/pull/5433)) - Enhancement: support remote user auth directly against API (DRF) [@shamoon](https://github.com/shamoon) ([#5386](https://github.com/paperless-ngx/paperless-ngx/pull/5386)) - Fix: Getting next ASN when no documents have an ASN [@stumpylog](https://github.com/stumpylog) ([#5431](https://github.com/paperless-ngx/paperless-ngx/pull/5431)) - Feature: Add additional caching support to suggestions and metadata [@stumpylog](https://github.com/stumpylog) ([#5414](https://github.com/paperless-ngx/paperless-ngx/pull/5414)) - Chore(deps): Bump the small-changes group with 2 updates [@dependabot](https://github.com/dependabot) ([#5413](https://github.com/paperless-ngx/paperless-ngx/pull/5413)) - Chore(deps-dev): Bump the development group with 2 updates [@dependabot](https://github.com/dependabot) ([#5412](https://github.com/paperless-ngx/paperless-ngx/pull/5412)) - Fix: signin username floating label [@shamoon](https://github.com/shamoon) ([#5424](https://github.com/paperless-ngx/paperless-ngx/pull/5424)) - Feature: help tooltips [@shamoon](https://github.com/shamoon) ([#5383](https://github.com/paperless-ngx/paperless-ngx/pull/5383)) - Enhancement / QoL: show selected tasks count [@shamoon](https://github.com/shamoon) ([#5379](https://github.com/paperless-ngx/paperless-ngx/pull/5379)) - Fix: shared by me filter with multiple users / groups in postgres [@shamoon](https://github.com/shamoon) ([#5396](https://github.com/paperless-ngx/paperless-ngx/pull/5396)) - Fix: doc detail component fixes [@shamoon](https://github.com/shamoon) ([#5373](https://github.com/paperless-ngx/paperless-ngx/pull/5373)) - Enhancement: warn when outdated doc detected [@shamoon](https://github.com/shamoon) ([#5372](https://github.com/paperless-ngx/paperless-ngx/pull/5372)) - Feature: app branding [@shamoon](https://github.com/shamoon) ([#5357](https://github.com/paperless-ngx/paperless-ngx/pull/5357)) - Chore: Initial refactor of consume task [@stumpylog](https://github.com/stumpylog) ([#5367](https://github.com/paperless-ngx/paperless-ngx/pull/5367))"},{"location":"changelog/#paperless-ngx-233","title":"paperless-ngx 2.3.3","text":""},{"location":"changelog/#enhancements_1","title":"Enhancements","text":""},{"location":"changelog/#bug-fixes_64","title":"Bug Fixes","text":""},{"location":"changelog/#maintenance_19","title":"Maintenance","text":""},{"location":"changelog/#all-app-changes_65","title":"All App Changes","text":"5 changes - Enhancement: Explain behavior of unset app config boolean to user [@shamoon](https://github.com/shamoon) ([#5345](https://github.com/paperless-ngx/paperless-ngx/pull/5345)) - Enhancement: title assignment placeholder error handling, fallback [@shamoon](https://github.com/shamoon) ([#5282](https://github.com/paperless-ngx/paperless-ngx/pull/5282)) - Chore: Backend dependencies update [@stumpylog](https://github.com/stumpylog) ([#5336](https://github.com/paperless-ngx/paperless-ngx/pull/5336)) - Fix: Don't require the JSON user arguments field, interpret empty string as [@stumpylog](https://github.com/stumpylog) ([#5320](https://github.com/paperless-ngx/paperless-ngx/pull/5320)) - Chore: add pre-commit hook for codespell [@shamoon](https://github.com/shamoon) ([#5324](https://github.com/paperless-ngx/paperless-ngx/pull/5324))"},{"location":"changelog/#paperless-ngx-232","title":"paperless-ngx 2.3.2","text":""},{"location":"changelog/#bug-fixes_65","title":"Bug Fixes","text":""},{"location":"changelog/#all-app-changes_66","title":"All App Changes","text":"5 changes - Fix: triggered workflow assignment of customfield fails if field exists in v2.3.1 [@shamoon](https://github.com/shamoon) ([#5302](https://github.com/paperless-ngx/paperless-ngx/pull/5302)) - Fix: Decoding of user arguments for OCR [@stumpylog](https://github.com/stumpylog) ([#5307](https://github.com/paperless-ngx/paperless-ngx/pull/5307)) - Fix: empty workflow trigger match field cannot be saved in v.2.3.1 [@shamoon](https://github.com/shamoon) ([#5301](https://github.com/paperless-ngx/paperless-ngx/pull/5301)) - Fix: Use local time for added/updated workflow triggers [@stumpylog](https://github.com/stumpylog) ([#5304](https://github.com/paperless-ngx/paperless-ngx/pull/5304)) - Fix: workflow edit form loses unsaved changes [@shamoon](https://github.com/shamoon) ([#5299](https://github.com/paperless-ngx/paperless-ngx/pull/5299))"},{"location":"changelog/#paperless-ngx-231","title":"paperless-ngx 2.3.1","text":""},{"location":"changelog/#bug-fixes_66","title":"Bug Fixes","text":""},{"location":"changelog/#all-app-changes_67","title":"All App Changes","text":"2 changes - Fix: edit workflow form not displaying trigger settings [@shamoon](https://github.com/shamoon) ([#5276](https://github.com/paperless-ngx/paperless-ngx/pull/5276)) - Fix: Prevent passing 0 pages to OCRMyPDF [@stumpylog](https://github.com/stumpylog) ([#5275](https://github.com/paperless-ngx/paperless-ngx/pull/5275))"},{"location":"changelog/#paperless-ngx-230","title":"paperless-ngx 2.3.0","text":""},{"location":"changelog/#notable-changes_6","title":"Notable Changes","text":""},{"location":"changelog/#features_18","title":"Features","text":""},{"location":"changelog/#bug-fixes_67","title":"Bug Fixes","text":""},{"location":"changelog/#documentation_4","title":"Documentation","text":""},{"location":"changelog/#maintenance_20","title":"Maintenance","text":""},{"location":"changelog/#dependencies_37","title":"Dependencies","text":"4 changes - Chore(deps): Bump the actions group with 5 updates [@dependabot](https://github.com/dependabot) ([#5203](https://github.com/paperless-ngx/paperless-ngx/pull/5203)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 10 updates [@dependabot](https://github.com/dependabot) ([#5204](https://github.com/paperless-ngx/paperless-ngx/pull/5204)) - Chore(deps-dev): Bump [@types/node from 20.10.4 to 20.10.6 in /src-ui @dependabot](https://github.com/types/node from 20.10.4 to 20.10.6 in /src-ui @dependabot) ([#5207](https://github.com/paperless-ngx/paperless-ngx/pull/5207)) - Chore(deps-dev): Bump the frontend-eslint-dependencies group in /src-ui with 3 updates [@dependabot](https://github.com/dependabot) ([#5205](https://github.com/paperless-ngx/paperless-ngx/pull/5205))"},{"location":"changelog/#all-app-changes_68","title":"All App Changes","text":"21 changes - Chore: Replaces deprecated Django alias with standard library [@stumpylog](https://github.com/stumpylog) ([#5262](https://github.com/paperless-ngx/paperless-ngx/pull/5262)) - Fix: Crash in barcode ASN reading when the file type isn't supported [@stumpylog](https://github.com/stumpylog) ([#5261](https://github.com/paperless-ngx/paperless-ngx/pull/5261)) - Fix: Allows pre-consume scripts to modify the working path again [@stumpylog](https://github.com/stumpylog) ([#5260](https://github.com/paperless-ngx/paperless-ngx/pull/5260)) - Enhancement: add basic filters for listing of custom fields [@shamoon](https://github.com/shamoon) ([#5257](https://github.com/paperless-ngx/paperless-ngx/pull/5257)) - Change: Use fnmatch for more sane workflow path matching [@shamoon](https://github.com/shamoon) ([#5250](https://github.com/paperless-ngx/paperless-ngx/pull/5250)) - Enhancement: fetch mails in bulk [@falkenbt](https://github.com/falkenbt) ([#5249](https://github.com/paperless-ngx/paperless-ngx/pull/5249)) - Fix: zip exports not respecting the --delete option [@stumpylog](https://github.com/stumpylog) ([#5245](https://github.com/paperless-ngx/paperless-ngx/pull/5245)) - Enhancement: add parameter to post_document API [@bevanjkay](https://github.com/bevanjkay) ([#5217](https://github.com/paperless-ngx/paperless-ngx/pull/5217)) - Feature: Workflows [@shamoon](https://github.com/shamoon) ([#5121](https://github.com/paperless-ngx/paperless-ngx/pull/5121)) - Fix: filename format remove none when part of directory [@shamoon](https://github.com/shamoon) ([#5210](https://github.com/paperless-ngx/paperless-ngx/pull/5210)) - Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 10 updates [@dependabot](https://github.com/dependabot) ([#5204](https://github.com/paperless-ngx/paperless-ngx/pull/5204)) - Chore(deps-dev): Bump [@types/node from 20.10.4 to 20.10.6 in /src-ui @dependabot](https://github.com/types/node from 20.10.4 to 20.10.6 in /src-ui @dependabot) ([#5207](https://github.com/paperless-ngx/paperless-ngx/pull/5207)) - Chore(deps-dev): Bump the frontend-eslint-dependencies group in /src-ui with 3 updates [@dependabot](https://github.com/dependabot) ([#5205](https://github.com/paperless-ngx/paperless-ngx/pull/5205)) - Fix: Improve Performance for Listing and Paginating Documents [@antoinelibert](https://github.com/antoinelibert) ([#5195](https://github.com/paperless-ngx/paperless-ngx/pull/5195)) - Fix: Disable custom field remove button if user does not have permissions [@shamoon](https://github.com/shamoon) ([#5194](https://github.com/paperless-ngx/paperless-ngx/pull/5194)) - Fix: overlapping button focus highlight on login [@shamoon](https://github.com/shamoon) ([#5193](https://github.com/paperless-ngx/paperless-ngx/pull/5193)) - Fix: symmetric doc links with target doc value None [@shamoon](https://github.com/shamoon) ([#5187](https://github.com/paperless-ngx/paperless-ngx/pull/5187)) - Fix: setting empty doc link with docs to be removed [@shamoon](https://github.com/shamoon) ([#5174](https://github.com/paperless-ngx/paperless-ngx/pull/5174)) - Feature: Allow setting backend configuration settings via the UI [@stumpylog](https://github.com/stumpylog) ([#5126](https://github.com/paperless-ngx/paperless-ngx/pull/5126)) - Enhancement: improve validation of custom field values [@shamoon](https://github.com/shamoon) ([#5166](https://github.com/paperless-ngx/paperless-ngx/pull/5166)) - Fix: type casting of db values for 'shared by me' filter [@shamoon](https://github.com/shamoon) ([#5155](https://github.com/paperless-ngx/paperless-ngx/pull/5155))"},{"location":"changelog/#paperless-ngx-221","title":"paperless-ngx 2.2.1","text":""},{"location":"changelog/#bug-fixes_68","title":"Bug Fixes","text":""},{"location":"changelog/#all-app-changes_69","title":"All App Changes","text":"3 changes - Fix: saving doc links with no value [@shamoon](https://github.com/shamoon) ([#5144](https://github.com/paperless-ngx/paperless-ngx/pull/5144)) - Fix: allow multiple consumption templates to assign the same custom field [@shamoon](https://github.com/shamoon) ([#5142](https://github.com/paperless-ngx/paperless-ngx/pull/5142)) - Fix: some dropdowns broken in 2.2.0 [@shamoon](https://github.com/shamoon) ([#5134](https://github.com/paperless-ngx/paperless-ngx/pull/5134))"},{"location":"changelog/#paperless-ngx-220","title":"paperless-ngx 2.2.0","text":""},{"location":"changelog/#features_19","title":"Features","text":""},{"location":"changelog/#bug-fixes_69","title":"Bug Fixes","text":""},{"location":"changelog/#documentation_5","title":"Documentation","text":""},{"location":"changelog/#maintenance_21","title":"Maintenance","text":""},{"location":"changelog/#dependencies_38","title":"Dependencies","text":"5 changes - Chore: Bulk backend update [@stumpylog](https://github.com/stumpylog) ([#5061](https://github.com/paperless-ngx/paperless-ngx/pull/5061)) - Chore(deps): Bump the django group with 3 updates [@dependabot](https://github.com/dependabot) ([#5046](https://github.com/paperless-ngx/paperless-ngx/pull/5046)) - Chore(deps): Bump the major-versions group with 1 update [@dependabot](https://github.com/dependabot) ([#5047](https://github.com/paperless-ngx/paperless-ngx/pull/5047)) - Chore(deps): Bump the small-changes group with 6 updates [@dependabot](https://github.com/dependabot) ([#5048](https://github.com/paperless-ngx/paperless-ngx/pull/5048)) - Fix: Updates Ghostscript to 10.02.1 for more bug fixes to it [@stumpylog](https://github.com/stumpylog) ([#5040](https://github.com/paperless-ngx/paperless-ngx/pull/5040))"},{"location":"changelog/#all-app-changes_70","title":"All App Changes","text":"20 changes - Fix: Case where a mail attachment has no filename to use [@stumpylog](https://github.com/stumpylog) ([#5117](https://github.com/paperless-ngx/paperless-ngx/pull/5117)) - Fix: Disable auto-login for API token requests [@shamoon](https://github.com/shamoon) ([#5094](https://github.com/paperless-ngx/paperless-ngx/pull/5094)) - Fix: update ASN regex to support Unicode [@eukub](https://github.com/eukub) ([#5099](https://github.com/paperless-ngx/paperless-ngx/pull/5099)) - Fix: ensure CSRF-Token on Index view [@baflo](https://github.com/baflo) ([#5082](https://github.com/paperless-ngx/paperless-ngx/pull/5082)) - Fix: Stop auto-refresh logs / tasks after close [@shamoon](https://github.com/shamoon) ([#5089](https://github.com/paperless-ngx/paperless-ngx/pull/5089)) - Enhancement: Add tooltip for select dropdown items [@shamoon](https://github.com/shamoon) ([#5070](https://github.com/paperless-ngx/paperless-ngx/pull/5070)) - Fix: Make the admin panel accessible when using a large number of documents [@bogdal](https://github.com/bogdal) ([#5052](https://github.com/paperless-ngx/paperless-ngx/pull/5052)) - Chore: Update Angular to v17 including new Angular control-flow [@shamoon](https://github.com/shamoon) ([#4980](https://github.com/paperless-ngx/paperless-ngx/pull/4980)) - Fix: dont allow null property via API [@shamoon](https://github.com/shamoon) ([#5063](https://github.com/paperless-ngx/paperless-ngx/pull/5063)) - Enhancement: symmetric document links [@shamoon](https://github.com/shamoon) ([#4907](https://github.com/paperless-ngx/paperless-ngx/pull/4907)) - Enhancement: shared icon \\& shared by me filter [@shamoon](https://github.com/shamoon) ([#4859](https://github.com/paperless-ngx/paperless-ngx/pull/4859)) - Chore(deps): Bump the django group with 3 updates [@dependabot](https://github.com/dependabot) ([#5046](https://github.com/paperless-ngx/paperless-ngx/pull/5046)) - Chore(deps): Bump the major-versions group with 1 update [@dependabot](https://github.com/dependabot) ([#5047](https://github.com/paperless-ngx/paperless-ngx/pull/5047)) - Chore(deps): Bump the small-changes group with 6 updates [@dependabot](https://github.com/dependabot) ([#5048](https://github.com/paperless-ngx/paperless-ngx/pull/5048)) - Enhancement: Improved popup preview, respect embedded viewer, error handling [@shamoon](https://github.com/shamoon) ([#4947](https://github.com/paperless-ngx/paperless-ngx/pull/4947)) - Enhancement: Add {original_filename}, {added_time} to title placeholders [@TTT7275](https://github.com/TTT7275) ([#4972](https://github.com/paperless-ngx/paperless-ngx/pull/4972)) - Feature: Allow deletion of documents via the fuzzy matching command [@stumpylog](https://github.com/stumpylog) ([#4957](https://github.com/paperless-ngx/paperless-ngx/pull/4957)) - Fix: allow system keyboard shortcuts in date fields [@shamoon](https://github.com/shamoon) ([#5009](https://github.com/paperless-ngx/paperless-ngx/pull/5009)) - Enhancement: document link field fixes [@shamoon](https://github.com/shamoon) ([#5020](https://github.com/paperless-ngx/paperless-ngx/pull/5020)) - Fix password change detection on profile edit [@shamoon](https://github.com/shamoon) ([#5028](https://github.com/paperless-ngx/paperless-ngx/pull/5028))"},{"location":"changelog/#paperless-ngx-213","title":"paperless-ngx 2.1.3","text":""},{"location":"changelog/#bug-fixes_70","title":"Bug Fixes","text":""},{"location":"changelog/#all-app-changes_71","title":"All App Changes","text":"6 changes - Refactor: Boost performance by reducing db queries [@bogdal](https://github.com/bogdal) ([#4990](https://github.com/paperless-ngx/paperless-ngx/pull/4990)) - Fix: Document metadata is lost during barcode splitting [@stumpylog](https://github.com/stumpylog) ([#4982](https://github.com/paperless-ngx/paperless-ngx/pull/4982)) - Fix: Export of custom field instances during a split manifest export [@stumpylog](https://github.com/stumpylog) ([#4984](https://github.com/paperless-ngx/paperless-ngx/pull/4984)) - Fix: Apply user arguments even in the case of the forcing OCR [@stumpylog](https://github.com/stumpylog) ([#4981](https://github.com/paperless-ngx/paperless-ngx/pull/4981)) - Fix: support show errors for select dropdowns [@shamoon](https://github.com/shamoon) ([#4979](https://github.com/paperless-ngx/paperless-ngx/pull/4979)) - Fix: Don't attempt to parse none objects during date searching [@bogdal](https://github.com/bogdal) ([#4977](https://github.com/paperless-ngx/paperless-ngx/pull/4977))"},{"location":"changelog/#paperless-ngx-212","title":"paperless-ngx 2.1.2","text":""},{"location":"changelog/#bug-fixes_71","title":"Bug Fixes","text":""},{"location":"changelog/#dependencies_39","title":"Dependencies","text":""},{"location":"changelog/#all-app-changes_72","title":"All App Changes","text":"9 changes - Fix: sort consumption templates by order by default [@shamoon](https://github.com/shamoon) ([#4956](https://github.com/paperless-ngx/paperless-ngx/pull/4956)) - Chore: reorganize api tests [@shamoon](https://github.com/shamoon) ([#4935](https://github.com/paperless-ngx/paperless-ngx/pull/4935)) - Chore(deps-dev): Bump the small-changes group with 2 updates [@dependabot](https://github.com/dependabot) ([#4942](https://github.com/paperless-ngx/paperless-ngx/pull/4942)) - Fix: allow text copy in pngx pdf viewer [@shamoon](https://github.com/shamoon) ([#4938](https://github.com/paperless-ngx/paperless-ngx/pull/4938)) - Chore(deps-dev): Bump the development group with 1 update [@dependabot](https://github.com/dependabot) ([#4939](https://github.com/paperless-ngx/paperless-ngx/pull/4939)) - Fix: Don't allow autocomplete searches to fail on schema field matches [@stumpylog](https://github.com/stumpylog) ([#4934](https://github.com/paperless-ngx/paperless-ngx/pull/4934)) - Fix: Convert search dates to UTC in advanced search [@bogdal](https://github.com/bogdal) ([#4891](https://github.com/paperless-ngx/paperless-ngx/pull/4891)) - Fix: Use the attachment filename so downstream template matching works [@stumpylog](https://github.com/stumpylog) ([#4931](https://github.com/paperless-ngx/paperless-ngx/pull/4931)) - Fix: frontend handle autocomplete failure gracefully [@shamoon](https://github.com/shamoon) ([#4903](https://github.com/paperless-ngx/paperless-ngx/pull/4903))"},{"location":"changelog/#paperless-ngx-211","title":"paperless-ngx 2.1.1","text":""},{"location":"changelog/#bug-fixes_72","title":"Bug Fixes","text":""},{"location":"changelog/#maintenance_22","title":"Maintenance","text":""},{"location":"changelog/#all-app-changes_73","title":"All App Changes","text":"5 changes - Fix: disable toggle for share link creation without archive version, fix auto-copy in Safari [@shamoon](https://github.com/shamoon) ([#4885](https://github.com/paperless-ngx/paperless-ngx/pull/4885)) - Fix: storage paths link incorrect in dashboard widget [@shamoon](https://github.com/shamoon) ([#4878](https://github.com/paperless-ngx/paperless-ngx/pull/4878)) - Fix: respect baseURI for pdfjs worker URL [@shamoon](https://github.com/shamoon) ([#4865](https://github.com/paperless-ngx/paperless-ngx/pull/4865)) - Fix: Allow users to configure the From email for password reset [@stumpylog](https://github.com/stumpylog) ([#4867](https://github.com/paperless-ngx/paperless-ngx/pull/4867)) - Fix: dont show move icon for file tasks badge [@shamoon](https://github.com/shamoon) ([#4860](https://github.com/paperless-ngx/paperless-ngx/pull/4860))"},{"location":"changelog/#paperless-ngx-210","title":"paperless-ngx 2.1.0","text":""},{"location":"changelog/#features_20","title":"Features","text":""},{"location":"changelog/#bug-fixes_73","title":"Bug Fixes","text":""},{"location":"changelog/#documentation_6","title":"Documentation","text":""},{"location":"changelog/#maintenance_23","title":"Maintenance","text":""},{"location":"changelog/#dependencies_40","title":"Dependencies","text":"7 changes - Bump the development group with 6 updates [@dependabot](https://github.com/dependabot) ([#4838](https://github.com/paperless-ngx/paperless-ngx/pull/4838)) - Bump the actions group with 2 updates [@dependabot](https://github.com/dependabot) ([#4745](https://github.com/paperless-ngx/paperless-ngx/pull/4745)) - Bump the frontend-eslint-dependencies group in /src-ui with 3 updates [@dependabot](https://github.com/dependabot) ([#4756](https://github.com/paperless-ngx/paperless-ngx/pull/4756)) - Bump the frontend-jest-dependencies group in /src-ui with 2 updates [@dependabot](https://github.com/dependabot) ([#4744](https://github.com/paperless-ngx/paperless-ngx/pull/4744)) - Bump [@playwright/test from 1.39.0 to 1.40.1 in /src-ui @dependabot](https://github.com/playwright/test from 1.39.0 to 1.40.1 in /src-ui @dependabot) ([#4749](https://github.com/paperless-ngx/paperless-ngx/pull/4749)) - Bump wait-on from 7.0.1 to 7.2.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#4747](https://github.com/paperless-ngx/paperless-ngx/pull/4747)) - Bump [@types/node from 20.8.10 to 20.10.2 in /src-ui @dependabot](https://github.com/types/node from 20.8.10 to 20.10.2 in /src-ui @dependabot) ([#4748](https://github.com/paperless-ngx/paperless-ngx/pull/4748))"},{"location":"changelog/#all-app-changes_74","title":"All App Changes","text":"20 changes - Enhancement: implement document link custom field [@shamoon](https://github.com/shamoon) ([#4799](https://github.com/paperless-ngx/paperless-ngx/pull/4799)) - Bump the development group with 6 updates [@dependabot](https://github.com/dependabot) ([#4838](https://github.com/paperless-ngx/paperless-ngx/pull/4838)) - Fix: welcome widget text color [@shamoon](https://github.com/shamoon) ([#4829](https://github.com/paperless-ngx/paperless-ngx/pull/4829)) - Fix: export consumption templates \\& custom fields in exporter [@shamoon](https://github.com/shamoon) ([#4825](https://github.com/paperless-ngx/paperless-ngx/pull/4825)) - Feature: Adds additional warnings during an import if it might fail [@stumpylog](https://github.com/stumpylog) ([#4814](https://github.com/paperless-ngx/paperless-ngx/pull/4814)) - Feature: pngx PDF viewer with updated pdfjs [@shamoon](https://github.com/shamoon) ([#4679](https://github.com/paperless-ngx/paperless-ngx/pull/4679)) - Fix: bulk edit object permissions should use permissions object [@shamoon](https://github.com/shamoon) ([#4797](https://github.com/paperless-ngx/paperless-ngx/pull/4797)) - Enhancement: support automatically assigning custom fields via consumption templates [@shamoon](https://github.com/shamoon) ([#4727](https://github.com/paperless-ngx/paperless-ngx/pull/4727)) - Fix: empty string for consumption template field should be interpreted as [@shamoon](https://github.com/shamoon) ([#4762](https://github.com/paperless-ngx/paperless-ngx/pull/4762)) - Fix: use default permissions for objects created via dropdown [@shamoon](https://github.com/shamoon) ([#4778](https://github.com/paperless-ngx/paperless-ngx/pull/4778)) - Fix: Alpha layer removal could allow duplicates [@stumpylog](https://github.com/stumpylog) ([#4781](https://github.com/paperless-ngx/paperless-ngx/pull/4781)) - Feature: update user profile [@shamoon](https://github.com/shamoon) ([#4678](https://github.com/paperless-ngx/paperless-ngx/pull/4678)) - Fix: update checker broke in v2.0.0 [@shamoon](https://github.com/shamoon) ([#4773](https://github.com/paperless-ngx/paperless-ngx/pull/4773)) - Fix: only show global drag-drop when files included [@shamoon](https://github.com/shamoon) ([#4767](https://github.com/paperless-ngx/paperless-ngx/pull/4767)) - Bump the frontend-eslint-dependencies group in /src-ui with 3 updates [@dependabot](https://github.com/dependabot) ([#4756](https://github.com/paperless-ngx/paperless-ngx/pull/4756)) - Bump the frontend-jest-dependencies group in /src-ui with 2 updates [@dependabot](https://github.com/dependabot) ([#4744](https://github.com/paperless-ngx/paperless-ngx/pull/4744)) - Bump [@playwright/test from 1.39.0 to 1.40.1 in /src-ui @dependabot](https://github.com/playwright/test from 1.39.0 to 1.40.1 in /src-ui @dependabot) ([#4749](https://github.com/paperless-ngx/paperless-ngx/pull/4749)) - Bump wait-on from 7.0.1 to 7.2.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#4747](https://github.com/paperless-ngx/paperless-ngx/pull/4747)) - Bump [@types/node from 20.8.10 to 20.10.2 in /src-ui @dependabot](https://github.com/types/node from 20.8.10 to 20.10.2 in /src-ui @dependabot) ([#4748](https://github.com/paperless-ngx/paperless-ngx/pull/4748)) - Enhancement: auto-refresh logs \\& tasks [@shamoon](https://github.com/shamoon) ([#4680](https://github.com/paperless-ngx/paperless-ngx/pull/4680))"},{"location":"changelog/#paperless-ngx-201","title":"paperless-ngx 2.0.1","text":""},{"location":"changelog/#please-note","title":"Please Note","text":"

Exports generated in Paperless-ngx v2.0.0\u20132.0.1 will not contain consumption templates or custom fields, we recommend users upgrade to at least v2.1.

"},{"location":"changelog/#bug-fixes_74","title":"Bug Fixes","text":""},{"location":"changelog/#all-app-changes_75","title":"All App Changes","text":"4 changes - Fix: Increase field the length for consumption template source [@stumpylog](https://github.com/stumpylog) ([#4719](https://github.com/paperless-ngx/paperless-ngx/pull/4719)) - Fix: Set RGB color conversion strategy for PDF outputs [@stumpylog](https://github.com/stumpylog) ([#4709](https://github.com/paperless-ngx/paperless-ngx/pull/4709)) - Fix: Add a warning about a low image DPI which may cause OCR to fail [@stumpylog](https://github.com/stumpylog) ([#4708](https://github.com/paperless-ngx/paperless-ngx/pull/4708)) - Fix: share links for URLs containing 'api' incorrect in dropdown [@shamoon](https://github.com/shamoon) ([#4701](https://github.com/paperless-ngx/paperless-ngx/pull/4701))"},{"location":"changelog/#paperless-ngx-200","title":"paperless-ngx 2.0.0","text":""},{"location":"changelog/#please-note_1","title":"Please Note","text":"

Exports generated in Paperless-ngx v2.0.0\u20132.0.1 will not contain consumption templates or custom fields, we recommend users upgrade to at least v2.1.

"},{"location":"changelog/#breaking-changes_6","title":"Breaking Changes","text":""},{"location":"changelog/#notable-changes_7","title":"Notable Changes","text":""},{"location":"changelog/#features_21","title":"Features","text":""},{"location":"changelog/#bug-fixes_75","title":"Bug Fixes","text":""},{"location":"changelog/#documentation_7","title":"Documentation","text":""},{"location":"changelog/#maintenance_24","title":"Maintenance","text":""},{"location":"changelog/#dependencies_41","title":"Dependencies","text":"39 changes - Chore: Bulk update of Python dependencies [@stumpylog](https://github.com/stumpylog) ([#4688](https://github.com/paperless-ngx/paperless-ngx/pull/4688)) - Bump the frontend-eslint-dependencies group in /src-ui with 3 updates [@dependabot](https://github.com/dependabot) ([#4479](https://github.com/paperless-ngx/paperless-ngx/pull/4479)) - Bump [@playwright/test from 1.38.1 to 1.39.0 in /src-ui @dependabot](https://github.com/playwright/test from 1.38.1 to 1.39.0 in /src-ui @dependabot) ([#4480](https://github.com/paperless-ngx/paperless-ngx/pull/4480)) - Bump concurrently from 8.2.1 to 8.2.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#4481](https://github.com/paperless-ngx/paperless-ngx/pull/4481)) - Bump the frontend-jest-dependencies group in /src-ui with 1 update [@dependabot](https://github.com/dependabot) ([#4478](https://github.com/paperless-ngx/paperless-ngx/pull/4478)) - Bump the frontend-angular-dependencies group in /src-ui with 14 updates [@dependabot](https://github.com/dependabot) ([#4477](https://github.com/paperless-ngx/paperless-ngx/pull/4477)) - Bump the actions group with 1 update [@dependabot](https://github.com/dependabot) ([#4476](https://github.com/paperless-ngx/paperless-ngx/pull/4476)) - Bump [@babel/traverse from 7.22.11 to 7.23.2 in /src-ui @dependabot](https://github.com/babel/traverse from 7.22.11 to 7.23.2 in /src-ui @dependabot) ([#4389](https://github.com/paperless-ngx/paperless-ngx/pull/4389)) - Fix: replace drag drop \\& clipboard deps with angular cdk [@shamoon](https://github.com/shamoon) ([#4362](https://github.com/paperless-ngx/paperless-ngx/pull/4362)) - Bump postcss from 8.4.12 to 8.4.31 in /src/paperless_mail/templates [@dependabot](https://github.com/dependabot) ([#4318](https://github.com/paperless-ngx/paperless-ngx/pull/4318)) - Bump [@types/node from 20.7.0 to 20.8.0 in /src-ui @dependabot](https://github.com/types/node from 20.7.0 to 20.8.0 in /src-ui @dependabot) ([#4303](https://github.com/paperless-ngx/paperless-ngx/pull/4303)) - Bump the frontend-angular-dependencies group in /src-ui with 8 updates [@dependabot](https://github.com/dependabot) ([#4302](https://github.com/paperless-ngx/paperless-ngx/pull/4302)) - Bump the frontend-eslint-dependencies group in /src-ui with 3 updates [@dependabot](https://github.com/dependabot) ([#4283](https://github.com/paperless-ngx/paperless-ngx/pull/4283)) - Bump the frontend-angular-dependencies group in /src-ui with 10 updates [@dependabot](https://github.com/dependabot) ([#4282](https://github.com/paperless-ngx/paperless-ngx/pull/4282)) - Bump [@types/node from 20.6.3 to 20.7.0 in /src-ui @dependabot](https://github.com/types/node from 20.6.3 to 20.7.0 in /src-ui @dependabot) ([#4284](https://github.com/paperless-ngx/paperless-ngx/pull/4284)) - Bump leonsteinhaeuser/project-beta-automations from 2.1.0 to 2.2.1 [@dependabot](https://github.com/dependabot) ([#4281](https://github.com/paperless-ngx/paperless-ngx/pull/4281)) - Bump zone.js from 0.13.1 to 0.13.3 in /src-ui [@dependabot](https://github.com/dependabot) ([#4223](https://github.com/paperless-ngx/paperless-ngx/pull/4223)) - Bump [@types/node from 20.5.8 to 20.6.3 in /src-ui @dependabot](https://github.com/types/node from 20.5.8 to 20.6.3 in /src-ui @dependabot) ([#4224](https://github.com/paperless-ngx/paperless-ngx/pull/4224)) - Bump the frontend-angular-dependencies group in /src-ui with 2 updates [@dependabot](https://github.com/dependabot) ([#4222](https://github.com/paperless-ngx/paperless-ngx/pull/4222)) - Bump docker/login-action from 2 to 3 [@dependabot](https://github.com/dependabot) ([#4221](https://github.com/paperless-ngx/paperless-ngx/pull/4221)) - Bump docker/setup-buildx-action from 2 to 3 [@dependabot](https://github.com/dependabot) ([#4220](https://github.com/paperless-ngx/paperless-ngx/pull/4220)) - Bump docker/setup-qemu-action from 2 to 3 [@dependabot](https://github.com/dependabot) ([#4211](https://github.com/paperless-ngx/paperless-ngx/pull/4211)) - Bump bootstrap from 5.3.1 to 5.3.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#4217](https://github.com/paperless-ngx/paperless-ngx/pull/4217)) - Bump the frontend-eslint-dependencies group in /src-ui with 3 updates [@dependabot](https://github.com/dependabot) ([#4215](https://github.com/paperless-ngx/paperless-ngx/pull/4215)) - Bump the frontend-jest-dependencies group in /src-ui with 4 updates [@dependabot](https://github.com/dependabot) ([#4218](https://github.com/paperless-ngx/paperless-ngx/pull/4218)) - Bump stumpylog/image-cleaner-action from 0.2.0 to 0.3.0 [@dependabot](https://github.com/dependabot) ([#4210](https://github.com/paperless-ngx/paperless-ngx/pull/4210)) - Bump docker/metadata-action from 4 to 5 [@dependabot](https://github.com/dependabot) ([#4209](https://github.com/paperless-ngx/paperless-ngx/pull/4209)) - Bump uuid from 9.0.0 to 9.0.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#4216](https://github.com/paperless-ngx/paperless-ngx/pull/4216)) - Bump the frontend-angular-dependencies group in /src-ui with 16 updates [@dependabot](https://github.com/dependabot) ([#4213](https://github.com/paperless-ngx/paperless-ngx/pull/4213)) - Bump docker/build-push-action from 4 to 5 [@dependabot](https://github.com/dependabot) ([#4212](https://github.com/paperless-ngx/paperless-ngx/pull/4212)) - Bump actions/checkout from 3 to 4 [@dependabot](https://github.com/dependabot) ([#4208](https://github.com/paperless-ngx/paperless-ngx/pull/4208)) - Chore: update docker image \\& ci testing node to v18 [@shamoon](https://github.com/shamoon) ([#4149](https://github.com/paperless-ngx/paperless-ngx/pull/4149)) - Chore: Unlock dependencies \\& update them all [@stumpylog](https://github.com/stumpylog) ([#4142](https://github.com/paperless-ngx/paperless-ngx/pull/4142)) - Bump the frontend-jest-dependencies group in /src-ui with 4 updates [@dependabot](https://github.com/dependabot) ([#4112](https://github.com/paperless-ngx/paperless-ngx/pull/4112)) - Bump tslib from 2.6.1 to 2.6.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#4108](https://github.com/paperless-ngx/paperless-ngx/pull/4108)) - Bump the frontend-eslint-dependencies group in /src-ui with 3 updates [@dependabot](https://github.com/dependabot) ([#4106](https://github.com/paperless-ngx/paperless-ngx/pull/4106)) - Bump concurrently from 8.2.0 to 8.2.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#4111](https://github.com/paperless-ngx/paperless-ngx/pull/4111)) - Bump [@types/node from 20.4.5 to 20.5.8 in /src-ui @dependabot](https://github.com/types/node from 20.4.5 to 20.5.8 in /src-ui @dependabot) ([#4110](https://github.com/paperless-ngx/paperless-ngx/pull/4110)) - Bump the frontend-angular-dependencies group in /src-ui with 19 updates [@dependabot](https://github.com/dependabot) ([#4104](https://github.com/paperless-ngx/paperless-ngx/pull/4104))"},{"location":"changelog/#all-app-changes_76","title":"All App Changes","text":"95 changes - Fix: Add missing spaces to help string in [@joouha](https://github.com/joouha) ([#4674](https://github.com/paperless-ngx/paperless-ngx/pull/4674)) - Fix: Typo invalidates precondition for doctype, resulting in Exception [@ArminGruner](https://github.com/ArminGruner) ([#4668](https://github.com/paperless-ngx/paperless-ngx/pull/4668)) - Fix: dark mode inconsistencies in v2.0.0 beta.rc1 [@shamoon](https://github.com/shamoon) ([#4669](https://github.com/paperless-ngx/paperless-ngx/pull/4669)) - Fix: dashboard saved view mobile width in v.2.0.0 beta.rc1 [@shamoon](https://github.com/shamoon) ([#4660](https://github.com/paperless-ngx/paperless-ngx/pull/4660)) - Fix: Miscellaneous visual fixes in v2.0.0-beta.rc1 2 [@shamoon](https://github.com/shamoon) ([#4635](https://github.com/paperless-ngx/paperless-ngx/pull/4635)) - Fix: Delay consumption after MODIFY inotify events [@frozenbrain](https://github.com/frozenbrain) ([#4626](https://github.com/paperless-ngx/paperless-ngx/pull/4626)) - Fix: Import of split-manifests can fail [@stumpylog](https://github.com/stumpylog) ([#4623](https://github.com/paperless-ngx/paperless-ngx/pull/4623)) - Fix: sidebar views dont update after creation in v2.0.0-beta.rc1 [@shamoon](https://github.com/shamoon) ([#4619](https://github.com/paperless-ngx/paperless-ngx/pull/4619)) - Fix: Prevent text wrap on consumption template label [@shamoon](https://github.com/shamoon) ([#4616](https://github.com/paperless-ngx/paperless-ngx/pull/4616)) - Fix: increase width of labels in default perms settings [@shamoon](https://github.com/shamoon) ([#4612](https://github.com/paperless-ngx/paperless-ngx/pull/4612)) - Fix: note deletion fails in v2.0.0-beta.rc1 [@shamoon](https://github.com/shamoon) ([#4602](https://github.com/paperless-ngx/paperless-ngx/pull/4602)) - Fix: Handle override lists being None [@stumpylog](https://github.com/stumpylog) ([#4598](https://github.com/paperless-ngx/paperless-ngx/pull/4598)) - Fix: Miscellaneous v2.0 visual fixes [@shamoon](https://github.com/shamoon) ([#4576](https://github.com/paperless-ngx/paperless-ngx/pull/4576)) - Fix: Force UTF-8 for exporter manifests and don't allow escaping [@stumpylog](https://github.com/stumpylog) ([#4574](https://github.com/paperless-ngx/paperless-ngx/pull/4574)) - Feature: compact notifications [@shamoon](https://github.com/shamoon) ([#4545](https://github.com/paperless-ngx/paperless-ngx/pull/4545)) - Chore: Backend bulk updates [@stumpylog](https://github.com/stumpylog) ([#4509](https://github.com/paperless-ngx/paperless-ngx/pull/4509)) - Fix: plain text preview overflows [@shamoon](https://github.com/shamoon) ([#4555](https://github.com/paperless-ngx/paperless-ngx/pull/4555)) - Feature: Hungarian translation [@shamoon](https://github.com/shamoon) ([#4552](https://github.com/paperless-ngx/paperless-ngx/pull/4552)) - Chore: Cleanup command arguments and standardize process count handling [@stumpylog](https://github.com/stumpylog) ([#4541](https://github.com/paperless-ngx/paperless-ngx/pull/4541)) - Chore: API support for id args for documents \\& objects [@shamoon](https://github.com/shamoon) ([#4519](https://github.com/paperless-ngx/paperless-ngx/pull/4519)) - Fix: add permissions for custom fields with migration [@shamoon](https://github.com/shamoon) ([#4513](https://github.com/paperless-ngx/paperless-ngx/pull/4513)) - Bump the frontend-eslint-dependencies group in /src-ui with 3 updates [@dependabot](https://github.com/dependabot) ([#4479](https://github.com/paperless-ngx/paperless-ngx/pull/4479)) - Bump [@playwright/test from 1.38.1 to 1.39.0 in /src-ui @dependabot](https://github.com/playwright/test from 1.38.1 to 1.39.0 in /src-ui @dependabot) ([#4480](https://github.com/paperless-ngx/paperless-ngx/pull/4480)) - Bump concurrently from 8.2.1 to 8.2.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#4481](https://github.com/paperless-ngx/paperless-ngx/pull/4481)) - Bump the frontend-jest-dependencies group in /src-ui with 1 update [@dependabot](https://github.com/dependabot) ([#4478](https://github.com/paperless-ngx/paperless-ngx/pull/4478)) - Bump the frontend-angular-dependencies group in /src-ui with 14 updates [@dependabot](https://github.com/dependabot) ([#4477](https://github.com/paperless-ngx/paperless-ngx/pull/4477)) - Fix: visually hidden text breaks delete button wrap [@shamoon](https://github.com/shamoon) ([#4462](https://github.com/paperless-ngx/paperless-ngx/pull/4462)) - Fix: API statistics document_file_type_counts return type [@shamoon](https://github.com/shamoon) ([#4464](https://github.com/paperless-ngx/paperless-ngx/pull/4464)) - Fix: Always return a list for audit log check [@shamoon](https://github.com/shamoon) ([#4463](https://github.com/paperless-ngx/paperless-ngx/pull/4463)) - Feature: Audit Trail [@nanokatz](https://github.com/nanokatz) ([#4425](https://github.com/paperless-ngx/paperless-ngx/pull/4425)) - Fix: Only create a Correspondent if the email matches rule filters [@stumpylog](https://github.com/stumpylog) ([#4431](https://github.com/paperless-ngx/paperless-ngx/pull/4431)) - Fix: Combination of consume template with recursive tagging [@stumpylog](https://github.com/stumpylog) ([#4442](https://github.com/paperless-ngx/paperless-ngx/pull/4442)) - Feature: Add ahead of time compression of the static files for x86_64 [@stumpylog](https://github.com/stumpylog) ([#4390](https://github.com/paperless-ngx/paperless-ngx/pull/4390)) - Feature: sort sidebar views [@shamoon](https://github.com/shamoon) ([#4381](https://github.com/paperless-ngx/paperless-ngx/pull/4381)) - Feature: Switches to a new client to handle communication with Gotenberg [@stumpylog](https://github.com/stumpylog) ([#4391](https://github.com/paperless-ngx/paperless-ngx/pull/4391)) - barcode logic: strip non-numeric characters from detected ASN string [@queaker](https://github.com/queaker) ([#4379](https://github.com/paperless-ngx/paperless-ngx/pull/4379)) - Bump [@babel/traverse from 7.22.11 to 7.23.2 in /src-ui @dependabot](https://github.com/babel/traverse from 7.22.11 to 7.23.2 in /src-ui @dependabot) ([#4389](https://github.com/paperless-ngx/paperless-ngx/pull/4389)) - Fix: replace drag drop \\& clipboard deps with angular cdk [@shamoon](https://github.com/shamoon) ([#4362](https://github.com/paperless-ngx/paperless-ngx/pull/4362)) - Fix: update document modified time on note creation / deletion [@shamoon](https://github.com/shamoon) ([#4374](https://github.com/paperless-ngx/paperless-ngx/pull/4374)) - Fix: correct set owner API location in docs, additional test [@shamoon](https://github.com/shamoon) ([#4366](https://github.com/paperless-ngx/paperless-ngx/pull/4366)) - Fix: get highest ASN regardless of user [@shamoon](https://github.com/shamoon) ([#4326](https://github.com/paperless-ngx/paperless-ngx/pull/4326)) - Bump postcss from 8.4.12 to 8.4.31 in /src/paperless_mail/templates [@dependabot](https://github.com/dependabot) ([#4318](https://github.com/paperless-ngx/paperless-ngx/pull/4318)) - CI: speed-up frontend tests on ci [@shamoon](https://github.com/shamoon) ([#4316](https://github.com/paperless-ngx/paperless-ngx/pull/4316)) - Bump [@types/node from 20.7.0 to 20.8.0 in /src-ui @dependabot](https://github.com/types/node from 20.7.0 to 20.8.0 in /src-ui @dependabot) ([#4303](https://github.com/paperless-ngx/paperless-ngx/pull/4303)) - Bump the frontend-angular-dependencies group in /src-ui with 8 updates [@dependabot](https://github.com/dependabot) ([#4302](https://github.com/paperless-ngx/paperless-ngx/pull/4302)) - Feature: password reset [@shamoon](https://github.com/shamoon) ([#4289](https://github.com/paperless-ngx/paperless-ngx/pull/4289)) - Enhancement: dashboard improvements, drag-n-drop reorder dashboard views [@shamoon](https://github.com/shamoon) ([#4252](https://github.com/paperless-ngx/paperless-ngx/pull/4252)) - Fix: long notes cause visual overflow [@shamoon](https://github.com/shamoon) ([#4287](https://github.com/paperless-ngx/paperless-ngx/pull/4287)) - Bump the frontend-eslint-dependencies group in /src-ui with 3 updates [@dependabot](https://github.com/dependabot) ([#4283](https://github.com/paperless-ngx/paperless-ngx/pull/4283)) - Bump the frontend-angular-dependencies group in /src-ui with 10 updates [@dependabot](https://github.com/dependabot) ([#4282](https://github.com/paperless-ngx/paperless-ngx/pull/4282)) - Bump [@types/node from 20.6.3 to 20.7.0 in /src-ui @dependabot](https://github.com/types/node from 20.6.3 to 20.7.0 in /src-ui @dependabot) ([#4284](https://github.com/paperless-ngx/paperless-ngx/pull/4284)) - Fix: Ensures all old connections are closed in certain long lived places [@stumpylog](https://github.com/stumpylog) ([#4265](https://github.com/paperless-ngx/paperless-ngx/pull/4265)) - Change: update translation string for tasks dialog [@shamoon](https://github.com/shamoon) ([#4263](https://github.com/paperless-ngx/paperless-ngx/pull/4263)) - Enhancement: settings reorganization \\& improvements, separate admin section [@shamoon](https://github.com/shamoon) ([#4251](https://github.com/paperless-ngx/paperless-ngx/pull/4251)) - Chore: Standardizes the imports across all the files and modules [@stumpylog](https://github.com/stumpylog) ([#4248](https://github.com/paperless-ngx/paperless-ngx/pull/4248)) - Feature: consumption templates [@shamoon](https://github.com/shamoon) ([#4196](https://github.com/paperless-ngx/paperless-ngx/pull/4196)) - Enhancement: support default permissions for object creation via frontend [@shamoon](https://github.com/shamoon) ([#4233](https://github.com/paperless-ngx/paperless-ngx/pull/4233)) - Fix: Set a non-zero polling internal when inotify cannot import [@stumpylog](https://github.com/stumpylog) ([#4230](https://github.com/paperless-ngx/paperless-ngx/pull/4230)) - Bump zone.js from 0.13.1 to 0.13.3 in /src-ui [@dependabot](https://github.com/dependabot) ([#4223](https://github.com/paperless-ngx/paperless-ngx/pull/4223)) - Bump [@types/node from 20.5.8 to 20.6.3 in /src-ui @dependabot](https://github.com/types/node from 20.5.8 to 20.6.3 in /src-ui @dependabot) ([#4224](https://github.com/paperless-ngx/paperless-ngx/pull/4224)) - Bump the frontend-angular-dependencies group in /src-ui with 2 updates [@dependabot](https://github.com/dependabot) ([#4222](https://github.com/paperless-ngx/paperless-ngx/pull/4222)) - Bump bootstrap from 5.3.1 to 5.3.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#4217](https://github.com/paperless-ngx/paperless-ngx/pull/4217)) - Bump the frontend-eslint-dependencies group in /src-ui with 3 updates [@dependabot](https://github.com/dependabot) ([#4215](https://github.com/paperless-ngx/paperless-ngx/pull/4215)) - Bump the frontend-jest-dependencies group in /src-ui with 4 updates [@dependabot](https://github.com/dependabot) ([#4218](https://github.com/paperless-ngx/paperless-ngx/pull/4218)) - Bump uuid from 9.0.0 to 9.0.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#4216](https://github.com/paperless-ngx/paperless-ngx/pull/4216)) - Bump the frontend-angular-dependencies group in /src-ui with 16 updates [@dependabot](https://github.com/dependabot) ([#4213](https://github.com/paperless-ngx/paperless-ngx/pull/4213)) - Enhancement: bulk edit object permissions [@shamoon](https://github.com/shamoon) ([#4176](https://github.com/paperless-ngx/paperless-ngx/pull/4176)) - Fix: completely hide upload widget if user does not have permissions [@nawramm](https://github.com/nawramm) ([#4198](https://github.com/paperless-ngx/paperless-ngx/pull/4198)) - Fix: application of theme color vars at root [@shamoon](https://github.com/shamoon) ([#4193](https://github.com/paperless-ngx/paperless-ngx/pull/4193)) - Enhancement: Allow the user the specify the export zip file name [@stumpylog](https://github.com/stumpylog) ([#4189](https://github.com/paperless-ngx/paperless-ngx/pull/4189)) - Feature: Share links [@shamoon](https://github.com/shamoon) ([#3996](https://github.com/paperless-ngx/paperless-ngx/pull/3996)) - Chore: change dark mode to use Bootstrap's color modes [@lkster](https://github.com/lkster) ([#4174](https://github.com/paperless-ngx/paperless-ngx/pull/4174)) - Fix: support storage path placeholder via API [@shamoon](https://github.com/shamoon) ([#4179](https://github.com/paperless-ngx/paperless-ngx/pull/4179)) - Fix: Logs the errors during thumbnail generation [@stumpylog](https://github.com/stumpylog) ([#4171](https://github.com/paperless-ngx/paperless-ngx/pull/4171)) - Feature: New management command for fuzzy matching document content [@stumpylog](https://github.com/stumpylog) ([#4160](https://github.com/paperless-ngx/paperless-ngx/pull/4160)) - Breaking: Drop support for Python 3.8 [@stumpylog](https://github.com/stumpylog) ([#4156](https://github.com/paperless-ngx/paperless-ngx/pull/4156)) - Fix: dashboard widget card borders hidden by bkgd color [@shamoon](https://github.com/shamoon) ([#4155](https://github.com/paperless-ngx/paperless-ngx/pull/4155)) - Enhancement: frontend better handle slow backend requests [@shamoon](https://github.com/shamoon) ([#4055](https://github.com/paperless-ngx/paperless-ngx/pull/4055)) - Chore: Extend the live service utility for handling 503 errors [@stumpylog](https://github.com/stumpylog) ([#4143](https://github.com/paperless-ngx/paperless-ngx/pull/4143)) - Chore: update docker image \\& ci testing node to v18 [@shamoon](https://github.com/shamoon) ([#4149](https://github.com/paperless-ngx/paperless-ngx/pull/4149)) - Fix: hide entire add user / group buttons if insufficient permissions [@shamoon](https://github.com/shamoon) ([#4133](https://github.com/paperless-ngx/paperless-ngx/pull/4133)) - Enhancement: Improved error notifications [@shamoon](https://github.com/shamoon) ([#4062](https://github.com/paperless-ngx/paperless-ngx/pull/4062)) - Feature: Official support for Python 3.11 [@stumpylog](https://github.com/stumpylog) ([#4146](https://github.com/paperless-ngx/paperless-ngx/pull/4146)) - Chore: Unlock dependencies \\& update them all [@stumpylog](https://github.com/stumpylog) ([#4142](https://github.com/paperless-ngx/paperless-ngx/pull/4142)) - Change: PWA Manifest to Standalone Display [@swoga](https://github.com/swoga) ([#4129](https://github.com/paperless-ngx/paperless-ngx/pull/4129)) - Enhancement: add --id-range for document_retagger [@kamilkosek](https://github.com/kamilkosek) ([#4080](https://github.com/paperless-ngx/paperless-ngx/pull/4080)) - Enhancement: Add Afrikaans, Greek \\& Norwegian languages [@shamoon](https://github.com/shamoon) ([#4088](https://github.com/paperless-ngx/paperless-ngx/pull/4088)) - Enhancement: add task id to pre/post consume script as env [@andreheuer](https://github.com/andreheuer) ([#4037](https://github.com/paperless-ngx/paperless-ngx/pull/4037)) - Enhancement: update bootstrap to v5.3.1 for backend static pages [@shamoon](https://github.com/shamoon) ([#4060](https://github.com/paperless-ngx/paperless-ngx/pull/4060)) - Bump the frontend-jest-dependencies group in /src-ui with 4 updates [@dependabot](https://github.com/dependabot) ([#4112](https://github.com/paperless-ngx/paperless-ngx/pull/4112)) - Bump tslib from 2.6.1 to 2.6.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#4108](https://github.com/paperless-ngx/paperless-ngx/pull/4108)) - Bump the frontend-eslint-dependencies group in /src-ui with 3 updates [@dependabot](https://github.com/dependabot) ([#4106](https://github.com/paperless-ngx/paperless-ngx/pull/4106)) - Bump concurrently from 8.2.0 to 8.2.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#4111](https://github.com/paperless-ngx/paperless-ngx/pull/4111)) - Bump [@types/node from 20.4.5 to 20.5.8 in /src-ui @dependabot](https://github.com/types/node from 20.4.5 to 20.5.8 in /src-ui @dependabot) ([#4110](https://github.com/paperless-ngx/paperless-ngx/pull/4110)) - Bump the frontend-angular-dependencies group in /src-ui with 19 updates [@dependabot](https://github.com/dependabot) ([#4104](https://github.com/paperless-ngx/paperless-ngx/pull/4104))"},{"location":"changelog/#paperless-ngx-1174","title":"paperless-ngx 1.17.4","text":""},{"location":"changelog/#bug-fixes_76","title":"Bug Fixes","text":""},{"location":"changelog/#all-app-changes_77","title":"All App Changes","text":""},{"location":"changelog/#paperless-ngx-1173","title":"paperless-ngx 1.17.3","text":""},{"location":"changelog/#bug-fixes_77","title":"Bug Fixes","text":""},{"location":"changelog/#dependencies_42","title":"Dependencies","text":""},{"location":"changelog/#maintenance_25","title":"Maintenance","text":""},{"location":"changelog/#all-app-changes_78","title":"All App Changes","text":"3 changes - Fix: When PDF/A rendering fails, add a consideration for the user to add args to override [@stumpylog](https://github.com/stumpylog) ([#4083](https://github.com/paperless-ngx/paperless-ngx/pull/4083)) - Chore: update frontend PDF viewer (including pdf-js) [@shamoon](https://github.com/shamoon) ([#4065](https://github.com/paperless-ngx/paperless-ngx/pull/4065)) - Chore: Prepare for Python 3.11 support [@stumpylog](https://github.com/stumpylog) ([#4066](https://github.com/paperless-ngx/paperless-ngx/pull/4066))"},{"location":"changelog/#paperless-ngx-1172","title":"paperless-ngx 1.17.2","text":""},{"location":"changelog/#features_22","title":"Features","text":""},{"location":"changelog/#bug-fixes_78","title":"Bug Fixes","text":""},{"location":"changelog/#all-app-changes_79","title":"All App Changes","text":"6 changes - Fix: Increase the HTTP timeouts for Tika/Gotenberg to maximum task time [@stumpylog](https://github.com/stumpylog) ([#4061](https://github.com/paperless-ngx/paperless-ngx/pull/4061)) - Enhancement: disable / hide some UI buttons / elements if insufficient permissions, show errors [@shamoon](https://github.com/shamoon) ([#4014](https://github.com/paperless-ngx/paperless-ngx/pull/4014)) - Fix: Allow adding an SSL certificate for IMAP SSL context [@stumpylog](https://github.com/stumpylog) ([#4048](https://github.com/paperless-ngx/paperless-ngx/pull/4048)) - Fix: tag creation sometimes retained search text [@shamoon](https://github.com/shamoon) ([#4038](https://github.com/paperless-ngx/paperless-ngx/pull/4038)) - Fix: enforce permissions on bulk_edit operations [@shamoon](https://github.com/shamoon) ([#4007](https://github.com/paperless-ngx/paperless-ngx/pull/4007)) - Enhancement: Allow to set a prefix for keys and channels in redis [@amo13](https://github.com/amo13) ([#3993](https://github.com/paperless-ngx/paperless-ngx/pull/3993))"},{"location":"changelog/#paperless-ngx-1171","title":"paperless-ngx 1.17.1","text":""},{"location":"changelog/#features_23","title":"Features","text":""},{"location":"changelog/#bug-fixes_79","title":"Bug Fixes","text":""},{"location":"changelog/#documentation_8","title":"Documentation","text":""},{"location":"changelog/#dependencies_43","title":"Dependencies","text":""},{"location":"changelog/#all-app-changes_80","title":"All App Changes","text":"6 changes - Fix: handle ASN = 0 on frontend cards [@shamoon](https://github.com/shamoon) ([#3988](https://github.com/paperless-ngx/paperless-ngx/pull/3988)) - Fix: improve light color filled primary button text legibility [@shamoon](https://github.com/shamoon) ([#3980](https://github.com/paperless-ngx/paperless-ngx/pull/3980)) - Fix / Enhancement: restrict status messages by owner if set \\& improve 404 page [@shamoon](https://github.com/shamoon) ([#3959](https://github.com/paperless-ngx/paperless-ngx/pull/3959)) - Fix: handle very old date strings in correspondent list [@shamoon](https://github.com/shamoon) ([#3953](https://github.com/paperless-ngx/paperless-ngx/pull/3953)) - Chore: Reduces the 2 mail tests flakiness [@stumpylog](https://github.com/stumpylog) ([#3949](https://github.com/paperless-ngx/paperless-ngx/pull/3949)) - Feature: Add Ukrainian translation [@shamoon](https://github.com/shamoon) ([#3941](https://github.com/paperless-ngx/paperless-ngx/pull/3941))"},{"location":"changelog/#paperless-ngx-1170","title":"paperless-ngx 1.17.0","text":""},{"location":"changelog/#features_24","title":"Features","text":""},{"location":"changelog/#bug-fixes_80","title":"Bug Fixes","text":""},{"location":"changelog/#documentation_9","title":"Documentation","text":""},{"location":"changelog/#maintenance_26","title":"Maintenance","text":""},{"location":"changelog/#dependencies_44","title":"Dependencies","text":"17 changes - Chore: Bump the frontend-angular-dependencies group in /src-ui with 11 updates [@shamoon](https://github.com/shamoon) ([#3918](https://github.com/paperless-ngx/paperless-ngx/pull/3918)) - Bump stumpylog/image-cleaner-action from 0.1.0 to 0.2.0 [@dependabot](https://github.com/dependabot) ([#3910](https://github.com/paperless-ngx/paperless-ngx/pull/3910)) - Bump the frontend-eslint-dependencies group in /src-ui with 3 updates [@dependabot](https://github.com/dependabot) ([#3911](https://github.com/paperless-ngx/paperless-ngx/pull/3911)) - Bump tslib from 2.6.0 to 2.6.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#3909](https://github.com/paperless-ngx/paperless-ngx/pull/3909)) - Bump jest-environment-jsdom from 29.5.0 to 29.6.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#3916](https://github.com/paperless-ngx/paperless-ngx/pull/3916)) - Bump [@types/node from 20.3.3 to 20.4.5 in /src-ui @dependabot](https://github.com/types/node from 20.3.3 to 20.4.5 in /src-ui @dependabot) ([#3915](https://github.com/paperless-ngx/paperless-ngx/pull/3915)) - Bump bootstrap from 5.3.0 to 5.3.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#3914](https://github.com/paperless-ngx/paperless-ngx/pull/3914)) - Bump [@playwright/test from 1.36.1 to 1.36.2 in /src-ui @dependabot](https://github.com/playwright/test from 1.36.1 to 1.36.2 in /src-ui @dependabot) ([#3912](https://github.com/paperless-ngx/paperless-ngx/pull/3912)) - Bump the frontend-jest-dependencies group in /src-ui with 1 update [@dependabot](https://github.com/dependabot) ([#3906](https://github.com/paperless-ngx/paperless-ngx/pull/3906)) - Chore: Update dependencies [@stumpylog](https://github.com/stumpylog) ([#3883](https://github.com/paperless-ngx/paperless-ngx/pull/3883)) - Chore: Update Python dependencies [@stumpylog](https://github.com/stumpylog) ([#3842](https://github.com/paperless-ngx/paperless-ngx/pull/3842)) - Bump the frontend-angular-dependencies group in /src-ui with 16 updates [@dependabot](https://github.com/dependabot) ([#3826](https://github.com/paperless-ngx/paperless-ngx/pull/3826)) - Bump [@typescript-eslint/eslint-plugin from 5.60.1 to 6.1.0 in /src-ui @dependabot](https://github.com/typescript-eslint/eslint-plugin from 5.60.1 to 6.1.0 in /src-ui @dependabot) ([#3829](https://github.com/paperless-ngx/paperless-ngx/pull/3829)) - Bump jest and [@types/jest in /src-ui @dependabot](https://github.com/types/jest in /src-ui @dependabot) ([#3828](https://github.com/paperless-ngx/paperless-ngx/pull/3828)) - Bump [@playwright/test from 1.36.0 to 1.36.1 in /src-ui @dependabot](https://github.com/playwright/test from 1.36.0 to 1.36.1 in /src-ui @dependabot) ([#3827](https://github.com/paperless-ngx/paperless-ngx/pull/3827)) - Bump semver from 5.7.1 to 5.7.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#3793](https://github.com/paperless-ngx/paperless-ngx/pull/3793)) - Chore: Bump Angular to v16 and other frontend packages [@dependabot](https://github.com/dependabot) ([#3727](https://github.com/paperless-ngx/paperless-ngx/pull/3727))"},{"location":"changelog/#all-app-changes_81","title":"All App Changes","text":"35 changes - Fix: cancel possibly slow queries on doc details [@shamoon](https://github.com/shamoon) ([#3925](https://github.com/paperless-ngx/paperless-ngx/pull/3925)) - [BUG] Set office document creation date with timezone, if it is naive [@a17t](https://github.com/a17t) ([#3760](https://github.com/paperless-ngx/paperless-ngx/pull/3760)) - Fix: note creation / deletion should respect doc permissions [@shamoon](https://github.com/shamoon) ([#3903](https://github.com/paperless-ngx/paperless-ngx/pull/3903)) - Chore: Bump the frontend-angular-dependencies group in /src-ui with 11 updates [@shamoon](https://github.com/shamoon) ([#3918](https://github.com/paperless-ngx/paperless-ngx/pull/3918)) - Bump the frontend-eslint-dependencies group in /src-ui with 3 updates [@dependabot](https://github.com/dependabot) ([#3911](https://github.com/paperless-ngx/paperless-ngx/pull/3911)) - Bump tslib from 2.6.0 to 2.6.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#3909](https://github.com/paperless-ngx/paperless-ngx/pull/3909)) - Bump jest-environment-jsdom from 29.5.0 to 29.6.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#3916](https://github.com/paperless-ngx/paperless-ngx/pull/3916)) - Bump [@types/node from 20.3.3 to 20.4.5 in /src-ui @dependabot](https://github.com/types/node from 20.3.3 to 20.4.5 in /src-ui @dependabot) ([#3915](https://github.com/paperless-ngx/paperless-ngx/pull/3915)) - Bump bootstrap from 5.3.0 to 5.3.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#3914](https://github.com/paperless-ngx/paperless-ngx/pull/3914)) - Bump [@playwright/test from 1.36.1 to 1.36.2 in /src-ui @dependabot](https://github.com/playwright/test from 1.36.1 to 1.36.2 in /src-ui @dependabot) ([#3912](https://github.com/paperless-ngx/paperless-ngx/pull/3912)) - Bump the frontend-jest-dependencies group in /src-ui with 1 update [@dependabot](https://github.com/dependabot) ([#3906](https://github.com/paperless-ngx/paperless-ngx/pull/3906)) - Fix: notes show persistent scrollbars [@shamoon](https://github.com/shamoon) ([#3904](https://github.com/paperless-ngx/paperless-ngx/pull/3904)) - Add support for additional UK date formats [@brainrecursion](https://github.com/brainrecursion) ([#3887](https://github.com/paperless-ngx/paperless-ngx/pull/3887)) - Add 'doc_pk' to PAPERLESS_FILENAME_FORMAT handling [@mechanarchy](https://github.com/mechanarchy) ([#3861](https://github.com/paperless-ngx/paperless-ngx/pull/3861)) - Fix: Provide SSL context to IMAP client [@stumpylog](https://github.com/stumpylog) ([#3886](https://github.com/paperless-ngx/paperless-ngx/pull/3886)) - Feature: hover buttons for saved view widgets [@shamoon](https://github.com/shamoon) ([#3875](https://github.com/paperless-ngx/paperless-ngx/pull/3875)) - Fix/enhancement: permissions for mail rules \\& accounts [@shamoon](https://github.com/shamoon) ([#3869](https://github.com/paperless-ngx/paperless-ngx/pull/3869)) - Chore: typing improvements [@stumpylog](https://github.com/stumpylog) ([#3860](https://github.com/paperless-ngx/paperless-ngx/pull/3860)) - Fix: Classifier special case when no items are set to automatic matching [@stumpylog](https://github.com/stumpylog) ([#3858](https://github.com/paperless-ngx/paperless-ngx/pull/3858)) - Fix: issues with copy2 or copystat and SELinux permissions [@stumpylog](https://github.com/stumpylog) ([#3847](https://github.com/paperless-ngx/paperless-ngx/pull/3847)) - Chore: Update Python dependencies [@stumpylog](https://github.com/stumpylog) ([#3842](https://github.com/paperless-ngx/paperless-ngx/pull/3842)) - Feature: include global and object-level permissions in export / import [@shamoon](https://github.com/shamoon) ([#3672](https://github.com/paperless-ngx/paperless-ngx/pull/3672)) - Fix: Parsing office document timestamps [@stumpylog](https://github.com/stumpylog) ([#3836](https://github.com/paperless-ngx/paperless-ngx/pull/3836)) - Fix interaction between API and barcode archive serial number [@stumpylog](https://github.com/stumpylog) ([#3834](https://github.com/paperless-ngx/paperless-ngx/pull/3834)) - Bump the frontend-angular-dependencies group in /src-ui with 16 updates [@dependabot](https://github.com/dependabot) ([#3826](https://github.com/paperless-ngx/paperless-ngx/pull/3826)) - Enhancement / Fix: Migrate encrypted png thumbnails to webp [@shamoon](https://github.com/shamoon) ([#3719](https://github.com/paperless-ngx/paperless-ngx/pull/3719)) - Bump [@typescript-eslint/eslint-plugin from 5.60.1 to 6.1.0 in /src-ui @dependabot](https://github.com/typescript-eslint/eslint-plugin from 5.60.1 to 6.1.0 in /src-ui @dependabot) ([#3829](https://github.com/paperless-ngx/paperless-ngx/pull/3829)) - Bump jest and [@types/jest in /src-ui @dependabot](https://github.com/types/jest in /src-ui @dependabot) ([#3828](https://github.com/paperless-ngx/paperless-ngx/pull/3828)) - Bump [@playwright/test from 1.36.0 to 1.36.1 in /src-ui @dependabot](https://github.com/playwright/test from 1.36.0 to 1.36.1 in /src-ui @dependabot) ([#3827](https://github.com/paperless-ngx/paperless-ngx/pull/3827)) - Bump semver from 5.7.1 to 5.7.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#3793](https://github.com/paperless-ngx/paperless-ngx/pull/3793)) - Fix: add UI tour step padding [@hakimio](https://github.com/hakimio) ([#3791](https://github.com/paperless-ngx/paperless-ngx/pull/3791)) - Fix: translate file tasks types in footer [@shamoon](https://github.com/shamoon) ([#3749](https://github.com/paperless-ngx/paperless-ngx/pull/3749)) - Feature: Add Slovak translation [@shamoon](https://github.com/shamoon) ([#3722](https://github.com/paperless-ngx/paperless-ngx/pull/3722)) - Fix: limit ng-select size for addition of filter button [@shamoon](https://github.com/shamoon) ([#3731](https://github.com/paperless-ngx/paperless-ngx/pull/3731)) - Chore: Bump Angular to v16 and other frontend packages [@dependabot](https://github.com/dependabot) ([#3727](https://github.com/paperless-ngx/paperless-ngx/pull/3727))"},{"location":"changelog/#paperless-ngx-1165","title":"paperless-ngx 1.16.5","text":""},{"location":"changelog/#features_25","title":"Features","text":""},{"location":"changelog/#bug-fixes_81","title":"Bug Fixes","text":""},{"location":"changelog/#all-app-changes_82","title":"All App Changes","text":"2 changes - Feature: support barcode upscaling for better detection of small barcodes [@bmachek](https://github.com/bmachek) ([#3655](https://github.com/paperless-ngx/paperless-ngx/pull/3655)) - Fix: owner removed when set_permissions passed on object create [@shamoon](https://github.com/shamoon) ([#3702](https://github.com/paperless-ngx/paperless-ngx/pull/3702))"},{"location":"changelog/#paperless-ngx-1164","title":"paperless-ngx 1.16.4","text":""},{"location":"changelog/#bug-fixes_82","title":"Bug Fixes","text":""},{"location":"changelog/#documentation_10","title":"Documentation","text":""},{"location":"changelog/#maintenance_27","title":"Maintenance","text":""},{"location":"changelog/#all-app-changes_83","title":"All App Changes","text":"4 changes - Fix: prevent button wrapping when sidebar narrows in MS Edge [@shamoon](https://github.com/shamoon) ([#3682](https://github.com/paperless-ngx/paperless-ngx/pull/3682)) - Fix: Handling for filenames with non-ascii and no content attribute [@stumpylog](https://github.com/stumpylog) ([#3695](https://github.com/paperless-ngx/paperless-ngx/pull/3695)) - Fix: Generation of thumbnails for existing stored emails [@stumpylog](https://github.com/stumpylog) ([#3696](https://github.com/paperless-ngx/paperless-ngx/pull/3696)) - Fix: Use row gap for filter editor [@kleinweby](https://github.com/kleinweby) ([#3662](https://github.com/paperless-ngx/paperless-ngx/pull/3662))"},{"location":"changelog/#paperless-ngx-1163","title":"paperless-ngx 1.16.3","text":""},{"location":"changelog/#bug-fixes_83","title":"Bug Fixes","text":""},{"location":"changelog/#maintenance_28","title":"Maintenance","text":""},{"location":"changelog/#all-app-changes_84","title":"All App Changes","text":"2 changes - Fix: Ignore errors when trying to copy the original file's stats [@stumpylog](https://github.com/stumpylog) ([#3652](https://github.com/paperless-ngx/paperless-ngx/pull/3652)) - Fix: Copy default thumbnail if thumbnail generation fails [@plu](https://github.com/plu) ([#3632](https://github.com/paperless-ngx/paperless-ngx/pull/3632))"},{"location":"changelog/#paperless-ngx-1162","title":"paperless-ngx 1.16.2","text":""},{"location":"changelog/#bug-fixes_84","title":"Bug Fixes","text":""},{"location":"changelog/#development","title":"Development","text":""},{"location":"changelog/#maintenance_29","title":"Maintenance","text":""},{"location":"changelog/#all-app-changes_85","title":"All App Changes","text":"3 changes - Fix: Increase httpx operation timeouts to 30s [@stumpylog](https://github.com/stumpylog) ([#3627](https://github.com/paperless-ngx/paperless-ngx/pull/3627)) - Fix: Better error handling and checking when parsing documents via Tika [@stumpylog](https://github.com/stumpylog) ([#3617](https://github.com/paperless-ngx/paperless-ngx/pull/3617)) - Development: frontend unit testing [@shamoon](https://github.com/shamoon) ([#3597](https://github.com/paperless-ngx/paperless-ngx/pull/3597))"},{"location":"changelog/#paperless-ngx-1161","title":"paperless-ngx 1.16.1","text":""},{"location":"changelog/#bug-fixes_85","title":"Bug Fixes","text":""},{"location":"changelog/#maintenance_30","title":"Maintenance","text":""},{"location":"changelog/#paperless-ngx-1160","title":"paperless-ngx 1.16.0","text":""},{"location":"changelog/#notable-changes_8","title":"Notable Changes","text":""},{"location":"changelog/#features_26","title":"Features","text":""},{"location":"changelog/#bug-fixes_86","title":"Bug Fixes","text":""},{"location":"changelog/#dependencies_45","title":"Dependencies","text":""},{"location":"changelog/#all-app-changes_86","title":"All App Changes","text":"8 changes - Chore: Python dependency updates (celery 5.3.0 in particular) [@stumpylog](https://github.com/stumpylog) ([#3584](https://github.com/paperless-ngx/paperless-ngx/pull/3584)) - Fix: return user first / last name from backend [@shamoon](https://github.com/shamoon) ([#3579](https://github.com/paperless-ngx/paperless-ngx/pull/3579)) - Fix use of `PAPERLESS_DB_TIMEOUT` for all db types [@shamoon](https://github.com/shamoon) ([#3576](https://github.com/paperless-ngx/paperless-ngx/pull/3576)) - Fix: handle mail rules with no filters on some imap servers [@shamoon](https://github.com/shamoon) ([#3554](https://github.com/paperless-ngx/paperless-ngx/pull/3554)) - Chore: Copy file stats from original file [@stumpylog](https://github.com/stumpylog) ([#3551](https://github.com/paperless-ngx/paperless-ngx/pull/3551)) - Chore: Adds test for barcode ASN when it already exists [@stumpylog](https://github.com/stumpylog) ([#3550](https://github.com/paperless-ngx/paperless-ngx/pull/3550)) - Feature: Update to a simpler Tika library [@stumpylog](https://github.com/stumpylog) ([#3517](https://github.com/paperless-ngx/paperless-ngx/pull/3517)) - Feature: Allow to filter documents by original filename and checksum [@jayme-github](https://github.com/jayme-github) ([#3485](https://github.com/paperless-ngx/paperless-ngx/pull/3485))"},{"location":"changelog/#paperless-ngx-1151","title":"paperless-ngx 1.15.1","text":""},{"location":"changelog/#bug-fixes_87","title":"Bug Fixes","text":""},{"location":"changelog/#all-app-changes_87","title":"All App Changes","text":""},{"location":"changelog/#paperless-ngx-1150","title":"paperless-ngx 1.15.0","text":""},{"location":"changelog/#features_27","title":"Features","text":""},{"location":"changelog/#bug-fixes_88","title":"Bug Fixes","text":""},{"location":"changelog/#documentation_11","title":"Documentation","text":""},{"location":"changelog/#development_1","title":"Development","text":""},{"location":"changelog/#dependencies_46","title":"Dependencies","text":"10 changes - Bump eslint from 8.39.0 to 8.41.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#3513](https://github.com/paperless-ngx/paperless-ngx/pull/3513)) - Bump concurrently from 8.0.1 to 8.1.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#3510](https://github.com/paperless-ngx/paperless-ngx/pull/3510)) - Bump [@ng-bootstrap/ng-bootstrap from 14.1.0 to 14.2.0 in /src-ui @dependabot](https://github.com/ng-bootstrap/ng-bootstrap from 14.1.0 to 14.2.0 in /src-ui @dependabot) ([#3507](https://github.com/paperless-ngx/paperless-ngx/pull/3507)) - Bump [@popperjs/core from 2.11.7 to 2.11.8 in /src-ui @dependabot](https://github.com/popperjs/core from 2.11.7 to 2.11.8 in /src-ui @dependabot) ([#3508](https://github.com/paperless-ngx/paperless-ngx/pull/3508)) - Bump [@typescript-eslint/parser from 5.59.2 to 5.59.8 in /src-ui @dependabot](https://github.com/typescript-eslint/parser from 5.59.2 to 5.59.8 in /src-ui @dependabot) ([#3505](https://github.com/paperless-ngx/paperless-ngx/pull/3505)) - Bump bootstrap from 5.2.3 to 5.3.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#3497](https://github.com/paperless-ngx/paperless-ngx/pull/3497)) - Bump [@typescript-eslint/eslint-plugin from 5.59.2 to 5.59.8 in /src-ui @dependabot](https://github.com/typescript-eslint/eslint-plugin from 5.59.2 to 5.59.8 in /src-ui @dependabot) ([#3500](https://github.com/paperless-ngx/paperless-ngx/pull/3500)) - Bump tslib from 2.5.0 to 2.5.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#3501](https://github.com/paperless-ngx/paperless-ngx/pull/3501)) - Bump [@types/node from 18.16.3 to 20.2.5 in /src-ui @dependabot](https://github.com/types/node from 18.16.3 to 20.2.5 in /src-ui @dependabot) ([#3498](https://github.com/paperless-ngx/paperless-ngx/pull/3498)) - Bump [@playwright/test from 1.33.0 to 1.34.3 in /src-ui @dependabot](https://github.com/playwright/test from 1.33.0 to 1.34.3 in /src-ui @dependabot) ([#3499](https://github.com/paperless-ngx/paperless-ngx/pull/3499))"},{"location":"changelog/#all-app-changes_88","title":"All App Changes","text":"22 changes - Fix: KeyError error on unauthenticated API calls \\& persist authentication when enabled [@ajgon](https://github.com/ajgon) ([#3516](https://github.com/paperless-ngx/paperless-ngx/pull/3516)) - Bump eslint from 8.39.0 to 8.41.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#3513](https://github.com/paperless-ngx/paperless-ngx/pull/3513)) - Bump concurrently from 8.0.1 to 8.1.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#3510](https://github.com/paperless-ngx/paperless-ngx/pull/3510)) - Bump [@ng-bootstrap/ng-bootstrap from 14.1.0 to 14.2.0 in /src-ui @dependabot](https://github.com/ng-bootstrap/ng-bootstrap from 14.1.0 to 14.2.0 in /src-ui @dependabot) ([#3507](https://github.com/paperless-ngx/paperless-ngx/pull/3507)) - Bump [@popperjs/core from 2.11.7 to 2.11.8 in /src-ui @dependabot](https://github.com/popperjs/core from 2.11.7 to 2.11.8 in /src-ui @dependabot) ([#3508](https://github.com/paperless-ngx/paperless-ngx/pull/3508)) - Bump [@typescript-eslint/parser from 5.59.2 to 5.59.8 in /src-ui @dependabot](https://github.com/typescript-eslint/parser from 5.59.2 to 5.59.8 in /src-ui @dependabot) ([#3505](https://github.com/paperless-ngx/paperless-ngx/pull/3505)) - Bump bootstrap from 5.2.3 to 5.3.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#3497](https://github.com/paperless-ngx/paperless-ngx/pull/3497)) - Bump [@typescript-eslint/eslint-plugin from 5.59.2 to 5.59.8 in /src-ui @dependabot](https://github.com/typescript-eslint/eslint-plugin from 5.59.2 to 5.59.8 in /src-ui @dependabot) ([#3500](https://github.com/paperless-ngx/paperless-ngx/pull/3500)) - Bump tslib from 2.5.0 to 2.5.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#3501](https://github.com/paperless-ngx/paperless-ngx/pull/3501)) - Bump [@types/node from 18.16.3 to 20.2.5 in /src-ui @dependabot](https://github.com/types/node from 18.16.3 to 20.2.5 in /src-ui @dependabot) ([#3498](https://github.com/paperless-ngx/paperless-ngx/pull/3498)) - Bump [@playwright/test from 1.33.0 to 1.34.3 in /src-ui @dependabot](https://github.com/playwright/test from 1.33.0 to 1.34.3 in /src-ui @dependabot) ([#3499](https://github.com/paperless-ngx/paperless-ngx/pull/3499)) - Feature: quick filters from document detail [@shamoon](https://github.com/shamoon) ([#3476](https://github.com/paperless-ngx/paperless-ngx/pull/3476)) - Fix: exclude consumer \\& AnonymousUser users from export manifest [@shamoon](https://github.com/shamoon) ([#3487](https://github.com/paperless-ngx/paperless-ngx/pull/3487)) - Fix: prevent date suggestion search if disabled [@shamoon](https://github.com/shamoon) ([#3472](https://github.com/paperless-ngx/paperless-ngx/pull/3472)) - Feature: Add explanations to relative dates [@shamoon](https://github.com/shamoon) ([#3471](https://github.com/paperless-ngx/paperless-ngx/pull/3471)) - Fix: DocumentSerializer should return correct original filename [@jayme-github](https://github.com/jayme-github) ([#3473](https://github.com/paperless-ngx/paperless-ngx/pull/3473)) - consumer.py: read from original file (instead of temp copy) [@chrisblech](https://github.com/chrisblech) ([#3466](https://github.com/paperless-ngx/paperless-ngx/pull/3466)) - Bugfix: Catch an nltk AttributeError and handle it [@stumpylog](https://github.com/stumpylog) ([#3453](https://github.com/paperless-ngx/paperless-ngx/pull/3453)) - Chore: Improves the logging mixin and allows it to be typed better [@stumpylog](https://github.com/stumpylog) ([#3451](https://github.com/paperless-ngx/paperless-ngx/pull/3451)) - Enhancement: paginate frontend tasks [@shamoon](https://github.com/shamoon) ([#3445](https://github.com/paperless-ngx/paperless-ngx/pull/3445)) - Add SSL Support for MariaDB [@kimdre](https://github.com/kimdre) ([#3444](https://github.com/paperless-ngx/paperless-ngx/pull/3444)) - Enhancement: Improve frontend error handling [@shamoon](https://github.com/shamoon) ([#3413](https://github.com/paperless-ngx/paperless-ngx/pull/3413))"},{"location":"changelog/#paperless-ngx-1145","title":"paperless-ngx 1.14.5","text":""},{"location":"changelog/#features_28","title":"Features","text":""},{"location":"changelog/#bug-fixes_89","title":"Bug Fixes","text":""},{"location":"changelog/#maintenance_31","title":"Maintenance","text":""},{"location":"changelog/#dependencies_47","title":"Dependencies","text":""},{"location":"changelog/#all-app-changes_89","title":"All App Changes","text":"13 changes - Fix: Adds better handling for files with invalid utf8 content [@stumpylog](https://github.com/stumpylog) ([#3387](https://github.com/paperless-ngx/paperless-ngx/pull/3387)) - Fix: respect permissions for autocomplete suggestions [@shamoon](https://github.com/shamoon) ([#3359](https://github.com/paperless-ngx/paperless-ngx/pull/3359)) - Chore: Upgrade channels to v4 [@stumpylog](https://github.com/stumpylog) ([#3383](https://github.com/paperless-ngx/paperless-ngx/pull/3383)) - Fix: Transition to new library for finding IPs for failed logins [@stumpylog](https://github.com/stumpylog) ([#3382](https://github.com/paperless-ngx/paperless-ngx/pull/3382)) - Feature: owner filtering [@shamoon](https://github.com/shamoon) ([#3309](https://github.com/paperless-ngx/paperless-ngx/pull/3309)) - [Security] Render frontend text as plain text [@shamoon](https://github.com/shamoon) ([#3366](https://github.com/paperless-ngx/paperless-ngx/pull/3366)) - Enhancement: dynamic counts include all pages, hide for Any [@shamoon](https://github.com/shamoon) ([#3329](https://github.com/paperless-ngx/paperless-ngx/pull/3329)) - Fix: default frontend to current owner, allow setting no owner on create [@shamoon](https://github.com/shamoon) ([#3347](https://github.com/paperless-ngx/paperless-ngx/pull/3347)) - [Fix] Position:fixed for .global-dropzone-overlay [@denilsonsa](https://github.com/denilsonsa) ([#3367](https://github.com/paperless-ngx/paperless-ngx/pull/3367)) - Fix: dont perform mail actions when rule filename filter not met [@shamoon](https://github.com/shamoon) ([#3336](https://github.com/paperless-ngx/paperless-ngx/pull/3336)) - Enhancement: save tour completion, hide welcome widget [@shamoon](https://github.com/shamoon) ([#3321](https://github.com/paperless-ngx/paperless-ngx/pull/3321)) - Fix: permission-aware bulk editing in 1.14.1+ [@shamoon](https://github.com/shamoon) ([#3345](https://github.com/paperless-ngx/paperless-ngx/pull/3345)) - Fix: Add proper testing for \\*\\_\\_id\\_\\_in testing [@shamoon](https://github.com/shamoon) ([#3315](https://github.com/paperless-ngx/paperless-ngx/pull/3315))"},{"location":"changelog/#paperless-ngx-1144","title":"paperless-ngx 1.14.4","text":""},{"location":"changelog/#bug-fixes_90","title":"Bug Fixes","text":""},{"location":"changelog/#all-app-changes_90","title":"All App Changes","text":"3 changes - New Crowdin updates [@paperlessngx-bot](https://github.com/paperlessngx-bot) ([#3298](https://github.com/paperless-ngx/paperless-ngx/pull/3298)) - Fix: Inversion in tagged mail searching [@stumpylog](https://github.com/stumpylog) ([#3305](https://github.com/paperless-ngx/paperless-ngx/pull/3305)) - Fix dynamic count labels hidden in light mode [@shamoon](https://github.com/shamoon) ([#3303](https://github.com/paperless-ngx/paperless-ngx/pull/3303))"},{"location":"changelog/#paperless-ngx-1143","title":"paperless-ngx 1.14.3","text":""},{"location":"changelog/#features_29","title":"Features","text":""},{"location":"changelog/#bug-fixes_91","title":"Bug Fixes","text":""},{"location":"changelog/#dependencies_48","title":"Dependencies","text":"7 changes - Bump eslint from 8.38.0 to 8.39.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#3276](https://github.com/paperless-ngx/paperless-ngx/pull/3276)) - Bump [@typescript-eslint/parser from 5.58.0 to 5.59.2 in /src-ui @dependabot](https://github.com/typescript-eslint/parser from 5.58.0 to 5.59.2 in /src-ui @dependabot) ([#3278](https://github.com/paperless-ngx/paperless-ngx/pull/3278)) - Bump [@types/node from 18.15.11 to 18.16.3 in /src-ui @dependabot](https://github.com/types/node from 18.15.11 to 18.16.3 in /src-ui @dependabot) ([#3275](https://github.com/paperless-ngx/paperless-ngx/pull/3275)) - Bump rxjs from 7.8.0 to 7.8.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#3277](https://github.com/paperless-ngx/paperless-ngx/pull/3277)) - Bump [@typescript-eslint/eslint-plugin from 5.58.0 to 5.59.2 in /src-ui @dependabot](https://github.com/typescript-eslint/eslint-plugin from 5.58.0 to 5.59.2 in /src-ui @dependabot) ([#3274](https://github.com/paperless-ngx/paperless-ngx/pull/3274)) - Bump cypress from 12.9.0 to 12.11.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#3268](https://github.com/paperless-ngx/paperless-ngx/pull/3268)) - Bulk bump angular packages to 15.2.8 in /src-ui [@dependabot](https://github.com/dependabot) ([#3270](https://github.com/paperless-ngx/paperless-ngx/pull/3270))"},{"location":"changelog/#all-app-changes_91","title":"All App Changes","text":"14 changes - Bump eslint from 8.38.0 to 8.39.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#3276](https://github.com/paperless-ngx/paperless-ngx/pull/3276)) - Bump [@typescript-eslint/parser from 5.58.0 to 5.59.2 in /src-ui @dependabot](https://github.com/typescript-eslint/parser from 5.58.0 to 5.59.2 in /src-ui @dependabot) ([#3278](https://github.com/paperless-ngx/paperless-ngx/pull/3278)) - Bump [@types/node from 18.15.11 to 18.16.3 in /src-ui @dependabot](https://github.com/types/node from 18.15.11 to 18.16.3 in /src-ui @dependabot) ([#3275](https://github.com/paperless-ngx/paperless-ngx/pull/3275)) - Bump rxjs from 7.8.0 to 7.8.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#3277](https://github.com/paperless-ngx/paperless-ngx/pull/3277)) - Bump [@typescript-eslint/eslint-plugin from 5.58.0 to 5.59.2 in /src-ui @dependabot](https://github.com/typescript-eslint/eslint-plugin from 5.58.0 to 5.59.2 in /src-ui @dependabot) ([#3274](https://github.com/paperless-ngx/paperless-ngx/pull/3274)) - Bump cypress from 12.9.0 to 12.11.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#3268](https://github.com/paperless-ngx/paperless-ngx/pull/3268)) - Bulk bump angular packages to 15.2.8 in /src-ui [@dependabot](https://github.com/dependabot) ([#3270](https://github.com/paperless-ngx/paperless-ngx/pull/3270)) - Fix: Handle cases where media files aren't all in the same filesystem [@stumpylog](https://github.com/stumpylog) ([#3261](https://github.com/paperless-ngx/paperless-ngx/pull/3261)) - Retain doc changes on tab switch after refresh doc [@shamoon](https://github.com/shamoon) ([#3243](https://github.com/paperless-ngx/paperless-ngx/pull/3243)) - Fix: Don't send Gmail related setting if the server doesn't support it [@stumpylog](https://github.com/stumpylog) ([#3240](https://github.com/paperless-ngx/paperless-ngx/pull/3240)) - Fix: close all docs on logout [@shamoon](https://github.com/shamoon) ([#3232](https://github.com/paperless-ngx/paperless-ngx/pull/3232)) - Enhancement: better keyboard nav for filter/edit dropdowns [@shamoon](https://github.com/shamoon) ([#3227](https://github.com/paperless-ngx/paperless-ngx/pull/3227)) - Fix: Respect superuser for advanced queries, test coverage for object perms [@shamoon](https://github.com/shamoon) ([#3222](https://github.com/paperless-ngx/paperless-ngx/pull/3222)) - Fix: ALLOWED_HOSTS logic being overwritten when \\* is set [@ikaruswill](https://github.com/ikaruswill) ([#3218](https://github.com/paperless-ngx/paperless-ngx/pull/3218))"},{"location":"changelog/#paperless-ngx-1142","title":"paperless-ngx 1.14.2","text":""},{"location":"changelog/#features_30","title":"Features","text":""},{"location":"changelog/#bug-fixes_92","title":"Bug Fixes","text":""},{"location":"changelog/#all-app-changes_92","title":"All App Changes","text":"4 changes - Feature: Finnish translation [@shamoon](https://github.com/shamoon) ([#3215](https://github.com/paperless-ngx/paperless-ngx/pull/3215)) - Fix: Load saved views from app frame, not dashboard [@shamoon](https://github.com/shamoon) ([#3211](https://github.com/paperless-ngx/paperless-ngx/pull/3211)) - Fix: advanced search or date searching + doc type/correspondent/storage path broken [@shamoon](https://github.com/shamoon) ([#3209](https://github.com/paperless-ngx/paperless-ngx/pull/3209)) - Fix MixedContentTypeError in add_inbox_tags handler [@e1mo](https://github.com/e1mo) ([#3212](https://github.com/paperless-ngx/paperless-ngx/pull/3212))"},{"location":"changelog/#paperless-ngx-1141","title":"paperless-ngx 1.14.1","text":""},{"location":"changelog/#bug-fixes_93","title":"Bug Fixes","text":""},{"location":"changelog/#documentation_12","title":"Documentation","text":""},{"location":"changelog/#maintenance_32","title":"Maintenance","text":""},{"location":"changelog/#all-app-changes_93","title":"All App Changes","text":"11 changes - Fix: reduce frequency of permissions queries to speed up v1.14.0 [@shamoon](https://github.com/shamoon) ([#3201](https://github.com/paperless-ngx/paperless-ngx/pull/3201)) - Fix: permissions-aware statistics [@shamoon](https://github.com/shamoon) ([#3199](https://github.com/paperless-ngx/paperless-ngx/pull/3199)) - Fix: Use document owner for matching if set [@shamoon](https://github.com/shamoon) ([#3198](https://github.com/paperless-ngx/paperless-ngx/pull/3198)) - Chore: Fix isort not running, upgrade to the latest black [@stumpylog](https://github.com/stumpylog) ([#3177](https://github.com/paperless-ngx/paperless-ngx/pull/3177)) - Fix: respect permissions on document view actions [@shamoon](https://github.com/shamoon) ([#3174](https://github.com/paperless-ngx/paperless-ngx/pull/3174)) - Increment API version for 1.14.1+ [@shamoon](https://github.com/shamoon) ([#3191](https://github.com/paperless-ngx/paperless-ngx/pull/3191)) - Fix: dropdown Private items with empty set [@shamoon](https://github.com/shamoon) ([#3189](https://github.com/paperless-ngx/paperless-ngx/pull/3189)) - Fix: make the importer a little more robust against some errors [@stumpylog](https://github.com/stumpylog) ([#3188](https://github.com/paperless-ngx/paperless-ngx/pull/3188)) - Fix: Specify backend for auto-login [@shamoon](https://github.com/shamoon) ([#3163](https://github.com/paperless-ngx/paperless-ngx/pull/3163)) - Fix: StoragePath missing the owned or granted filter [@stumpylog](https://github.com/stumpylog) ([#3180](https://github.com/paperless-ngx/paperless-ngx/pull/3180)) - Fix: Handle delete mail action with no filters [@shamoon](https://github.com/shamoon) ([#3161](https://github.com/paperless-ngx/paperless-ngx/pull/3161))"},{"location":"changelog/#paperless-ngx-1140","title":"paperless-ngx 1.14.0","text":""},{"location":"changelog/#notable-changes_9","title":"Notable Changes","text":""},{"location":"changelog/#features_31","title":"Features","text":""},{"location":"changelog/#bug-fixes_94","title":"Bug Fixes","text":""},{"location":"changelog/#documentation_13","title":"Documentation","text":""},{"location":"changelog/#maintenance_33","title":"Maintenance","text":""},{"location":"changelog/#dependencies_49","title":"Dependencies","text":"15 changes - Bump ng2-pdf-viewer from 9.1.4 to 9.1.5 in /src-ui [@dependabot](https://github.com/dependabot) ([#3109](https://github.com/paperless-ngx/paperless-ngx/pull/3109)) - Grouped bump angular packages from 15.2.6 to 15.2.7 in /src-ui [@dependabot](https://github.com/dependabot) ([#3108](https://github.com/paperless-ngx/paperless-ngx/pull/3108)) - Bump typescript from 4.8.4 to 4.9.5 in /src-ui [@dependabot](https://github.com/dependabot) ([#3071](https://github.com/paperless-ngx/paperless-ngx/pull/3071)) - Bulk Bump npm packages 04.23 [@dependabot](https://github.com/dependabot) ([#3068](https://github.com/paperless-ngx/paperless-ngx/pull/3068)) - Bump wait-on from 6.0.1 to 7.0.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#2990](https://github.com/paperless-ngx/paperless-ngx/pull/2990)) - Bulk bump angular packages to 15.2.5 in /src-ui [@dependabot](https://github.com/dependabot) ([#2991](https://github.com/paperless-ngx/paperless-ngx/pull/2991)) - Bump [@types/node from 18.11.18 to 18.15.11 in /src-ui @dependabot](https://github.com/types/node from 18.11.18 to 18.15.11 in /src-ui @dependabot) ([#2993](https://github.com/paperless-ngx/paperless-ngx/pull/2993)) - Bump [@ng-select/ng-select from 10.0.3 to 10.0.4 in /src-ui @dependabot](https://github.com/ng-select/ng-select from 10.0.3 to 10.0.4 in /src-ui @dependabot) ([#2992](https://github.com/paperless-ngx/paperless-ngx/pull/2992)) - Bump [@typescript-eslint/eslint-plugin from 5.50.0 to 5.57.0 in /src-ui @dependabot](https://github.com/typescript-eslint/eslint-plugin from 5.50.0 to 5.57.0 in /src-ui @dependabot) ([#2989](https://github.com/paperless-ngx/paperless-ngx/pull/2989)) - Chore: Update cryptography to latest version [@stumpylog](https://github.com/stumpylog) ([#2891](https://github.com/paperless-ngx/paperless-ngx/pull/2891)) - Chore: Update to qpdf 11.3.0 in Docker image [@stumpylog](https://github.com/stumpylog) ([#2862](https://github.com/paperless-ngx/paperless-ngx/pull/2862)) - Bump leonsteinhaeuser/project-beta-automations from 2.0.1 to 2.1.0 [@dependabot](https://github.com/dependabot) ([#2789](https://github.com/paperless-ngx/paperless-ngx/pull/2789)) - Bump zone.js from 0.11.8 to 0.12.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#2793](https://github.com/paperless-ngx/paperless-ngx/pull/2793)) - Bump [@typescript-eslint/parser from 5.50.0 to 5.54.0 in /src-ui @dependabot](https://github.com/typescript-eslint/parser from 5.50.0 to 5.54.0 in /src-ui @dependabot) ([#2792](https://github.com/paperless-ngx/paperless-ngx/pull/2792)) - Bulk Bump angular packages to 15.2.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#2788](https://github.com/paperless-ngx/paperless-ngx/pull/2788))"},{"location":"changelog/#all-app-changes_94","title":"All App Changes","text":"72 changes - Feature: Catalan translation [@shamoon](https://github.com/shamoon) ([#3146](https://github.com/paperless-ngx/paperless-ngx/pull/3146)) - Fix: Allow setting additional Django settings for proxies [@stumpylog](https://github.com/stumpylog) ([#3135](https://github.com/paperless-ngx/paperless-ngx/pull/3135)) - Fix: Increase mail account password field length [@stumpylog](https://github.com/stumpylog) ([#3134](https://github.com/paperless-ngx/paperless-ngx/pull/3134)) - Fix: respect permissions for matching suggestions [@shamoon](https://github.com/shamoon) ([#3103](https://github.com/paperless-ngx/paperless-ngx/pull/3103)) - Bump ng2-pdf-viewer from 9.1.4 to 9.1.5 in /src-ui [@dependabot](https://github.com/dependabot) ([#3109](https://github.com/paperless-ngx/paperless-ngx/pull/3109)) - Grouped bump angular packages from 15.2.6 to 15.2.7 in /src-ui [@dependabot](https://github.com/dependabot) ([#3108](https://github.com/paperless-ngx/paperless-ngx/pull/3108)) - Fix: update PaperlessTask on hard failures [@shamoon](https://github.com/shamoon) ([#3062](https://github.com/paperless-ngx/paperless-ngx/pull/3062)) - Bump typescript from 4.8.4 to 4.9.5 in /src-ui [@dependabot](https://github.com/dependabot) ([#3071](https://github.com/paperless-ngx/paperless-ngx/pull/3071)) - Bulk Bump npm packages 04.23 [@dependabot](https://github.com/dependabot) ([#3068](https://github.com/paperless-ngx/paperless-ngx/pull/3068)) - Fix: Hide UI tour steps if user doesn't have permissions [@shamoon](https://github.com/shamoon) ([#3060](https://github.com/paperless-ngx/paperless-ngx/pull/3060)) - Fix: Hide Permissions tab if user cannot view users [@shamoon](https://github.com/shamoon) ([#3061](https://github.com/paperless-ngx/paperless-ngx/pull/3061)) - v1.14.0 delete document fixes [@shamoon](https://github.com/shamoon) ([#3020](https://github.com/paperless-ngx/paperless-ngx/pull/3020)) - Bump wait-on from 6.0.1 to 7.0.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#2990](https://github.com/paperless-ngx/paperless-ngx/pull/2990)) - Fix: inline plaintext docs to enforce styling [@shamoon](https://github.com/shamoon) ([#3013](https://github.com/paperless-ngx/paperless-ngx/pull/3013)) - Chore: Configure ruff as the primary linter for Python [@stumpylog](https://github.com/stumpylog) ([#2988](https://github.com/paperless-ngx/paperless-ngx/pull/2988)) - Bulk bump angular packages to 15.2.5 in /src-ui [@dependabot](https://github.com/dependabot) ([#2991](https://github.com/paperless-ngx/paperless-ngx/pull/2991)) - Bump [@types/node from 18.11.18 to 18.15.11 in /src-ui @dependabot](https://github.com/types/node from 18.11.18 to 18.15.11 in /src-ui @dependabot) ([#2993](https://github.com/paperless-ngx/paperless-ngx/pull/2993)) - Bump [@ng-select/ng-select from 10.0.3 to 10.0.4 in /src-ui @dependabot](https://github.com/ng-select/ng-select from 10.0.3 to 10.0.4 in /src-ui @dependabot) ([#2992](https://github.com/paperless-ngx/paperless-ngx/pull/2992)) - Bump [@typescript-eslint/eslint-plugin from 5.50.0 to 5.57.0 in /src-ui @dependabot](https://github.com/typescript-eslint/eslint-plugin from 5.50.0 to 5.57.0 in /src-ui @dependabot) ([#2989](https://github.com/paperless-ngx/paperless-ngx/pull/2989)) - Feature: Stronger typing for file consumption [@stumpylog](https://github.com/stumpylog) ([#2744](https://github.com/paperless-ngx/paperless-ngx/pull/2744)) - Fix: Use exclude instead of difference for mariadb [@shamoon](https://github.com/shamoon) ([#2983](https://github.com/paperless-ngx/paperless-ngx/pull/2983)) - Fix: permissions display should not show users with inherited permissions \\& unable to change owner [@shamoon](https://github.com/shamoon) ([#2818](https://github.com/paperless-ngx/paperless-ngx/pull/2818)) - Feature: double-click docs [@shamoon](https://github.com/shamoon) ([#2966](https://github.com/paperless-ngx/paperless-ngx/pull/2966)) - feature: Add support for zxing as barcode scanning lib [@margau](https://github.com/margau) ([#2907](https://github.com/paperless-ngx/paperless-ngx/pull/2907)) - Feature: test mail account [@shamoon](https://github.com/shamoon) ([#2949](https://github.com/paperless-ngx/paperless-ngx/pull/2949)) - Feature: Capture celery and kombu logs to a file [@stumpylog](https://github.com/stumpylog) ([#2954](https://github.com/paperless-ngx/paperless-ngx/pull/2954)) - Fix: Resolve Redis connection issues with ACLs [@stumpylog](https://github.com/stumpylog) ([#2939](https://github.com/paperless-ngx/paperless-ngx/pull/2939)) - Feature: Allow mail account to use access tokens [@stumpylog](https://github.com/stumpylog) ([#2930](https://github.com/paperless-ngx/paperless-ngx/pull/2930)) - Fix: Consumer polling could overwhelm database [@stumpylog](https://github.com/stumpylog) ([#2922](https://github.com/paperless-ngx/paperless-ngx/pull/2922)) - Feature: Improved statistics widget [@shamoon](https://github.com/shamoon) ([#2910](https://github.com/paperless-ngx/paperless-ngx/pull/2910)) - Enhancement: rename comments to notes and improve notes UI [@shamoon](https://github.com/shamoon) ([#2904](https://github.com/paperless-ngx/paperless-ngx/pull/2904)) - Allow psql client certificate authentication [@Ongy](https://github.com/Ongy) ([#2899](https://github.com/paperless-ngx/paperless-ngx/pull/2899)) - Enhancement: support filtering multiple correspondents, doctypes \\& storage paths [@shamoon](https://github.com/shamoon) ([#2893](https://github.com/paperless-ngx/paperless-ngx/pull/2893)) - Fix: frontend handle private tags, doctypes, correspondents [@shamoon](https://github.com/shamoon) ([#2839](https://github.com/paperless-ngx/paperless-ngx/pull/2839)) - Fix: Chrome struggles with commas [@stumpylog](https://github.com/stumpylog) ([#2892](https://github.com/paperless-ngx/paperless-ngx/pull/2892)) - Feature: Change celery serializer to pickle [@stumpylog](https://github.com/stumpylog) ([#2861](https://github.com/paperless-ngx/paperless-ngx/pull/2861)) - Feature: Allow naming to include owner and original name [@stumpylog](https://github.com/stumpylog) ([#2873](https://github.com/paperless-ngx/paperless-ngx/pull/2873)) - Feature: Allows filtering email by the TO value(s) as well [@stumpylog](https://github.com/stumpylog) ([#2871](https://github.com/paperless-ngx/paperless-ngx/pull/2871)) - Fix: logout on change password via frontend [@shamoon](https://github.com/shamoon) ([#2863](https://github.com/paperless-ngx/paperless-ngx/pull/2863)) - Fix: give superuser full doc perms [@shamoon](https://github.com/shamoon) ([#2820](https://github.com/paperless-ngx/paperless-ngx/pull/2820)) - Fix: Append Gmail labels instead of replacing [@stumpylog](https://github.com/stumpylog) ([#2860](https://github.com/paperless-ngx/paperless-ngx/pull/2860)) - Feature: owner-aware unique model name constraint [@shamoon](https://github.com/shamoon) ([#2827](https://github.com/paperless-ngx/paperless-ngx/pull/2827)) - Chore: Create list parsing utility for settings [@stumpylog](https://github.com/stumpylog) ([#2816](https://github.com/paperless-ngx/paperless-ngx/pull/2816)) - Fix: Ensure email date is made aware during action processing [@stumpylog](https://github.com/stumpylog) ([#2837](https://github.com/paperless-ngx/paperless-ngx/pull/2837)) - Chore: Convert more code to pathlib [@stumpylog](https://github.com/stumpylog) ([#2817](https://github.com/paperless-ngx/paperless-ngx/pull/2817)) - Fix: disable bulk edit dialog buttons during operation [@shamoon](https://github.com/shamoon) ([#2819](https://github.com/paperless-ngx/paperless-ngx/pull/2819)) - fix database locked error [@jonaswinkler](https://github.com/jonaswinkler) ([#2808](https://github.com/paperless-ngx/paperless-ngx/pull/2808)) - Fix: Disable suggestions for read-only docs [@shamoon](https://github.com/shamoon) ([#2813](https://github.com/paperless-ngx/paperless-ngx/pull/2813)) - update django.po messages [@jonaswinkler](https://github.com/jonaswinkler) ([#2806](https://github.com/paperless-ngx/paperless-ngx/pull/2806)) - Update processed mail migration [@shamoon](https://github.com/shamoon) ([#2804](https://github.com/paperless-ngx/paperless-ngx/pull/2804)) - Feature/2396 better mail actions [@jonaswinkler](https://github.com/jonaswinkler) ([#2718](https://github.com/paperless-ngx/paperless-ngx/pull/2718)) - Bump zone.js from 0.11.8 to 0.12.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#2793](https://github.com/paperless-ngx/paperless-ngx/pull/2793)) - Bump [@typescript-eslint/parser from 5.50.0 to 5.54.0 in /src-ui @dependabot](https://github.com/typescript-eslint/parser from 5.50.0 to 5.54.0 in /src-ui @dependabot) ([#2792](https://github.com/paperless-ngx/paperless-ngx/pull/2792)) - Bulk Bump angular packages to 15.2.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#2788](https://github.com/paperless-ngx/paperless-ngx/pull/2788)) - Fix: Ensure scratch directory exists before using [@stumpylog](https://github.com/stumpylog) ([#2775](https://github.com/paperless-ngx/paperless-ngx/pull/2775)) - Don't submit owner via API on document upload [@jonaswinkler](https://github.com/jonaswinkler) ([#2777](https://github.com/paperless-ngx/paperless-ngx/pull/2777)) - Feature: Reduce classifier memory usage somewhat during training [@stumpylog](https://github.com/stumpylog) ([#2733](https://github.com/paperless-ngx/paperless-ngx/pull/2733)) - Chore: Setup for mypy typing checks [@stumpylog](https://github.com/stumpylog) ([#2742](https://github.com/paperless-ngx/paperless-ngx/pull/2742)) - Feature: Add PAPERLESS_OCR_SKIP_ARCHIVE_FILE config setting [@bdr99](https://github.com/bdr99) ([#2743](https://github.com/paperless-ngx/paperless-ngx/pull/2743)) - Fix: only offer log files that exist [@shamoon](https://github.com/shamoon) ([#2739](https://github.com/paperless-ngx/paperless-ngx/pull/2739)) - Feature: dynamic document counts in dropdowns [@shamoon](https://github.com/shamoon) ([#2704](https://github.com/paperless-ngx/paperless-ngx/pull/2704)) - Fix: permissions editing and initial view issues [@shamoon](https://github.com/shamoon) ([#2717](https://github.com/paperless-ngx/paperless-ngx/pull/2717)) - Fix: reset saved view ID on quickFilter [@shamoon](https://github.com/shamoon) ([#2703](https://github.com/paperless-ngx/paperless-ngx/pull/2703)) - Feature: Add an option to disable matching [@bdr99](https://github.com/bdr99) ([#2727](https://github.com/paperless-ngx/paperless-ngx/pull/2727)) - Chore: Improve clarity of some test asserting [@stumpylog](https://github.com/stumpylog) ([#2714](https://github.com/paperless-ngx/paperless-ngx/pull/2714)) - Allow setting the ASN on document upload [@stumpylog](https://github.com/stumpylog) ([#2713](https://github.com/paperless-ngx/paperless-ngx/pull/2713)) - Fix: bulk edit reset apply button state [@shamoon](https://github.com/shamoon) ([#2701](https://github.com/paperless-ngx/paperless-ngx/pull/2701)) - Feature: Log failed login attempts [@shamoon](https://github.com/shamoon) ([#2359](https://github.com/paperless-ngx/paperless-ngx/pull/2359)) - Feature: Rename documents when storage path format changes [@stumpylog](https://github.com/stumpylog) ([#2696](https://github.com/paperless-ngx/paperless-ngx/pull/2696)) - Feature: update error message colors \\& show on document failures [@shamoon](https://github.com/shamoon) ([#2689](https://github.com/paperless-ngx/paperless-ngx/pull/2689)) - Feature: multi-user permissions [@shamoon](https://github.com/shamoon) ([#2147](https://github.com/paperless-ngx/paperless-ngx/pull/2147)) - Fix: add missing i18n for mobile preview tab title [@nathanaelhoun](https://github.com/nathanaelhoun) ([#2692](https://github.com/paperless-ngx/paperless-ngx/pull/2692))"},{"location":"changelog/#paperless-ngx-1130","title":"paperless-ngx 1.13.0","text":""},{"location":"changelog/#features_32","title":"Features","text":""},{"location":"changelog/#bug-fixes_95","title":"Bug Fixes","text":""},{"location":"changelog/#documentation_14","title":"Documentation","text":""},{"location":"changelog/#maintenance_34","title":"Maintenance","text":""},{"location":"changelog/#paperless-ngx-1122","title":"paperless-ngx 1.12.2","text":"

Note: Version 1.12.x introduced searching of comments which will work for comments added after the upgrade but a reindex of the search index is required in order to be able to search older comments. The Docker image will automatically perform this reindex, bare metal installations will have to perform this manually, see the docs.

"},{"location":"changelog/#bug-fixes_96","title":"Bug Fixes","text":""},{"location":"changelog/#documentation_15","title":"Documentation","text":""},{"location":"changelog/#maintenance_35","title":"Maintenance","text":""},{"location":"changelog/#all-app-changes_95","title":"All App Changes","text":""},{"location":"changelog/#paperless-ngx-1121","title":"paperless-ngx 1.12.1","text":""},{"location":"changelog/#bug-fixes_97","title":"Bug Fixes","text":""},{"location":"changelog/#documentation_16","title":"Documentation","text":""},{"location":"changelog/#maintenance_36","title":"Maintenance","text":""},{"location":"changelog/#all-app-changes_96","title":"All App Changes","text":""},{"location":"changelog/#paperless-ngx-1120","title":"paperless-ngx 1.12.0","text":""},{"location":"changelog/#features_33","title":"Features","text":""},{"location":"changelog/#bug-fixes_98","title":"Bug Fixes","text":""},{"location":"changelog/#documentation_17","title":"Documentation","text":""},{"location":"changelog/#maintenance_37","title":"Maintenance","text":""},{"location":"changelog/#dependencies_50","title":"Dependencies","text":"4 changes - Chore: Backend library updates [@stumpylog](https://github.com/stumpylog) ([#2401](https://github.com/paperless-ngx/paperless-ngx/pull/2401)) - Bump tj-actions/changed-files from 34 to 35 [@dependabot](https://github.com/dependabot) ([#2303](https://github.com/paperless-ngx/paperless-ngx/pull/2303)) - Bump [@typescript-eslint/parser from 5.43.0 to 5.47.1 in /src-ui @dependabot](https://github.com/typescript-eslint/parser from 5.43.0 to 5.47.1 in /src-ui @dependabot) ([#2306](https://github.com/paperless-ngx/paperless-ngx/pull/2306)) - Bump [@typescript-eslint/eslint-plugin from 5.43.0 to 5.47.1 in /src-ui @dependabot](https://github.com/typescript-eslint/eslint-plugin from 5.43.0 to 5.47.1 in /src-ui @dependabot) ([#2308](https://github.com/paperless-ngx/paperless-ngx/pull/2308))"},{"location":"changelog/#all-app-changes_97","title":"All App Changes","text":""},{"location":"changelog/#paperless-ngx-1113","title":"paperless-ngx 1.11.3","text":""},{"location":"changelog/#breaking-changes_7","title":"Breaking Changes","text":"

Note: PR #2279 could represent a breaking change to the API which may affect third party applications that were only checking the post_document endpoint for e.g. result = 'OK' as opposed to e.g. HTTP status = 200

"},{"location":"changelog/#bug-fixes_99","title":"Bug Fixes","text":""},{"location":"changelog/#all-app-changes_98","title":"All App Changes","text":""},{"location":"changelog/#paperless-ngx-1112","title":"paperless-ngx 1.11.2","text":"

Versions 1.11.1 and 1.11.2 contain bug fixes from v1.11.0 that prevented use of the new email consumption feature

"},{"location":"changelog/#bug-fixes_100","title":"Bug Fixes","text":""},{"location":"changelog/#all-app-changes_99","title":"All App Changes","text":""},{"location":"changelog/#paperless-ngx-1110","title":"paperless-ngx 1.11.0","text":""},{"location":"changelog/#notable-changes_10","title":"Notable Changes","text":""},{"location":"changelog/#features_34","title":"Features","text":""},{"location":"changelog/#bug-fixes_101","title":"Bug Fixes","text":""},{"location":"changelog/#documentation_18","title":"Documentation","text":""},{"location":"changelog/#maintenance_38","title":"Maintenance","text":""},{"location":"changelog/#all-app-changes_100","title":"All App Changes","text":""},{"location":"changelog/#paperless-ngx-1102","title":"paperless-ngx 1.10.2","text":""},{"location":"changelog/#features_35","title":"Features","text":""},{"location":"changelog/#bug-fixes_102","title":"Bug Fixes","text":""},{"location":"changelog/#documentation_19","title":"Documentation","text":""},{"location":"changelog/#maintenance_39","title":"Maintenance","text":""},{"location":"changelog/#all-app-changes_101","title":"All App Changes","text":""},{"location":"changelog/#paperless-ngx-1101","title":"paperless-ngx 1.10.1","text":""},{"location":"changelog/#features_36","title":"Features","text":""},{"location":"changelog/#bug-fixes_103","title":"Bug Fixes","text":""},{"location":"changelog/#maintenance_40","title":"Maintenance","text":""},{"location":"changelog/#dependencies_51","title":"Dependencies","text":"5 changes - Bump tslib from 2.4.0 to 2.4.1 in /src-ui @dependabot ([#2076](https://github.com/paperless-ngx/paperless-ngx/pull/2076)) - Bump @angular-builders/jest from 14.0.1 to 14.1.0 in /src-ui @dependabot ([#2079](https://github.com/paperless-ngx/paperless-ngx/pull/2079)) - Bump jest-preset-angular from 12.2.2 to 12.2.3 in /src-ui @dependabot ([#2078](https://github.com/paperless-ngx/paperless-ngx/pull/2078)) - Bump ngx-file-drop from 14.0.1 to 14.0.2 in /src-ui @dependabot ([#2080](https://github.com/paperless-ngx/paperless-ngx/pull/2080)) - Bump @ngneat/dirty-check-forms from 3.0.2 to 3.0.3 in /src-ui @dependabot ([#2077](https://github.com/paperless-ngx/paperless-ngx/pull/2077))"},{"location":"changelog/#all-app-changes_102","title":"All App Changes","text":""},{"location":"changelog/#paperless-ngx-1100","title":"paperless-ngx 1.10.0","text":""},{"location":"changelog/#features_37","title":"Features","text":""},{"location":"changelog/#bug-fixes_104","title":"Bug Fixes","text":""},{"location":"changelog/#documentation_20","title":"Documentation","text":""},{"location":"changelog/#maintenance_41","title":"Maintenance","text":""},{"location":"changelog/#dependencies_52","title":"Dependencies","text":"31 changes - Bugfix: Downgrade cryptography for armv7 compatibility [@stumpylog](https://github.com/stumpylog) ([#1954](https://github.com/paperless-ngx/paperless-ngx/pull/1954)) - Chore: Bulk library updates + loosen restrictions [@stumpylog](https://github.com/stumpylog) ([#1949](https://github.com/paperless-ngx/paperless-ngx/pull/1949)) - Bump tj-actions/changed-files from 32 to 34 [@dependabot](https://github.com/dependabot) ([#1915](https://github.com/paperless-ngx/paperless-ngx/pull/1915)) - Bump scikit-learn from 1.1.2 to 1.1.3 [@dependabot](https://github.com/dependabot) ([#1903](https://github.com/paperless-ngx/paperless-ngx/pull/1903)) - Bump angular packages as bundle [@dependabot](https://github.com/dependabot) ([#1910](https://github.com/paperless-ngx/paperless-ngx/pull/1910)) - Bump ngx-ui-tour-ng-bootstrap from 11.0.0 to 11.1.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#1911](https://github.com/paperless-ngx/paperless-ngx/pull/1911)) - Bump jest-environment-jsdom from 29.1.2 to 29.2.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#1914](https://github.com/paperless-ngx/paperless-ngx/pull/1914)) - Bump pillow from 9.2.0 to 9.3.0 [@dependabot](https://github.com/dependabot) ([#1904](https://github.com/paperless-ngx/paperless-ngx/pull/1904)) - Bump pytest from 7.1.3 to 7.2.0 [@dependabot](https://github.com/dependabot) ([#1902](https://github.com/paperless-ngx/paperless-ngx/pull/1902)) - Bump tox from 3.26.0 to 3.27.0 [@dependabot](https://github.com/dependabot) ([#1901](https://github.com/paperless-ngx/paperless-ngx/pull/1901)) - Bump zipp from 3.9.0 to 3.10.0 [@dependabot](https://github.com/dependabot) ([#1860](https://github.com/paperless-ngx/paperless-ngx/pull/1860)) - Bump pytest-env from 0.6.2 to 0.8.1 [@dependabot](https://github.com/dependabot) ([#1859](https://github.com/paperless-ngx/paperless-ngx/pull/1859)) - Bump sphinx from 5.2.3 to 5.3.0 [@dependabot](https://github.com/dependabot) ([#1817](https://github.com/paperless-ngx/paperless-ngx/pull/1817)) - Chore: downgrade channels-redis [@stumpylog](https://github.com/stumpylog) ([#1802](https://github.com/paperless-ngx/paperless-ngx/pull/1802)) - Chore: Update to qpdf 11.1.1 and update backend libraries [@stumpylog](https://github.com/stumpylog) ([#1749](https://github.com/paperless-ngx/paperless-ngx/pull/1749)) - Bump myst-parser from 0.18.0 to 0.18.1 [@dependabot](https://github.com/dependabot) ([#1738](https://github.com/paperless-ngx/paperless-ngx/pull/1738)) - Bump leonsteinhaeuser/project-beta-automations from 1.3.0 to 2.0.1 [@dependabot](https://github.com/dependabot) ([#1703](https://github.com/paperless-ngx/paperless-ngx/pull/1703)) - Bump tj-actions/changed-files from 29.0.2 to 31.0.2 [@dependabot](https://github.com/dependabot) ([#1702](https://github.com/paperless-ngx/paperless-ngx/pull/1702)) - Bump actions/checkout from 2 to 3 [@dependabot](https://github.com/dependabot) ([#1704](https://github.com/paperless-ngx/paperless-ngx/pull/1704)) - Bump actions/setup-python from 3 to 4 [@dependabot](https://github.com/dependabot) ([#1705](https://github.com/paperless-ngx/paperless-ngx/pull/1705)) - Bump rxjs from 7.5.6 to 7.5.7 in /src-ui [@dependabot](https://github.com/dependabot) ([#1720](https://github.com/paperless-ngx/paperless-ngx/pull/1720)) - Bump uuid from 8.3.2 to 9.0.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#1716](https://github.com/paperless-ngx/paperless-ngx/pull/1716)) - Bump ng2-pdf-viewer from 9.1.0 to 9.1.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#1717](https://github.com/paperless-ngx/paperless-ngx/pull/1717)) - Bump ngx-color from 8.0.2 to 8.0.3 in /src-ui [@dependabot](https://github.com/dependabot) ([#1715](https://github.com/paperless-ngx/paperless-ngx/pull/1715)) - Bump concurrently from 7.3.0 to 7.4.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#1719](https://github.com/paperless-ngx/paperless-ngx/pull/1719)) - Bump [@types/node from 18.7.14 to 18.7.23 in /src-ui @dependabot](https://github.com/types/node from 18.7.14 to 18.7.23 in /src-ui @dependabot) ([#1718](https://github.com/paperless-ngx/paperless-ngx/pull/1718)) - Bump jest-environment-jsdom from 29.0.1 to 29.1.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#1714](https://github.com/paperless-ngx/paperless-ngx/pull/1714)) - Bump [@angular/cli @angular/core @dependabot](https://github.com/angular/cli @angular/core @dependabot) ([#1708](https://github.com/paperless-ngx/paperless-ngx/pull/1708)) - Bump cypress from 10.7.0 to 10.9.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#1707](https://github.com/paperless-ngx/paperless-ngx/pull/1707)) - Bump bootstrap from 5.2.0 to 5.2.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#1710](https://github.com/paperless-ngx/paperless-ngx/pull/1710)) - Bump typescript from 4.7.4 to 4.8.4 in /src-ui [@dependabot](https://github.com/dependabot) ([#1706](https://github.com/paperless-ngx/paperless-ngx/pull/1706))"},{"location":"changelog/#all-app-changes_103","title":"All App Changes","text":""},{"location":"changelog/#paperless-ngx-192","title":"paperless-ngx 1.9.2","text":""},{"location":"changelog/#bug-fixes_105","title":"Bug Fixes","text":""},{"location":"changelog/#all-app-changes_104","title":"All App Changes","text":""},{"location":"changelog/#paperless-ngx-191","title":"paperless-ngx 1.9.1","text":""},{"location":"changelog/#notes","title":"Notes","text":""},{"location":"changelog/#bug-fixes_106","title":"Bug Fixes","text":""},{"location":"changelog/#documentation_21","title":"Documentation","text":""},{"location":"changelog/#all-app-changes_105","title":"All App Changes","text":""},{"location":"changelog/#paperless-ngx-190","title":"paperless-ngx 1.9.0","text":""},{"location":"changelog/#features_38","title":"Features","text":""},{"location":"changelog/#bug-fixes_107","title":"Bug Fixes","text":""},{"location":"changelog/#documentation_22","title":"Documentation","text":""},{"location":"changelog/#maintenance_42","title":"Maintenance","text":""},{"location":"changelog/#dependencies_53","title":"Dependencies","text":"34 changes - Bump pikepdf from 5.5.0 to 5.6.1 [@dependabot](https://github.com/dependabot) ([#1537](https://github.com/paperless-ngx/paperless-ngx/pull/1537)) - Bump black from 22.6.0 to 22.8.0 [@dependabot](https://github.com/dependabot) ([#1539](https://github.com/paperless-ngx/paperless-ngx/pull/1539)) - Bump tqdm from 4.64.0 to 4.64.1 [@dependabot](https://github.com/dependabot) ([#1540](https://github.com/paperless-ngx/paperless-ngx/pull/1540)) - Bump pytest from 7.1.2 to 7.1.3 [@dependabot](https://github.com/dependabot) ([#1538](https://github.com/paperless-ngx/paperless-ngx/pull/1538)) - Bump tj-actions/changed-files from 24 to 29.0.2 [@dependabot](https://github.com/dependabot) ([#1493](https://github.com/paperless-ngx/paperless-ngx/pull/1493)) - Bump angular packages, jest-preset-angular in src-ui [@dependabot](https://github.com/dependabot) ([#1502](https://github.com/paperless-ngx/paperless-ngx/pull/1502)) - Bump jest-environment-jsdom from 28.1.3 to 29.0.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#1507](https://github.com/paperless-ngx/paperless-ngx/pull/1507)) - Bump [@types/node from 18.6.3 to 18.7.14 in /src-ui @dependabot](https://github.com/types/node from 18.6.3 to 18.7.14 in /src-ui @dependabot) ([#1506](https://github.com/paperless-ngx/paperless-ngx/pull/1506)) - Bump [@angular-builders/jest from 14.0.0 to 14.0.1 in /src-ui @dependabot](https://github.com/angular-builders/jest from 14.0.0 to 14.0.1 in /src-ui @dependabot) ([#1505](https://github.com/paperless-ngx/paperless-ngx/pull/1505)) - Bump zone.js from 0.11.7 to 0.11.8 in /src-ui [@dependabot](https://github.com/dependabot) ([#1504](https://github.com/paperless-ngx/paperless-ngx/pull/1504)) - Bump ngx-color from 8.0.1 to 8.0.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#1494](https://github.com/paperless-ngx/paperless-ngx/pull/1494)) - Bump cypress from 10.3.1 to 10.7.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#1496](https://github.com/paperless-ngx/paperless-ngx/pull/1496)) - Bump [@cypress/schematic from 2.0.0 to 2.1.1 in /src-ui @dependabot](https://github.com/cypress/schematic from 2.0.0 to 2.1.1 in /src-ui @dependabot) ([#1495](https://github.com/paperless-ngx/paperless-ngx/pull/1495)) - Bump [@popperjs/core from 2.11.5 to 2.11.6 in /src-ui @dependabot](https://github.com/popperjs/core from 2.11.5 to 2.11.6 in /src-ui @dependabot) ([#1498](https://github.com/paperless-ngx/paperless-ngx/pull/1498)) - Bump sphinx from 5.0.2 to 5.1.1 [@dependabot](https://github.com/dependabot) ([#1297](https://github.com/paperless-ngx/paperless-ngx/pull/1297)) - Chore: Bump Python dependencies [@stumpylog](https://github.com/stumpylog) ([#1445](https://github.com/paperless-ngx/paperless-ngx/pull/1445)) - Chore: Update Python deps [@stumpylog](https://github.com/stumpylog) ([#1391](https://github.com/paperless-ngx/paperless-ngx/pull/1391)) - Bump watchfiles from 0.15.0 to 0.16.1 [@dependabot](https://github.com/dependabot) ([#1285](https://github.com/paperless-ngx/paperless-ngx/pull/1285)) - Bump leonsteinhaeuser/project-beta-automations from 1.2.1 to 1.3.0 [@dependabot](https://github.com/dependabot) ([#1328](https://github.com/paperless-ngx/paperless-ngx/pull/1328)) - Bump tj-actions/changed-files from 23.1 to 24 [@dependabot](https://github.com/dependabot) ([#1329](https://github.com/paperless-ngx/paperless-ngx/pull/1329)) - Bump cypress from 10.3.0 to 10.3.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#1342](https://github.com/paperless-ngx/paperless-ngx/pull/1342)) - Bump ngx-color from 7.3.3 to 8.0.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#1343](https://github.com/paperless-ngx/paperless-ngx/pull/1343)) - Bump [@angular/cli from 14.0.4 to 14.1.0 in /src-ui @dependabot](https://github.com/angular/cli from 14.0.4 to 14.1.0 in /src-ui @dependabot) ([#1330](https://github.com/paperless-ngx/paperless-ngx/pull/1330)) - Bump [@types/node from 18.0.0 to 18.6.3 in /src-ui @dependabot](https://github.com/types/node from 18.0.0 to 18.6.3 in /src-ui @dependabot) ([#1341](https://github.com/paperless-ngx/paperless-ngx/pull/1341)) - Bump jest-preset-angular from 12.1.0 to 12.2.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#1340](https://github.com/paperless-ngx/paperless-ngx/pull/1340)) - Bump concurrently from 7.2.2 to 7.3.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#1326](https://github.com/paperless-ngx/paperless-ngx/pull/1326)) - Bump ng2-pdf-viewer from 9.0.0 to 9.1.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#1337](https://github.com/paperless-ngx/paperless-ngx/pull/1337)) - Bump jest-environment-jsdom from 28.1.2 to 28.1.3 in /src-ui [@dependabot](https://github.com/dependabot) ([#1336](https://github.com/paperless-ngx/paperless-ngx/pull/1336)) - Bump ngx-file-drop from 13.0.0 to 14.0.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#1331](https://github.com/paperless-ngx/paperless-ngx/pull/1331)) - Bump jest and [@types/jest in /src-ui @dependabot](https://github.com/types/jest in /src-ui @dependabot) ([#1333](https://github.com/paperless-ngx/paperless-ngx/pull/1333)) - Bump bootstrap from 5.1.3 to 5.2.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#1327](https://github.com/paperless-ngx/paperless-ngx/pull/1327)) - Bump typescript from 4.6.4 to 4.7.4 in /src-ui [@dependabot](https://github.com/dependabot) ([#1324](https://github.com/paperless-ngx/paperless-ngx/pull/1324)) - Bump ts-node from 10.8.1 to 10.9.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#1325](https://github.com/paperless-ngx/paperless-ngx/pull/1325)) - Bump rxjs from 7.5.5 to 7.5.6 in /src-ui [@dependabot](https://github.com/dependabot) ([#1323](https://github.com/paperless-ngx/paperless-ngx/pull/1323))"},{"location":"changelog/#all-app-changes_106","title":"All App Changes","text":""},{"location":"changelog/#paperless-ngx-180","title":"paperless-ngx 1.8.0","text":""},{"location":"changelog/#features_39","title":"Features","text":""},{"location":"changelog/#bug-fixes_108","title":"Bug Fixes","text":""},{"location":"changelog/#documentation_23","title":"Documentation","text":""},{"location":"changelog/#maintenance_43","title":"Maintenance","text":""},{"location":"changelog/#dependencies_54","title":"Dependencies","text":"34 changes - Fearless scikit-learn updates [@stumpylog](https://github.com/stumpylog) ([#1082](https://github.com/paperless-ngx/paperless-ngx/pull/1082)) - Bump pillow from 9.1.1 to 9.2.0 [@dependabot](https://github.com/dependabot) ([#1193](https://github.com/paperless-ngx/paperless-ngx/pull/1193)) - Bump watchdog from 2.1.8 to 2.1.9 [@dependabot](https://github.com/dependabot) ([#1132](https://github.com/paperless-ngx/paperless-ngx/pull/1132)) - Bump scikit-learn from 1.0.2 to 1.1.1 [@dependabot](https://github.com/dependabot) ([#992](https://github.com/paperless-ngx/paperless-ngx/pull/992)) - Bump setuptools from 62.3.3 to 62.6.0 [@dependabot](https://github.com/dependabot) ([#1150](https://github.com/paperless-ngx/paperless-ngx/pull/1150)) - Bump django-filter from 21.1 to 22.1 [@dependabot](https://github.com/dependabot) ([#1191](https://github.com/paperless-ngx/paperless-ngx/pull/1191)) - Bump actions/setup-python from 3 to 4 [@dependabot](https://github.com/dependabot) ([#1176](https://github.com/paperless-ngx/paperless-ngx/pull/1176)) - Bump sphinx from 4.5.0 to 5.0.2 [@dependabot](https://github.com/dependabot) ([#1151](https://github.com/paperless-ngx/paperless-ngx/pull/1151)) - Bump docker/metadata-action from 3 to 4 [@dependabot](https://github.com/dependabot) ([#1178](https://github.com/paperless-ngx/paperless-ngx/pull/1178)) - Bump tj-actions/changed-files from 22.1 to 23.1 [@dependabot](https://github.com/dependabot) ([#1179](https://github.com/paperless-ngx/paperless-ngx/pull/1179)) - Bump @angular/cli from 13.3.7 to 14.0.4 in /src-ui [@dependabot](https://github.com/dependabot) ([#1177](https://github.com/paperless-ngx/paperless-ngx/pull/1177)) - Bump cypress from 10.0.1 to 10.3.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#1187](https://github.com/paperless-ngx/paperless-ngx/pull/1187)) - Bump zone.js from 0.11.5 to 0.11.6 in /src-ui [@dependabot](https://github.com/dependabot) ([#1185](https://github.com/paperless-ngx/paperless-ngx/pull/1185)) - Bump ts-node from 10.8.0 to 10.8.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#1184](https://github.com/paperless-ngx/paperless-ngx/pull/1184)) - Bump jest-environment-jsdom from 28.1.0 to 28.1.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#1175](https://github.com/paperless-ngx/paperless-ngx/pull/1175)) - Bump @types/node from 17.0.38 to 18.0.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#1183](https://github.com/paperless-ngx/paperless-ngx/pull/1183)) - Bump concurrently from 7.2.1 to 7.2.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#1181](https://github.com/paperless-ngx/paperless-ngx/pull/1181)) - Bump jest-preset-angular from 12.0.1 to 12.1.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#1182](https://github.com/paperless-ngx/paperless-ngx/pull/1182)) - Bump jest and @types/jest in /src-ui [@dependabot](https://github.com/dependabot) ([#1180](https://github.com/paperless-ngx/paperless-ngx/pull/1180)) - Bump whitenoise from 6.1.0 to 6.2.0 [@dependabot](https://github.com/dependabot) ([#1103](https://github.com/paperless-ngx/paperless-ngx/pull/1103)) - Bump cypress from 9.6.1 to 10.0.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#1083](https://github.com/paperless-ngx/paperless-ngx/pull/1083)) - Bump docker/setup-qemu-action from 1 to 2 [@dependabot](https://github.com/dependabot) ([#1065](https://github.com/paperless-ngx/paperless-ngx/pull/1065)) - Bump docker/setup-buildx-action from 1 to 2 [@dependabot](https://github.com/dependabot) ([#1064](https://github.com/paperless-ngx/paperless-ngx/pull/1064)) - Bump docker/build-push-action from 2 to 3 [@dependabot](https://github.com/dependabot) ([#1063](https://github.com/paperless-ngx/paperless-ngx/pull/1063)) - Bump @cypress/schematic from 1.7.0 to 2.0.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#1075](https://github.com/paperless-ngx/paperless-ngx/pull/1075)) - Bump tj-actions/changed-files from 19 to 22.1 [@dependabot](https://github.com/dependabot) ([#1062](https://github.com/paperless-ngx/paperless-ngx/pull/1062)) - Bump concurrently from 7.1.0 to 7.2.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#1073](https://github.com/paperless-ngx/paperless-ngx/pull/1073)) - Bump @types/jest from 27.4.1 to 27.5.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#1074](https://github.com/paperless-ngx/paperless-ngx/pull/1074)) - Bump ts-node from 10.7.0 to 10.8.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#1070](https://github.com/paperless-ngx/paperless-ngx/pull/1070)) - Bump jest from 28.0.3 to 28.1.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#1071](https://github.com/paperless-ngx/paperless-ngx/pull/1071)) - Chore: npm package updates 22-06-01 [@shamoon](https://github.com/shamoon) ([#1069](https://github.com/paperless-ngx/paperless-ngx/pull/1069)) - Bump docker/login-action from 1 to 2 [@dependabot](https://github.com/dependabot) ([#1061](https://github.com/paperless-ngx/paperless-ngx/pull/1061)) - Chore: Manually update dependencies [@stumpylog](https://github.com/stumpylog) ([#1013](https://github.com/paperless-ngx/paperless-ngx/pull/1013)) - Chore: Manually update all Python dependencies [@stumpylog](https://github.com/stumpylog) ([#973](https://github.com/paperless-ngx/paperless-ngx/pull/973))"},{"location":"changelog/#paperless-ngx-171","title":"paperless-ngx 1.7.1","text":""},{"location":"changelog/#features_40","title":"Features","text":""},{"location":"changelog/#bug-fixes_109","title":"Bug Fixes","text":""},{"location":"changelog/#documentation_24","title":"Documentation","text":""},{"location":"changelog/#maintenance_44","title":"Maintenance","text":""},{"location":"changelog/#dependencies_55","title":"Dependencies","text":"15 changes - Bump tj-actions/changed-files from 18.7 to 19 @dependabot ([#830](https://github.com/paperless-ngx/paperless-ngx/pull/830)) - Bump asgiref from 3.5.0 to 3.5.1 @dependabot ([#867](https://github.com/paperless-ngx/paperless-ngx/pull/867)) - Bump jest from 27.5.1 to 28.0.3 in /src-ui @dependabot ([#860](https://github.com/paperless-ngx/paperless-ngx/pull/860)) - Bump @ng-bootstrap/ng-bootstrap from 12.1.0 to 12.1.1 in /src-ui @dependabot ([#861](https://github.com/paperless-ngx/paperless-ngx/pull/861)) - Bump @types/node from 17.0.27 to 17.0.29 in /src-ui @dependabot ([#833](https://github.com/paperless-ngx/paperless-ngx/pull/833)) - Bump @ng-bootstrap/ng-bootstrap from 12.0.2 to 12.1.0 in /src-ui @dependabot ([#834](https://github.com/paperless-ngx/paperless-ngx/pull/834)) - Bump pytest from 7.1.1 to 7.1.2 @dependabot ([#806](https://github.com/paperless-ngx/paperless-ngx/pull/806)) - Bump github/codeql-action from 1 to 2 @dependabot ([#792](https://github.com/paperless-ngx/paperless-ngx/pull/792)) - Bump imap-tools from 0.53.0 to 0.54.0 @dependabot ([#758](https://github.com/paperless-ngx/paperless-ngx/pull/758)) - Bump ocrmypdf from 13.4.2 to 13.4.3 @dependabot ([#757](https://github.com/paperless-ngx/paperless-ngx/pull/757)) - Bump importlib-resources from 5.6.0 to 5.7.1 @dependabot ([#756](https://github.com/paperless-ngx/paperless-ngx/pull/756)) - Bump tox from 3.24.5 to 3.25.0 @dependabot ([#692](https://github.com/paperless-ngx/paperless-ngx/pull/692)) - Bump cypress from 9.5.3 to 9.6.0 in /src-ui @dependabot ([#800](https://github.com/paperless-ngx/paperless-ngx/pull/800)) - Bump angular \\& tools to 13.3.4 or 13.3.3 [@shamoon](https://github.com/shamoon) ([#799](https://github.com/paperless-ngx/paperless-ngx/pull/799)) - Bump concurrently from 7.0.0 to 7.1.0 in /src-ui @dependabot ([#797](https://github.com/paperless-ngx/paperless-ngx/pull/797))"},{"location":"changelog/#paperless-ngx-170","title":"paperless-ngx 1.7.0","text":""},{"location":"changelog/#breaking-changes_8","title":"Breaking Changes","text":""},{"location":"changelog/#features_41","title":"Features","text":""},{"location":"changelog/#bug-fixes_110","title":"Bug Fixes","text":""},{"location":"changelog/#translation","title":"Translation","text":""},{"location":"changelog/#documentation_25","title":"Documentation","text":""},{"location":"changelog/#maintenance_45","title":"Maintenance","text":""},{"location":"changelog/#paperless-ngx-160","title":"paperless-ngx 1.6.0","text":"

This is the first release of the revived paperless-ngx project \ud83c\udf89. Thank you to everyone on the paperless-ngx team for your initiative and excellent teamwork!

Version 1.6.0 merges several pending PRs from jonaswinkler's repo and includes new feature updates and bug fixes. Major backend and UI changes include:

Known issues:

Thank you to the following people for their documentation updates, fixes, and comprehensive testing:

@m0veax, @a17t, @fignew, @muued, @bauerj, @isigmund, @denilsonsa, @mweimerskirch, @alexander-bauer, @apeltzer, @tribut, @yschroeder, @gador, @sAksham-Ar, @sbrunner, @philpagel, @davemachado, @2600box, @qcasey, @Nicarim, @kpj, @filcuk, @Timoms, @mattlamb99, @padraigkitterick, @ajkavanagh, @Tooa, @Unkn0wnCat, @pewter77, @stumpylog, @Toxix, @azapater, @jschpp

Another big thanks to the people who have contributed translations:

"},{"location":"changelog/#paperless-ng","title":"Paperless-ng","text":""},{"location":"changelog/#paperless-ng-150","title":"paperless-ng 1.5.0","text":"

Support for Python 3.6 was dropped.

"},{"location":"changelog/#paperless-ng-145","title":"paperless-ng 1.4.5","text":"

This is a maintenance release.

"},{"location":"changelog/#paperless-ng-144","title":"paperless-ng 1.4.4","text":""},{"location":"changelog/#paperless-ng-143","title":"paperless-ng 1.4.3","text":""},{"location":"changelog/#paperless-ng-142","title":"paperless-ng 1.4.2","text":""},{"location":"changelog/#paperless-ng-141","title":"paperless-ng 1.4.1","text":""},{"location":"changelog/#paperless-ng-140","title":"paperless-ng 1.4.0","text":"

Note

The changed to the full text searching require you to reindex your documents. The docker image does this automatically, you don't need to do anything. To do this, execute the document_index reindex management command (see Managing the document search index).

"},{"location":"changelog/#paperless-ng-132","title":"paperless-ng 1.3.2","text":""},{"location":"changelog/#paperless-ng-131","title":"paperless-ng 1.3.1","text":""},{"location":"changelog/#paperless-ng-130","title":"paperless-ng 1.3.0","text":"

This release contains new database migrations.

"},{"location":"changelog/#paperless-ng-121","title":"paperless-ng 1.2.1","text":""},{"location":"changelog/#paperless-ng-120","title":"paperless-ng 1.2.0","text":""},{"location":"changelog/#paperless-ng-114","title":"paperless-ng 1.1.4","text":""},{"location":"changelog/#paperless-ng-113","title":"paperless-ng 1.1.3","text":""},{"location":"changelog/#paperless-ng-112","title":"paperless-ng 1.1.2","text":""},{"location":"changelog/#paperless-ng-111","title":"paperless-ng 1.1.1","text":"

This release contains new database migrations.

"},{"location":"changelog/#paperless-ng-110","title":"paperless-ng 1.1.0","text":""},{"location":"changelog/#paperless-ng-100","title":"paperless-ng 1.0.0","text":"

Nothing special about this release, but since there are relatively few bug reports coming in, I think that this is reasonably stable.

"},{"location":"changelog/#paperless-ng-0914","title":"paperless-ng 0.9.14","text":"

Starting with this version, releases are getting built automatically. This release also comes with changes on how to install and update paperless.

"},{"location":"changelog/#paperless-ng-0913","title":"paperless-ng 0.9.13","text":""},{"location":"changelog/#paperless-ng-0912","title":"paperless-ng 0.9.12","text":""},{"location":"changelog/#paperless-ng-0911","title":"paperless-ng 0.9.11","text":""},{"location":"changelog/#paperless-ng-0910","title":"paperless-ng 0.9.10","text":"

Note

The bulk delete operations did not update the search index. Therefore, documents that you deleted remained in the index and caused the search to return messages about missing documents when searching. Further bulk operations will properly update the index.

However, this change is not retroactive: If you used the delete method of the bulk editor, you need to reindex your search index by running the management command document_index with the argument reindex.

"},{"location":"changelog/#paperless-ng-099","title":"paperless-ng 0.9.9","text":"

Christmas release!

"},{"location":"changelog/#paperless-ng-098","title":"paperless-ng 0.9.8","text":"

This release addresses two severe issues with the previous release.

"},{"location":"changelog/#paperless-ng-097","title":"paperless-ng 0.9.7","text":""},{"location":"changelog/#paperless-ng-096","title":"paperless-ng 0.9.6","text":"

This release focusses primarily on many small issues with the UI.

Note

The changes to the filename format will apply to newly added documents and changed documents. If you want all files to reflect these changes, execute the document_renamer management command.

"},{"location":"changelog/#paperless-ng-095","title":"paperless-ng 0.9.5","text":"

This release concludes the big changes I wanted to get rolled into paperless. The next releases before 1.0 will focus on fixing issues, primarily.

"},{"location":"changelog/#paperless-ng-094","title":"paperless-ng 0.9.4","text":""},{"location":"changelog/#paperless-ng-093","title":"paperless-ng 0.9.3","text":""},{"location":"changelog/#paperless-ng-092","title":"paperless-ng 0.9.2","text":""},{"location":"changelog/#paperless-ng-091","title":"paperless-ng 0.9.1","text":""},{"location":"changelog/#paperless-ng-090","title":"paperless-ng 0.9.0","text":""},{"location":"changelog/#paperless","title":"Paperless","text":""},{"location":"changelog/#270","title":"2.7.0","text":""},{"location":"changelog/#261","title":"2.6.1","text":""},{"location":"changelog/#260","title":"2.6.0","text":""},{"location":"changelog/#250","title":"2.5.0","text":""},{"location":"changelog/#240","title":"2.4.0","text":""},{"location":"changelog/#230","title":"2.3.0","text":""},{"location":"changelog/#221","title":"2.2.1","text":""},{"location":"changelog/#220","title":"2.2.0","text":""},{"location":"changelog/#210","title":"2.1.0","text":""},{"location":"changelog/#200","title":"2.0.0","text":"

This is a big release as we've changed a core-functionality of Paperless: we no longer encrypt files with GPG by default.

The reasons for this are many, but it boils down to that the encryption wasn't really all that useful, as files on-disk were still accessible so long as you had the key, and the key was most typically stored in the config file. In other words, your files are only as safe as the paperless user is. In addition to that, the contents of the documents were never encrypted, so important numbers etc. were always accessible simply by querying the database. Still, it was better than nothing, but the consensus from users appears to be that it was more an annoyance than anything else, so this feature is now turned off unless you explicitly set a passphrase in your config file.

"},{"location":"changelog/#migrating-from-1x","title":"Migrating from 1.x","text":"

Encryption isn't gone, it's just off for new users. So long as you have PAPERLESS_PASSPHRASE set in your config or your environment, Paperless should continue to operate as it always has. If however, you want to drop encryption too, you only need to do two things:

  1. Run ./manage.py migrate && ./manage.py change_storage_type gpg unencrypted. This will go through your entire database and Decrypt All The Things.
  2. Remove PAPERLESS_PASSPHRASE from your paperless.conf file, or simply stop declaring it in your environment.

Special thanks to erikarvstedt, matthewmoto, and mcronce who did the bulk of the work on this big change.

"},{"location":"changelog/#140","title":"1.4.0","text":""},{"location":"changelog/#130","title":"1.3.0","text":""},{"location":"changelog/#120","title":"1.2.0","text":""},{"location":"changelog/#110","title":"1.1.0","text":""},{"location":"changelog/#100","title":"1.0.0","text":""},{"location":"changelog/#080","title":"0.8.0","text":""},{"location":"changelog/#070","title":"0.7.0","text":""},{"location":"changelog/#060","title":"0.6.0","text":""},{"location":"changelog/#050","title":"0.5.0","text":""},{"location":"changelog/#041","title":"0.4.1","text":""},{"location":"changelog/#040","title":"0.4.0","text":""},{"location":"changelog/#036","title":"0.3.6","text":""},{"location":"changelog/#035","title":"0.3.5","text":""},{"location":"changelog/#034","title":"0.3.4","text":""},{"location":"changelog/#033","title":"0.3.3","text":""},{"location":"changelog/#032","title":"0.3.2","text":""},{"location":"changelog/#031","title":"0.3.1","text":""},{"location":"changelog/#030","title":"0.3.0","text":""},{"location":"changelog/#020","title":"0.2.0","text":""},{"location":"changelog/#011","title":"0.1.1","text":""},{"location":"changelog/#010","title":"0.1.0","text":""},{"location":"changelog/#006","title":"0.0.6","text":""},{"location":"changelog/#005","title":"0.0.5","text":""},{"location":"changelog/#004","title":"0.0.4","text":""},{"location":"changelog/#003","title":"0.0.3","text":""},{"location":"changelog/#002","title":"0.0.2","text":""},{"location":"changelog/#001","title":"0.0.1","text":""},{"location":"configuration/","title":"Configuration","text":""},{"location":"configuration/#configuration","title":"Configuration","text":"

Paperless provides a wide range of customizations. Depending on how you run paperless, these settings have to be defined in different places.

Certain configuration options may be set via the UI. This currently includes common OCR related settings and some frontend settings. If set, these will take preference over the settings via environment variables. If not set, the environment setting or applicable default will be utilized instead.

"},{"location":"configuration/#required-services","title":"Required services","text":""},{"location":"configuration/#redis-broker","title":"Redis Broker","text":""},{"location":"configuration/#PAPERLESS_REDIS","title":"PAPERLESS_REDIS=<url>","text":"

This is required for processing scheduled tasks such as email fetching, index optimization and for training the automatic document matcher.

More information on securing your Redis Instance.

Defaults to redis://localhost:6379.

"},{"location":"configuration/#PAPERLESS_REDIS_PREFIX","title":"PAPERLESS_REDIS_PREFIX=<prefix>","text":"

Prefix to be used in Redis for keys and channels. Useful for sharing one Redis server among multiple Paperless instances.

Defaults to no prefix.

"},{"location":"configuration/#database","title":"Database","text":"

By default, Paperless uses SQLite with a database stored at data/db.sqlite3. To switch to PostgreSQL or MariaDB, set PAPERLESS_DBHOST and optionally configure other database-related environment variables.

"},{"location":"configuration/#PAPERLESS_DBHOST","title":"PAPERLESS_DBHOST=<hostname>","text":"

If unset, Paperless uses SQLite by default.

Set PAPERLESS_DBHOST to switch to PostgreSQL or MariaDB instead.

"},{"location":"configuration/#PAPERLESS_DBENGINE","title":"PAPERLESS_DBENGINE=<engine_name>","text":"

Optional. Specifies the database engine to use when connecting to a remote database. Available options are postgresql and mariadb.

Defaults to postgresql if PAPERLESS_DBHOST is set.

Warning

Using MariaDB comes with some caveats. See MySQL Caveats.

"},{"location":"configuration/#PAPERLESS_DBPORT","title":"PAPERLESS_DBPORT=<port>","text":"

Port to use when connecting to PostgreSQL or MariaDB.

Default is 5432 for PostgreSQL and 3306 for MariaDB.

"},{"location":"configuration/#PAPERLESS_DBNAME","title":"PAPERLESS_DBNAME=<name>","text":"

Name of the database to connect to when using PostgreSQL or MariaDB.

Defaults to \"paperless\".

"},{"location":"configuration/#PAPERLESS_DBUSER","title":"PAPERLESS_DBUSER=<name>","text":"

Username for authenticating with the PostgreSQL or MariaDB database.

Defaults to \"paperless\".

"},{"location":"configuration/#PAPERLESS_DBPASS","title":"PAPERLESS_DBPASS=<password>","text":"

Password for the PostgreSQL or MariaDB database user.

Defaults to \"paperless\".

"},{"location":"configuration/#PAPERLESS_DBSSLMODE","title":"PAPERLESS_DBSSLMODE=<mode>","text":"

SSL mode to use when connecting to PostgreSQL or MariaDB.

See the official documentation about sslmode for PostgreSQL.

See the official documentation about sslmode for MySQL and MariaDB.

Note: SSL mode values differ between PostgreSQL and MariaDB.

Default is prefer for PostgreSQL and PREFERRED for MariaDB.

"},{"location":"configuration/#PAPERLESS_DBSSLROOTCERT","title":"PAPERLESS_DBSSLROOTCERT=<ca-path>","text":"

Path to the SSL root certificate used to verify the database server.

See the official documentation about sslmode for PostgreSQL. Changes the location of root.crt.

See the official documentation about sslmode for MySQL and MariaDB.

Defaults to unset, using the standard location in the home directory.

"},{"location":"configuration/#PAPERLESS_DBSSLCERT","title":"PAPERLESS_DBSSLCERT=<client-cert-path>","text":"

Path to the client SSL certificate used when connecting securely.

See the official documentation about sslmode for PostgreSQL.

See the official documentation about sslmode for MySQL and MariaDB.

Changes the location of postgresql.crt.

Defaults to unset, using the standard location in the home directory.

"},{"location":"configuration/#PAPERLESS_DBSSLKEY","title":"PAPERLESS_DBSSLKEY=<client-cert-key>","text":"

Path to the client SSL private key used when connecting securely.

See the official documentation about sslmode for PostgreSQL.

See the official documentation about sslmode for MySQL and MariaDB.

Changes the location of postgresql.key.

Defaults to unset, using the standard location in the home directory.

"},{"location":"configuration/#PAPERLESS_DB_TIMEOUT","title":"PAPERLESS_DB_TIMEOUT=<int>","text":"

Sets how long a database connection should wait before timing out.

For SQLite, this sets how long to wait if the database is locked. For PostgreSQL or MariaDB, this sets the connection timeout.

Defaults to unset, which uses Django\u2019s built-in defaults.

"},{"location":"configuration/#PAPERLESS_DB_POOLSIZE","title":"PAPERLESS_DB_POOLSIZE=<int>","text":"

Defines the maximum number of database connections to keep in the pool.

Only applies to PostgreSQL. This setting is ignored for other database engines.

The value must be greater than or equal to 1 to be used. Defaults to unset, which disables connection pooling.

Note

A small pool is typically sufficient \u2014 for example, a size of 4. Make sure your PostgreSQL server's max_connections setting is large enough to handle: (Paperless workers + Celery workers) \u00d7 pool size + safety margin For example, with 4 Paperless workers and 2 Celery workers, and a pool size of 4: (4 + 2) \u00d7 4 + 10 = 34 connections required.

"},{"location":"configuration/#PAPERLESS_DB_READ_CACHE_ENABLED","title":"PAPERLESS_DB_READ_CACHE_ENABLED=<bool>","text":"

Caches the database read query results into Redis. This can significantly improve application response times by caching database queries, at the cost of slightly increased memory usage.

Defaults to false.

Danger

Do not modify the database outside the application while it is running. This includes actions such as restoring a backup, upgrading the database, or performing manual inserts. All external modifications must be done only when the application is stopped. After making any such changes, you must invalidate the DB read cache using the invalidate_cachalot management command.

"},{"location":"configuration/#PAPERLESS_READ_CACHE_TTL","title":"PAPERLESS_READ_CACHE_TTL=<int>","text":"

Specifies how long (in seconds) read data should be cached.

Allowed values are between 1 (one second) and 31536000 (one year). Defaults to 3600 (one hour).

Warning

A high TTL increases memory usage over time. Memory may be used until end of TTL, even if the cache is invalidated with the invalidate_cachalot command.

In case of an out-of-memory (OOM) situation, Redis may stop accepting new data \u2014 including cache entries, scheduled tasks, and documents to consume. If your system has limited RAM, consider configuring a dedicated Redis instance for the read cache, with a memory limit and the eviction policy set to allkeys-lru. For more details, refer to the Redis eviction policy documentation, and see the PAPERLESS_READ_CACHE_REDIS_URL setting to specify a separate Redis broker.

"},{"location":"configuration/#PAPERLESS_READ_CACHE_REDIS_URL","title":"PAPERLESS_READ_CACHE_REDIS_URL=<url>","text":"

Defines the Redis instance used for the read cache.

Defaults to None.

Note

If this value is not set, the same Redis instance used for scheduled tasks will be used for caching as well.

"},{"location":"configuration/#optional-services","title":"Optional Services","text":""},{"location":"configuration/#tika","title":"Tika","text":"

Paperless can make use of Tika and Gotenberg for parsing and converting \"Office\" documents (such as \".doc\", \".xlsx\" and \".odt\"). Tika and Gotenberg are also needed to allow parsing of E-Mails (.eml).

If you wish to use this, you must provide a Tika server and a Gotenberg server, configure their endpoints, and enable the feature.

"},{"location":"configuration/#PAPERLESS_TIKA_ENABLED","title":"PAPERLESS_TIKA_ENABLED=<bool>","text":"

Enable (or disable) the Tika parser.

Defaults to false.

"},{"location":"configuration/#PAPERLESS_TIKA_ENDPOINT","title":"PAPERLESS_TIKA_ENDPOINT=<url>","text":"

Set the endpoint URL where Paperless can reach your Tika server.

Defaults to \"http://localhost:9998\".

"},{"location":"configuration/#PAPERLESS_TIKA_GOTENBERG_ENDPOINT","title":"PAPERLESS_TIKA_GOTENBERG_ENDPOINT=<url>","text":"

Set the endpoint URL where Paperless can reach your Gotenberg server.

Defaults to \"http://localhost:3000\".

If you run paperless on docker, you can add those services to the Docker Compose file (see the provided docker-compose.sqlite-tika.yml file for reference).

Add all three configuration parameters to your configuration. If using Docker, this may be the environment key of the webserver or a docker-compose.env file. Bare metal installations may have a .conf file containing the configuration parameters. Be sure to use the correct format and watch out for indentation if editing the YAML file.

"},{"location":"configuration/#email-parsing","title":"Email Parsing","text":""},{"location":"configuration/#PAPERLESS_EMAIL_PARSE_DEFAULT_LAYOUT","title":"PAPERLESS_EMAIL_PARSE_DEFAULT_LAYOUT=<int>","text":"

The default layout to use for emails that are consumed as documents. Must be one of the integer choices below. Note that mail rules can specify this setting, thus this fallback is used for the default selection and for .eml files consumed by other means.

"},{"location":"configuration/#paths-and-folders","title":"Paths and folders","text":""},{"location":"configuration/#PAPERLESS_CONSUMPTION_DIR","title":"PAPERLESS_CONSUMPTION_DIR=<path>","text":"

This is where your documents should go to be consumed. Make sure that it exists and that the user running the paperless service can read/write its contents before you start Paperless.

Don't change this when using docker, as it only changes the path within the container. Change the local consumption directory in the docker-compose.yml file instead.

Defaults to \"../consume/\", relative to the \"src\" directory.

"},{"location":"configuration/#PAPERLESS_DATA_DIR","title":"PAPERLESS_DATA_DIR=<path>","text":"

This is where paperless stores all its data (search index, SQLite database, classification model, etc).

Defaults to \"../data/\", relative to the \"src\" directory.

"},{"location":"configuration/#PAPERLESS_EMPTY_TRASH_DIR","title":"PAPERLESS_EMPTY_TRASH_DIR=<path>","text":"

When documents are deleted (e.g. after emptying the trash) the original files will be moved here instead of being removed from the filesystem. Only the original version is kept.

This must be writeable by the user running paperless. When running inside docker, ensure that this path is within a permanent volume (such as \"../media/trash\") so it won't get lost on upgrades.

Note that the directory must exist prior to using this setting.

Defaults to empty (i.e. really delete files).

This setting was previously named PAPERLESS_TRASH_DIR.

"},{"location":"configuration/#PAPERLESS_MEDIA_ROOT","title":"PAPERLESS_MEDIA_ROOT=<path>","text":"

This is where your documents and thumbnails are stored.

You can set this and PAPERLESS_DATA_DIR to the same folder to have paperless store all its data within the same volume.

Defaults to \"../media/\", relative to the \"src\" directory.

"},{"location":"configuration/#PAPERLESS_STATICDIR","title":"PAPERLESS_STATICDIR=<path>","text":"

Override the default STATIC_ROOT here. This is where all static files created using \"collectstatic\" manager command are stored.

Unless you're doing something fancy, there is no need to override this. If this is changed, you may need to run collectstatic again.

Defaults to \"../static/\", relative to the \"src\" directory.

"},{"location":"configuration/#PAPERLESS_FILENAME_FORMAT","title":"PAPERLESS_FILENAME_FORMAT=<format>","text":"

Changes the filenames paperless uses to store documents in the media directory. See File name handling for details.

Default is none, which disables this feature.

"},{"location":"configuration/#PAPERLESS_FILENAME_FORMAT_REMOVE_NONE","title":"PAPERLESS_FILENAME_FORMAT_REMOVE_NONE=<bool>","text":"

Tells paperless to replace placeholders in PAPERLESS_FILENAME_FORMAT that would resolve to 'none' to be omitted from the resulting filename. This also holds true for directory names. See File name handling for details.

Defaults to false which disables this feature.

"},{"location":"configuration/#PAPERLESS_LOGGING_DIR","title":"PAPERLESS_LOGGING_DIR=<path>","text":"

This is where paperless will store log files.

Defaults to PAPERLESS_DATA_DIR/log/.

"},{"location":"configuration/#PAPERLESS_NLTK_DIR","title":"PAPERLESS_NLTK_DIR=<path>","text":"This is where paperless will search for the data required for NLTK processing, if you are using it. If you are using the Docker image, this should not be changed, as the data is included in the image already.

Previously, the location defaulted to PAPERLESS_DATA_DIR/nltk. Unless you are using this in a bare metal install or other setup, this folder is no longer needed and can be removed manually.

Defaults to /usr/share/nltk_data

"},{"location":"configuration/#PAPERLESS_MODEL_FILE","title":"PAPERLESS_MODEL_FILE=<path>","text":"

This is where paperless will store the classification model.

Defaults to PAPERLESS_DATA_DIR/classification_model.pickle.

"},{"location":"configuration/#logging","title":"Logging","text":""},{"location":"configuration/#PAPERLESS_LOGROTATE_MAX_SIZE","title":"PAPERLESS_LOGROTATE_MAX_SIZE=<num>","text":"

Maximum file size for log files before they are rotated, in bytes.

Defaults to 1 MiB.

"},{"location":"configuration/#PAPERLESS_LOGROTATE_MAX_BACKUPS","title":"PAPERLESS_LOGROTATE_MAX_BACKUPS=<num>","text":"

Number of rotated log files to keep.

Defaults to 20.

"},{"location":"configuration/#hosting-and-security","title":"Hosting & Security","text":""},{"location":"configuration/#PAPERLESS_SECRET_KEY","title":"PAPERLESS_SECRET_KEY=<key>","text":"

Paperless uses this to make session tokens. If you expose paperless on the internet, you need to change this, since the default secret is well known.

Use any sequence of characters. The more, the better. You don't need to remember this. Just face-roll your keyboard.

Default is listed in the file src/paperless/settings.py.

"},{"location":"configuration/#PAPERLESS_URL","title":"PAPERLESS_URL=<url>","text":"

This setting can be used to set the three options below (ALLOWED_HOSTS, CORS_ALLOWED_HOSTS and CSRF_TRUSTED_ORIGINS). If the other options are set the values will be combined with this one. Do not include a trailing slash. E.g. https://paperless.domain.com

Defaults to empty string, leaving the other settings unaffected.

Note

This value cannot contain a path (e.g. domain.com/path), even if you are installing paperless-ngx at a subpath.

"},{"location":"configuration/#PAPERLESS_CSRF_TRUSTED_ORIGINS","title":"PAPERLESS_CSRF_TRUSTED_ORIGINS=<comma-separated-list>","text":"

A list of trusted origins for unsafe requests (e.g. POST). As of Django 4.0 this is required to access the Django admin via the web. See the Django project documentation on the settings

Can also be set using PAPERLESS_URL (see above).

Defaults to empty string, which does not add any origins to the trusted list.

"},{"location":"configuration/#PAPERLESS_ALLOWED_HOSTS","title":"PAPERLESS_ALLOWED_HOSTS=<comma-separated-list>","text":"

If you're planning on putting Paperless on the open internet, then you really should set this value to the domain name you're using. Failing to do so leaves you open to HTTP host header attacks. You can read more about this in the Django project's documentation

Just remember that this is a comma-separated list, so \"example.com\" is fine, as is \"example.com,www.example.com\", but NOT \" example.com\" or \"example.com,\"

Can also be set using PAPERLESS_URL (see above).

\"localhost\" is always allowed for docker healthcheck

Defaults to \"*\", which is all hosts.

"},{"location":"configuration/#PAPERLESS_CORS_ALLOWED_HOSTS","title":"PAPERLESS_CORS_ALLOWED_HOSTS=<comma-separated-list>","text":"

You need to add your servers to the list of allowed hosts that can do CORS calls. Set this to your public domain name.

Can also be set using PAPERLESS_URL (see above).

Defaults to \"http://localhost:8000\".

"},{"location":"configuration/#PAPERLESS_TRUSTED_PROXIES","title":"PAPERLESS_TRUSTED_PROXIES=<comma-separated-list>","text":"

This may be needed to prevent IP address spoofing if you are using e.g. fail2ban with log entries for failed authorization attempts. Value should be IP address(es).

Defaults to empty string.

"},{"location":"configuration/#PAPERLESS_FORCE_SCRIPT_NAME","title":"PAPERLESS_FORCE_SCRIPT_NAME=<path>","text":"

To host paperless under a subpath url like example.com/paperless you set this value to /paperless. No trailing slash!

Defaults to none, which hosts paperless at \"/\".

"},{"location":"configuration/#PAPERLESS_STATIC_URL","title":"PAPERLESS_STATIC_URL=<path>","text":"

Override the STATIC_URL here. Unless you're hosting Paperless off a specific path like /paperless/, you probably don't need to change this. If you do change it, be sure to include the trailing slash.

Defaults to \"/static/\".

Note

When hosting paperless behind a reverse proxy like Traefik or Nginx at a subpath e.g. example.com/paperlessngx you will also need to set PAPERLESS_FORCE_SCRIPT_NAME (see above).

"},{"location":"configuration/#PAPERLESS_AUTO_LOGIN_USERNAME","title":"PAPERLESS_AUTO_LOGIN_USERNAME=<username>","text":"

Specify a username here so that paperless will automatically perform login with the selected user.

Danger

Do not use this when exposing paperless on the internet. There are no checks in place that would prevent you from doing this.

Defaults to none, which disables this feature.

"},{"location":"configuration/#PAPERLESS_ADMIN_USER","title":"PAPERLESS_ADMIN_USER=<username>","text":"

If this environment variable is specified, Paperless automatically creates a superuser with the provided username at start. This is useful in cases where you can not run the createsuperuser command separately, such as Kubernetes or AWS ECS.

Requires PAPERLESS_ADMIN_PASSWORD be set.

Note

This will not change an existing [super]user's password, nor will it recreate a user that already exists. You can leave this throughout the lifecycle of the containers.

"},{"location":"configuration/#PAPERLESS_ADMIN_MAIL","title":"PAPERLESS_ADMIN_MAIL=<email>","text":"

(Optional) Specify superuser email address. Only used when PAPERLESS_ADMIN_USER is set.

Defaults to root@localhost.

"},{"location":"configuration/#PAPERLESS_ADMIN_PASSWORD","title":"PAPERLESS_ADMIN_PASSWORD=<password>","text":"Only used when PAPERLESS_ADMIN_USER is set. This will be the password of the automatically created superuser."},{"location":"configuration/#PAPERLESS_COOKIE_PREFIX","title":"PAPERLESS_COOKIE_PREFIX=<str>","text":"

Specify a prefix that is added to the cookies used by paperless to identify the currently logged in user. This is useful for when you're running two instances of paperless on the same host.

After changing this, you will have to login again.

Defaults to \"\", which does not alter the cookie names.

"},{"location":"configuration/#PAPERLESS_ENABLE_HTTP_REMOTE_USER","title":"PAPERLESS_ENABLE_HTTP_REMOTE_USER=<bool>","text":"

Allows authentication via HTTP_REMOTE_USER which is used by some SSO applications.

Warning

This will allow authentication by simply adding a Remote-User: <username> header to a request. Use with care! You especially must ensure that any such header is not passed from external requests to your reverse-proxy to paperless (that would effectively bypass all authentication).

If you're exposing paperless to the internet directly (i.e. without a reverse proxy), do not use this.

Also see the warning in the official documentation.

Defaults to \"false\" which disables this feature.

"},{"location":"configuration/#PAPERLESS_ENABLE_HTTP_REMOTE_USER_API","title":"PAPERLESS_ENABLE_HTTP_REMOTE_USER_API=<bool>","text":"

Allows authentication via HTTP_REMOTE_USER directly against the API

Warning

See the warning above about securing your installation when using remote user header authentication. This setting is separate from PAPERLESS_ENABLE_HTTP_REMOTE_USER to avoid introducing a security vulnerability to existing reverse proxy setups. As above, ensure that your reverse proxy does not simply pass the Remote-User header from the internet to paperless.

Defaults to \"false\" which disables this feature.

"},{"location":"configuration/#PAPERLESS_HTTP_REMOTE_USER_HEADER_NAME","title":"PAPERLESS_HTTP_REMOTE_USER_HEADER_NAME=<str>","text":"

If \"PAPERLESS_ENABLE_HTTP_REMOTE_USER\" or PAPERLESS_ENABLE_HTTP_REMOTE_USER_API are enabled, this property allows to customize the name of the HTTP header from which the authenticated username is extracted. Values are in terms of HttpRequest.META. Thus, the configured value must start with HTTP* followed by the normalized actual header name.

Defaults to \"HTTP_REMOTE_USER\".

"},{"location":"configuration/#PAPERLESS_LOGOUT_REDIRECT_URL","title":"PAPERLESS_LOGOUT_REDIRECT_URL=<str>","text":"

URL to redirect the user to after a logout. This can be used together with PAPERLESS_ENABLE_HTTP_REMOTE_USER and SSO to redirect the user back to the SSO application's logout page to complete the logout process.

Defaults to None, which disables this feature.

"},{"location":"configuration/#PAPERLESS_USE_X_FORWARD_HOST","title":"PAPERLESS_USE_X_FORWARD_HOST=<bool>","text":"

Configures the Django setting USE_X_FORWARDED_HOST which may be needed for hosting behind a proxy.

Defaults to False

"},{"location":"configuration/#PAPERLESS_USE_X_FORWARD_PORT","title":"PAPERLESS_USE_X_FORWARD_PORT=<bool>","text":"

Configures the Django setting USE_X_FORWARDED_PORT which may be needed for hosting behind a proxy.

Defaults to False

"},{"location":"configuration/#PAPERLESS_PROXY_SSL_HEADER","title":"PAPERLESS_PROXY_SSL_HEADER=<json-list>","text":"

Configures the Django setting SECURE_PROXY_SSL_HEADER which may be needed for hosting behind a proxy. The two values in the list will form the tuple of HTTP header/value expected by Django, eg '[\"HTTP_X_FORWARDED_PROTO\", \"https\"]'.

Defaults to None

Warning

Settings this value has security implications. Read the Django documentation and be sure you understand its usage before setting it.

"},{"location":"configuration/#PAPERLESS_EMAIL_CERTIFICATE_LOCATION","title":"PAPERLESS_EMAIL_CERTIFICATE_LOCATION=<path>","text":"

Configures an additional SSL certificate file containing a certificate or certificate chain which should be trusted for validating SSL connections against mail providers. This is for use with self-signed certificates against local IMAP servers.

Defaults to None.

Warning

Settings this value has security implications for the security of your email. Understand what it does and be sure you need to before setting.

"},{"location":"configuration/#authentication","title":"Authentication & SSO","text":""},{"location":"configuration/#PAPERLESS_ACCOUNT_ALLOW_SIGNUPS","title":"PAPERLESS_ACCOUNT_ALLOW_SIGNUPS=<bool>","text":"

Allow users to signup for a new Paperless-ngx account.

Defaults to False

"},{"location":"configuration/#PAPERLESS_ACCOUNT_DEFAULT_GROUPS","title":"PAPERLESS_ACCOUNT_DEFAULT_GROUPS=<comma-separated-list>","text":"

A list of group names that users will be added to when they sign up for a new account. Groups listed here must already exist.

Defaults to None

"},{"location":"configuration/#PAPERLESS_SOCIALACCOUNT_PROVIDERS","title":"PAPERLESS_SOCIALACCOUNT_PROVIDERS=<json>","text":"

This variable is used to setup login and signup via social account providers which are compatible with django-allauth. See the corresponding django-allauth documentation for a list of provider configurations. You will also need to include the relevant Django 'application' inside the PAPERLESS_APPS setting to activate that specific authentication provider (e.g. allauth.socialaccount.providers.openid_connect for the OIDC Connect provider).

Defaults to None, which does not enable any third party authentication systems.

"},{"location":"configuration/#PAPERLESS_SOCIAL_AUTO_SIGNUP","title":"PAPERLESS_SOCIAL_AUTO_SIGNUP=<bool>","text":"

Attempt to signup the user using retrieved email, username etc from the third party authentication system. See the corresponding django-allauth documentation

Defaults to False

"},{"location":"configuration/#PAPERLESS_SOCIALACCOUNT_ALLOW_SIGNUPS","title":"PAPERLESS_SOCIALACCOUNT_ALLOW_SIGNUPS=<bool>","text":"

Allow users to signup for a new Paperless-ngx account using any setup third party authentication systems.

Defaults to True

"},{"location":"configuration/#PAPERLESS_SOCIAL_ACCOUNT_SYNC_GROUPS","title":"PAPERLESS_SOCIAL_ACCOUNT_SYNC_GROUPS=<bool>","text":"Sync groups from the third party authentication system (e.g. OIDC) to Paperless-ngx. When enabled, users will be added or removed from groups based on their group membership in the third party authentication system. Groups must already exist in Paperless-ngx and have the same name as in the third party authentication system. Groups are updated upon logging in via the third party authentication system, see the corresponding django-allauth documentation.

In order to pass groups from the authentication system you will need to update your PAPERLESS_SOCIALACCOUNT_PROVIDERS setting by adding a top-level \"SCOPES\" setting which includes \"groups\", e.g.:

{\"openid_connect\":{\"SCOPE\": [\"openid\",\"profile\",\"email\",\"groups\"]...\n

Defaults to False

"},{"location":"configuration/#PAPERLESS_SOCIAL_ACCOUNT_DEFAULT_GROUPS","title":"PAPERLESS_SOCIAL_ACCOUNT_DEFAULT_GROUPS=<comma-separated-list>","text":"

A list of group names that users who signup via social accounts will be added to upon signup. Groups listed here must already exist. If both the PAPERLESS_ACCOUNT_DEFAULT_GROUPS setting and this setting are used, the user will be added to both sets of groups.

Defaults to None

"},{"location":"configuration/#PAPERLESS_ACCOUNT_DEFAULT_HTTP_PROTOCOL","title":"PAPERLESS_ACCOUNT_DEFAULT_HTTP_PROTOCOL=<string>","text":"

The protocol used when generating URLs, e.g. login callback URLs. See the corresponding django-allauth documentation

Defaults to 'https'

"},{"location":"configuration/#PAPERLESS_ACCOUNT_EMAIL_VERIFICATION","title":"PAPERLESS_ACCOUNT_EMAIL_VERIFICATION=<string>","text":"

Determines whether email addresses are verified during signup (as performed by Django allauth). See the relevant paperless settings and the allauth docs

Defaults to 'optional'

Note

If you do not have a working email server set up this will be set to 'none'.

"},{"location":"configuration/#PAPERLESS_ACCOUNT_EMAIL_UNKNOWN_ACCOUNTS","title":"PAPERLESS_ACCOUNT_EMAIL_UNKNOWN_ACCOUNTS=<bool>","text":"

See the relevant django-allauth documentation

Defaults to True (from allauth)

"},{"location":"configuration/#PAPERLESS_DISABLE_REGULAR_LOGIN","title":"PAPERLESS_DISABLE_REGULAR_LOGIN=<bool>","text":"

Disables the regular frontend username / password login, i.e. once you have setup SSO. Note that this setting does not disable the Django admin login nor logging in with local credentials via the API. To prevent access to the Django admin, consider blocking /admin/ in your web server or reverse proxy configuration.

You can optionally also automatically redirect users to the SSO login with PAPERLESS_REDIRECT_LOGIN_TO_SSO

Defaults to False

"},{"location":"configuration/#PAPERLESS_REDIRECT_LOGIN_TO_SSO","title":"PAPERLESS_REDIRECT_LOGIN_TO_SSO=<bool>","text":"

When this setting is enabled users will automatically be redirected (using javascript) to the first SSO provider login. You may still want to disable the frontend login form for clarity.

Defaults to False

"},{"location":"configuration/#PAPERLESS_ACCOUNT_SESSION_REMEMBER","title":"PAPERLESS_ACCOUNT_SESSION_REMEMBER=<bool>","text":"

If false, sessions will expire at browser close, if true will use PAPERLESS_SESSION_COOKIE_AGE for expiration. See the corresponding django-allauth documentation

Defaults to True

"},{"location":"configuration/#PAPERLESS_SESSION_COOKIE_AGE","title":"PAPERLESS_SESSION_COOKIE_AGE=<int>","text":"

Login session cookie expiration. Applies if PAPERLESS_ACCOUNT_SESSION_REMEMBER is enabled. See the corresponding django documentation

Defaults to 1209600 (2 weeks)

"},{"location":"configuration/#ocr","title":"OCR settings","text":"

Paperless uses OCRmyPDF for performing OCR on documents and images. Paperless uses sensible defaults for most settings, but all of them can be configured to your needs.

"},{"location":"configuration/#PAPERLESS_OCR_LANGUAGE","title":"PAPERLESS_OCR_LANGUAGE=<lang>","text":"

Customize the language that paperless will attempt to use when parsing documents.

It should be a 3-letter code, see the list of languages Tesseract supports.

Set this to the language most of your documents are written in.

This can be a combination of multiple languages such as deu+eng, in which case Tesseract will use whatever language matches best. Keep in mind that Tesseract uses much more CPU time with multiple languages enabled.

If you are including languages that are not installed by default, you will need to also set PAPERLESS_OCR_LANGUAGES for docker deployments or install the tesseract language packages manually for bare metal installations.

Defaults to \"eng\".

Note

If your language contains a '-' such as chi-sim, you must use chi_sim.

"},{"location":"configuration/#PAPERLESS_OCR_MODE","title":"PAPERLESS_OCR_MODE=<mode>","text":"

Tell paperless when and how to perform ocr on your documents. Three modes are available:

The default is skip, which only performs OCR when necessary and always creates archived documents.

Read more about this in the OCRmyPDF documentation.

"},{"location":"configuration/#PAPERLESS_OCR_SKIP_ARCHIVE_FILE","title":"PAPERLESS_OCR_SKIP_ARCHIVE_FILE=<mode>","text":"

Specify when you would like paperless to skip creating an archived version of your documents. This is useful if you don't want to have two almost-identical versions of your documents in the media folder.

The default is never.

"},{"location":"configuration/#PAPERLESS_OCR_CLEAN","title":"PAPERLESS_OCR_CLEAN=<mode>","text":"

Tells paperless to use unpaper to clean any input document before sending it to tesseract. This uses more resources, but generally results in better OCR results. The following modes are available:

Defaults to clean.

Note

clean-final is incompatible with ocr mode redo. When both clean-final and the ocr mode redo is configured, clean is used instead.

"},{"location":"configuration/#PAPERLESS_OCR_DESKEW","title":"PAPERLESS_OCR_DESKEW=<bool>","text":"

Tells paperless to correct skewing (slight rotation of input images mainly due to improper scanning)

Defaults to true, which enables this feature.

Note

Deskewing is incompatible with ocr mode redo. Deskewing will get disabled automatically if redo is used as the ocr mode.

"},{"location":"configuration/#PAPERLESS_OCR_ROTATE_PAGES","title":"PAPERLESS_OCR_ROTATE_PAGES=<bool>","text":"

Tells paperless to correct page rotation (90\u00b0, 180\u00b0 and 270\u00b0 rotation).

If you notice that paperless is not rotating incorrectly rotated pages (or vice versa), try adjusting the threshold up or down (see below).

Defaults to true, which enables this feature.

"},{"location":"configuration/#PAPERLESS_OCR_ROTATE_PAGES_THRESHOLD","title":"PAPERLESS_OCR_ROTATE_PAGES_THRESHOLD=<num>","text":"

Adjust the threshold for automatic page rotation by PAPERLESS_OCR_ROTATE_PAGES. This is an arbitrary value reported by tesseract. \"15\" is a very conservative value, whereas \"2\" is a very aggressive option and will often result in correctly rotated pages being rotated as well.

Defaults to \"12\".

"},{"location":"configuration/#PAPERLESS_OCR_OUTPUT_TYPE","title":"PAPERLESS_OCR_OUTPUT_TYPE=<type>","text":"

Specify the the type of PDF documents that paperless should produce.

If not specified, pdfa is used. Remember that paperless also keeps the original input file as well as the archived version.

"},{"location":"configuration/#PAPERLESS_OCR_PAGES","title":"PAPERLESS_OCR_PAGES=<num>","text":"

Tells paperless to use only the specified amount of pages for OCR. Documents with less than the specified amount of pages get OCR'ed completely.

Specifying 1 here will only use the first page.

The value must be greater than or equal to 1 to be used.

When combined with PAPERLESS_OCR_MODE=redo or PAPERLESS_OCR_MODE=force, paperless will not modify any text it finds on excluded pages and copy it verbatim.

Defaults to unset, which disables this feature and always uses all pages.

"},{"location":"configuration/#PAPERLESS_OCR_IMAGE_DPI","title":"PAPERLESS_OCR_IMAGE_DPI=<num>","text":"

Paperless will OCR any images you put into the system and convert them into PDF documents. This is useful if your scanner produces images. In order to do so, paperless needs to know the DPI of the image. Most images from scanners will have this information embedded and paperless will detect and use that information. In case this fails, it uses this value as a fallback.

Set this to the DPI your scanner produces images at.

Defaults to unset, which will automatically calculate image DPI so that the produced PDF documents are A4 sized.

"},{"location":"configuration/#PAPERLESS_OCR_MAX_IMAGE_PIXELS","title":"PAPERLESS_OCR_MAX_IMAGE_PIXELS=<num>","text":"

Paperless will raise a warning when OCRing images which are over this limit and will not OCR images which are more than twice this limit. Note this does not prevent the document from being consumed, but could result in missing text content.

If unset, will default to the value determined by Pillow.

Setting this value to 0 will entirely disable the limit. See the below warning.

Note

Increasing this limit could cause Paperless to consume additional resources when consuming a file. Be sure you have sufficient system resources.

Warning

The limit is intended to prevent malicious files from consuming system resources and causing crashes and other errors. Only change this value if you are certain your documents are not malicious and you need the text which was not OCRed

"},{"location":"configuration/#PAPERLESS_OCR_COLOR_CONVERSION_STRATEGY","title":"PAPERLESS_OCR_COLOR_CONVERSION_STRATEGY=<RGB>","text":"

Controls the Ghostscript color conversion strategy when creating the archive file. This setting will only be utilized if the output is a version of PDF/A.

Valid options are CMYK, Gray, LeaveColorUnchanged, RGB or UseDeviceIndependentColor.

You can find more on the settings here in the Ghostscript documentation.

Warning

Utilizing some of the options may result in errors when creating archive files from PDFs.

"},{"location":"configuration/#PAPERLESS_OCR_USER_ARGS","title":"PAPERLESS_OCR_USER_ARGS=<json>","text":"

OCRmyPDF offers many more options. Use this parameter to specify any additional arguments you wish to pass to OCRmyPDF. Since Paperless uses the API of OCRmyPDF, you have to specify these in a format that can be passed to the API. See the API reference of OCRmyPDF for valid parameters. All command line options are supported, but they use underscores instead of dashes.

Warning

Paperless has been tested to work with the OCR options provided above. There are many options that are incompatible with each other, so specifying invalid options may prevent paperless from consuming any documents. Use with caution!

Specify arguments as a JSON dictionary. Keep note of lower case booleans and double quoted parameter names and strings. Examples:

{\"deskew\": true, \"optimize\": 3, \"unpaper_args\": \"--pre-rotate 90\"}\n
"},{"location":"configuration/#software_tweaks","title":"Software tweaks","text":""},{"location":"configuration/#PAPERLESS_TASK_WORKERS","title":"PAPERLESS_TASK_WORKERS=<num>","text":"

Paperless does multiple things in the background: Maintain the search index, maintain the automatic matching algorithm, check emails, consume documents, etc. This variable specifies how many things it will do in parallel.

Defaults to 1

"},{"location":"configuration/#PAPERLESS_THREADS_PER_WORKER","title":"PAPERLESS_THREADS_PER_WORKER=<num>","text":"

Furthermore, paperless uses multiple threads when consuming documents to speed up OCR. This variable specifies how many pages paperless will process in parallel on a single document.

Warning

Ensure that the product

PAPERLESS_TASK_WORKERS * PAPERLESS_THREADS_PER_WORKER

does not exceed your CPU core count or else paperless will be extremely slow. If you want paperless to process many documents in parallel, choose a high worker count. If you want paperless to process very large documents faster, use a higher thread per worker count.

If unset, paperless uses max(floor(cpu_count / PAPERLESS_TASK_WORKERS), 1) threads per worker. The idea behind this is that as long as there are enough cores, the total number of threads should less than or equal to the total number of (logical) CPU cores.

"},{"location":"configuration/#PAPERLESS_WORKER_TIMEOUT","title":"PAPERLESS_WORKER_TIMEOUT=<num>","text":"Machines with few cores or weak ones might not be able to finish OCR on large documents within the default 1800 seconds. So extending this timeout may prove to be useful on weak hardware setups."},{"location":"configuration/#PAPERLESS_TIME_ZONE","title":"PAPERLESS_TIME_ZONE=<timezone>","text":"

Set the time zone here. See more details on why and how to set it in the Django project documentation for details on how to set it.

Defaults to UTC.

"},{"location":"configuration/#PAPERLESS_ENABLE_NLTK","title":"PAPERLESS_ENABLE_NLTK=<bool>","text":"Enables or disables the advanced natural language processing used during automatic classification. If disabled, paperless will still perform some basic text pre-processing before matching.

See also PAPERLESS_NLTK_DIR.

Defaults to 1.

"},{"location":"configuration/#PAPERLESS_DATE_PARSER_LANGUAGES","title":"PAPERLESS_DATE_PARSER_LANGUAGES=<lang>","text":"

Specifies which language Paperless should use when parsing dates from documents.

This should be a language code supported by the dateparser library,\nfor example: \"en\", or a combination such as \"en+de\".\nLocales are also supported (e.g., \"en-AU\").\nMultiple languages can be combined using \"+\", for example: \"en+de\" or \"en-AU+de\".\nFor valid values, refer to the list of supported languages and locales in the [dateparser documentation](https://dateparser.readthedocs.io/en/latest/supported_locales.html).\n\nSet this to match the languages in which most of your documents are written.\nIf not set, Paperless will attempt to infer the language(s) from the OCR configuration (`PAPERLESS_OCR_LANGUAGE`).\n

Note

This format differs from the PAPERLESS_OCR_LANGUAGE setting, which uses ISO 639-2 codes (3 letters, e.g., \"eng+deu\" for Tesseract OCR).

"},{"location":"configuration/#PAPERLESS_EMAIL_TASK_CRON","title":"PAPERLESS_EMAIL_TASK_CRON=<cron expression>","text":"Configures the scheduled email fetching frequency. The value should be a valid crontab(5) expression describing when to run.

If set to the string \"disable\", no emails will be fetched automatically.

Defaults to */10 * * * * or every ten minutes.

"},{"location":"configuration/#PAPERLESS_TRAIN_TASK_CRON","title":"PAPERLESS_TRAIN_TASK_CRON=<cron expression>","text":"Configures the scheduled automatic classifier training frequency. The value should be a valid crontab(5) expression describing when to run.

If set to the string \"disable\", the classifier will not be trained automatically.

Defaults to 5 */1 * * * or every hour at 5 minutes past the hour.

"},{"location":"configuration/#PAPERLESS_INDEX_TASK_CRON","title":"PAPERLESS_INDEX_TASK_CRON=<cron expression>","text":"Configures the scheduled search index update frequency. The value should be a valid crontab(5) expression describing when to run.

If set to the string \"disable\", the search index will not be automatically updated.

Defaults to 0 0 * * * or daily at midnight.

"},{"location":"configuration/#PAPERLESS_SANITY_TASK_CRON","title":"PAPERLESS_SANITY_TASK_CRON=<cron expression>","text":"Configures the scheduled sanity checker frequency.

If set to the string \"disable\", the sanity checker will not run automatically.

Defaults to 30 0 * * sun or Sunday at 30 minutes past midnight.

"},{"location":"configuration/#PAPERLESS_ENABLE_COMPRESSION","title":"PAPERLESS_ENABLE_COMPRESSION=<bool>","text":"Enables compression of the responses from the webserver.

Defaults to 1, enabling compression.

Note

If you are using a proxy such as nginx, it is likely more efficient to enable compression in your proxy configuration rather than the webserver

"},{"location":"configuration/#PAPERLESS_CONVERT_MEMORY_LIMIT","title":"PAPERLESS_CONVERT_MEMORY_LIMIT=<num>","text":"

On smaller systems, or even in the case of Very Large Documents, the consumer may explode, complaining about how it's \"unable to extend pixel cache\". In such cases, try setting this to a reasonably low value, like 32. The default is to use whatever is necessary to do everything without writing to disk, and units are in megabytes.

For more information on how to use this value, you should search the web for \"MAGICK_MEMORY_LIMIT\".

Defaults to 0, which disables the limit.

"},{"location":"configuration/#PAPERLESS_CONVERT_TMPDIR","title":"PAPERLESS_CONVERT_TMPDIR=<path>","text":"

Similar to the memory limit, if you've got a small system and your OS mounts /tmp as tmpfs, you should set this to a path that's on a physical disk, like /home/your_user/tmp or something. ImageMagick will use this as scratch space when crunching through very large documents.

For more information on how to use this value, you should search the web for \"MAGICK_TMPDIR\".

Default is none, which disables the temporary directory.

"},{"location":"configuration/#PAPERLESS_APPS","title":"PAPERLESS_APPS=<string>","text":"

A comma-separated list of Django apps to be included in Django's INSTALLED_APPS. This setting should be used with caution!

Defaults to None, which does not add any additional apps.

"},{"location":"configuration/#PAPERLESS_MAX_IMAGE_PIXELS","title":"PAPERLESS_MAX_IMAGE_PIXELS=<number>","text":"Configures the maximum size of an image PIL will allow to load without warning or error.

If unset, will default to the value determined by Pillow.

Defaults to None, which does change the limit

Warning

This limit is designed to prevent denial of service from malicious files. It should only be raised or disabled in certain circumstances and with great care.

"},{"location":"configuration/#consume_config","title":"Document Consumption","text":""},{"location":"configuration/#PAPERLESS_CONSUMER_DISABLE","title":"PAPERLESS_CONSUMER_DISABLE","text":"If set (to anything), this completely disables the directory-based consumer in docker. If you don't plan to consume documents via the consumption directory, you can disable the consumer to save resources."},{"location":"configuration/#PAPERLESS_CONSUMER_DELETE_DUPLICATES","title":"PAPERLESS_CONSUMER_DELETE_DUPLICATES=<bool>","text":"

When the consumer detects a duplicate document, it will not touch the original document. This default behavior can be changed here.

Defaults to false.

"},{"location":"configuration/#PAPERLESS_CONSUMER_RECURSIVE","title":"PAPERLESS_CONSUMER_RECURSIVE=<bool>","text":"

Enable recursive watching of the consumption directory. Paperless will then pickup files from files in subdirectories within your consumption directory as well.

Defaults to false.

"},{"location":"configuration/#PAPERLESS_CONSUMER_SUBDIRS_AS_TAGS","title":"PAPERLESS_CONSUMER_SUBDIRS_AS_TAGS=<bool>","text":"

Set the names of subdirectories as tags for consumed files. E.g. <CONSUMPTION_DIR>/foo/bar/file.pdf will add the tags \"foo\" and \"bar\" to the consumed file. Paperless will create any tags that don't exist yet.

This is useful for sorting documents with certain tags such as car or todo prior to consumption. These folders won't be deleted.

PAPERLESS_CONSUMER_RECURSIVE must be enabled for this to work.

Defaults to false.

"},{"location":"configuration/#PAPERLESS_CONSUMER_IGNORE_PATTERNS","title":"PAPERLESS_CONSUMER_IGNORE_PATTERNS=<json>","text":"

By default, paperless ignores certain files and folders in the consumption directory, such as system files created by the Mac OS or hidden folders some tools use to store data.

This can be adjusted by configuring a custom json array with patterns to exclude.

For example, .DS_STORE/* will ignore any files found in a folder named .DS_STORE, including .DS_STORE/bar.pdf and foo/.DS_STORE/bar.pdf

A pattern like ._* will ignore anything starting with ._, including: ._foo.pdf and ._bar/foo.pdf

Defaults to [\".DS_Store\", \".DS_STORE\", \"._*\", \".stfolder/*\", \".stversions/*\", \".localized/*\", \"desktop.ini\", \"@eaDir/*\", \"Thumbs.db\"].

"},{"location":"configuration/#PAPERLESS_CONSUMER_BARCODE_SCANNER","title":"PAPERLESS_CONSUMER_BARCODE_SCANNER=<string>","text":"

Sets the barcode scanner used for barcode functionality.

Currently, \"PYZBAR\" (the default) or \"ZXING\" might be selected. If you have problems that your Barcodes/QR-Codes are not detected (especially with bad scan quality and/or small codes), try the other one.

"},{"location":"configuration/#PAPERLESS_PRE_CONSUME_SCRIPT","title":"PAPERLESS_PRE_CONSUME_SCRIPT=<filename>","text":"

After some initial validation, Paperless can trigger an arbitrary script if you like before beginning consumption. This script will be provided data for it to work with via the environment.

For more information, take a look at pre-consumption script.

The default is blank, which means nothing will be executed.

"},{"location":"configuration/#PAPERLESS_POST_CONSUME_SCRIPT","title":"PAPERLESS_POST_CONSUME_SCRIPT=<filename>","text":"

After a document is consumed, Paperless can trigger an arbitrary script if you like. This script will be provided data for it to work with via the environment.

For more information, take a look at Post-consumption script.

The default is blank, which means nothing will be executed.

"},{"location":"configuration/#PAPERLESS_FILENAME_DATE_ORDER","title":"PAPERLESS_FILENAME_DATE_ORDER=<format>","text":"

Paperless will check the document text for document date information. Use this setting to enable checking the document filename for date information. The date order can be set to any option as specified in https://dateparser.readthedocs.io/en/latest/settings.html#date-order. The filename will be checked first, and if nothing is found, the document text will be checked as normal.

A date in a filename must have some separators (., ,, -, /, etc) for it to be parsed.

Defaults to none, which disables this feature.

"},{"location":"configuration/#PAPERLESS_NUMBER_OF_SUGGESTED_DATES","title":"PAPERLESS_NUMBER_OF_SUGGESTED_DATES=<num>","text":"

Paperless searches an entire document for dates. The first date found will be used as the initial value for the created date. When this variable is greater than 0 (or left to its default value), paperless will also suggest other dates found in the document, up to a maximum of this setting. Note that duplicates will be removed, which can result in fewer dates displayed in the frontend than this setting value.

The task to find all dates can be time-consuming and increases with a higher (maximum) number of suggested dates and slower hardware.

Defaults to 3. Set to 0 to disable this feature.

"},{"location":"configuration/#PAPERLESS_THUMBNAIL_FONT_NAME","title":"PAPERLESS_THUMBNAIL_FONT_NAME=<filename>","text":"

Paperless creates thumbnails for plain text files by rendering the content of the file on an image and uses a predefined font for that. This font can be changed here.

Note that this won't have any effect on already generated thumbnails.

Defaults to /usr/share/fonts/liberation/LiberationSerif-Regular.ttf.

"},{"location":"configuration/#PAPERLESS_IGNORE_DATES","title":"PAPERLESS_IGNORE_DATES=<string>","text":"

Paperless parses a document's creation date from filename and file content. You may specify a comma separated list of dates that should be ignored during this process. This is useful for special dates (like date of birth) that appear in documents regularly but are very unlikely to be the document's creation date.

The date is parsed using the order specified in PAPERLESS_DATE_ORDER

Defaults to an empty string to not ignore any dates.

"},{"location":"configuration/#PAPERLESS_DATE_ORDER","title":"PAPERLESS_DATE_ORDER=<format>","text":"

Paperless will try to determine the document creation date from its contents. Specify the date format Paperless should expect to see within your documents.

This option defaults to DMY which translates to day first, month second, and year last order. Characters D, M, or Y can be shuffled to meet the required order.

"},{"location":"configuration/#PAPERLESS_ENABLE_GPG_DECRYPTOR","title":"PAPERLESS_ENABLE_GPG_DECRYPTOR=<bool>","text":"

Enable or disable the GPG decryptor for encrypted emails. See GPG Decryptor for more information.

Defaults to false.

"},{"location":"configuration/#workflow-webhooks","title":"Workflow webhooks","text":""},{"location":"configuration/#PAPERLESS_WEBHOOKS_ALLOWED_SCHEMES","title":"PAPERLESS_WEBHOOKS_ALLOWED_SCHEMES=<str>","text":"

A comma-separated list of allowed schemes for webhooks. This setting controls which URL schemes are permitted for webhook URLs.

Defaults to http,https.

"},{"location":"configuration/#PAPERLESS_WEBHOOKS_ALLOWED_PORTS","title":"PAPERLESS_WEBHOOKS_ALLOWED_PORTS=<str>","text":"

A comma-separated list of allowed ports for webhooks. This setting controls which ports are permitted for webhook URLs. For example, if you set this to 80,443, webhooks will only be sent to URLs that use these ports.

Defaults to empty list, which allows all ports.

"},{"location":"configuration/#PAPERLESS_WEBHOOKS_ALLOW_INTERNAL_REQUESTS","title":"PAPERLESS_WEBHOOKS_ALLOW_INTERNAL_REQUESTS=<bool>","text":"

If set to false, webhooks cannot be sent to internal URLs (e.g., localhost).

Defaults to true, which allows internal requests.

"},{"location":"configuration/#polling","title":"Polling","text":""},{"location":"configuration/#PAPERLESS_CONSUMER_POLLING","title":"PAPERLESS_CONSUMER_POLLING=<num>","text":"

If paperless won't find documents added to your consume folder, it might not be able to automatically detect filesystem changes. In that case, specify a polling interval in seconds here, which will then cause paperless to periodically check your consumption directory for changes. This will also disable listening for file system changes with inotify.

Defaults to 0, which disables polling and uses filesystem notifications.

"},{"location":"configuration/#PAPERLESS_CONSUMER_POLLING_RETRY_COUNT","title":"PAPERLESS_CONSUMER_POLLING_RETRY_COUNT=<num>","text":"

If consumer polling is enabled, sets the maximum number of times paperless will check for a file to remain unmodified. If a file's modification time and size are identical for two consecutive checks, it will be consumed.

Defaults to 5.

"},{"location":"configuration/#PAPERLESS_CONSUMER_POLLING_DELAY","title":"PAPERLESS_CONSUMER_POLLING_DELAY=<num>","text":"

If consumer polling is enabled, sets the delay in seconds between each check (above) paperless will do while waiting for a file to remain unmodified.

Defaults to 5.

"},{"location":"configuration/#inotify","title":"iNotify","text":""},{"location":"configuration/#PAPERLESS_CONSUMER_INOTIFY_DELAY","title":"PAPERLESS_CONSUMER_INOTIFY_DELAY=<num>","text":"

Sets the time in seconds the consumer will wait for additional events from inotify before the consumer will consider a file ready and begin consumption. Certain scanners or network setups may generate multiple events for a single file, leading to multiple consumers working on the same file. Configure this to prevent that.

Defaults to 0.5 seconds.

"},{"location":"configuration/#incoming_mail","title":"Incoming Mail","text":""},{"location":"configuration/#email_oauth","title":"Email OAuth","text":""},{"location":"configuration/#PAPERLESS_OAUTH_CALLBACK_BASE_URL","title":"PAPERLESS_OAUTH_CALLBACK_BASE_URL=<str>","text":"

The base URL for the OAuth callback. This is used to construct the full URL for the OAuth callback. This should be the URL that the Paperless instance is accessible at. If not set, defaults to the PAPERLESS_URL setting. At least one of these settings must be set to enable OAuth Email setup.

Defaults to none (thus will use PAPERLESS_URL).

Note

This setting only applies to OAuth Email setup (not to the SSO setup).

"},{"location":"configuration/#PAPERLESS_GMAIL_OAUTH_CLIENT_ID","title":"PAPERLESS_GMAIL_OAUTH_CLIENT_ID=<str>","text":"

The OAuth client ID for Gmail. This is required for Gmail OAuth Email setup. See OAuth Email Setup for more information.

Defaults to none.

"},{"location":"configuration/#PAPERLESS_GMAIL_OAUTH_CLIENT_SECRET","title":"PAPERLESS_GMAIL_OAUTH_CLIENT_SECRET=<str>","text":"

The OAuth client secret for Gmail. This is required for Gmail OAuth Email setup. See OAuth Email Setup for more information.

Defaults to none.

"},{"location":"configuration/#PAPERLESS_OUTLOOK_OAUTH_CLIENT_ID","title":"PAPERLESS_OUTLOOK_OAUTH_CLIENT_ID=<str>","text":"

The OAuth client ID for Outlook. This is required for Outlook OAuth Email setup. See OAuth Email Setup for more information.

Defaults to none.

"},{"location":"configuration/#PAPERLESS_OUTLOOK_OAUTH_CLIENT_SECRET","title":"PAPERLESS_OUTLOOK_OAUTH_CLIENT_SECRET=<str>","text":"

The OAuth client secret for Outlook. This is required for Outlook OAuth Email setup. See OAuth Email Setup for more information.

Defaults to none.

"},{"location":"configuration/#encrypted_emails","title":"Encrypted Emails","text":""},{"location":"configuration/#PAPERLESS_EMAIL_GNUPG_HOME","title":"PAPERLESS_EMAIL_GNUPG_HOME=<str>","text":"

Optional, sets the GNUPG_HOME path to use with GPG decryptor for encrypted emails. See GPG Decryptor for more information. If not set, defaults to the default GNUPG_HOME path.

Defaults to .

"},{"location":"configuration/#barcodes","title":"Barcodes","text":""},{"location":"configuration/#PAPERLESS_CONSUMER_ENABLE_BARCODES","title":"PAPERLESS_CONSUMER_ENABLE_BARCODES=<bool>","text":"

Enables the scanning and page separation based on detected barcodes. This allows for scanning and adding multiple documents per uploaded file, which are separated by one or multiple barcode pages.

For ease of use, it is suggested to use a standardized separation page, e.g. here.

If no barcodes are detected in the uploaded file, no page separation will happen.

The original document will be removed and the separated pages will be saved as pdf.

See additional information in the advanced usage documentation

Defaults to false.

"},{"location":"configuration/#PAPERLESS_CONSUMER_BARCODE_TIFF_SUPPORT","title":"PAPERLESS_CONSUMER_BARCODE_TIFF_SUPPORT=<bool>","text":"

Whether TIFF image files should be scanned for barcodes. This will automatically convert any TIFF image(s) to pdfs for later processing. This only has an effect, if PAPERLESS_CONSUMER_ENABLE_BARCODES has been enabled.

Defaults to false.

"},{"location":"configuration/#PAPERLESS_CONSUMER_BARCODE_STRING","title":"PAPERLESS_CONSUMER_BARCODE_STRING=<string>","text":"

Defines the string to be detected as a separator barcode. If paperless is used with the PATCH-T separator pages, users shouldn't change this.

Defaults to \"PATCHT\"

"},{"location":"configuration/#PAPERLESS_CONSUMER_BARCODE_RETAIN_SPLIT_PAGES","title":"PAPERLESS_CONSUMER_BARCODE_RETAIN_SPLIT_PAGES=<bool>","text":"

If set to true, all pages that are split by a barcode (such as PATCHT) will be kept.

Defaults to false.

"},{"location":"configuration/#PAPERLESS_CONSUMER_ENABLE_ASN_BARCODE","title":"PAPERLESS_CONSUMER_ENABLE_ASN_BARCODE=<bool>","text":"

Enables the detection of barcodes in the scanned document and setting the ASN (archive serial number) if a properly formatted barcode is detected.

The barcode must consist of a (configurable) prefix and the ASN to be set, for instance ASN00123. The content after the prefix is cleaned of non-numeric characters.

This option is compatible with barcode page separation, since pages will be split up before reading the ASN.

If no ASN barcodes are detected in the uploaded file, no ASN will be set. If a barcode with an existing ASN is detected, the document will not be consumed and an error logged.

Defaults to false.

"},{"location":"configuration/#PAPERLESS_CONSUMER_ASN_BARCODE_PREFIX","title":"PAPERLESS_CONSUMER_ASN_BARCODE_PREFIX=<string>","text":"

Defines the prefix that is used to identify a barcode as an ASN barcode.

Defaults to \"ASN\"

"},{"location":"configuration/#PAPERLESS_CONSUMER_BARCODE_UPSCALE","title":"PAPERLESS_CONSUMER_BARCODE_UPSCALE=<float>","text":"

Defines the upscale factor used in barcode detection. Improves the detection of small barcodes, i.e. with a value of 1.5 by upscaling the document before the detection process. Upscaling will only take place if value is bigger than 1.0. Otherwise upscaling will not be performed to save resources. Try using in combination with PAPERLESS_CONSUMER_BARCODE_DPI set to a value higher than default.

Defaults to 0.0

"},{"location":"configuration/#PAPERLESS_CONSUMER_BARCODE_DPI","title":"PAPERLESS_CONSUMER_BARCODE_DPI=<int>","text":"

During barcode detection every page from a PDF document needs to be converted to an image. A dpi value can be specified in the conversion process. Default is 300. If the detection of small barcodes fails a bigger dpi value i.e. 600 can fix the issue. Try using in combination with PAPERLESS_CONSUMER_BARCODE_UPSCALE bigger than 1.0.

Defaults to \"300\"

"},{"location":"configuration/#PAPERLESS_CONSUMER_BARCODE_MAX_PAGES","title":"PAPERLESS_CONSUMER_BARCODE_MAX_PAGES=<int>","text":"

Because barcode detection is a computationally-intensive operation, this setting limits the detection of barcodes to a number of first pages. If your scanner has a limit for the number of pages that can be scanned it would be sensible to set this as the limit here.

Defaults to \"0\", allowing all pages to be checked for barcodes.

"},{"location":"configuration/#PAPERLESS_CONSUMER_ENABLE_TAG_BARCODE","title":"PAPERLESS_CONSUMER_ENABLE_TAG_BARCODE=<bool>","text":"

Enables the detection of barcodes in the scanned document and assigns or creates tags if a properly formatted barcode is detected.

The barcode must match one of the (configurable) regular expressions. If the barcode text contains ',' (comma), it is split into multiple barcodes which are individually processed for tagging.

Matching is case insensitive.

Defaults to false.

"},{"location":"configuration/#PAPERLESS_CONSUMER_TAG_BARCODE_MAPPING","title":"PAPERLESS_CONSUMER_TAG_BARCODE_MAPPING=<json dict>","text":"

Defines a dictionary of filter regex and substitute expressions.

Syntax: {\"<regex>\": \"<substitute>\" [,...]]}

A barcode is considered for tagging if the barcode text matches at least one of the provided pattern.

If a match is found, the rule is applied. This allows very versatile reformatting and mapping of barcode pattern to tag values.

If a tag is not found it will be created.

Defaults to:

{\"TAG:(.*)\": \"\\\\g<1>\"} which defines - a regex TAG:(.*) which includes barcodes beginning with TAG: followed by any text that gets stored into match group #1 and - a substitute \\\\g<1> that replaces the original barcode text by the content in match group #1. Consequently, the tag is the barcode text without its TAG: prefix.

More examples:

{\"ASN12.*\": \"JOHN\", \"ASN13.*\": \"SMITH\"} for example maps - ASN12nnnn barcodes to the tag JOHN and - ASN13nnnn barcodes to the tag SMITH.

{\"T-J\": \"JOHN\", \"T-S\": \"SMITH\", \"T-D\": \"DOE\"} directly maps - T-J barcodes to the tag JOHN, - T-S barcodes to the tag SMITH and - T-D barcodes to the tag DOE.

Please refer to the Python regex documentation for more information.

"},{"location":"configuration/#audit-trail","title":"Audit Trail","text":""},{"location":"configuration/#PAPERLESS_AUDIT_LOG_ENABLED","title":"PAPERLESS_AUDIT_LOG_ENABLED=<bool>","text":"

Enables the audit trail for documents, document types, correspondents, and tags.

Defaults to true.

"},{"location":"configuration/#collate","title":"Collate Double-Sided Documents","text":""},{"location":"configuration/#PAPERLESS_CONSUMER_ENABLE_COLLATE_DOUBLE_SIDED","title":"PAPERLESS_CONSUMER_ENABLE_COLLATE_DOUBLE_SIDED=<bool>","text":"

Enables automatic collation of two single-sided scans into a double-sided document.

This is useful if you have an automatic document feeder that only supports single-sided scans, but you need to scan a double-sided document. If your ADF supports double-sided scans natively, you do not need this feature.

PAPERLESS_CONSUMER_RECURSIVE must be enabled for this to work.

For more information, read the corresponding section in the advanced documentation.

Defaults to false.

"},{"location":"configuration/#PAPERLESS_CONSUMER_COLLATE_DOUBLE_SIDED_SUBDIR_NAME","title":"PAPERLESS_CONSUMER_COLLATE_DOUBLE_SIDED_SUBDIR_NAME=<str>","text":"

The name of the subdirectory that the collate feature expects documents to arrive.

This only has an effect if PAPERLESS_CONSUMER_ENABLE_COLLATE_DOUBLE_SIDED has been enabled. Note that Paperless will not automatically create the directory.

Defaults to \"double-sided\".

"},{"location":"configuration/#PAPERLESS_CONSUMER_COLLATE_DOUBLE_SIDED_TIFF_SUPPORT","title":"PAPERLESS_CONSUMER_COLLATE_DOUBLE_SIDED_TIFF_SUPPORT=<bool>","text":"

Whether TIFF image files should be supported when collating documents. This will automatically convert any TIFF image(s) to pdfs for later processing. This only has an effect if PAPERLESS_CONSUMER_ENABLE_COLLATE_DOUBLE_SIDED has been enabled.

Defaults to false.

"},{"location":"configuration/#trash","title":"Trash","text":""},{"location":"configuration/#PAPERLESS_EMPTY_TRASH_DELAY","title":"PAPERLESS_EMPTY_TRASH_DELAY=<num>","text":"

Sets how long in days documents remain in the 'trash' before they are permanently deleted.

Defaults to 30 days, minimum of 1 day.

"},{"location":"configuration/#PAPERLESS_EMPTY_TRASH_TASK_CRON","title":"PAPERLESS_EMPTY_TRASH_TASK_CRON=<cron expression>","text":"

Configures the schedule to empty the trash of expired deleted documents.

Defaults to 0 1 * * *, once per day.

"},{"location":"configuration/#binaries","title":"Binaries","text":"

There are a few external software packages that Paperless expects to find on your system when it starts up. Unless you've done something creative with their installation, you probably won't need to edit any of these. However, if you've installed these programs somewhere where simply typing the name of the program doesn't automatically execute it (ie. the program isn't in your $PATH), then you'll need to specify the literal path for that program.

"},{"location":"configuration/#PAPERLESS_CONVERT_BINARY","title":"PAPERLESS_CONVERT_BINARY=<path>","text":"Defaults to \"convert\"."},{"location":"configuration/#PAPERLESS_GS_BINARY","title":"PAPERLESS_GS_BINARY=<path>","text":"Defaults to \"gs\"."},{"location":"configuration/#docker","title":"Docker-specific options","text":"

These options don't have any effect in paperless.conf. These options adjust the behavior of the docker container. Configure these in docker-compose.env.

"},{"location":"configuration/#PAPERLESS_WEBSERVER_WORKERS","title":"PAPERLESS_WEBSERVER_WORKERS=<num>","text":"

The number of worker processes the webserver should spawn. More worker processes usually result in the front end to load data much quicker. However, each worker process also loads the entire application into memory separately, so increasing this value will increase RAM usage.

Defaults to 1.

Note

This option may also be set with GRANIAN_WORKERS and this option may be removed in the future

"},{"location":"configuration/#PAPERLESS_BIND_ADDR","title":"PAPERLESS_BIND_ADDR=<ip address>","text":"

The IP address the webserver will listen on inside the container. There are special setups where you may need to configure this value to restrict the Ip address or interface the webserver listens on.

Defaults to ::, meaning all interfaces, including IPv6.

Note

This option may also be set with GRANIAN_HOST and this option may be removed in the future

"},{"location":"configuration/#PAPERLESS_PORT","title":"PAPERLESS_PORT=<port>","text":"

The port number the webserver will listen on inside the container. There are special setups where you may need this to avoid collisions with other services (like using podman with multiple containers in one pod).

Don't change this when using Docker. To change the port the webserver is reachable outside of the container, instead refer to the \"ports\" key in docker-compose.yml.

Defaults to 8000.

Note

This option may also be set with GRANIAN_PORT and this option may be removed in the future

"},{"location":"configuration/#USERMAP_UID","title":"USERMAP_UID=<uid>","text":"

The ID of the paperless user in the container. Set this to your actual user ID on the host system, which you can get by executing

id -u\n

Paperless will change ownership on its folders to this user, so you need to get this right in order to be able to write to the consumption directory.

Defaults to 1000.

"},{"location":"configuration/#USERMAP_GID","title":"USERMAP_GID=<gid>","text":"

The ID of the paperless Group in the container. Set this to your actual group ID on the host system, which you can get by executing

id -g\n

Paperless will change ownership on its folders to this group, so you need to get this right in order to be able to write to the consumption directory.

Defaults to 1000.

"},{"location":"configuration/#PAPERLESS_OCR_LANGUAGES","title":"PAPERLESS_OCR_LANGUAGES=<list>","text":"

Additional OCR languages to install. By default, paperless comes with English, German, Italian, Spanish and French. If your language is not in this list, install additional languages with this configuration option. You will need to find the right LangCodes but note that tesseract-ocr-* package names do not always correspond with the language codes e.g. \"chi_tra\" should be specified as \"chi-tra\".

PAPERLESS_OCR_LANGUAGES=tur ces chi-tra\n

Make sure it's a space-separated list when using several values.

To actually use these languages, also set the default OCR language of paperless:

PAPERLESS_OCR_LANGUAGE=tur\n

Defaults to none, which does not install any additional languages.

Warning

This option must not be used in rootless containers.

"},{"location":"configuration/#PAPERLESS_ENABLE_FLOWER","title":"PAPERLESS_ENABLE_FLOWER=<defined>","text":"

If this environment variable is defined, the Celery monitoring tool Flower will be started by the container.

You can read more about this in the advanced documentation.

"},{"location":"configuration/#PAPERLESS_SUPERVISORD_WORKING_DIR","title":"PAPERLESS_SUPERVISORD_WORKING_DIR=<defined>","text":"

Warning

This option is deprecated and has no effect.  For read only file system support,\nsee [S6_READ_ONLY_ROOT](https://github.com/just-containers/s6-overlay#customizing-s6-overlay-behaviour)\nfrom s6-overlay.\n
"},{"location":"configuration/#frontend-settings","title":"Frontend Settings","text":""},{"location":"configuration/#PAPERLESS_APP_TITLE","title":"PAPERLESS_APP_TITLE=<str>","text":"If set, overrides the default name \"Paperless-ngx\""},{"location":"configuration/#PAPERLESS_APP_LOGO","title":"PAPERLESS_APP_LOGO=<path>","text":"Path to an image file in the /media/logo directory, must include 'logo', e.g. /logo/Atari_logo.svg

Note

The logo file will be viewable by anyone with access to the Paperless instance login page, so consider your choice of logo carefully and removing exif data from images before uploading.

"},{"location":"configuration/#PAPERLESS_ENABLE_UPDATE_CHECK","title":"PAPERLESS_ENABLE_UPDATE_CHECK=<bool>","text":"

Note

This setting was deprecated in favor of a frontend setting after v1.9.2. A one-time migration is performed for users who have this setting set. This setting is always ignored if the corresponding frontend setting has been set.

"},{"location":"configuration/#email-sending","title":"Email sending","text":"

Setting an SMTP server for the backend will allow you to use the Email workflow action, send documents from the UI as well as reset your password. All of these options come from their similarly-named Django settings

"},{"location":"configuration/#PAPERLESS_EMAIL_HOST","title":"PAPERLESS_EMAIL_HOST=<str>","text":"Defaults to 'localhost'."},{"location":"configuration/#PAPERLESS_EMAIL_PORT","title":"PAPERLESS_EMAIL_PORT=<int>","text":"Defaults to port 25."},{"location":"configuration/#PAPERLESS_EMAIL_HOST_USER","title":"PAPERLESS_EMAIL_HOST_USER=<str>","text":"Defaults to ''."},{"location":"configuration/#PAPERLESS_EMAIL_FROM","title":"PAPERLESS_EMAIL_FROM=<str>","text":"Defaults to PAPERLESS_EMAIL_HOST_USER if not set."},{"location":"configuration/#PAPERLESS_EMAIL_HOST_PASSWORD","title":"PAPERLESS_EMAIL_HOST_PASSWORD=<str>","text":"Defaults to ''."},{"location":"configuration/#PAPERLESS_EMAIL_USE_TLS","title":"PAPERLESS_EMAIL_USE_TLS=<bool>","text":"Defaults to false."},{"location":"configuration/#PAPERLESS_EMAIL_USE_SSL","title":"PAPERLESS_EMAIL_USE_SSL=<bool>","text":"Defaults to false."},{"location":"development/","title":"Development","text":""},{"location":"development/#development","title":"Development","text":"

This section describes the steps you need to take to start development on Paperless-ngx.

Check out the source from GitHub. The repository is organized in the following way:

When making functional changes to Paperless-ngx, always make your changes on the dev branch.

Apart from that, the folder structure is as follows:

"},{"location":"development/#contributing-to-paperless-ngx","title":"Contributing to Paperless-ngx","text":"

Maybe you've been using Paperless-ngx for a while and want to add a feature or two, or maybe you've come across a bug that you have some ideas how to solve. The beauty of open source software is that you can see what's wrong and help to get it fixed for everyone!

Before contributing please review our code of conduct and other important information in the contributing guidelines.

"},{"location":"development/#code-formatting-with-pre-commit-hooks","title":"Code formatting with pre-commit hooks","text":"

To ensure a consistent style and formatting across the project source, the project utilizes Git pre-commit hooks to perform some formatting and linting before a commit is allowed. That way, everyone uses the same style and some common issues can be caught early on.

Once installed, hooks will run when you commit. If the formatting isn't quite right or a linter catches something, the commit will be rejected. You'll need to look at the output and fix the issue. Some hooks, such as the Python linting and formatting tool ruff, will format failing files, so all you need to do is git add those files again and retry your commit.

"},{"location":"development/#general-setup","title":"General setup","text":"

After you forked and cloned the code from GitHub you need to perform a first-time setup.

Note

Every command is executed directly from the root folder of the project unless specified otherwise.

  1. Install prerequisites + uv as mentioned in Bare metal route.

  2. Copy paperless.conf.example to paperless.conf and enable debug mode within the file via PAPERLESS_DEBUG=true.

  3. Create consume and media directories:

    mkdir -p consume media\n
  4. Install the Python dependencies:

    $ uv sync --group dev\n
  5. Install pre-commit hooks:

    $ uv run pre-commit install\n
  6. Apply migrations and create a superuser (also can be done via the web UI) for your development instance:

    # src/\n\n$ uv run manage.py migrate\n$ uv run manage.py createsuperuser\n
  7. You can now either ...

  8. Continue with either back-end or front-end development \u2013 or both :-).

"},{"location":"development/#back-end-development","title":"Back end development","text":"

The back end is a Django application. PyCharm as well as Visual Studio Code work well for development, but you can use whatever you want.

Configure the IDE to use the src/-folder as the base source folder. Configure the following launch configurations in your IDE:

To start them all:

# src/\n\n$ python3 manage.py runserver & \\\n  python3 manage.py document_consumer & \\\n  celery --app paperless worker -l DEBUG\n

You might need the front end to test your back end code. This assumes that you have AngularJS installed on your system. Go to the Front end development section for further details. To build the front end once use this command:

# src-ui/\n\n$ pnpm install\n$ ng build --configuration production\n
"},{"location":"development/#testing","title":"Testing","text":"

Note

The line length rule E501 is generally useful for getting multiple source files next to each other on the screen. However, in some cases, its just not possible to make some lines fit, especially complicated IF cases. Append # noqa: E501 to disable this check for certain lines.

"},{"location":"development/#package-management","title":"Package Management","text":"

Paperless uses uv to manage packages and virtual environments for both development and production. To accomplish some common tasks using uv, follow the shortcuts below:

To upgrade all locked packages to the latest allowed versions: uv lock --upgrade

To upgrade a single locked package: uv lock --upgrade-package <package>

To add a new package: uv add <package>

To add a new development package uv add --dev <package>

"},{"location":"development/#front-end-development","title":"Front end development","text":"

The front end is built using AngularJS. In order to get started, you need Node.js (version 14.15+) and pnpm.

Note

The following commands are all performed in the src-ui-directory. You will need a running back end (including an active session) to connect to the back end API. To spin it up refer to the commands under the section above.

  1. Install the Angular CLI. You might need sudo privileges to perform this command:

    pnpm install -g @angular/cli\n
  2. Make sure that it's on your path.

  3. Install all necessary modules:

    pnpm install\n
  4. You can launch a development server by running:

    ng serve\n

    This will automatically update whenever you save. However, in-place compilation might fail on syntax errors, in which case you need to restart it.

    By default, the development server is available on http://localhost:4200/ and is configured to access the API at http://localhost:8000/api/, which is the default of the backend. If you enabled DEBUG on the back end, several security overrides for allowed hosts and CORS are in place so that the front end behaves exactly as in production.

"},{"location":"development/#testing-and-code-style","title":"Testing and code style","text":"

The front end code (.ts, .html, .scss) use prettier for code formatting via the Git pre-commit hooks which run automatically on commit. See above for installation instructions. You can also run this via the CLI with a command such as

$ git ls-files -- '*.ts' | xargs pre-commit run prettier --files\n

Front end testing uses Jest and Playwright. Unit tests and e2e tests, respectively, can be run non-interactively with:

$ ng test\n$ npx playwright test\n

Playwright also includes a UI which can be run with:

$ npx playwright test --ui\n
"},{"location":"development/#building-the-frontend","title":"Building the frontend","text":"

In order to build the front end and serve it as part of Django, execute:

$ ng build --configuration production\n

This will build the front end and put it in a location from which the Django server will serve it as static content. This way, you can verify that authentication is working.

"},{"location":"development/#localization","title":"Localization","text":"

Paperless-ngx is available in many different languages. Since Paperless-ngx consists both of a Django application and an AngularJS front end, both these parts have to be translated separately.

"},{"location":"development/#front-end-localization","title":"Front end localization","text":"

Adding new languages requires adding the translated files in the src-ui/src/locale/ folder and adjusting a couple files.

  1. Adjust src-ui/angular.json:

    \"i18n\": {\n    \"sourceLocale\": \"en-US\",\n    \"locales\": {\n        \"de\": \"src/locale/messages.de.xlf\",\n        \"nl-NL\": \"src/locale/messages.nl_NL.xlf\",\n        \"fr\": \"src/locale/messages.fr.xlf\",\n        \"en-GB\": \"src/locale/messages.en_GB.xlf\",\n        \"pt-BR\": \"src/locale/messages.pt_BR.xlf\",\n        \"language-code\": \"language-file\"\n    }\n}\n
  2. Add the language to the LANGUAGE_OPTIONS array in src-ui/src/app/services/settings.service.ts:

    `dateInputFormat` is a special string that defines the behavior of\nthe date input fields and absolutely needs to contain \"dd\", \"mm\"\nand \"yyyy\".\n
  3. Import and register the Angular data for this locale in src-ui/src/app/app.module.ts:

    import localeDe from '@angular/common/locales/de'\nregisterLocaleData(localeDe)\n
"},{"location":"development/#back-end-localization","title":"Back end localization","text":"

A majority of the strings that appear in the back end appear only when the admin is used. However, some of these are still shown on the front end (such as error messages).

Adding new languages requires adding the translated files in the src/locale/-folder and adjusting the file src/paperless/settings.py to include the new language:

LANGUAGES = [\n    (\"en-us\", _(\"English (US)\")),\n    (\"en-gb\", _(\"English (GB)\")),\n    (\"de\", _(\"German\")),\n    (\"nl-nl\", _(\"Dutch\")),\n    (\"fr\", _(\"French\")),\n    (\"pt-br\", _(\"Portuguese (Brazil)\")),\n    # Add language here.\n]\n
"},{"location":"development/#building-the-documentation","title":"Building the documentation","text":"

The documentation is built using material-mkdocs, see their documentation. If you want to build the documentation locally, this is how you do it:

  1. Build the documentation

    $ uv run mkdocs build --config-file mkdocs.yml\n

    alternatively...

  2. Serve the documentation. This will spin up a copy of the documentation at http://127.0.0.1:8000 that will automatically refresh every time you change something.

    $ uv run mkdocs serve\n
"},{"location":"development/#building-the-docker-image","title":"Building the Docker image","text":"

The docker image is primarily built by the GitHub actions workflow, but it can be faster when developing to build and tag an image locally.

Make sure you have the docker-buildx package installed. Building the image works as with any image:

docker build --file Dockerfile --tag paperless:local .\n
"},{"location":"development/#extending-paperless-ngx","title":"Extending Paperless-ngx","text":"

Paperless-ngx does not have any fancy plugin systems and will probably never have. However, some parts of the application have been designed to allow easy integration of additional features without any modification to the base code.

"},{"location":"development/#making-custom-parsers","title":"Making custom parsers","text":"

Paperless-ngx uses parsers to add documents. A parser is responsible for:

Custom parsers can be added to Paperless-ngx to support more file types. In order to do that, you need to write the parser itself and announce its existence to Paperless-ngx.

The parser itself must extend documents.parsers.DocumentParser and must implement the methods parse and get_thumbnail. You can provide your own implementation to get_date if you don't want to rely on Paperless-ngx' default date guessing mechanisms.

class MyCustomParser(DocumentParser):\n\n    def parse(self, document_path, mime_type):\n        # This method does not return anything. Rather, you should assign\n        # whatever you got from the document to the following fields:\n\n        # The content of the document.\n        self.text = \"content\"\n\n        # Optional: path to a PDF document that you created from the original.\n        self.archive_path = os.path.join(self.tempdir, \"archived.pdf\")\n\n        # Optional: \"created\" date of the document.\n        self.date = get_created_from_metadata(document_path)\n\n    def get_thumbnail(self, document_path, mime_type):\n        # This should return the path to a thumbnail you created for this\n        # document.\n        return os.path.join(self.tempdir, \"thumb.webp\")\n

If you encounter any issues during parsing, raise a documents.parsers.ParseError.

The self.tempdir directory is a temporary directory that is guaranteed to be empty and removed after consumption finished. You can use that directory to store any intermediate files and also use it to store the thumbnail / archived document.

After that, you need to announce your parser to Paperless-ngx. You need to connect a handler to the document_consumer_declaration signal. Have a look in the file src/paperless_tesseract/apps.py on how that's done. The handler is a method that returns information about your parser:

def myparser_consumer_declaration(sender, **kwargs):\n    return {\n        \"parser\": MyCustomParser,\n        \"weight\": 0,\n        \"mime_types\": {\n            \"application/pdf\": \".pdf\",\n            \"image/jpeg\": \".jpg\",\n        }\n    }\n
"},{"location":"development/#using-visual-studio-code-devcontainer","title":"Using Visual Studio Code devcontainer","text":"

Another easy way to get started with development is to use Visual Studio Code devcontainers. This approach will create a preconfigured development environment with all of the required tools and dependencies. Learn more about devcontainers. The .devcontainer/vscode/tasks.json and .devcontainer/vscode/launch.json files contain more information about the specific tasks and launch configurations (see the non-standard \"description\" field).

To get started:

  1. Clone the repository on your machine and open the Paperless-ngx folder in VS Code.

  2. VS Code will prompt you with \"Reopen in container\". Do so and wait for the environment to start.

  3. In case your host operating system is Windows:

  4. Initialize the project by running the task Project Setup: Run all Init Tasks. This will initialize the database tables and create a superuser. Then you can compile the front end for production or run the frontend in debug mode.

  5. The project is ready for debugging, start either run the fullstack debug or individual debug processes. Yo spin up the project without debugging run the task Project Start: Run all Services

"},{"location":"faq/","title":"FAQs","text":""},{"location":"faq/#frequently-asked-questions","title":"Frequently Asked Questions","text":""},{"location":"faq/#whats-the-general-plan-for-paperless-ngx","title":"What's the general plan for Paperless-ngx?","text":"

A: While Paperless-ngx is already considered largely \"feature-complete\", it is a community-driven project and development will be guided in this way. New features can be submitted via GitHub discussions and \"up-voted\" by the community, but this is not a guarantee that the feature will be implemented. This project will always be open to collaboration in the form of PRs, ideas etc.

"},{"location":"faq/#im-using-docker-where-are-my-documents","title":"I'm using docker. Where are my documents?","text":"

A: By default, your documents are stored inside the docker volume paperless_media. Docker manages this volume automatically for you. It is a persistent storage and will persist as long as you don't explicitly delete it. The actual location depends on your host operating system. On Linux, chances are high that this location is

/var/lib/docker/volumes/paperless_media/_data\n

Warning

Do not mess with this folder. Don't change permissions and don't move files around manually. This folder is meant to be entirely managed by docker and paperless.

Note

Files consumed from the consumption directory are re-created inside this media directory and are removed from the consumption directory itself.

"},{"location":"faq/#lets-say-i-want-to-switch-tools-in-a-year-can-i-easily-move-to-other-systems","title":"Let's say I want to switch tools in a year. Can I easily move to other systems?","text":"

A: Your documents are stored as plain files inside the media folder. You can always drag those files out of that folder to use them elsewhere. Here are a couple notes about that.

"},{"location":"faq/#what-file-types-does-paperless-ngx-support","title":"What file types does paperless-ngx support?","text":"

A: Currently, the following files are supported:

Paperless-ngx determines the type of a file by inspecting its content. The file extensions do not matter.

"},{"location":"faq/#will-paperless-ngx-run-on-raspberry-pi","title":"Will paperless-ngx run on Raspberry Pi?","text":"

A: The short answer is yes. I've tested it on a Raspberry Pi 3 B. The long answer is that certain parts of Paperless will run very slow, such as the OCR. On Raspberry Pi, try to OCR documents before feeding them into paperless so that paperless can reuse the text. The web interface is a lot snappier, since it runs in your browser and paperless has to do much less work to serve the data.

Note

You can adjust some of the settings so that paperless uses less processing power. See setup for details.

"},{"location":"faq/#how-do-i-install-paperless-ngx-on-raspberry-pi","title":"How do I install paperless-ngx on Raspberry Pi?","text":"

A: Docker images are available for arm64 hardware, so just follow the Docker Compose instructions. Apart from more required disk space compared to a bare metal installation, docker comes with close to zero overhead, even on Raspberry Pi.

If you decide to go with the bare metal route, be aware that some of the python requirements do not have precompiled packages for ARM / ARM64. Installation of these will require additional development libraries and compilation will take a long time.

Note

For ARMv7 (32-bit) systems, paperless may still function, but it could require modifications to the Dockerfile (if using Docker) or additional tools for installing bare metal. It is suggested to upgrade to arm64 instead.

"},{"location":"faq/#how-do-i-run-this-on-unraid","title":"How do I run this on Unraid?","text":"

A: Paperless-ngx is available as community app in Unraid. Uli Fahrer created a container template for that.

"},{"location":"faq/#how-do-i-run-this-on-my-toaster","title":"How do I run this on my toaster?","text":"

A: I honestly don't know! As for all other devices that might be able to run paperless, you're a bit on your own. If you can't run the docker image, the documentation has instructions for bare metal installs.

"},{"location":"faq/#what-about-the-redis-licensing-change-and-using-one-of-the-open-source-forks","title":"What about the Redis licensing change and using one of the open source forks?","text":"

Currently (October 2024), forks of Redis such as Valkey or Redirect are not officially supported by our upstream libraries, so using one of these to replace Redis is not officially supported.

However, they do claim to be compatible with the Redis protocol and will likely work, but we will not be updating from using Redis as the broker officially just yet.

"},{"location":"setup/","title":"Setup","text":""},{"location":"setup/#installation","title":"Installation","text":"

You can go multiple routes to setup and run Paperless:

The Docker routes are quick & easy. These are the recommended routes. This configures all the stuff from the above automatically so that it just works and uses sensible defaults for all configuration options. Here you find a cheat-sheet for docker beginners: CLI Basics

The bare metal route is complicated to setup but makes it easier should you want to contribute some code back. You need to configure and run the above mentioned components yourself.

"},{"location":"setup/#docker_script","title":"Use the Installation Script","text":"

Paperless provides an interactive installation script to setup a Docker Compose installation. The script asks for a couple configuration options, and will then create the necessary configuration files, pull the docker image, start Paperless-ngx and create your superuser account. The script essentially automatically performs the steps described in Docker setup.

  1. Make sure that Docker and Docker Compose are installed.

  2. Download and run the installation script:

    bash -c \"$(curl --location --silent --show-error https://raw.githubusercontent.com/paperless-ngx/paperless-ngx/main/install-paperless-ngx.sh)\"\n

    Note

    macOS users will need to install gnu-sed with support for running as sed as well as wget.

"},{"location":"setup/#docker","title":"Use Docker Compose","text":"
  1. Make sure that Docker and Docker Compose are installed.

  2. Go to the /docker/compose directory on the project page and download one of the docker-compose.*.yml files, depending on which database backend you want to use. Place the files in a local directory and rename it docker-compose.yml. Download the docker-compose.env file and the .env file as well in the same directory.

    If you want to enable optional support for Office and other documents, download a file with -tika in the file name.

    Tip

    For new installations, it is recommended to use PostgreSQL as the database backend.

  3. Modify docker-compose.yml as needed. For example, you may want to change the paths to the consumption, media etc. directories to use 'bind mounts'. Find the line that specifies where to mount the directory, e.g.:

    - ./consume:/usr/src/paperless/consume\n

    Replace the part before the colon with a local directory of your choice:

    - /home/jonaswinkler/paperless-inbox:/usr/src/paperless/consume\n

    You may also want to change the default port that the webserver will use from the default (8000) to something else, e.g. for port 8010:

    ports:\n    - 8010:8000\n

    Rootless

    Warning

    It is currently not possible to run the container rootless if additional languages are specified via PAPERLESS_OCR_LANGUAGES.

    If you want to run Paperless as a rootless container, you will need to do the following in your docker-compose.yml:

    Your entry for Paperless should contain something like:

    webserver:\n  image: ghcr.io/paperless-ngx/paperless-ngx:latest\n  user: <user_id>\n
  4. Modify docker-compose.env with any configuration options you'd like. See the configuration documentation for all options.

    You may also need to set USERMAP_UID and USERMAP_GID to the uid and gid of your user on the host system. Use id -u and id -g to get these. This ensures that both the container and the host user have write access to the consumption directory. If your UID and GID on the host system is 1000 (the default for the first normal user on most systems), it will work out of the box without any modifications. Run id \"username\" to check.

    Note

    You can utilize Docker secrets for configuration settings by appending _FILE to configuration values. For example PAPERLESS_DBUSER can be set using PAPERLESS_DBUSER_FILE=/var/run/secrets/password.txt.

    Warning

    Some file systems such as NFS network shares don't support file system notifications with inotify. When storing the consumption directory on such a file system, paperless will not pick up new files with the default configuration. You will need to use PAPERLESS_CONSUMER_POLLING, which will disable inotify. See here.

  5. Run docker compose pull. This will pull the image from the GitHub container registry by default but you can change the image to pull from Docker Hub by changing the image line to image: paperlessngx/paperless-ngx:latest.

  6. Run docker compose up -d. This will create and start the necessary containers.

  7. Congratulations! Your Paperless-ngx instance should now be accessible at http://127.0.0.1:8000 (or similar, depending on your configuration). When you first access the web interface, you will be prompted to create a superuser account.

"},{"location":"setup/#docker_build","title":"Build the Docker image yourself","text":"
  1. Clone the entire repository of paperless:

    git clone https://github.com/paperless-ngx/paperless-ngx\n

    The main branch always reflects the latest stable version.

  2. Copy one of the docker/compose/docker-compose.*.yml to docker-compose.yml in the root folder, depending on which database backend you want to use. Copy docker-compose.env into the project root as well.

  3. In the docker-compose.yml file, find the line that instructs Docker Compose to pull the paperless image from Docker Hub:

    webserver:\n    image: ghcr.io/paperless-ngx/paperless-ngx:latest\n

    and replace it with a line that instructs Docker Compose to build the image from the current working directory instead:

    webserver:\n    build:\n        context: .\n
  4. Follow the Docker setup above except when asked to run docker compose pull to pull the image, run

    docker compose build\n

    instead to build the image.

"},{"location":"setup/#bare_metal","title":"Bare Metal Route","text":"

Paperless runs on linux only. The following procedure has been tested on a minimal installation of Debian/Buster, which is the current stable release at the time of writing. Windows is not and will never be supported.

Paperless requires Python 3. At this time, 3.10 - 3.12 are tested versions. Newer versions may work, but some dependencies may not fully support newer versions. Support for older Python versions may be dropped as they reach end of life or as newer versions are released, dependency support is confirmed, etc.

  1. Install dependencies. Paperless requires the following packages.

    Use this list for your preferred package management:

    python3 python3-pip python3-dev imagemagick fonts-liberation gnupg libpq-dev default-libmysqlclient-dev pkg-config libmagic-dev libzbar0 poppler-utils\n

    These dependencies are required for OCRmyPDF, which is used for text recognition.

    Use this list for your preferred package management:

    unpaper ghostscript icc-profiles-free qpdf liblept5 libxml2 pngquant zlib1g tesseract-ocr\n

    On Raspberry Pi, these libraries are required as well:

    You will also need these for installing some of the python dependencies:

    Use this list for your preferred package management:

    build-essential python3-setuptools python3-wheel\n
  2. Install redis >= 6.0 and configure it to start automatically.

  3. Optional. Install postgresql and configure a database, user and password for paperless. If you do not wish to use PostgreSQL, MariaDB and SQLite are available as well.

    Note

    On bare-metal installations using SQLite, ensure the JSON1 extension is enabled. This is usually the case, but not always.

  4. Create a system user with a new home folder under which you wish to run paperless.

    adduser paperless --system --home /opt/paperless --group\n
  5. Get the release archive from https://github.com/paperless-ngx/paperless-ngx/releases for example with

    curl -O -L https://github.com/paperless-ngx/paperless-ngx/releases/download/v1.10.2/paperless-ngx-v1.10.2.tar.xz\n

    Extract the archive with

    tar -xf paperless-ngx-v1.10.2.tar.xz\n

    and copy the contents to the home folder of the user you created before (/opt/paperless).

    Optional: If you cloned the git repo, you will have to compile the frontend yourself, see here and use the build step, not serve.

  6. Configure paperless. See configuration for details. Edit the included paperless.conf and adjust the settings to your needs. Required settings for getting paperless running are:

    Many more adjustments can be made to paperless, especially the OCR part. The following options are recommended for everyone:

    Warning

    Ensure your Redis instance is secured.

  7. Create the following directories if they are missing:

    Adjust as necessary if you configured different folders. Ensure that the paperless user has write permissions for every one of these folders with

    ls -l -d /opt/paperless/media\n

    If needed, change the owner with

    sudo chown paperless:paperless /opt/paperless/media\nsudo chown paperless:paperless /opt/paperless/data\nsudo chown paperless:paperless /opt/paperless/consume\n
  8. Install python requirements from the requirements.txt file.

    sudo -Hu paperless pip3 install -r requirements.txt\n

    This will install all python dependencies in the home directory of the new paperless user.

    Tip

    It is up to you if you wish to use a virtual environment or not for the Python dependencies. This is an alternative to the above and may require adjusting the example scripts to utilize the virtual environment paths

    Tip

    If you use modern Python tooling, such as uv, installation will not include dependencies for Postgres or Mariadb. You can select those extras with --extra <EXTRA> or all with --all-extras

  9. Go to /opt/paperless/src, and execute the following command:

    # This creates the database schema.\nsudo -Hu paperless python3 manage.py migrate\n

    When you first access the web interface you will be prompted to create a superuser account.

  10. Optional: Test that paperless is working by executing

    # Manually starts the webserver\nsudo -Hu paperless python3 manage.py runserver\n

    and pointing your browser to http://localhost:8000 if accessing from the same devices on which paperless is installed. If accessing from another machine, set up systemd services. You may need to set PAPERLESS_DEBUG=true in order for the development server to work normally in your browser.

    Warning

    This is a development server which should not be used in production. It is not audited for security and performance is inferior to production ready web servers.

    Tip

    This will not start the consumer. Paperless does this in a separate process.

  11. Setup systemd services to run paperless automatically. You may use the service definition files included in the scripts folder as a starting point.

    Paperless needs the webserver script to run the webserver, the consumer script to watch the input folder, taskqueue for the background workers used to handle things like document consumption and the scheduler script to run tasks such as email checking at certain times .

    Note

    The socket script enables granian to run on port 80 without root privileges. For this you need to uncomment the Require=paperless-webserver.socket in the webserver script and configure granian to listen on port 80 (set GRANIAN_PORT).

    These services rely on redis and optionally the database server, but don't need to be started in any particular order. The example files depend on redis being started. If you use a database server, you should add additional dependencies.

    Note

    For instructions on using a reverse proxy, see the wiki.

    Warning

    If celery won't start (check with sudo systemctl status paperless-task-queue.service for paperless-task-queue.service and paperless-scheduler.service ) you need to change the path in the files. Example: ExecStart=/opt/paperless/.local/bin/celery --app paperless worker --loglevel INFO

  12. Optional: Install a samba server and make the consumption folder available as a network share.

  13. Configure ImageMagick to allow processing of PDF documents. Most distributions have this disabled by default, since PDF documents can contain malware. If you don't do this, paperless will fall back to Ghostscript for certain steps such as thumbnail generation.

    Edit /etc/ImageMagick-6/policy.xml and adjust

    <policy domain=\"coder\" rights=\"none\" pattern=\"PDF\" />\n

    to

    <policy domain=\"coder\" rights=\"read|write\" pattern=\"PDF\" />\n
  14. Optional: Install the jbig2enc encoder. This will reduce the size of generated PDF documents. You'll most likely need to compile this by yourself, because this software has been patented until around 2017 and binary packages are not available for most distributions.

  15. Optional: If using the NLTK machine learning processing (see PAPERLESS_ENABLE_NLTK for details), download the NLTK data for the Snowball Stemmer, Stopwords and Punkt tokenizer to /usr/share/nltk_data. Refer to the NLTK instructions for details on how to download the data.

"},{"location":"setup/#migrating-to-paperless-ngx","title":"Migrating to Paperless-ngx","text":"

Migration is possible both from Paperless-ng or directly from the 'original' Paperless.

"},{"location":"setup/#migrating-from-paperless-ng","title":"Migrating from Paperless-ng","text":"

Paperless-ngx is meant to be a drop-in replacement for Paperless-ng and thus upgrading should be trivial for most users, especially when using docker. However, as with any major change, it is recommended to take a full backup first. Once you are ready, simply change the docker image to point to the new source. E.g. if using Docker Compose, edit docker-compose.yml and change:

image: jonaswinkler/paperless-ng:latest\n

to

image: ghcr.io/paperless-ngx/paperless-ngx:latest\n

and then run docker compose up -d which will pull the new image recreate the container. That's it!

Users who installed with the bare-metal route should also update their Git clone to point to https://github.com/paperless-ngx/paperless-ngx, e.g. using the command git remote set-url origin https://github.com/paperless-ngx/paperless-ngx and then pull the latest version.

"},{"location":"setup/#migrating-from-paperless","title":"Migrating from Paperless","text":"

At its core, paperless-ngx is still paperless and fully compatible. However, some things have changed under the hood, so you need to adapt your setup depending on how you installed paperless.

This setup describes how to update an existing paperless Docker installation. The important things to keep in mind are as follows:

Migration to paperless-ngx is then performed in a few simple steps:

  1. Stop paperless.

    cd /path/to/current/paperless\ndocker compose down\n
  2. Do a backup for two purposes: If something goes wrong, you still have your data. Second, if you don't like paperless-ngx, you can switch back to paperless.

  3. Download the latest release of paperless-ngx. You can either go with the Docker Compose files from here or clone the repository to build the image yourself (see above). You can either replace your current paperless folder or put paperless-ngx in a different location.

    Warning

    Paperless-ngx includes a .env file. This will set the project name for docker compose to paperless, which will also define the name of the volumes by paperless-ngx. However, if you experience that paperless-ngx is not using your old paperless volumes, verify the names of your volumes with

    docker volume ls | grep _data\n

    and adjust the project name in the .env file so that it matches the name of the volumes before the _data part.

  4. Download the docker-compose.sqlite.yml file to docker-compose.yml. If you want to switch to PostgreSQL, do that after you migrated your existing SQLite database.

  5. Adjust docker-compose.yml and docker-compose.env to your needs. See Docker setup details on which edits are advised.

  6. Update paperless.

  7. In order to find your existing documents with the new search feature, you need to invoke a one-time operation that will create the search index:

    docker compose run --rm webserver document_index reindex\n

    This will migrate your database and create the search index. After that, paperless will take care of maintaining the index by itself.

  8. Start paperless-ngx.

    docker compose up -d\n

    This will run paperless in the background and automatically start it on system boot.

  9. Paperless installed a permanent redirect to admin/ in your browser. This redirect is still in place and prevents access to the new UI. Clear your browsing cache in order to fix this.

  10. Optionally, follow the instructions below to migrate your existing data to PostgreSQL.

"},{"location":"setup/#migrating-from-linuxserverio-docker-image","title":"Migrating from LinuxServer.io Docker Image","text":"

As with any upgrades and large changes, it is highly recommended to create a backup before starting. This assumes the image was running using Docker Compose, but the instructions are translatable to Docker commands as well.

  1. Stop and remove the paperless container
  2. If using an external database, stop the container
  3. Update Redis configuration

    1. If REDIS_URL is already set, change it to PAPERLESS_REDIS and continue to step 4.

    2. Otherwise, in the docker-compose.yml add a new service for Redis, following the example compose files

    3. Set the environment variable PAPERLESS_REDIS so it points to the new Redis container

  4. Update user mapping

    1. If set, change the environment variable PUID to USERMAP_UID

    2. If set, change the environment variable PGID to USERMAP_GID

  5. Update configuration paths

    1. Set the environment variable PAPERLESS_DATA_DIR to /config
  6. Update media paths

    1. Set the environment variable PAPERLESS_MEDIA_ROOT to /data/media
  7. Update timezone

    1. Set the environment variable PAPERLESS_TIME_ZONE to the same value as TZ
  8. Modify the image: to point to ghcr.io/paperless-ngx/paperless-ngx:latest or a specific version if preferred.

  9. Start the containers as before, using docker compose.
"},{"location":"setup/#sqlite_to_psql","title":"Moving data from SQLite to PostgreSQL or MySQL/MariaDB","text":"

The best way to migrate between database types is to perform an export and then import into a clean installation of Paperless-ngx.

"},{"location":"setup/#moving-back-to-paperless","title":"Moving back to Paperless","text":"

Lets say you migrated to Paperless-ngx and used it for a while, but decided that you don't like it and want to move back (If you do, send me a mail about what part you didn't like!), you can totally do that with a few simple steps.

Paperless-ngx modified the database schema slightly, however, these changes can be reverted while keeping your current data, so that your current data will be compatible with original Paperless. Thumbnails were also changed from PNG to WEBP format and will need to be re-generated.

Execute this:

$ cd /path/to/paperless\n$ docker compose run --rm webserver migrate documents 0023\n

Or without docker:

$ cd /path/to/paperless/src\n$ python3 manage.py migrate documents 0023\n

After regenerating thumbnails, you'll need to clear your cookies (Paperless-ngx comes with updated dependencies that do cookie-processing differently) and probably your cache as well.

"},{"location":"setup/#less-powerful-devices","title":"Considerations for less powerful devices","text":"

Paperless runs on Raspberry Pi. However, some things are rather slow on the Pi and configuring some options in paperless can help improve performance immensely:

For details, refer to configuration.

Note

Updating the automatic matching algorithm takes quite a bit of time. However, the update mechanism checks if your data has changed before doing the heavy lifting. If you experience the algorithm taking too much cpu time, consider changing the schedule in the admin interface to daily. You can also manually invoke the task by changing the date and time of the next run to today/now.

The actual matching of the algorithm is fast and works on Raspberry Pi as well as on any other device.

"},{"location":"setup/#nginx","title":"Using nginx as a reverse proxy","text":"

Please see the wiki for user-maintained documentation of using nginx with Paperless-ngx.

"},{"location":"setup/#security","title":"Enhancing security","text":"

Please see the wiki for user-maintained documentation of how to configure security tools like Fail2ban with Paperless-ngx.

"},{"location":"troubleshooting/","title":"Troubleshooting","text":""},{"location":"troubleshooting/#troubleshooting","title":"Troubleshooting","text":""},{"location":"troubleshooting/#no-files-are-added-by-the-consumer","title":"No files are added by the consumer","text":"

Check for the following issues:

"},{"location":"troubleshooting/#consumer-warns-ocr-for-xx-failed","title":"Consumer warns OCR for XX failed","text":"

If you find the OCR accuracy to be too low, and/or the document consumer warns that OCR for XX failed, but we're going to stick with what we've got since FORGIVING_OCR is enabled, then you might need to install the Tesseract language files matching your document's languages.

As an example, if you are running Paperless-ngx from any Ubuntu or Debian box, and your documents are written in Spanish you may need to run:

apt-get install -y tesseract-ocr-spa\n
"},{"location":"troubleshooting/#consumer-fails-to-pickup-any-new-files","title":"Consumer fails to pickup any new files","text":"

If you notice that the consumer will only pickup files in the consumption directory at startup, but won't find any other files added later, you will need to enable filesystem polling with the configuration option PAPERLESS_CONSUMER_POLLING.

This will disable listening to filesystem changes with inotify and paperless will manually check the consumption directory for changes instead.

"},{"location":"troubleshooting/#paperless-always-redirects-to-admin","title":"Paperless always redirects to /admin","text":"

You probably had the old paperless installed at some point. Paperless installed a permanent redirect to /admin in your browser, and you need to clear your browsing data / cache to fix that.

"},{"location":"troubleshooting/#operation-not-permitted","title":"Operation not permitted","text":"

You might see errors such as:

chown: changing ownership of '../export': Operation not permitted\n

The container tries to set file ownership on the listed directories. This is required so that the user running paperless inside docker has write permissions to these folders. This happens when pointing these directories to NFS shares, for example.

Ensure that chown is possible on these directories.

"},{"location":"troubleshooting/#classifier-error-no-training-data-available","title":"Classifier error: No training data available","text":"

This indicates that the Auto matching algorithm found no documents to learn from. This may have two reasons:

"},{"location":"troubleshooting/#userwarning-in-sklearn-on-every-single-document","title":"UserWarning in sklearn on every single document","text":"

You may encounter warnings like this:

/usr/local/lib/python3.7/site-packages/sklearn/base.py:315:\nUserWarning: Trying to unpickle estimator CountVectorizer from version 0.23.2 when using version 0.24.0.\nThis might lead to breaking code or invalid results. Use at your own risk.\n

This happens when certain dependencies of paperless that are responsible for the auto matching algorithm are updated. After updating these, your current training data might not be compatible anymore. This can be ignored in most cases. This warning will disappear automatically when paperless updates the training data.

If you want to get rid of the warning or actually experience issues with automatic matching, delete the file classification_model.pickle in the data directory and let paperless recreate it.

"},{"location":"troubleshooting/#504-server-error-gateway-timeout-when-adding-office-documents","title":"504 Server Error: Gateway Timeout when adding Office documents","text":"

You may experience these errors when using the optional TIKA integration:

requests.exceptions.HTTPError: 504 Server Error: Gateway Timeout for url: http://gotenberg:3000/forms/libreoffice/convert\n

Gotenberg is a server that converts Office documents into PDF documents and has a default timeout of 30 seconds. When conversion takes longer, Gotenberg raises this error.

You can increase the timeout by configuring a command flag for Gotenberg (see also here). If using Docker Compose, this is achieved by the following configuration change in the docker-compose.yml file:

# The gotenberg chromium route is used to convert .eml files. We do not\n# want to allow external content like tracking pixels or even javascript.\ncommand:\n    - 'gotenberg'\n    - '--chromium-disable-javascript=true'\n    - '--chromium-allow-list=file:///tmp/.*'\n    - '--api-timeout=60s'\n
"},{"location":"troubleshooting/#permission-denied-errors-in-the-consumption-directory","title":"Permission denied errors in the consumption directory","text":"

You might encounter errors such as:

The following error occurred while consuming document.pdf: [Errno 13] Permission denied: '/usr/src/paperless/src/../consume/document.pdf'\n

This happens when paperless does not have permission to delete files inside the consumption directory. Ensure that USERMAP_UID and USERMAP_GID are set to the user id and group id you use on the host operating system, if these are different from 1000. See Docker setup.

Also ensure that you are able to read and write to the consumption directory on the host.

"},{"location":"troubleshooting/#oserror-errno-19-no-such-device-when-consuming-files","title":"OSError: [Errno 19] No such device when consuming files","text":"

If you experience errors such as:

File \"/usr/local/lib/python3.7/site-packages/whoosh/codec/base.py\", line 570, in open_compound_file\nreturn CompoundStorage(dbfile, use_mmap=storage.supports_mmap)\nFile \"/usr/local/lib/python3.7/site-packages/whoosh/filedb/compound.py\", line 75, in __init__\nself._source = mmap.mmap(fileno, 0, access=mmap.ACCESS_READ)\nOSError: [Errno 19] No such device\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\nFile \"/usr/local/lib/python3.7/site-packages/django_q/cluster.py\", line 436, in worker\nres = f(*task[\"args\"], **task[\"kwargs\"])\nFile \"/usr/src/paperless/src/documents/tasks.py\", line 73, in consume_file\noverride_tag_ids=override_tag_ids)\nFile \"/usr/src/paperless/src/documents/consumer.py\", line 271, in try_consume_file\nraise ConsumerError(e)\n

Paperless uses a search index to provide better and faster full text searching. This search index is stored inside the data folder. The search index uses memory-mapped files (mmap). The above error indicates that paperless was unable to create and open these files.

This happens when you're trying to store the data directory on certain file systems (mostly network shares) that don't support memory-mapped files.

"},{"location":"troubleshooting/#web-ui-stuck-at-loading","title":"Web-UI stuck at \"Loading...\"","text":"

This might have multiple reasons.

  1. If you built the docker image yourself or deployed using the bare metal route, make sure that there are files in <paperless-root>/static/frontend/<lang-code>/. If there are no files, make sure that you executed collectstatic successfully, either manually or as part of the docker image build.

    If the front end is still missing, make sure that the front end is compiled (files present in src/documents/static/frontend). If it is not, you need to compile the front end yourself or download the release archive instead of cloning the repository.

"},{"location":"troubleshooting/#error-while-reading-metadata","title":"Error while reading metadata","text":"

You might find messages like these in your log files:

[WARNING] [paperless.parsing.tesseract] Error while reading metadata\n

This indicates that paperless failed to read PDF metadata from one of your documents. This happens when you open the affected documents in paperless for editing. Paperless will continue to work, and will simply not show the invalid metadata.

"},{"location":"troubleshooting/#consumer-fails-with-a-filenotfounderror","title":"Consumer fails with a FileNotFoundError","text":"

You might find messages like these in your log files:

[ERROR] [paperless.consumer] Error while consuming document SCN_0001.pdf: FileNotFoundError: [Errno 2] No such file or directory: '/tmp/ocrmypdf.io.yhk3zbv0/origin.pdf'\nTraceback (most recent call last):\n  File \"/app/paperless/src/paperless_tesseract/parsers.py\", line 261, in parse\n    ocrmypdf.ocr(**args)\n  File \"/usr/local/lib/python3.8/dist-packages/ocrmypdf/api.py\", line 337, in ocr\n    return run_pipeline(options=options, plugin_manager=plugin_manager, api=True)\n  File \"/usr/local/lib/python3.8/dist-packages/ocrmypdf/_sync.py\", line 385, in run_pipeline\n    exec_concurrent(context, executor)\n  File \"/usr/local/lib/python3.8/dist-packages/ocrmypdf/_sync.py\", line 302, in exec_concurrent\n    pdf = post_process(pdf, context, executor)\n  File \"/usr/local/lib/python3.8/dist-packages/ocrmypdf/_sync.py\", line 235, in post_process\n    pdf_out = metadata_fixup(pdf_out, context)\n  File \"/usr/local/lib/python3.8/dist-packages/ocrmypdf/_pipeline.py\", line 798, in metadata_fixup\n    with pikepdf.open(context.origin) as original, pikepdf.open(working_file) as pdf:\n  File \"/usr/local/lib/python3.8/dist-packages/pikepdf/_methods.py\", line 923, in open\n    pdf = Pdf._open(\nFileNotFoundError: [Errno 2] No such file or directory: '/tmp/ocrmypdf.io.yhk3zbv0/origin.pdf'\n

This probably indicates paperless tried to consume the same file twice. This can happen for a number of reasons, depending on how documents are placed into the consume folder. If paperless is using inotify (the default) to check for documents, try adjusting the inotify configuration. If polling is enabled, try adjusting the polling configuration.

"},{"location":"troubleshooting/#consumer-fails-waiting-for-file-to-remain-unmodified","title":"Consumer fails waiting for file to remain unmodified.","text":"

You might find messages like these in your log files:

[ERROR] [paperless.management.consumer] Timeout while waiting on file /usr/src/paperless/src/../consume/SCN_0001.pdf to remain unmodified.\n

This indicates paperless timed out while waiting for the file to be completely written to the consume folder. Adjusting polling configuration values should resolve the issue.

Note

The user will need to manually move the file out of the consume folder and back in, for the initial failing file to be consumed.

"},{"location":"troubleshooting/#consumer-fails-reporting-os-reports-file-as-busy-still","title":"Consumer fails reporting \"OS reports file as busy still\".","text":"

You might find messages like these in your log files:

[WARNING] [paperless.management.consumer] Not consuming file /usr/src/paperless/src/../consume/SCN_0001.pdf: OS reports file as busy still\n

This indicates paperless was unable to open the file, as the OS reported the file as still being in use. To prevent a crash, paperless did not try to consume the file. If paperless is using inotify (the default) to check for documents, try adjusting the inotify configuration. If polling is enabled, try adjusting the polling configuration.

Note

The user will need to manually move the file out of the consume folder and back in, for the initial failing file to be consumed.

"},{"location":"troubleshooting/#log-reports-creating-paperlesstask-failed","title":"Log reports \"Creating PaperlessTask failed\".","text":"

You might find messages like these in your log files:

[ERROR] [paperless.management.consumer] Creating PaperlessTask failed: db locked\n

You are likely using an sqlite based installation, with an increased number of workers and are running into sqlite's concurrency limitations. Uploading or consuming multiple files at once results in many workers attempting to access the database simultaneously.

Consider changing to the PostgreSQL database if you will be processing many documents at once often. Otherwise, try tweaking the PAPERLESS_DB_TIMEOUT setting to allow more time for the database to unlock. Additionally, you can change your SQLite database to use \"Write-Ahead Logging\". These changes may have minor performance implications but can help prevent database locking issues.

"},{"location":"troubleshooting/#granian-fails-to-start-with-is-not-a-valid-port-number","title":"granian fails to start with \"is not a valid port number\"","text":"

You are likely running using Kubernetes, which automatically creates an environment variable named ${serviceName}_PORT. This is the same environment variable which is used by Paperless to optionally change the port granian listens on.

To fix this, set PAPERLESS_PORT again to your desired port, or the default of 8000.

"},{"location":"troubleshooting/#database-warns-about-unique-constraint-documents_tag_name_uniq","title":"Database Warns about unique constraint \"documents_tag_name_uniq","text":"

You may see database log lines like:

ERROR:  duplicate key value violates unique constraint \"documents_tag_name_uniq\"\nDETAIL:  Key (name)=(NameF) already exists.\nSTATEMENT:  INSERT INTO \"documents_tag\" (\"owner_id\", \"name\", \"match\", \"matching_algorithm\", \"is_insensitive\", \"color\", \"is_inbox_tag\") VALUES (NULL, 'NameF', '', 1, true, '#a6cee3', false) RETURNING \"documents_tag\".\"id\"\n

This can happen during heavy consumption when using polling. Paperless will handle it correctly and the file will still be consumed

"},{"location":"troubleshooting/#consumption-fails-with-ghostscript-pdfa-rendering-failed","title":"Consumption fails with \"Ghostscript PDF/A rendering failed\"","text":"

Newer versions of OCRmyPDF will fail if it encounters errors during processing. This is intentional as the output archive file may differ in unexpected or undesired ways from the original. As the logs indicate, if you encounter this error you can set PAPERLESS_OCR_USER_ARGS: '{\"continue_on_soft_render_error\": true}' to try to 'force' processing documents with this issue.

"},{"location":"troubleshooting/#convert-uuid-field","title":"Logs show \"possible incompatible database column\" when deleting documents","text":"

You may see errors when deleting documents like:

Data too long for column 'transaction_id' at row 1\n

This error can occur in installations which have upgraded from a version of Paperless-ngx that used Django 4 (Paperless-ngx versions prior to v2.13.0) with a MariaDB/MySQL database. Due to the backwards-incompatible change in Django 5, the column \"documents_document.transaction_id\" will need to be re-created, which can be done with a one-time run of the following management command:

$ python3 manage.py convert_mariadb_uuid\n
"},{"location":"troubleshooting/#platform-specific-deployment-troubleshooting","title":"Platform-Specific Deployment Troubleshooting","text":"

A user-maintained wiki page is available to help troubleshoot issues that may arise when trying to deploy Paperless-ngx on specific platforms, for example SELinux. Please see the wiki.

"},{"location":"usage/","title":"Basic Usage","text":""},{"location":"usage/#usage-overview","title":"Usage Overview","text":"

Paperless-ngx is an application that manages your personal documents. With the (optional) help of a document scanner (see the scanners wiki), Paperless-ngx transforms your unwieldy physical documents into a searchable archive and provides many utilities for finding and managing your documents.

"},{"location":"usage/#terms-and-definitions","title":"Terms and definitions","text":"

Paperless essentially consists of two different parts for managing your documents:

Each document has data fields that you can assign to them:

"},{"location":"usage/#the-web-ui","title":"The Web UI","text":"

The web UI is the primary way to interact with Paperless-ngx. It is a single-page application that is built with modern web technologies and is designed to be fast and responsive. The web UI includes a robust interface for filtering, viewing, searching and editing documents. You can also manage tags, correspondents, document types, and other settings from the web UI.

The web UI also includes a 'tour' feature that can be accessed from the settings page or from the dashboard for new users. The tour highlights some of the key features of the web UI and can be useful for new users.

"},{"location":"usage/#dashboard","title":"Dashboard","text":"

The dashboard is the first page you see when you log in. By default, it does not show any documents, but you can add saved views to the dashboard to show documents that match certain criteria. The dashboard also includes a button to upload documents to Paperless-ngx but you can also drag and drop files anywhere in the app to initiate the consumption process.

"},{"location":"usage/#document-list","title":"Document List","text":"

The document list is the primary way to view and interact with your documents. You can filter the list by tags, correspondents, document types, and other criteria. You can also edit documents in bulk including assigning tags, correspondents, document types, and custom fields. Selecting document(s) from the list will allow you to perform the various bulk edit operations. The document list also includes a search bar that allows you to search for documents by title, ASN, and use advanced search syntax.

"},{"location":"usage/#document-detail","title":"Document Detail","text":"

The document detail page shows all the information about a single document. You can view the document, edit its metadata, assign tags, correspondents, document types, and custom fields. You can also view the document history, download the document or share it via a share link.

"},{"location":"usage/#management-lists","title":"Management Lists","text":"

Paperless-ngx includes management lists for tags, correspondents, document types and more. These areas allow you to view, add, edit, delete and manage permissions for these objects. You can also manage saved views, mail accounts, mail rules, workflows and more from the management sections.

"},{"location":"usage/#nested-tags","title":"Nested Tags","text":"

Paperless-ngx v2.19 introduces support for nested tags, allowing you to create a hierarchy of tags, which may be useful for organizing your documents. Tags can have a 'parent' tag, creating a tree-like structure, to a maximum depth of 5. When a tag is added to a document, all of its parent tags are also added automatically and similarly, when a tag is removed from a document, all of its child tags are also removed. Additionally, assigning a parent to an existing tag will automatically update all documents that have this tag assigned, adding the parent tag as well.

"},{"location":"usage/#adding-documents-to-paperless-ngx","title":"Adding documents to Paperless-ngx","text":"

Once you've got Paperless setup, you need to start feeding documents into it. When adding documents to paperless, it will perform the following operations on your documents:

  1. OCR the document, if it has no text. Digital documents usually have text, and this step will be skipped for those documents.
  2. Paperless will create an archivable PDF/A document from your document. If this document is coming from your scanner, it will have embedded selectable text.
  3. Paperless performs automatic matching of tags, correspondents and types on the document before storing it in the database.

Tip

This process can be configured to fit your needs. If you don't want paperless to create archived versions for digital documents, you can configure that by configuring PAPERLESS_OCR_SKIP_ARCHIVE_FILE=with_text. Please read the relevant section in the documentation.

Note

No matter which options you choose, Paperless will always store the original document that it found in the consumption directory or in the mail and will never overwrite that document (except when using certain document actions, which make that clear). Archived versions are stored alongside the original versions. Any files found in the consumption directory will stored inside the Paperless-ngx file structure and will not be retained in the consumption directory.

"},{"location":"usage/#the-consumption-directory","title":"The consumption directory","text":"

The primary method of getting documents into your database is by putting them in the consumption directory. The consumer waits patiently, looking for new additions to this directory. When it finds them, the consumer goes about the process of parsing them with the OCR, indexing what it finds, and storing it in the media directory. You should think of this folder as a temporary location, as files will be re-created inside Paperless-ngx and removed from the consumption folder.

Getting stuff into this directory is up to you. If you're running Paperless on your local computer, you might just want to drag and drop files there, but if you're running this on a server and want your scanner to automatically push files to this directory, you'll need to setup some sort of service to accept the files from the scanner. Typically, you're looking at an FTP server like Proftpd or a Windows folder share with Samba.

Warning

Files found in the consumption directory that are consumed will be removed from the consumption directory and stored inside the Paperless-ngx file structure using any settings / storage paths you have specified. This action is performed as safely as possible but this means it is expected that files in the consumption directory will no longer exist (there) after being consumed.

"},{"location":"usage/#web-ui-upload","title":"Web UI Upload","text":"

The dashboard has a button to upload documents to paperless or you can simply drag a file anywhere into the app to initiate the consumption process.

"},{"location":"usage/#usage-mobile_upload","title":"Mobile upload","text":"

Please see the wiki for a user-maintained list of related projects and software (e.g. for mobile devices) that is compatible with Paperless-ngx.

"},{"location":"usage/#incoming-mail","title":"Incoming Email","text":"

You can tell paperless-ngx to consume documents from your email accounts. This is a very flexible and powerful feature, if you regularly received documents via mail that you need to archive. The mail consumer can be configured via the frontend settings (/settings/mail) in the following manner:

  1. Define e-mail accounts.
  2. Define mail rules for your account.

These rules perform the following:

  1. Connect to the mail server.
  2. Fetch all matching mails (as defined by folder, maximum age and the filters)
  3. Check if there are any consumable attachments.
  4. If so, instruct paperless to consume the attachments and optionally use the metadata provided in the rule for the new document.
  5. If documents were consumed from a mail, the rule action is performed on that mail.

Paperless will check all emails only once and completely ignore messages that do not match your filters. It will also only perform the rule action on e-mails that it has consumed documents from. The filename attachment patterns can include wildcards and multiple patterns separated by a comma.

The actions all ensure that the same mail is not consumed twice by different means. These are as follows:

Warning

The mail consumer will perform these actions on all mails it has consumed documents from. Keep in mind that the actual consumption process may fail for some reason, leaving you with missing documents in paperless.

Note

With the correct set of rules, you can completely automate your email documents. Create rules for every correspondent you receive digital documents from and paperless will read them automatically. The default action \"mark as read\" is pretty tame and will not cause any damage or data loss whatsoever.

You can also setup a special folder in your mail account for paperless and use your favorite mail client to move to be consumed mails into that folder automatically or manually and tell paperless to move them to yet another folder after consumption. It's up to you.

Note

When defining a mail rule with a folder, you may need to try different characters to define how the sub-folders are separated. Common values include \".\", \"/\" or \"|\", but this varies by the mail server. Check the documentation for your mail server. In the event of an error fetching mail from a certain folder, check the Paperless logs. When a folder is not located, Paperless will attempt to list all folders found in the account to the Paperless logs.

Note

Paperless will process the rules in the order defined in the admin page.

You can define catch-all rules and have them executed last to consume any documents not matched by previous rules. Such a rule may assign an \"Unknown mail document\" tag to consumed documents so you can inspect them further.

Paperless is set up to check your mails every 10 minutes. This can be configured via PAPERLESS_EMAIL_TASK_CRON

"},{"location":"usage/#processed-mail","title":"Processed Mail","text":"

Paperless keeps track of emails it has processed in order to avoid processing the same mail multiple times. This uses the message UID provided by the mail server, which should be unique for each message. You can view and manage processed mails from the web UI under Mail > Processed Mails. If you need to re-process a message, you can delete the corresponding processed mail entry, which will allow Paperless-ngx to process the email again the next time the mail fetch task runs.

"},{"location":"usage/#oauth-email-setup","title":"OAuth Email Setup","text":"

Paperless-ngx supports OAuth2 authentication for Gmail and Outlook email accounts. To set up an email account with OAuth2, you will need to create a 'developer' app with the respective provider and obtain the client ID and client secret and set the appropriate configuration variables. You will also need to set either PAPERLESS_OAUTH_CALLBACK_BASE_URL or PAPERLESS_URL to the correct value for the OAuth2 flow to work correctly.

Specific instructions for setting up the required 'developer' app with Google or Microsoft are beyond the scope of this documentation, but you can find user-maintained instructions in the wiki or by searching the web.

Once setup, navigating to the email settings page in Paperless-ngx will allow you to add an email account for Gmail or Outlook using OAuth2. After authenticating, you will be presented with the newly-created account where you will need to enter and save your email address. After this, the account will work as any other email account in Paperless-ngx and refreshing tokens will be handled automatically.

"},{"location":"usage/#rest-api","title":"REST API","text":"

You can also submit a document using the REST API, see POSTing documents for details.

"},{"location":"usage/#sharing-documents-from-paperless-ngx","title":"Sharing documents from Paperless-ngx","text":"

Paperless-ngx supports sharing documents with other users by assigning them permissions to the document. Document files can also be shared externally via share links, email or using email or webhook actions in workflows.

"},{"location":"usage/#share-links","title":"Share Links","text":"

\"Share links\" are shareable public links to files and can be created and managed under the 'Send' button on the document detail screen.

Tip

If your paperless-ngx instance is behind a reverse-proxy you may want to create an exception to bypass any authentication layers that are part of your setup in order to make links truly publicly-accessible. Of course, do so with caution.

"},{"location":"usage/#email-sharing","title":"Email Sharing","text":"

Paperless-ngx supports directly sending documents via email. If an email server has been configured the \"Send\" button on the document detail page will include an \"Email\" option. You can also share files via email automatically by using a workflow action.

"},{"location":"usage/#permissions","title":"Permissions","text":"

Permissions in Paperless-ngx are based around 'global' permissions as well as 'object-level' permissions. Global permissions determine which parts of the application a user can access (e.g. Documents, Tags, Settings) and object-level determine which objects are visible or editable. All objects have an 'owner' and 'view' and 'edit' permissions which can be granted to other users or groups. The paperless-ngx permissions system uses the built-in user model of the backend framework, Django.

Tip

Object-level permissions only apply to the object itself. In other words, setting permissions for a Tag will not affect the permissions of documents that have the Tag.

Permissions can be set using the new \"Permissions\" tab when editing documents, or bulk-applied in the UI by selecting documents and choosing the \"Permissions\" button.

"},{"location":"usage/#default-permissions","title":"Default permissions","text":"

Workflows provide advanced ways to control permissions.

For objects created via the web UI (tags, doc types, etc.) the default is to set the current user as owner and no extra permissions, but you can explicitly set these under Settings > Permissions.

Documents consumed via the consumption directory do not have an owner or additional permissions set by default, but again, can be controlled with Workflows.

"},{"location":"usage/#users-and-groups","title":"Users and Groups","text":"

Paperless-ngx supports editing users and groups via the 'frontend' UI, which can be found under Settings > Users & Groups, assuming the user has access. If a user is designated as a member of a group those permissions will be inherited and this is reflected in the UI. Explicit permissions can be granted to limit access to certain parts of the UI (and corresponding API endpoints).

Tip

By default, new users are not granted any permissions, except those inherited from any group(s) of which they are a member.

"},{"location":"usage/#superusers","title":"Superusers","text":"

Superusers can access all parts of the front and backend application as well as any and all objects. Superuser status can only be granted by another superuser.

"},{"location":"usage/#admin-status","title":"Admin Status","text":"

Admin status (Django 'staff status') grants access to viewing the paperless logs and the system status dialog as well as accessing the Django backend.

"},{"location":"usage/#global-permissions","title":"Detailed Explanation of Global Permissions","text":"

Global permissions define what areas of the app and API endpoints users can access. For example, they determine if a user can create, edit, delete or view any documents, but individual documents themselves still have \"object-level\" permissions.

Type Details AppConfig Change or higher permissions grants access to the \"Application Configuration\" area. Correspondent Add, edit, delete or view Correspondents. CustomField Add, edit, delete or view Custom Fields. Document Add, edit, delete or view Documents. DocumentType Add, edit, delete or view Document Types. Group Add, edit, delete or view Groups. MailAccount Add, edit, delete or view Mail Accounts. MailRule Add, edit, delete or view Mail Rules. Note Add, edit, delete or view Notes. PaperlessTask View or dismiss (Change) File Tasks. SavedView Add, edit, delete or view Saved Views. ShareLink Add, delete or view Share Links. StoragePath Add, edit, delete or view Storage Paths. Tag Add, edit, delete or view Tags. UISettings Add, edit, delete or view the UI settings that are used by the web app. Users that will access the web UI must be granted at least View permissions. User Add, edit, delete or view Users. Workflow Add, edit, delete or view Workflows.Note that Workflows are global; all users who can access workflows see the same set. Workflows have other permission implications \u2014 see Workflow permissions."},{"location":"usage/#object-permissions","title":"Detailed Explanation of Object Permissions","text":"Type Details Owner By default objects are only visible and editable by their owner.Only the object owner can grant permissions to other users or groups.Additionally, only document owners can create share links and add / remove custom fields.For backwards compatibility objects can have no owner which makes them visible to any user. View Confers the ability to view (not edit) a document, tag, etc.Users without 'view' (or higher) permissions will be shown 'Private' in place of the object name for example when viewing a document with a tag for which the user doesn't have permissions. Edit Confers the ability to edit (and view) a document, tag, etc."},{"location":"usage/#password-reset","title":"Password reset","text":"

In order to enable the password reset feature you will need to setup an SMTP backend, see PAPERLESS_EMAIL_HOST. If your installation does not have PAPERLESS_URL set, the reset link included in emails will use the server host.

"},{"location":"usage/#two-factor-authentication","title":"Two-factor authentication","text":"

Users can enable two-factor authentication (2FA) for their accounts from the 'My Profile' dialog. Opening the dropdown reveals a QR code that can be scanned by a 2FA app (e.g. Google Authenticator) to generate a code. The code must then be entered in the dialog to enable 2FA. If the code is accepted and 2FA is enabled, the user will be shown a set of 10 recovery codes that can be used to login in the event that the 2FA device is lost or unavailable. These codes should be stored securely and cannot be retrieved again. Once enabled, users will be required to enter a code from their 2FA app when logging in.

Should a user lose access to their 2FA device and all recovery codes, a superuser can disable 2FA for the user from the 'Users & Groups' management screen.

"},{"location":"usage/#workflows","title":"Workflows","text":"

Note

v2.3 added \"Workflows\" and existing \"Consumption Templates\" were converted automatically to the new more powerful format.

Workflows allow hooking into the Paperless-ngx document pipeline, for example to alter what metadata (tags, doc types) and permissions (owner, privileges) are assigned to documents. Workflows can have multiple 'triggers' and 'actions'. Triggers are events (with optional filtering rules) that will cause the workflow to be run and actions are the set of sequential actions to apply.

In general, workflows and any actions they contain are applied sequentially by sort order. For \"assignment\" actions, subsequent workflow actions will override previous assignments, except for assignments that accept multiple items e.g. tags, custom fields and permissions, which will be merged.

"},{"location":"usage/#workflow-triggers","title":"Workflow Triggers","text":""},{"location":"usage/#workflow-trigger-types","title":"Types","text":"

Currently, there are four events that correspond to workflow trigger 'types':

  1. Consumption Started: before a document is consumed, so events can include filters by source (mail, consumption folder or API), file path, file name, mail rule
  2. Document Added: after a document is added. At this time, file path and source information is no longer available, but the document content has been extracted and metadata such as document type, tags, etc. have been set, so these can now be used for filtering.
  3. Document Updated: when a document is updated. Similar to 'added' events, triggers can include filtering by content matching, tags, doc type, correspondent or storage path.
  4. Scheduled: a scheduled trigger that can be used to run workflows at a specific time. The date used can be either the document added, created, updated date or you can specify a (date) custom field. You can also specify a day offset from the date (positive offsets will trigger after the date, negative offsets will trigger before).

The following flow diagram illustrates the four document trigger types:

flowchart TD\n    consumption{\"Matching\n    'Consumption'\n    trigger(s)\"}\n\n    added{\"Matching\n    'Added'\n    trigger(s)\"}\n\n    updated{\"Matching\n    'Updated'\n    trigger(s)\"}\n\n    A[New Document] --> consumption\n    consumption --> |Yes| C[Workflow Actions Run]\n    consumption --> |No| D\n    C --> D[Document Added]\n    D -- Paperless-ngx 'matching' of tags, etc. --> added\n    added --> |Yes| F[Workflow Actions Run]\n    added --> |No| G\n    F --> G[Document Finalized]\n    H[Existing Document Changed] --> updated\n    updated --> |Yes| J[Workflow Actions Run]\n    updated --> |No| K\n    J --> K[Document Saved]
"},{"location":"usage/#workflow-trigger-filters","title":"Filters","text":"

Workflows allow you to filter by:

There are also 'advanced' filters available for Added, Updated and Scheduled triggers:

"},{"location":"usage/#workflow-actions","title":"Workflow Actions","text":""},{"location":"usage/#workflow-action-types","title":"Types","text":"

The following workflow action types are available:

"},{"location":"usage/#workflow-action-assignment","title":"Assignment","text":"

\"Assignment\" actions can assign:

"},{"location":"usage/#workflow-action-removal","title":"Removal","text":"

\"Removal\" actions can remove either all of or specific sets of the following:

"},{"location":"usage/#workflow-action-email","title":"Email","text":"

\"Email\" actions can send documents via email. This action requires a mail server to be configured. You can specify:

"},{"location":"usage/#workflow-action-webhook","title":"Webhook","text":"

\"Webhook\" actions send a POST request to a specified URL. You can specify:

For security reasons, webhooks can be limited to specific ports and disallowed from connecting to local URLs. See the relevant configuration settings to change this behavior. If you are allowing non-admins to create workflows, you may want to adjust these settings to prevent abuse.

"},{"location":"usage/#workflow-placeholders","title":"Workflow placeholders","text":"

Titles can be assigned by workflows using Jinja templates. This allows for complex logic to be used to generate the title, including logical structures and filters. The template is provided as a string.

Using Jinja2 Templates is also useful for Date localization in the title.

The available inputs differ depending on the type of workflow trigger. This is because at the time of consumption (when the text is to be set), no automatic tags etc. have been applied. You can use the following placeholders in the template with any trigger type:

The following placeholders are only available for \"added\" or \"updated\" triggers

"},{"location":"usage/#examples","title":"Examples","text":"
{{ created | localize_date('MMMM', 'en_US') }}\n<!-- Output: \"January\" -->\n\n{{ added | localize_date('MMMM', 'de_DE') }}\n<!-- Output: \"Juni\" --> # codespell:ignore\n
"},{"location":"usage/#workflow-permissions","title":"Workflow permissions","text":"

All users who have application permissions for editing workflows can see the same set of workflows. In other words, workflows themselves intentionally do not have an owner or permissions.

Given their potentially far-reaching capabilities, including changing the permissions of existing documents, you may want to restrict access to workflows.

Upon migration, existing installs will grant access to workflows to users who can add documents (and superusers who can always access all parts of the app).

"},{"location":"usage/#custom-fields","title":"Custom Fields","text":"

Paperless-ngx supports the use of custom fields for documents as of v2.0, allowing a user to optionally attach data to documents which does not fit in the existing set of fields Paperless-ngx provides.

  1. First, create a custom field (under \"Manage\"), with a given name and data type. This could be something like \"Invoice Number\" or \"Date Paid\", with a data type of \"Number\", \"Date\", \"String\", etc.
  2. Once created, a field can be used with documents and data stored. To do so, use the \"Custom Fields\" menu on the document detail page, choose your existing field from the dropdown. Once the field is visible in the form you can enter the appropriate data which will be validated according to the custom field \"data type\".
  3. Fields can be removed by hovering over the field name revealing a \"Remove\" button.

Important

Added / removed fields, as well as any data, is not saved to the document until you actually hit the \"Save\" button, similar to other changes on the document details page.

Note

Once the data type for a field is set, it cannot be changed.

Multiple fields may be attached to a document but the same field name cannot be assigned multiple times to the a single document.

The following custom field types are supported:

"},{"location":"usage/#pdf-actions","title":"PDF Actions","text":"

Paperless-ngx supports basic editing operations for PDFs (these operations currently cannot be performed on non-PDF files). When viewing an individual document you can open the 'PDF Editor' to use a simple UI for re-arranging, rotating, deleting pages and splitting documents.

Important

Note that rotation and deleting pages alter the Paperless-ngx original file, which would, for example, invalidate a digital signature.

"},{"location":"usage/#document-history","title":"Document History","text":"

As of version 2.7, Paperless-ngx automatically records all changes to a document and records this in an audit log. The feature requires PAPERLESS_AUDIT_LOG_ENABLED be enabled, which it is by default as of version 2.7. Changes to documents are visible under the \"History\" tab. Note that certain changes such as those made by workflows, record the 'actor' as \"System\".

"},{"location":"usage/#document-trash","title":"Document Trash","text":"

When you first delete a document it is moved to the 'trash' until either it is explicitly deleted or it is automatically removed after a set amount of time has passed. You can set how long documents remain in the trash before being automatically deleted with PAPERLESS_EMPTY_TRASH_DELAY, which defaults to 30 days. Until the file is actually deleted (e.g. the trash is emptied), all files and database content remains intact and can be restored at any point up until that time.

Additionally you may configure a directory where deleted files are moved to when the trash is emptied with PAPERLESS_EMPTY_TRASH_DIR. Note that the empty trash directory only stores the original file, the archive file and all database information is permanently removed once a document is fully deleted.

"},{"location":"usage/#basic-searching","title":"Best practices","text":"

Paperless offers a couple tools that help you organize your document collection. However, it is up to you to use them in a way that helps you organize documents and find specific documents when you need them. This section offers a couple ideas for managing your collection.

Document types allow you to classify documents according to what they are. You can define types such as \"Receipt\", \"Invoice\", or \"Contract\". If you used to collect all your receipts in a single binder, you can recreate that system in paperless by defining a document type, assigning documents to that type and then filtering by that type to only see all receipts.

Not all documents need document types. Sometimes its hard to determine what the type of a document is or it is hard to justify creating a document type that you only need once or twice. This is okay. As long as the types you define help you organize your collection in the way you want, paperless is doing its job.

Tags can be used in many different ways. Think of tags are more versatile folders or binders. If you have a binder for documents related to university / your car or health care, you can create these binders in paperless by creating tags and assigning them to relevant documents. Just as with documents, you can filter the document list by tags and only see documents of a certain topic.

With physical documents, you'll often need to decide which folder the document belongs to. The advantage of tags over folders and binders is that a single document can have multiple tags. A physical document cannot magically appear in two different folders, but with tags, this is entirely possible.

Tip

This can be used in many different ways. One example: Imagine you're working on a particular task, such as signing up for university. Usually you'll need to collect a bunch of different documents that are already sorted into various folders. With the tag system of paperless, you can create a new group of documents that are relevant to this task without destroying the already existing organization. When you're done with the task, you could delete the tag again, which would be equal to sorting documents back into the folder they belong into. Or keep the tag, up to you.

All of the logic above applies to correspondents as well. Attach them to documents if you feel that they help you organize your collection.

When you've started organizing your documents, create a couple saved views for document collections you regularly access. This is equal to having labeled physical binders on your desk, except that these saved views are dynamic and simply update themselves as you add documents to the system.

Here are a couple examples of tags and types that you could use in your collection.

"},{"location":"usage/#basic-usage_searching","title":"Searching","text":""},{"location":"usage/#global-search","title":"Global search","text":"

The top search bar in the web UI performs a \"global\" search of the various objects Paperless-ngx uses, including documents, tags, workflows, etc. Only objects for which the user has appropriate permissions are returned. For documents, if there are < 3 results, \"advanced\" search results (which use the document index) will also be included. This can be disabled under settings.

"},{"location":"usage/#document-searches","title":"Document searches","text":"

Paperless offers an extensive searching mechanism that is designed to allow you to quickly find a document you're looking for (for example, that thing that just broke and you bought a couple months ago, that contract you signed 8 years ago).

When you search paperless for a document, it tries to match this query against your documents. Paperless will look for matching documents by inspecting their content, title, correspondent, type and tags. Paperless returns a scored list of results, so that documents matching your query better will appear further up in the search results.

By default, paperless returns only documents which contain all words typed in the search bar. However, paperless also offers advanced search syntax if you want to drill down the results further.

Matching documents with logical expressions:

shopname AND (product1 OR product2)\n

Matching specific tags, correspondents or types:

type:invoice tag:unpaid\ncorrespondent:university certificate\n

Matching dates:

created:[2005 to 2009]\nadded:yesterday\nmodified:today\n

Matching inexact words:

produ*name\n

Note

Inexact terms are hard for search indexes. These queries might take a while to execute. That's why paperless offers auto complete and query correction.

All of these constructs can be combined as you see fit. If you want to learn more about the query language used by paperless, paperless uses Whoosh's default query language. Head over to Whoosh query language. For details on what date parsing utilities are available, see Date parsing.

"},{"location":"usage/#keyboard-shortcuts-hotkeys","title":"Keyboard shortcuts / hotkeys","text":"

A list of available hotkeys can be shown on any page using Shift + ?. The help dialog shows only the keys that are currently available based on which area of Paperless-ngx you are using.

"},{"location":"usage/#usage-recommended-workflow","title":"The recommended workflow","text":"

Once you have familiarized yourself with paperless and are ready to use it for all your documents, the recommended workflow for managing your documents is as follows. This workflow also takes into account that some documents have to be kept in physical form, but still ensures that you get all the advantages for these documents as well.

The following diagram shows how easy it is to manage your documents.

"},{"location":"usage/#preparations-in-paperless","title":"Preparations in paperless","text":""},{"location":"usage/#processing-of-the-physical-documents","title":"Processing of the physical documents","text":"

Keep a physical inbox. Whenever you receive a document that you need to archive, put it into your inbox. Regularly, do the following for all documents in your inbox:

  1. For each document, decide if you need to keep the document in physical form. This applies to certain important documents, such as contracts and certificates.
  2. If you need to keep the document, write a running number on the document before scanning, starting at one and counting upwards. This is the archive serial number, or ASN in short.
  3. Scan the document.
  4. If the document has an ASN assigned, store it in a single binder, sorted by ASN. Don't order this binder in any other way.
  5. If the document has no ASN, throw it away. Yay!

Tip

Instead of writing a number on the document by hand, you may also prepare a spool of labels with barcodes with an ascending serial number, that are formatted like ASN00001. This also enables Paperless to automatically parse and process the ASN (if enabled in the config), so that you don't need to manually assign it.

Over time, you will notice that your physical binder will fill up. If it is full, label the binder with the range of ASNs in this binder (i.e., \"Documents 1 to 343\"), store the binder in your cellar or elsewhere, and start a new binder.

The idea behind this process is that you will never have to use the physical binders to find a document. If you need a specific physical document, you may find this document by:

  1. Searching in paperless for the document.
  2. Identify the ASN of the document, since it appears on the scan.
  3. Grab the relevant document binder and get the document. This is easy since they are sorted by ASN.
"},{"location":"usage/#processing-of-documents-in-paperless","title":"Processing of documents in paperless","text":"

Once you have scanned in a document, proceed in paperless as follows.

  1. If the document has an ASN, assign the ASN to the document.
  2. Assign a correspondent to the document (i.e., your employer, bank, etc) This isn't strictly necessary but helps in finding a document when you need it.
  3. Assign a document type (i.e., invoice, bank statement, etc) to the document This isn't strictly necessary but helps in finding a document when you need it.
  4. Assign a proper title to the document (the name of an item you bought, the subject of the letter, etc)
  5. Check that the date of the document is correct. Paperless tries to read the date from the content of the document, but this fails sometimes if the OCR is bad or multiple dates appear on the document.
  6. Remove inbox tags from the documents.

Tip

You can setup manual matching rules for your correspondents and tags and paperless will assign them automatically. After consuming a couple documents, you can even ask paperless to learn when to assign tags and correspondents by itself. For details on this feature, see advanced matching.

"},{"location":"usage/#task-management","title":"Task management","text":"

Some documents require attention and require you to act on the document. You may take two different approaches to handle these documents based on how regularly you intend to scan documents and use paperless.

"},{"location":"usage/#architecture","title":"Architecture","text":"

Paperless-ngx consists of the following components:

"}]}