mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2025-04-29 11:09:27 -05:00
1 line
751 KiB
JSON
1 line
751 KiB
JSON
{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Home","text":"<p>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.</p> <p>Get started Demo</p> <p> </p>"},{"location":"#features","title":"Features","text":"<ul> <li>Organize and index your scanned documents with tags, correspondents, types, and more.</li> <li>Your data is stored locally on your server and is never transmitted or shared in any way.</li> <li>Performs OCR on your documents, adding searchable and selectable text, even to documents scanned with only images.</li> <li>Utilizes the open-source Tesseract engine to recognize more than 100 languages.</li> <li>Documents are saved as PDF/A format which is designed for long term storage, alongside the unaltered originals.</li> <li>Uses machine-learning to automatically add tags, correspondents and document types to your documents.</li> <li>Supports PDF documents, images, plain text files, Office documents (Word, Excel, Powerpoint, and LibreOffice equivalents)<sup>1</sup> and more.</li> <li>Paperless stores your documents plain on disk. Filenames and folders are managed by paperless and their format can be configured freely with different configurations assigned to different documents.</li> <li>Beautiful, modern web application that features:<ul> <li>Customizable dashboard with statistics.</li> <li>Filtering by tags, correspondents, types, and more.</li> <li>Bulk editing of tags, correspondents, types and more.</li> <li>Drag-and-drop uploading of documents throughout the app.</li> <li>Customizable views can be saved and displayed on the dashboard and / or sidebar.</li> <li>Support for custom fields of various data types.</li> <li>Shareable public links with optional expiration.</li> </ul> </li> <li>Full text search helps you find what you need:<ul> <li>Auto completion suggests relevant words from your documents.</li> <li>Results are sorted by relevance to your search query.</li> <li>Highlighting shows you which parts of the document matched the query.</li> <li>Searching for similar documents (\"More like this\")</li> </ul> </li> <li>Email processing<sup>1</sup>: import documents from your email accounts:<ul> <li>Configure multiple accounts and rules for each account.</li> <li>After processing, paperless can perform actions on the messages such as marking as read, deleting and more.</li> </ul> </li> <li>A built-in robust multi-user permissions system that supports 'global' permissions as well as per document or object.</li> <li>A powerful workflow system that gives you even more control.</li> <li>Optimized for multi core systems: Paperless-ngx consumes multiple documents in parallel.</li> <li>The integrated sanity checker makes sure that your document archive is in good health.</li> </ul>"},{"location":"#paperless-a-history","title":"Paperless, a history","text":"<p>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!</p> <p>Further discussion of the transition between these projects can be found at ng#1599 and ng#1632.</p>"},{"location":"#screenshots","title":"Screenshots","text":"<p>Paperless-ngx aims to be as nice to use as it is useful. Check out some screenshots below.</p> <p></p> <p>The dashboard shows saved views which can be sorted. Documents can be uploaded with the button or dropped anywhere in the application.</p> <p>The document list provides three different styles to browse your documents.</p> <p> </p> <p>Use the 'slim' sidebar to focus on your docs and minimize the UI.</p> <p></p> <p>Of course, Paperless-ngx also supports dark mode:</p> <p></p> <p>Quickly find documents with extensive filtering mechanisms.</p> <p></p> <p>And perform bulk edit operations to set tags, correspondents, etc. as well as permissions.</p> <p></p> <p>Side-by-side editing of documents.</p> <p></p> <p>Support for custom fields.</p> <p></p> <p></p> <p>A robust permissions system with support for 'global' and document / object permissions.</p> <p></p> <p></p> <p>Searching provides auto complete and highlights the results.</p> <p></p> <p></p> <p>Tag, correspondent, document type and storage path editing.</p> <p> </p> <p>Mail rules support various filters and actions for incoming e-mails.</p> <p></p> <p>Workflows provide finer control over the document pipeline and trigger actions.</p> <p></p> <p>Mobile devices are supported.</p> <p> </p>"},{"location":"#support","title":"Support","text":"<p>Community support is available via GitHub Discussions and the Matrix chat room.</p>"},{"location":"#feature-requests","title":"Feature Requests","text":"<p>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.</p>"},{"location":"#bugs","title":"Bugs","text":"<p>For bugs please open an issue or start a discussion if you have questions.</p>"},{"location":"#contributing","title":"Contributing","text":"<p>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!</p>"},{"location":"#translation","title":"Translation","text":"<p>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!</p>"},{"location":"#scanners-software","title":"Scanners & Software","text":"<p>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.</p> <ol> <li> <p>Office document and email consumption support is optional and provided by Apache Tika (see configuration)\u00a0\u21a9\u21a9</p> </li> </ol>"},{"location":"administration/","title":"Administration","text":""},{"location":"administration/#backup","title":"Making backups","text":"<p>Multiple options exist for making backups of your paperless instance, depending on how you installed paperless.</p> <p>Before making a backup, it's probably best to make sure that paperless is not actively consuming documents at that time.</p> <p>Options available to any installation of paperless:</p> <ul> <li> <p>Use the document exporter. The document exporter exports all your documents, thumbnails, metadata, and database contents to a specific folder. You may import your documents and settings into a fresh instance of paperless again or store your documents in another DMS with this export.</p> <p>The document exporter is also able to update an already existing export. Therefore, incremental backups with <code>rsync</code> are entirely possible.</p> <p>The exporter does not include API tokens and they will need to be re-generated after importing.</p> </li> </ul> <p>Caution</p> <p>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.</p> <p>Options available to docker installations:</p> <ul> <li> <p>Backup the docker volumes. These usually reside within <code>/var/lib/docker/volumes</code> on the host and you need to be root in order to access them.</p> <p>Paperless uses 4 volumes:</p> <ul> <li><code>paperless_media</code>: This is where your documents are stored.</li> <li><code>paperless_data</code>: This is where auxiliary data is stored. This folder also contains the SQLite database, if you use it.</li> <li><code>paperless_pgdata</code>: Exists only if you use PostgreSQL and contains the database.</li> <li><code>paperless_dbdata</code>: Exists only if you use MariaDB and contains the database.</li> </ul> </li> </ul> <p>Options available to bare-metal and non-docker installations:</p> <ul> <li> <p>Backup the entire paperless folder. This ensures that if your paperless instance crashes at some point or your disk fails, you can simply copy the folder back into place and it works.</p> <p>When using PostgreSQL or MariaDB, you'll also have to backup the database.</p> </li> </ul>"},{"location":"administration/#migrating-restoring","title":"Restoring","text":"<p>If you've backed-up Paperless-ngx using the document exporter, restoring can simply be done with the document importer.</p> <p>Of course, other backup strategies require restoring any volumes, folders and database copies you created in the steps above.</p>"},{"location":"administration/#updating","title":"Updating Paperless","text":""},{"location":"administration/#docker-updating","title":"Docker Route","text":"<p>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.</p> <p>First of all, make sure no active processes (like consumption) are running, then make a backup.</p> <p>After that, ensure that paperless is stopped:</p> <pre><code>$ cd /path/to/paperless\n$ docker compose down\n</code></pre> <ol> <li> <p>If you pull the image from the docker hub, all you need to do is:</p> <pre><code>docker compose pull\ndocker compose up\n</code></pre> <p>The Docker Compose files refer to the <code>latest</code> version, which is always the latest stable release.</p> </li> <li> <p>If you built the image yourself, do the following:</p> <pre><code>git pull\ndocker compose build\ndocker compose up\n</code></pre> </li> </ol> <p>Running <code>docker compose up</code> 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 <code>-d</code> to have it run in the background.</p> <p>Note</p> <p>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 <code>docker-compose.yml</code> file from here or edit the <code>docker-compose.yml</code> file, find the line that says</p> <pre><code>image: ghcr.io/paperless-ngx/paperless-ngx:0.9.x\n</code></pre> <p>and replace the version with <code>latest</code>:</p> <pre><code>image: ghcr.io/paperless-ngx/paperless-ngx:latest\n</code></pre> <p>Note</p> <p>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 <code>docker-compose.yml</code> find the line that says</p> <pre><code>image: ghcr.io/paperless-ngx/paperless-ngx:latest\n</code></pre> <p>and replace the version with the series you want to track, for example:</p> <pre><code>image: ghcr.io/paperless-ngx/paperless-ngx:1.7\n</code></pre>"},{"location":"administration/#bare-metal-updating","title":"Bare Metal Route","text":"<p>After grabbing the new release and unpacking the contents, do the following:</p> <ol> <li> <p>Update dependencies. New paperless version may require additional dependencies. The dependencies required are listed in the section about bare metal installations.</p> </li> <li> <p>Update python requirements. Keep in mind to activate your virtual environment before that, if you use one.</p> <pre><code>pip install -r requirements.txt\n</code></pre> <p>Note</p> <p>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.</p> </li> <li> <p>Migrate the database.</p> <pre><code>cd src\npython3 manage.py migrate # (1)\n</code></pre> <ol> <li>Including <code>sudo -Hu <paperless_user></code> may be required</li> </ol> <p>This might not actually do anything. Not every new paperless version comes with new database migrations.</p> </li> </ol>"},{"location":"administration/#database-upgrades","title":"Database Upgrades","text":"<p>In general, paperless does not require a specific version of PostgreSQL or MariaDB and it is 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.</p> <p>For PostgreSQL, refer to Upgrading a PostgreSQL Cluster.</p> <p>For MariaDB, refer to Upgrading MariaDB</p> <p>You may also use the exporter and importer with the <code>--data-only</code> flag, after creating a new database with the updated version of PostgreSQL or MariaDB.</p> <p>Warning</p> <p>You should not change any settings, especially paths, when doing this or there is a risk of data loss</p>"},{"location":"administration/#management-commands","title":"Management utilities","text":"<p>Paperless comes with some management commands that perform various maintenance tasks on your paperless instance. You can invoke these commands in the following way:</p> <p>With Docker Compose, while paperless is running:</p> <pre><code>$ cd /path/to/paperless\n$ docker compose exec webserver <command> <arguments>\n</code></pre> <p>With docker, while paperless is running:</p> <pre><code>$ docker exec -it <container-name> <command> <arguments>\n</code></pre> <p>Bare metal:</p> <pre><code>$ cd /path/to/paperless/src\n$ python3 manage.py <command> <arguments> # (1)\n</code></pre> <ol> <li>Including <code>sudo -Hu <paperless_user></code> may be required</li> </ol> <p>All commands have built-in help, which can be accessed by executing them with the argument <code>--help</code>.</p>"},{"location":"administration/#exporter","title":"Document exporter","text":"<p>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.</p> <p>If you use the document exporter within a cronjob to backup your data you might use the <code>-T</code> flag behind exec to suppress \"The input device is not a TTY\" errors. For example: <code>docker compose exec -T webserver document_exporter ../export</code></p> <pre><code>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</code></pre> <p><code>target</code> is a folder to which the data gets written. This includes documents, thumbnails and a <code>manifest.json</code> file. The manifest contains all metadata from the database (correspondents, tags, etc).</p> <p>When you use the provided docker compose script, specify <code>../export</code> as the target. This path inside the container is automatically mounted on your host on the folder <code>export</code>.</p> <p>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 <code>-c</code> or <code>--compare-checksums</code> and paperless will attempt to compare file checksums instead. This is slower. The manifest and metadata json files are always updated, unless <code>cj</code> or <code>--compare-json</code> is specified.</p> <p>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 <code>-d</code> or <code>--delete</code>. Be careful when pointing paperless to a directory that already contains other files.</p> <p>The filenames generated by this command follow the format <code>[date created] [correspondent] [title].[extension]</code>. If you want paperless to use <code>PAPERLESS_FILENAME_FORMAT</code> for exported filenames instead, specify <code>-f</code> or <code>--use-filename-format</code>.</p> <p>If <code>-na</code> or <code>--no-archive</code> is provided, no archive files will be exported, only the original files.</p> <p>If <code>-nt</code> or <code>--no-thumbnail</code> is provided, thumbnail files will not be exported.</p> <p>Note</p> <p>When using the <code>-na</code>/<code>--no-archive</code> or <code>-nt</code>/<code>--no-thumbnail</code> 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 <code>document_thumbnails</code> or <code>document_archiver</code>. 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.</p> <p>If <code>-p</code> or <code>--use-folder-prefix</code> is provided, files will be exported in dedicated folders according to their nature: <code>archive</code>, <code>originals</code>, <code>thumbnails</code> or <code>json</code></p> <p>If <code>-sm</code> or <code>--split-manifest</code> 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, documenttype, etc)</p> <p>If <code>-z</code> or <code>--zip</code> 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 <code>-zn</code> or <code>--zip-name</code>.</p> <p>If <code>--data-only</code> 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.</p> <p>If <code>--no-progress-bar</code> 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 <code>crontab</code>.</p> <p>If <code>--passphrase</code> 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.</p> <p>Warning</p> <p>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.</p>"},{"location":"administration/#importer","title":"Document importer","text":"<p>The document importer takes the export produced by the Document exporter and imports it into paperless.</p> <p>The importer works just like the exporter. You point it at a directory, and the script does the rest of the work:</p> <pre><code>document_importer source\n</code></pre> Option Required Default Description source Yes N/A The directory containing an export <code>--no-progress-bar</code> No False If provided, the progress bar will be hidden <code>--data-only</code> No False If provided, only import data, do not import document files or thumbnails <code>--passphrase</code> No N/A If your export was encrypted with a passphrase, must be provided <p>When you use the provided docker compose script, put the export inside the <code>export</code> folder in your paperless source directory. Specify <code>../export</code> as the <code>source</code>.</p> <p>Note that .zip files (as can be generated from the exporter) are not supported. You must unzip them into the target directory first.</p> <p>Note</p> <p>Importing from a previous version of Paperless may work, but for best results it is suggested to match the versions.</p> <p>Warning</p> <p>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.</p>"},{"location":"administration/#retagger","title":"Document retagger","text":"<p>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.</p> <pre><code>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</code></pre> <p>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.</p> <p>Specify any combination of <code>-c</code>, <code>-T</code>, <code>-t</code> and <code>-s</code> 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.</p> <p>Specify <code>-i</code> 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.</p> <p>Specify <code>--id-range 1 100</code> 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.</p> <p>When multiple document types or correspondents match a single document, the retagger won't assign these to the document. Specify <code>--use-first</code> 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.</p> <p>Finally, <code>-f</code> 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. <code>-f</code> works differently for tags: By default, only additional tags get added to documents, no tags will be removed. With <code>-f</code>, tags that don't match a document anymore get removed as well.</p>"},{"location":"administration/#managing-the-automatic-matching-algorithm","title":"Managing the Automatic matching algorithm","text":"<p>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:</p> <pre><code>document_create_classifier\n</code></pre> <p>This command takes no arguments.</p>"},{"location":"administration/#thumbnails","title":"Document thumbnails","text":"<p>Use this command to re-create document thumbnails. Optionally include the <code>--document {id}</code> option to generate thumbnails for a specific document only.</p> <p>You may also specify <code>--processes</code> to control the number of processes used to generate new thumbnails. The default is to utilize a quarter of the available processors.</p> <pre><code>document_thumbnails\n</code></pre>"},{"location":"administration/#index","title":"Managing the document search index","text":"<p>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.</p> <pre><code>document_index {reindex,optimize}\n</code></pre> <p>Specify <code>reindex</code> to have the index created from scratch. This may take some time.</p> <p>Specify <code>optimize</code> 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.</p>"},{"location":"administration/#renamer","title":"Managing filenames","text":"<p>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.</p> <p>Warning</p> <p>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.</p> <pre><code>document_renamer\n</code></pre> <p>The command takes no arguments and processes all your documents at once.</p> <p>Learn how to use Management Utilities.</p>"},{"location":"administration/#sanity-checker","title":"Sanity checker","text":"<p>Paperless has a built-in sanity checker that inspects your document collection for issues.</p> <p>The issues detected by the sanity checker are as follows:</p> <ul> <li>Missing original files.</li> <li>Missing archive files.</li> <li>Inaccessible original files due to improper permissions.</li> <li>Inaccessible archive files due to improper permissions.</li> <li>Corrupted original documents by comparing their checksum against what is stored in the database.</li> <li>Corrupted archive documents by comparing their checksum against what is stored in the database.</li> <li>Missing thumbnails.</li> <li>Inaccessible thumbnails due to improper permissions.</li> <li>Documents without any content (warning).</li> <li>Orphaned files in the media directory (warning). These are files that are not referenced by any document in paperless.</li> </ul> <pre><code>document_sanity_checker\n</code></pre> <p>The command takes no arguments. Depending on the size of your document archive, this may take some time.</p>"},{"location":"administration/#fetching-e-mail","title":"Fetching e-mail","text":"<p>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:</p> <pre><code>mail_fetcher\n</code></pre> <p>The command takes no arguments and processes all your mail accounts and rules.</p> <p>Tip</p> <p>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.</p>"},{"location":"administration/#archiver","title":"Creating archived documents","text":"<p>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.</p> <p>This command creates PDF/A documents for your documents.</p> <pre><code>document_archiver --overwrite --document <id>\n</code></pre> <p>This command will only attempt to create archived documents when no archived document exists yet, unless <code>--overwrite</code> is specified. If <code>--document <id></code> is specified, the archiver will only process that document.</p> <p>Note</p> <p>This command essentially performs OCR on all your documents again, according to your settings. If you run this with <code>PAPERLESS_OCR_MODE=redo</code>, 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.</p> <p>Note</p> <p>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.</p>"},{"location":"administration/#encryption","title":"Managing encryption","text":"<p>Warning</p> <p>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.</p> <p>Consider running paperless on an encrypted filesystem instead, which will then at least provide security against physical hardware theft.</p>"},{"location":"administration/#enabling-encryption","title":"Enabling encryption","text":"<p>Enabling encryption is no longer supported.</p>"},{"location":"administration/#disabling-encryption","title":"Disabling encryption","text":"<p>Basic usage to disable encryption of your document store:</p> <p>(Note: If <code>PAPERLESS_PASSPHRASE</code> isn't set already, you need to specify it here)</p> <pre><code>decrypt_documents [--passphrase SECR3TP4SSPHRA$E]\n</code></pre>"},{"location":"administration/#fuzzy_duplicate","title":"Detecting duplicates","text":"<p>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.</p> <p>This tool does a fuzzy match over document content, looking for those which look close according to a given ratio.</p> <p>At this time, other metadata (such as correspondent or type) is not taken into account by the detection.</p> <pre><code>document_fuzzy_match [--ratio] [--processes N]\n</code></pre> 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. <p>Warning</p> <p>If providing the <code>--delete</code> 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.</p>"},{"location":"administration/#prune-history","title":"Prune history (audit log) entries","text":"<p>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.</p> <pre><code>prune_audit_logs\n</code></pre>"},{"location":"administration/#create-superuser","title":"Create superuser","text":"<p>If you need to create a superuser, use the following command:</p> <pre><code>createsuperuser\n</code></pre>"},{"location":"advanced_usage/","title":"Advanced Topics","text":"<p>Paperless offers a couple of features that automate certain tasks and make your life easier.</p>"},{"location":"advanced_usage/#matching","title":"Matching tags, correspondents, document types, and storage paths","text":"<p>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 <code>Home Utility</code> that had a <code>match</code> property of <code>bc hydro</code> and a <code>matching_algorithm</code> of <code>Exact</code>, Paperless will automatically tag your newly-consumed document with your <code>Home Utility</code> tag so long as the text <code>bc hydro</code> appears in the body of the document somewhere.</p> <p>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.</p> <p>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.</p> <p>The following algorithms are available:</p> <ul> <li>None: No matching will be performed.</li> <li>Any: Looks for any occurrence of any word provided in match in the PDF. If you define the match as <code>Bank1 Bank2</code>, it will match documents containing either of these terms.</li> <li>All: Requires that every word provided appears in the PDF, albeit not in the order provided.</li> <li>Exact: Matches only if the match appears exactly as provided (i.e. preserve ordering) in the PDF.</li> <li>Regular expression: Parses the match as a regular expression and tries to find a match within the document.</li> <li>Fuzzy match: Uses a partial matching based on locating the tag text inside the document, using a partial ratio</li> <li>Auto: Tries to automatically match new documents. This does not require you to set a match. See the notes below.</li> </ul> <p>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 <code>\"Bank of America\" BofA</code> 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\".</p> <p>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.</p>"},{"location":"advanced_usage/#automatic-matching","title":"Automatic matching","text":"<p>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.</p> <p>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.</p> <p>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:</p> <ul> <li>Changes to your documents are not immediately reflected by the matching algorithm. The neural network needs to be trained on your documents after changes. Paperless periodically (default: once each hour) checks for changes and does this automatically for you.</li> <li>The Auto matching algorithm only takes documents into account which are NOT placed in your inbox (i.e. have any inbox tags assigned to them). This ensures that the neural network only learns from documents which you have correctly tagged before.</li> <li>The matching algorithm can only work if there is a correlation between the tag, correspondent, document type, or storage path and the document itself. Your bank statements usually contain your bank account number and the name of the bank, so this works reasonably well, However, tags such as \"TODO\" cannot be automatically assigned.</li> <li>The matching algorithm needs a reasonable number of documents to identify when to assign tags, correspondents, storage paths, and types. If one out of a thousand documents has the correspondent \"Very obscure web shop I bought something five years ago\", it will probably not assign this correspondent automatically if you buy something from them again. The more documents, the better.</li> <li>Paperless also needs a reasonable amount of negative examples to decide when not to assign a certain tag, correspondent, document type, or storage path. This will usually be the case as you start filling up paperless with documents. Example: If all your documents are either from \"Webshop\" or \"Bank\", paperless will assign one of these correspondents to ANY new document, if both are set to automatic matching.</li> </ul>"},{"location":"advanced_usage/#consume-hooks","title":"Hooking into the consumption process","text":"<p>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.</p> <p>Just write a script, put it somewhere that Paperless can read & execute, and then put the path to that script in <code>paperless.conf</code> or <code>docker-compose.env</code> with the variable name of either <code>PAPERLESS_PRE_CONSUME_SCRIPT</code> or <code>PAPERLESS_POST_CONSUME_SCRIPT</code>.</p> <p>Info</p> <p>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.</p>"},{"location":"advanced_usage/#pre-consume-script","title":"Pre-consumption script","text":"<p>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:</p> Environment Variable Description <code>DOCUMENT_SOURCE_PATH</code> Original path of the consumed document <code>DOCUMENT_WORKING_PATH</code> Path to a copy of the original that consumption will work on <code>TASK_ID</code> UUID of the task used to process the new document (if any) <p>Note</p> <p>Pre-consume scripts which modify the document should only change the <code>DOCUMENT_WORKING_PATH</code> file or a second consume task may be triggered, leading to failures as two tasks work on the same document path</p> <p>Warning</p> <p>If your script modifies <code>DOCUMENT_WORKING_PATH</code> in a non-deterministic way, this may allow duplicate documents to be stored</p> <p>A simple but common example for this would be creating a simple script like this:</p> <p><code>/usr/local/bin/ocr-pdf</code></p> <pre><code>#!/usr/bin/env bash\npdf2pdfocr.py -i ${DOCUMENT_WORKING_PATH}\n</code></pre> <p><code>/etc/paperless.conf</code></p> <pre><code>...\nPAPERLESS_PRE_CONSUME_SCRIPT=\"/usr/local/bin/ocr-pdf\"\n...\n</code></pre> <p>This will pass the path to the document about to be consumed to <code>/usr/local/bin/ocr-pdf</code>, 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.</p> <p>The script's stdout and stderr will be logged line by line to the webserver log, along with the exit code of the script.</p>"},{"location":"advanced_usage/#post-consume-script","title":"Post-consumption script","text":"<p>Executed after the consumer has successfully processed a document and has moved it into paperless. It receives the following environment variables:</p> Environment Variable Description <code>DOCUMENT_ID</code> Database primary key of the document <code>DOCUMENT_FILE_NAME</code> Formatted filename, not including paths <code>DOCUMENT_CREATED</code> Date & time when document created <code>DOCUMENT_MODIFIED</code> Date & time when document was last modified <code>DOCUMENT_ADDED</code> Date & time when document was added <code>DOCUMENT_SOURCE_PATH</code> Path to the original document file <code>DOCUMENT_ARCHIVE_PATH</code> Path to the generate archive file (if any) <code>DOCUMENT_THUMBNAIL_PATH</code> Path to the generated thumbnail <code>DOCUMENT_DOWNLOAD_URL</code> URL for document download <code>DOCUMENT_THUMBNAIL_URL</code> URL for the document thumbnail <code>DOCUMENT_OWNER</code> Username of the document owner (if any) <code>DOCUMENT_CORRESPONDENT</code> Assigned correspondent (if any) <code>DOCUMENT_TAGS</code> Comma separated list of tags applied (if any) <code>DOCUMENT_ORIGINAL_FILENAME</code> Filename of original document <code>TASK_ID</code> Task UUID used to import the document (if any) <p>The script can be in any language, A simple shell script example:</p> post-consumption-example<pre><code>#!/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* 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</code></pre> <p>Note</p> <p>The post consumption script cannot cancel the consumption process.</p> <p>Warning</p> <p>The post consumption script should not modify the document files directly.</p> <p>The script's stdout and stderr will be logged line by line to the webserver log, along with the exit code of the script.</p>"},{"location":"advanced_usage/#docker-consume-hooks","title":"Docker","text":"<p>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 <code>docker-compose.yml</code>.</p> <p>Assuming you have <code>/home/paperless-ngx/scripts/post-consumption-example.sh</code> as a script which you'd like to run.</p> <p>You can pass that script into the consumer container via a host mount:</p> <pre><code>...\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</code></pre> <ol> <li>The external scripts directory is mounted to a location inside the container.</li> <li>The internal location of the script is used to set the script to run</li> <li>This can also be set in <code>docker-compose.env</code></li> </ol> <p>Troubleshooting:</p> <ul> <li>Monitor the Docker Compose log <code>cd ~/paperless-ngx; docker compose logs -f</code></li> <li>Check your script's permission e.g. in case of permission error <code>sudo chmod 755 post-consumption-example.sh</code></li> <li>Pipe your scripts's output to a log file e.g. <code>echo \"${DOCUMENT_ID}\" | tee --append /usr/src/paperless/scripts/post-consumption-example.log</code></li> </ul>"},{"location":"advanced_usage/#file-name-handling","title":"File name handling","text":"<p>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 <code>0000123.pdf</code> 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 <code>PAPERLESS_FILENAME_FORMAT</code> configuration option or using storage paths (see below). Paperless adds the correct file extension e.g. <code>.pdf</code>, <code>.jpg</code> automatically.</p> <p>This variable allows you to configure the filename (folders are allowed) using placeholders. For example, configuring this to</p> <pre><code>PAPERLESS_FILENAME_FORMAT={{ created_year }}/{{ correspondent }}/{{ title }}\n</code></pre> <p>will create a directory structure as follows:</p> <pre><code>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</code></pre> <p>Warning</p> <p>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.</p> <p>Tip</p> <p>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 <code>PAPERLESS_FILENAME_FORMAT</code> you will need to manually run the <code>document renamer</code> to move any existing documents.</p>"},{"location":"advanced_usage/#filename-format-variables","title":"Placeholders","text":"<p>Paperless provides the following variables for use within filenames:</p> <ul> <li><code>{{ asn }}</code>: The archive serial number of the document, or \"none\".</li> <li><code>{{ correspondent }}</code>: The name of the correspondent, or \"none\".</li> <li><code>{{ document_type }}</code>: The name of the document type, or \"none\".</li> <li><code>{{ tag_list }}</code>: A comma separated list of all tags assigned to the document.</li> <li><code>{{ title }}</code>: The title of the document.</li> <li><code>{{ created }}</code>: The full date (ISO 8601 format, e.g. <code>2024-03-14</code>) the document was created.</li> <li><code>{{ created_year }}</code>: Year created only, formatted as the year with century.</li> <li><code>{{ created_year_short }}</code>: Year created only, formatted as the year without century, zero padded.</li> <li><code>{{ created_month }}</code>: Month created only (number 01-12).</li> <li><code>{{ created_month_name }}</code>: Month created name, as per locale</li> <li><code>{{ created_month_name_short }}</code>: Month created abbreviated name, as per locale</li> <li><code>{{ created_day }}</code>: Day created only (number 01-31).</li> <li><code>{{ added }}</code>: The full date (ISO format) the document was added to paperless.</li> <li><code>{{ added_year }}</code>: Year added only.</li> <li><code>{{ added_year_short }}</code>: Year added only, formatted as the year without century, zero padded.</li> <li><code>{{ added_month }}</code>: Month added only (number 01-12).</li> <li><code>{{ added_month_name }}</code>: Month added name, as per locale</li> <li><code>{{ added_month_name_short }}</code>: Month added abbreviated name, as per locale</li> <li><code>{{ added_day }}</code>: Day added only (number 01-31).</li> <li><code>{{ owner_username }}</code>: Username of document owner, if any, or \"none\"</li> <li><code>{{ original_name }}</code>: Document original filename, minus the extension, if any, or \"none\"</li> <li><code>{{ doc_pk }}</code>: The paperless identifier (primary key) for the document.</li> </ul> <p>Warning</p> <p>When using file name placeholders, in particular when using <code>{tag_list}</code>, 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.</p> <p>Tip</p> <p>These variables are all simple strings, but the format can be a full template. See Filename Templates for even more advanced formatting.</p> <p>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 <code>: \\ /</code> and a couple more) are not allowed in filenames and will be replaced with dashes.</p> <p>If paperless detects that two documents share the same filename, paperless will automatically append <code>_01</code>, <code>_02</code>, etc to the filename. This happens if all the placeholders in a filename evaluate to the same value.</p> <p>If there are any errors in the placeholders included in <code>PAPERLESS_FILENAME_FORMAT</code>, paperless will fall back to using the default naming scheme instead.</p> <p>Caution</p> <p>As of now, you could potentially tell paperless to store your files anywhere outside the media directory by setting</p> <pre><code>PAPERLESS_FILENAME_FORMAT=../../my/custom/location/{title}\n</code></pre> <p>However, keep in mind that inside docker, if files get stored outside of the predefined volumes, they will be lost after a restart.</p>"},{"location":"advanced_usage/#empty-placeholders","title":"Empty placeholders","text":"<p>You can affect how empty placeholders are treated by changing the <code>PAPERLESS_FILENAME_FORMAT_REMOVE_NONE</code> setting.</p> <p>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.</p>"},{"location":"advanced_usage/#storage-paths","title":"Storage paths","text":"<p>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.</p> <ul> <li>Each storage path is a <code>PAPERLESS_FILENAME_FORMAT</code> and follows the rules described above</li> <li>Each document is assigned a storage path using the matching algorithms described above, but can be overwritten at any time</li> </ul> <p>For example, you could define the following two storage paths:</p> <ol> <li>Normal communications are put into a folder structure sorted by <code>year/correspondent</code></li> <li>Communications with insurance companies are stored in a flat structure with longer file names, but containing the full date of the correspondence.</li> </ol> <pre><code>By Year = {{ created_year }}/{{ correspondent }}/{{ title }}\nInsurances = Insurances/{{ correspondent }}/{{ created_year }}-{{ created_month }}-{{ created_day }} {{ title }}\n</code></pre> <p>If you then map these storage paths to the documents, you might get the following result. For simplicity, <code>By Year</code> defines the same structure as in the previous example above.</p> <pre><code>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</code></pre> <p>Tip</p> <p>Defining a storage path is optional. If no storage path is defined for a document, the global <code>PAPERLESS_FILENAME_FORMAT</code> is applied.</p>"},{"location":"advanced_usage/#filename-templates","title":"Filename Templates","text":"<p>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.</p> <p>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.</p>"},{"location":"advanced_usage/#additional-variables","title":"Additional Variables","text":"<ul> <li><code>{{ tag_name_list }}</code>: A list of tag names applied to the document, ordered by the tag name. Note this is a list, not a single string</li> <li><code>{{ custom_fields }}</code>: A mapping of custom field names to their type and value. A user can access the mapping by field name or check if a field is applied by checking its existence in the variable.</li> </ul> <p>Tip</p> <p>To access a custom field which has a space in the name, use the <code>get_cf_value</code> 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.</p>"},{"location":"advanced_usage/#examples","title":"Examples","text":"<p>This example will construct a path based on the archive serial number range:</p> <pre><code>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</code></pre> <p>For a document with an ASN of 205, it would result in <code>somepath/asn-201-400/asn-2xx/Title.pdf</code>, but a document with an ASN of 355 would be placed in <code>somepath/asn-201-400/asn-3xx/Title.pdf</code>.</p> <pre><code>{% 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</code></pre> <p>For a PDF document, it would result in <code>pdfs/Title.pdf</code>, but for a PNG document, the path would be <code>pngs/Title.png</code>.</p> <p>To use custom fields:</p> <pre><code>{% if \"Invoice\" in custom_fields %}\n invoices/{{ custom_fields.Invoice.value }}\n{% else %}\n not-invoices/{{ title }}\n{% endif %}\n</code></pre> <p>If the document has a custom field named \"Invoice\" with a value of 123, it would be filed into the <code>invoices/123.pdf</code>, but a document without the custom field would be filed to <code>not-invoices/Title.pdf</code></p> <p>If the custom field is named \"Invoice Number\", you would access the value of it via the <code>get_cf_value</code> filter due to quirks of the Django Template Language:</p> <pre><code>\"invoices/{{ custom_fields|get_cf_value('Invoice Number') }}\"\n</code></pre> <p>You can also use a custom <code>datetime</code> filter to format dates:</p> <pre><code>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</code></pre> <p>This will create a path like <code>invoices/2022/01/01/Invoice_OptionTwo_20220101.pdf</code> if the custom field \"Date Field\" is set to January 1, 2022 and \"Select Field\" is set to <code>OptionTwo</code>.</p> <p>You can also use a custom <code>slugify</code> filter to slufigy text:</p> <pre><code>{{ title | slugify }}\n</code></pre>"},{"location":"advanced_usage/#pdf-recovery","title":"Automatic recovery of invalid PDFs","text":"<p>Paperless will attempt to \"clean\" certain invalid PDFs with <code>qpdf</code> before processing if, for example, the mime_type detection is incorrect. This can happen if the PDF is not properly formatted or contains errors.</p>"},{"location":"advanced_usage/#celery-monitoring","title":"Celery Monitoring","text":"<p>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.</p> <p>Flower can be enabled with the setting PAPERLESS_ENABLE_FLOWER. To configure Flower further, create a <code>flowerconfig.py</code> and place it into the <code>src/paperless</code> directory. For a Docker installation, you can use volumes to accomplish this:</p> <pre><code>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</code></pre> <ol> <li>Note the <code>:ro</code> tag means the file will be mounted as read only.</li> <li>By default, Flower runs on port 5555, but this can be configured.</li> </ol>"},{"location":"advanced_usage/#custom-container-initialization","title":"Custom Container Initialization","text":"<p>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.</p> <p>To utilize this, mount a folder containing your scripts to the custom initialization directory, <code>/custom-cont-init.d</code> and place scripts you wish to run inside. For security, the folder must be owned by <code>root</code> and should have permissions of <code>a=rx</code>. Additionally, scripts must only be writable by <code>root</code>.</p> <p>Your scripts will be run directly before the webserver completes startup. Scripts will be run by the <code>root</code> user. If you would like to switch users, the utility <code>gosu</code> is available and preferred over <code>sudo</code>.</p> <p>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.</p> <p>For example, using Docker Compose:</p> <pre><code>services:\n # ...\n webserver:\n # ...\n volumes:\n - /path/to/my/scripts:/custom-cont-init.d:ro # (1)!\n</code></pre> <ol> <li>Note the <code>:ro</code> tag means the folder will be mounted as read only. This is for extra security against changes</li> </ol>"},{"location":"advanced_usage/#mysql-caveats","title":"MySQL Caveats","text":""},{"location":"advanced_usage/#case-sensitivity","title":"Case Sensitivity","text":"<p>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 <code>Name</code> and <code>NAME</code> as they are considered the same.</p> <p>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 <code>Invoice</code> won't be found when searching for <code>invoice</code>.</p> <p>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:</p> <p><code>ALTER TABLE <table_name> CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;</code></p> <p>You can also set the default for new tables (this does NOT affect existing tables) with:</p> <p><code>ALTER DATABASE <db_name> CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;</code></p> <p>Warning</p> <p>Using mariadb version 10.4+ is recommended. Using the <code>utf8mb3</code> character set on an older system may fix issues that can arise while setting up Paperless-ngx but <code>utf8mb3</code> can cause issues with consumption (where <code>utf8mb4</code> does not).</p> <p>For more information on this topic, you can refer to this Django issue.</p>"},{"location":"advanced_usage/#missing-timezones","title":"Missing timezones","text":"<p>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.</p> <p>To fix this, execute one of the following commands:</p> <p>MySQL: <code>mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql -p</code></p> <p>MariaDB: <code>mariadb-tzinfo-to-sql /usr/share/zoneinfo | mariadb -u root mysql -p</code></p>"},{"location":"advanced_usage/#barcodes","title":"Barcodes","text":"<p>Paperless is able to utilize barcodes for automatically performing some tasks.</p> <p>At this time, the library utilized for detection of barcodes supports the following types:</p> <ul> <li>AN-13/UPC-A</li> <li>UPC-E</li> <li>EAN-8</li> <li>Code 128</li> <li>Code 93</li> <li>Code 39</li> <li>Codabar</li> <li>Interleaved 2 of 5</li> <li>QR Code</li> <li>SQ Code</li> </ul> <p>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.</p> <p>For how to enable barcode usage, see the configuration. The two settings may be enabled independently, but do have interactions as explained below.</p>"},{"location":"advanced_usage/#document-splitting","title":"Document Splitting","text":"<p>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.</p>"},{"location":"advanced_usage/#archive-serial-number-assignment","title":"Archive Serial Number Assignment","text":"<p>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.</p> <p>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.</p>"},{"location":"advanced_usage/#tag-assignment","title":"Tag Assignment","text":"<p>When enabled, Paperless will parse barcodes and attempt to interpret and assign tags.</p> <p>See the relevant settings <code>PAPERLESS_CONSUMER_ENABLE_TAG_BARCODE</code> and <code>PAPERLESS_CONSUMER_TAG_BARCODE_MAPPING</code> for more information.</p>"},{"location":"advanced_usage/#collate","title":"Automatic collation of double-sided documents","text":"<p>Note</p> <p>If your scanner supports double-sided scanning natively, you do not need this feature.</p> <p>This feature is turned off by default, see configuration on how to turn it on.</p>"},{"location":"advanced_usage/#summary","title":"Summary","text":"<p>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.</p>"},{"location":"advanced_usage/#usage-example","title":"Usage example","text":"<p>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 (<code>double-sided</code> 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.</p> <p>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.</p> <p>Tip</p> <p>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.</p>"},{"location":"advanced_usage/#things-that-could-go-wrong","title":"Things that could go wrong","text":"<p>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.</p> <p>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 <code>CONSUMER_POLLING</code> is set to a value lower than it takes for the second scan to appear, like 5-10 or even lower.</p> <p>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.</p>"},{"location":"advanced_usage/#interaction-with-subdirs-as-tags","title":"Interaction with \"subdirs as tags\"","text":"<p>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 <code>double-sided/foo/bar</code> as well as <code>foo/bar/double-sided</code> will cause the collated document to be treated as if it were uploaded into <code>foo/bar</code> and receive both <code>foo</code> and <code>bar</code> tags, but not <code>double-sided</code>.</p>"},{"location":"advanced_usage/#interaction-with-document-splitting","title":"Interaction with document splitting","text":"<p>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.</p>"},{"location":"advanced_usage/#sso-and-third-party-authentication-with-paperless-ngx","title":"SSO and third party authentication with Paperless-ngx","text":"<p>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:</p>"},{"location":"advanced_usage/#remote-user-authentication","title":"Remote User authentication","text":"<p>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</p>"},{"location":"advanced_usage/#openid-connect-and-social-authentication","title":"OpenID Connect and social authentication","text":"<p>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.</p> <p>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.</p> <p>As an example, to set up login via Github, the following environment variables would need to be set:</p> <pre><code>PAPERLESS_APPS=\"allauth.socialaccount.providers.github\"\nPAPERLESS_SOCIALACCOUNT_PROVIDERS='{\"github\": {\"APPS\": [{\"provider_id\": \"github\",\"name\": \"Github\",\"client_id\": \"<CLIENT_ID>\",\"secret\": \"<CLIENT_SECRET>\"}]}}'\n</code></pre> <p>Or, to use OpenID Connect (\"OIDC\"), via Keycloak in this example:</p> <pre><code>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</code></pre> <p>More details about configuration option for various providers can be found in the allauth documentation.</p>"},{"location":"advanced_usage/#disabling-regular-login","title":"Disabling Regular Login","text":"<p>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.</p>"},{"location":"advanced_usage/#gpg-decryptor","title":"Decryption of encrypted emails before consumption","text":"<p>Paperless-ngx can be configured to decrypt gpg encrypted emails before consumption.</p>"},{"location":"advanced_usage/#requirements","title":"Requirements","text":"<p>You need a recent version of <code>gpg-agent >= 2.1.1</code> installed on your host. Your host needs to be setup for decrypting your emails via <code>gpg-agent</code>, see this tutorial for instance. Test your setup and make sure that you can encrypt and decrypt files using your key</p> <pre><code>gpg --encrypt --armor -r person@email.com name_of_file\ngpg --decrypt name_of_file.asc\n</code></pre>"},{"location":"advanced_usage/#setup","title":"Setup","text":"<p>First, enable the PAPERLESS_ENABLE_GPG_DECRYPTOR environment variable.</p> <p>Then determine your local <code>gpg-agent</code> socket by invoking</p> <pre><code>gpgconf --list-dir agent-socket\n</code></pre> <p>on your host. A possible output is <code>~/.gnupg/S.gpg-agent</code>. Also find the location of your public keyring.</p> <p>If using docker, you'll need to add the following volume mounts to your <code>docker-compose.yml</code> file:</p> <pre><code>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</code></pre> <p>For a 'bare-metal' installation no further configuration is necessary. If you want to use a separate <code>GNUPG_HOME</code>, you can do so by configuring the PAPERLESS_EMAIL_GNUPG_HOME environment variable.</p>"},{"location":"advanced_usage/#troubleshooting","title":"Troubleshooting","text":"<ul> <li>Make sure, that <code>gpg-agent</code> is running on your host machine</li> <li>Make sure, that encryption and decryption works from inside the container using the <code>gpg</code> commands from above.</li> <li>Check that all files in <code>/usr/src/paperless/.gnupg</code> have correct permissions</li> </ul> <pre><code>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</code></pre>"},{"location":"api/","title":"The REST API","text":"<p>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 <code>/api/schema/view/</code>.</p> <p>Further documentation is provided here for some endpoints and features.</p>"},{"location":"api/#authorization","title":"Authorization","text":"<p>The REST api provides four different forms of authentication.</p> <ol> <li> <p>Basic authentication</p> <p>Authorize by providing a HTTP header in the form</p> <pre><code>Authorization: Basic <credentials>\n</code></pre> <p>where <code>credentials</code> is a base64-encoded string of <code><username>:<password></code></p> </li> <li> <p>Session authentication</p> <p>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.</p> </li> <li> <p>Token authentication</p> <p>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.</p> <p>Paperless also offers an endpoint to acquire authentication tokens.</p> <p>POST a username and password as a form or json string to <code>/api/token/</code> 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:</p> <pre><code>Authorization: Token <token>\n</code></pre> <p>Tokens can also be managed in the Django admin.</p> </li> <li> <p>Remote User authentication</p> <p>If enabled (see configuration), you can authenticate against the API using Remote User auth.</p> </li> </ol>"},{"location":"api/#searching-for-documents","title":"Searching for documents","text":"<p>Full text searching is available on the <code>/api/documents/</code> endpoint. Two specific query parameters cause the API to return full text search results:</p> <ul> <li><code>/api/documents/?query=your%20search%20query</code>: Search for a document using a full text query. For details on the syntax, see Basic Usage - Searching.</li> <li><code>/api/documents/?more_like_id=1234</code>: Search for documents similar to the document with id 1234.</li> </ul> <p>Pagination works exactly the same as it does for normal requests on this endpoint.</p> <p>Furthermore, each returned document has an additional <code>__search_hit__</code> attribute with various information about the search results:</p> <pre><code>{\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</code></pre> <ul> <li><code>score</code> is an indication how well this document matches the query relative to the other search results.</li> <li><code>highlights</code> is an excerpt from the document content and highlights the search terms with <code><span></code> tags as shown above.</li> <li><code>rank</code> is the index of the search results. The first result will have rank 0.</li> </ul>"},{"location":"api/#filtering-by-custom-fields","title":"Filtering by custom fields","text":"<p>You can filter documents by their custom field values by specifying the <code>custom_field_query</code> query parameter. Here are some recipes for common use cases:</p> <ol> <li> <p>Documents with a custom field \"due\" (date) between Aug 1, 2024 and Sept 1, 2024 (inclusive):</p> <p><code>?custom_field_query=[\"due\", \"range\", [\"2024-08-01\", \"2024-09-01\"]]</code></p> </li> <li> <p>Documents with a custom field \"customer\" (text) that equals \"bob\" (case sensitive):</p> <p><code>?custom_field_query=[\"customer\", \"exact\", \"bob\"]</code></p> </li> <li> <p>Documents with a custom field \"answered\" (boolean) set to <code>true</code>:</p> <p><code>?custom_field_query=[\"answered\", \"exact\", true]</code></p> </li> <li> <p>Documents with a custom field \"favorite animal\" (select) set to either \"cat\" or \"dog\":</p> <p><code>?custom_field_query=[\"favorite animal\", \"in\", [\"cat\", \"dog\"]]</code></p> </li> <li> <p>Documents with a custom field \"address\" (text) that is empty:</p> <p><code>?custom_field_query=[\"OR\", [\"address\", \"isnull\", true], [\"address\", \"exact\", \"\"]]</code></p> </li> <li> <p>Documents that don't have a field called \"foo\":</p> <p><code>?custom_field_query=[\"foo\", \"exists\", false]</code></p> </li> <li> <p>Documents that have document links \"references\" to both document 3 and 7:</p> <p><code>?custom_field_query=[\"references\", \"contains\", [3, 7]]</code></p> </li> </ol> <p>All field types support basic operations including <code>exact</code>, <code>in</code>, <code>isnull</code>, and <code>exists</code>. String, URL, and monetary fields support case-insensitive substring matching operations including <code>icontains</code>, <code>istartswith</code>, and <code>iendswith</code>. Integer, float, and date fields support arithmetic comparisons including <code>gt</code> (>), <code>gte</code> (>=), <code>lt</code> (<), <code>lte</code> (<=), and <code>range</code>. Lastly, document link fields support a <code>contains</code> operator that behaves like a \"is superset of\" check.</p>"},{"location":"api/#apisearchautocomplete","title":"<code>/api/search/autocomplete/</code>","text":"<p>Get auto completions for a partial search term.</p> <p>Query parameters:</p> <ul> <li><code>term</code>: The incomplete term.</li> <li><code>limit</code>: Amount of results. Defaults to 10.</li> </ul> <p>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.</p> <pre><code>[\"term1\", \"term3\", \"term6\", \"term4\"]\n</code></pre>"},{"location":"api/#file-uploads","title":"POSTing documents","text":"<p>The API provides a special endpoint for file uploads:</p> <p><code>/api/documents/post_document/</code></p> <p>POST a multipart form to this endpoint, where the form field <code>document</code> 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.</p> <p>The endpoint supports the following optional form fields:</p> <ul> <li><code>title</code>: Specify a title that the consumer should use for the document.</li> <li><code>created</code>: Specify a DateTime where the document was created (e.g. \"2016-04-19\" or \"2016-04-19 06:15:00+02:00\").</li> <li><code>correspondent</code>: Specify the ID of a correspondent that the consumer should use for the document.</li> <li><code>document_type</code>: Similar to correspondent.</li> <li><code>storage_path</code>: Similar to correspondent.</li> <li><code>tags</code>: Similar to correspondent. Specify this multiple times to have multiple tags added to the document.</li> <li><code>archive_serial_number</code>: An optional archive serial number to set.</li> <li><code>custom_fields</code>: An array of custom field ids to assign (with an empty value) to the document.</li> </ul> <p>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. <code>/api/tasks/?task_id={uuid}</code> will provide information on the state of the consumption including the ID of a created document if consumption succeeded.</p>"},{"location":"api/#permissions","title":"Permissions","text":"<p>All objects (documents, tags, etc.) allow setting object-level permissions with optional <code>owner</code> and / or a <code>set_permissions</code> parameters which are of the form:</p> <pre><code>\"owner\": ...,\n\"set_permissions\": {\n \"view\": {\n \"users\": [...],\n \"groups\": [...],\n },\n \"change\": {\n \"users\": [...],\n \"groups\": [...],\n },\n}\n</code></pre> <p>Note</p> <p>Arrays should contain user or group ID numbers.</p> <p>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).</p>"},{"location":"api/#retrieving-full-permissions","title":"Retrieving full permissions","text":"<p>By default, the API will return a truncated version of object-level permissions, returning <code>user_can_change</code> 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 <code>full_perms=true</code> to API calls to view the full permissions of objects in a format that mirrors the <code>set_permissions</code> parameter above.</p>"},{"location":"api/#bulk-editing","title":"Bulk Editing","text":"<p>The API supports various bulk-editing operations which are executed asynchronously.</p>"},{"location":"api/#documents","title":"Documents","text":"<p>For bulk operations on documents, use the endpoint <code>/api/documents/bulk_edit/</code> which accepts a json payload of the format:</p> <pre><code>{\n \"documents\": [LIST_OF_DOCUMENT_IDS],\n \"method\": METHOD, // see below\n \"parameters\": args // see below\n}\n</code></pre> <p>The following methods are supported:</p> <ul> <li><code>set_correspondent</code><ul> <li>Requires <code>parameters</code>: <code>{ \"correspondent\": CORRESPONDENT_ID }</code></li> </ul> </li> <li><code>set_document_type</code><ul> <li>Requires <code>parameters</code>: <code>{ \"document_type\": DOCUMENT_TYPE_ID }</code></li> </ul> </li> <li><code>set_storage_path</code><ul> <li>Requires <code>parameters</code>: <code>{ \"storage_path\": STORAGE_PATH_ID }</code></li> </ul> </li> <li><code>add_tag</code><ul> <li>Requires <code>parameters</code>: <code>{ \"tag\": TAG_ID }</code></li> </ul> </li> <li><code>remove_tag</code><ul> <li>Requires <code>parameters</code>: <code>{ \"tag\": TAG_ID }</code></li> </ul> </li> <li><code>modify_tags</code><ul> <li>Requires <code>parameters</code>: <code>{ \"add_tags\": [LIST_OF_TAG_IDS] }</code> and <code>{ \"remove_tags\": [LIST_OF_TAG_IDS] }</code></li> </ul> </li> <li><code>delete</code><ul> <li>No <code>parameters</code> required</li> </ul> </li> <li><code>reprocess</code><ul> <li>No <code>parameters</code> required</li> </ul> </li> <li><code>set_permissions</code><ul> <li>Requires <code>parameters</code>:<ul> <li><code>\"set_permissions\": PERMISSIONS_OBJ</code> (see format above) and / or</li> <li><code>\"owner\": OWNER_ID or null</code></li> <li><code>\"merge\": true or false</code> (defaults to false)</li> </ul> </li> <li>The <code>merge</code> flag determines if the supplied permissions will overwrite all existing permissions (including removing them) or be merged with existing permissions.</li> </ul> </li> <li><code>merge</code><ul> <li>No additional <code>parameters</code> required.</li> <li>The ordering of the merged document is determined by the list of IDs.</li> <li>Optional <code>parameters</code>:<ul> <li><code>\"metadata_document_id\": DOC_ID</code> apply metadata (tags, correspondent, etc.) from this document to the merged document.</li> <li><code>\"delete_originals\": true</code> to delete the original documents. This requires the calling user being the owner of all documents that are merged.</li> </ul> </li> </ul> </li> <li><code>split</code><ul> <li>Requires <code>parameters</code>:<ul> <li><code>\"pages\": [..]</code> The list should be a list of pages and/or a ranges, separated by commas e.g. <code>\"[1,2-3,4,5-7]\"</code></li> </ul> </li> <li>Optional <code>parameters</code>:<ul> <li><code>\"delete_originals\": true</code> to delete the original document after consumption. This requires the calling user being the owner of the document.</li> </ul> </li> <li>The split operation only accepts a single document.</li> </ul> </li> <li><code>rotate</code><ul> <li>Requires <code>parameters</code>:<ul> <li><code>\"degrees\": DEGREES</code>. Must be an integer i.e. 90, 180, 270</li> </ul> </li> </ul> </li> <li><code>delete_pages</code><ul> <li>Requires <code>parameters</code>:<ul> <li><code>\"pages\": [..]</code> The list should be a list of integers e.g. <code>\"[2,3,4]\"</code></li> </ul> </li> <li>The delete_pages operation only accepts a single document.</li> </ul> </li> <li><code>modify_custom_fields</code><ul> <li>Requires <code>parameters</code>:<ul> <li><code>\"add_custom_fields\": { CUSTOM_FIELD_ID: VALUE }</code>: JSON object consisting of custom field id:value pairs to add to the document, can also be a list of custom field IDs to add with empty values.</li> <li><code>\"remove_custom_fields\": [CUSTOM_FIELD_ID]</code>: custom field ids to remove from the document.</li> </ul> </li> </ul> </li> </ul>"},{"location":"api/#objects","title":"Objects","text":"<p>Bulk editing for objects (tags, document types etc.) currently supports set permissions or delete operations, using the endpoint: <code>/api/bulk_edit_objects/</code>, which requires a json payload of the format:</p> <pre><code>{\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</code></pre>"},{"location":"api/#api-versioning","title":"API Versioning","text":"<p>The REST API is versioned since Paperless-ngx 1.3.0.</p> <ul> <li>Versioning ensures that changes to the API don't break older clients.</li> <li>Clients specify the specific version of the API they wish to use with every request and Paperless will handle the request using the specified API version.</li> <li>Even if the underlying data model changes, older API versions will always serve compatible data.</li> <li>If no version is specified, Paperless will serve version 1 to ensure compatibility with older clients that do not request a specific API version.</li> </ul> <p>API versions are specified by submitting an additional HTTP <code>Accept</code> header with every request:</p> <pre><code>Accept: application/json; version=6\n</code></pre> <p>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 <code>Accept</code> header.</p> <p>If a client wishes to verify whether it is compatible with any given server, the following procedure should be performed:</p> <ol> <li> <p>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:</p> <pre><code>X-Api-Version: 2\nX-Version: 1.3.0\n</code></pre> </li> <li> <p>Determine whether the client is compatible with this server based on the presence/absence of these headers and their values if present.</p> </li> </ol>"},{"location":"api/#api-version-deprecation-policy","title":"API Version Deprecation Policy","text":"<p>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.</p>"},{"location":"api/#api-changelog","title":"API Changelog","text":""},{"location":"api/#version-1","title":"Version 1","text":"<p>Initial API version.</p>"},{"location":"api/#version-2","title":"Version 2","text":"<ul> <li>Added field <code>Tag.color</code>. This read/write string field contains a hex color such as <code>#a6cee3</code>.</li> <li>Added read-only field <code>Tag.text_color</code>. This field contains the text color to use for a specific tag, which is either black or white depending on the brightness of <code>Tag.color</code>.</li> <li>Removed field <code>Tag.colour</code>.</li> </ul>"},{"location":"api/#version-3","title":"Version 3","text":"<ul> <li>Permissions endpoints have been added.</li> <li>The format of the <code>/api/ui_settings/</code> has changed.</li> </ul>"},{"location":"api/#version-4","title":"Version 4","text":"<ul> <li>Consumption templates were refactored to workflows and API endpoints changed as such.</li> </ul>"},{"location":"api/#version-5","title":"Version 5","text":"<ul> <li>Added bulk deletion methods for documents and objects.</li> </ul>"},{"location":"api/#version-6","title":"Version 6","text":"<ul> <li>Moved acknowledge tasks endpoint to be under <code>/api/tasks/acknowledge/</code>.</li> </ul>"},{"location":"api/#version-7","title":"Version 7","text":"<ul> <li>The format of select type custom fields has changed to return the options as an array of objects with <code>id</code> and <code>label</code> fields as opposed to a simple list of strings. When creating or updating a custom field value of a document for a select type custom field, the value should be the <code>id</code> of the option whereas previously was the index of the option.</li> </ul>"},{"location":"api/#version-8","title":"Version 8","text":"<ul> <li>The user field of document notes now returns a simplified user object rather than just the user ID.</li> </ul>"},{"location":"changelog/","title":"Changelog","text":""},{"location":"changelog/#paperless-ngx-2153","title":"paperless-ngx 2.15.3","text":""},{"location":"changelog/#bug-fixes","title":"Bug Fixes","text":"<ul> <li>Fix: do not try deleting original file that was moved to trash dir @shamoon (#9684)</li> <li>Fix: preserve non-ASCII filenames in document downloads @shamoon (#9702)</li> <li>Fix: fix breaking api change to document notes user field @shamoon (#9714)</li> <li>Fix: another doc link fix @shamoon (#9700)</li> <li>Fix: correctly handle dict data with webhook @shamoon (#9674)</li> </ul>"},{"location":"changelog/#all-app-changes","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_1","title":"Bug Fixes","text":"<ul> <li>Fix: Adds better handling during folder checking/creation/permissions for non-root @stumpylog (#9616)</li> <li>Fix: Explicitly set the HOME environment to resolve issues running as root with database certificates @stumpylog (#9643)</li> <li>Fix: prevent self-linking when bulk edit doc link @shamoon (#9629)</li> </ul>"},{"location":"changelog/#dependencies","title":"Dependencies","text":"<ul> <li>Chore: Bump celery to 5.5.1 @hannesortmeier (#9642)</li> </ul>"},{"location":"changelog/#all-app-changes_1","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_2","title":"Bug Fixes","text":"<ul> <li>Fix: Run migration lock as the correct user @stumpylog (#9604)</li> <li>Fix: Adds a warning to the user if their secret file includes a trailing newline @stumpylog (#9601)</li> <li>Fix: correct download filename in 2.15.0 @shamoon (#9599)</li> <li>Fix: dont exclude matching check for scheduled workflows @shamoon (#9594)</li> </ul>"},{"location":"changelog/#maintenance","title":"Maintenance","text":"<ul> <li>docker(deps): Bump astral-sh/uv from 0.6.9-python3.12-bookworm-slim to 0.6.13-python3.12-bookworm-slim @dependabot[bot] (#9573)</li> </ul>"},{"location":"changelog/#dependencies_1","title":"Dependencies","text":"<ul> <li>docker(deps): Bump astral-sh/uv from 0.6.9-python3.12-bookworm-slim to 0.6.13-python3.12-bookworm-slim @dependabot[bot] (#9573)</li> <li>Chore: move to whoosh-reloaded, for now @shamoon (#9605)</li> </ul>"},{"location":"changelog/#all-app-changes_2","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","title":"Features","text":"<ul> <li>Enhancement: allow webUI first account signup @shamoon (#9500)</li> <li>Enhancement: support more 'not assigned' filtering, refactor @shamoon (#9429)</li> <li>Enhancement: reorganize dates dropdown, add more relative options @shamoon (#9307)</li> <li>Enhancement: add switch to allow merging non-PDFs with archive version @shamoon (#9305)</li> <li>Enhancement: support assigning custom field values in workflows @shamoon (#9272)</li> <li>Enhancement: Add slugify filter in templating @hwaterke (#9269)</li> <li>Feature: Switch webserver to granian @stumpylog (#9218)</li> <li>Enhancement: relocate and smaller upload widget, dont limit upload list @shamoon (#9244)</li> <li>Enhancement: run tasks from system status, report sanity check, simpler classifier check, styling updates @shamoon (#9106)</li> <li>Enhancement: include celery log in logs view @shamoon (#9214)</li> <li>Enhancement: support default groups for regular and social account signup, syncing on login @shamoon (#9039)</li> <li>Enhancement: allow disabling the filesystem consumer @shamoon (#9199)</li> <li>Feature: email document @shamoon (#8950)</li> <li>Enhancement: webui workflowtrigger source option @shamoon (#9170)</li> <li>Enhancement: use charfield for webhook url, custom validation @shamoon (#9128)</li> <li>Feature: Chinese Traditional translation @LokiHung (#9076)</li> <li>Enhancement: Use cached sessions for a minor performance improvement @stumpylog (#9074)</li> <li>Feature: openapi spec, full api browser @shamoon (#8948)</li> <li>Enhancement: filter by file type @shamoon (#8946)</li> <li>Feature: Transition Docker to use s6 overlay @stumpylog (#8886)</li> <li>Feature: better toast notifications management @shamoon (#8980)</li> <li>Enhancement: date picker and date filter dropdown improvements @shamoon (#9033)</li> <li>Tweak: more accurate classifier last trained time @shamoon (#9004)</li> <li>Enhancement: allow setting default pdf zoom @shamoon (#9017)</li> </ul>"},{"location":"changelog/#bug-fixes_3","title":"Bug Fixes","text":"<ul> <li>Fix: ensure only matched scheduled workflows are applied @shamoon (#9580)</li> <li>Fix: fix large doc thumb hidden at unexpected screen sizes @shamoon (#9559)</li> <li>Fix: fix potential race condition when creating new cf from doc details @shamoon (#9542)</li> <li>Fix: fix doc link input @shamoon (#9533)</li> <li>Fix: only overwrite existing cf values in workflow if set @shamoon (#9459)</li> <li>Fix: fix auto-close when doc update no longer has permissions @shamoon (#9453)</li> <li>Change: better handle permissions in patch requests @shamoon (#9393)</li> <li>Fix: use correct filename with webhook @shamoon (#9392)</li> <li>Change: sync OIDC groups on first login too @shamoon (#9387)</li> <li>Fix: only parse custom field queries when valid @shamoon (#9384)</li> <li>Fix: Allow setting of other Granian options @stumpylog (#9360)</li> <li>Fix: Always clean up INotify @stumpylog (#9359)</li> <li>Fix typo in inactive account template @ocean90 (#9356)</li> <li>Fix: fix notes serializing in API document response @shamoon (#9336)</li> <li>Fix: correct all results with whoosh queries @shamoon (#9331)</li> <li>Fix: fix typo in altered migration @gothicVI (#9321)</li> <li>Fix: add account_inactive template / url @shamoon (#9322)</li> <li>Fix: Switches data to content to upload raw bytes/text content @stumpylog (#9293)</li> <li>Fix: handle null workflow body and email subject @shamoon (#9271)</li> <li>Fix: cleanup saved view references on custom field deletion, auto-refresh views, show error on saved view save @shamoon (#9225)</li> <li>Fix: revert thumbnail CSS workaround in favor of GPU workaround @shamoon (#9219)</li> <li>Fix: correct split confirm removal @shamoon (#9195)</li> <li>Fix: saved views do not return to default display fields after setting and then removing @shamoon (#9168)</li> <li>Fix: correct logged number of deleted documents on trash empty @shamoon (#9148)</li> <li>Fix: include account confirm email allauth URL @shamoon (#9147)</li> <li>Fix: remove additional scrollbar from popup preview @shamoon (#9140)</li> <li>Fix: wrap selected display fields @shamoon (#9139)</li> <li>Fix: reset documents sort field if user deletes the custom field @shamoon (#9127)</li> <li>Fix: limit document title length in workflows @shamoon (#9085)</li> <li>Fix: include doc link input import in custom fields query dropdown @shamoon (#9058)</li> <li>Fix: deselect and trigger refresh for deleted documents from bulk operations with delete originals @shamoon (#8996)</li> <li>Fix: allow empty email in profile @shamoon (#9012)</li> </ul>"},{"location":"changelog/#maintenance_1","title":"Maintenance","text":"<ul> <li>docker(deps): Bump astral-sh/uv from 0.6.5-python3.12-bookworm-slim to 0.6.9-python3.12-bookworm-slim @dependabot[bot] (#9488)</li> <li>Chore: Enables dependabot for Dockerfile and our Compose files @stumpylog (#9342)</li> <li>Chore: ensure codecov upload gets attempted @shamoon (#9308)</li> <li>Chore: Split out some items into extras @stumpylog (#9297)</li> <li>Chore: Enables Codecov test reporting for the backend @stumpylog (#9295)</li> <li>Chore: Combine Python settings files @stumpylog (#9292)</li> </ul>"},{"location":"changelog/#dependencies_2","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_3","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_1","title":"Features","text":"<ul> <li>Enhancement: require totp code for obtain auth token by @shamoon #8936</li> </ul>"},{"location":"changelog/#bug-fixes_4","title":"Bug Fixes","text":"<ul> <li>Enhancement: require totp code for obtain auth token by @shamoon #8936</li> <li>Fix: reflect doc links in bulk modify custom fields by @shamoon #8962</li> <li>Fix: also ensure symmetric doc link removal on bulk edit by @shamoon #8963</li> </ul>"},{"location":"changelog/#all-app-changes_4","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_5","title":"Bug Fixes","text":"<ul> <li>Fix: backwards-compatible versioned API response for custom field select fields, update default API version @shamoon (#8912)</li> <li>Tweak: place items with 0 documents at bottom of filterable list, retain alphabetical @shamoon (#8924)</li> <li>Fix: set larger page size for abstract service getFew @shamoon (#8920)</li> <li>Fix/refactor: remove doc observables, fix username async @shamoon (#8908)</li> <li>Fix: include missing fields for saved view widgets @shamoon (#8905)</li> <li>Fix: force set document not dirty before close after save @shamoon (#8888)</li> <li>Fixhancement: restore search highlighting and add for built-in viewer @shamoon (#8885)</li> <li>Fix: resolve cpu usage due to incorrect interval use @shamoon (#8884)</li> </ul>"},{"location":"changelog/#all-app-changes_5","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_2","title":"Features","text":"<ul> <li>Change: restrict altering and creation of superusers to superusers only @shamoon (#8837)</li> </ul>"},{"location":"changelog/#bug-fixes_6","title":"Bug Fixes","text":"<ul> <li>Fix: fix long tag visual wrapping @shamoon (#8833)</li> <li>Fix: Enforce classifier training ordering to prevent extra training @stumpylog (#8822)</li> <li>Fix: import router module to not found component @shamoon (#8821)</li> <li>Fix: better reflect some mail account / rule permissions in UI @shamoon (#8812)</li> </ul>"},{"location":"changelog/#dependencies_3","title":"Dependencies","text":"<ul> <li>Chore(deps-dev): Bump undici from 5.28.4 to 5.28.5 in /src-ui @dependabot[bot] (#8851)</li> <li>Chore(deps-dev): Bump the development group with 2 updates @dependabot[bot] (#8841)</li> </ul>"},{"location":"changelog/#all-app-changes_6","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_3","title":"Features","text":"<ul> <li>Enhancement: allow specifying JSON encoding for webhooks @shamoon (#8799)</li> <li>Change: disable API basic auth if MFA enabled @shamoon (#8792)</li> </ul>"},{"location":"changelog/#bug-fixes_7","title":"Bug Fixes","text":"<ul> <li>Fix: Include email and webhook objects in the export @stumpylog (#8790)</li> <li>Fix: use MIMEBase for email attachments @shamoon (#8762)</li> <li>Fix: handle page out of range in mgmt lists after delete @shamoon (#8771)</li> </ul>"},{"location":"changelog/#all-app-changes_7","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_8","title":"Bug Fixes","text":"<ul> <li>Fix: Adds a default 30s timeout for emails, instead of no timeout @stumpylog (#8757)</li> <li>Fix: import forms modules for entries component @shamoon (#8752)</li> <li>Fix: fix email/wh actions on consume started @shamoon (#8750)</li> <li>Fix: import date picker module in cf query dropdown @shamoon (#8749)</li> </ul>"},{"location":"changelog/#all-app-changes_8","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_9","title":"Bug Fixes","text":"<ul> <li>Fix: dont try to parse empty webhook params @shamoon (#8742)</li> <li>Fix: pass working file to workflows, pickle file bytes @shamoon (#8741)</li> <li>Fix: use hard delete when bulk editing custom fields @shamoon (#8740)</li> <li>Fix: Ensure email attachments use the latest document path for attachments @stumpylog (#8737)</li> <li>Fix: include tooltip module for custom fields display @shamoon (#8739)</li> <li>Fix: remove id of webhook/email actions on copy @shamoon (#8729)</li> <li>Fix: import dnd module for merge confirm dialog @shamoon (#8727)</li> </ul>"},{"location":"changelog/#dependencies_4","title":"Dependencies","text":"<ul> <li>Chore(deps): Bump django from 5.1.4 to 5.1.5 @dependabot (#8738)</li> </ul>"},{"location":"changelog/#all-app-changes_9","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_10","title":"Bug Fixes","text":"<ul> <li>Fix: prevent error if bulk edit method not in MODIFIED_FIELD_BY_METHOD @shamoon (#8710)</li> <li>Fix: include tag component in list view @shamoon (#8706)</li> <li>Fix: use unmodified original for checksum if exists @shamoon (#8693)</li> <li>Fix: complete load with native PDF viewer @shamoon (#8699)</li> </ul>"},{"location":"changelog/#all-app-changes_10","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_4","title":"Features","text":"<ul> <li>Enhancement: custom field sorting @shamoon (#8494)</li> <li>Enhancement: process mail button @shamoon (#8466)</li> <li>Feature: bulk edit custom field values @shamoon (#8428)</li> <li>Enhancement: improved loading visuals @shamoon (#8435)</li> <li>Enhancement: prune audit logs and management command @shamoon (#8416)</li> <li>Change: make saved views manage its own component @shamoon (#8423)</li> <li>Enhancement: file task filtering @shamoon (#8421)</li> <li>Enhancement: auto-link duplicate document @shamoon (#8415)</li> <li>Feature: email, webhook workflow actions @shamoon (#8108)</li> <li>Enhancement: use stable unique IDs for custom field select options @shamoon (#8299)</li> <li>Enhancement: better TIFF display browser support @shamoon (#8087)</li> <li>Enhancement: filterable list count sorting and opacification @shamoon (#8386)</li> <li>Enhancement: preview button for document list and trash, refactor @shamoon (#8384)</li> <li>Enhancement: use theme-color meta tag @shamoon (#8359)</li> <li>Feature: scheduled workflow trigger @shamoon (#8036)</li> <li>Enhancement: support owner permissions for file tasks @shamoon (#8195)</li> <li>Fixhancement: change update content to handle archive disabled @shamoon (#8315)</li> <li>Enhancement: next / previous shortcuts for document list @shamoon (#8309)</li> <li>Feature: two-factor authentication @shamoon (#8012)</li> <li>Enhancement: save \\& next / close shortcut key @shamoon (#8243)</li> <li>Feature: loading preview, better text popup preview @shamoon (#8011)</li> </ul>"},{"location":"changelog/#bug-fixes_11","title":"Bug Fixes","text":"<ul> <li>Fix: add some minor frontend permissions checks @shamoon (#8524)</li> <li>FIx: obliquely trim spaces from global search @shamoon (#8484)</li> <li>Fix: include global perms for bulk edit endpoint @shamoon (#8468)</li> <li>Fix: frontend better reflect global perms for bulk edit, disabled form state @shamoon (#8469)</li> <li>Fixhancement: dispatch change event from current field prior to save @shamoon (#8369)</li> <li>Fix: Fixes install script to handle languages with dashes or underscores @stumpylog (#8341)</li> <li>Fix: handle very old dates with positive offset too @shamoon (#8335)</li> <li>Fixhancement: change update content to handle archive disabled @shamoon (#8315)</li> <li>Fix: include db_index caveat in squashed migrations @shamoon (#8292)</li> <li>Fix: prevent duplicate workflow runs @shamoon (#8268)</li> <li>Fix: add note about select options to edit dialog @shamoon (#8267)</li> </ul>"},{"location":"changelog/#maintenance_2","title":"Maintenance","text":"<ul> <li>Chore(deps): Bump codecov/codecov-action from 4 to 5 in the actions group @dependabot (#8401)</li> </ul>"},{"location":"changelog/#dependencies_5","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_11","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_12","title":"Bug Fixes","text":"<ul> <li>Fix: handle page count exception for pw-protected files @shamoon (#8240)</li> <li>Fix: correctly track task id in list for change detection @shamoon (#8230)</li> <li>Fix: Admin pages should show trashed documents @stumpylog (#8068)</li> <li>Fix: tag colors shouldn't change when selected in list @shamoon (#8225)</li> <li>Fix: fix re-activation of save button when changing array items @shamoon (#8208)</li> <li>Fix: fix thumbnail clipping, select inverted color in safari dark mode not system @shamoon (#8193)</li> <li>Fix: select checkbox should remain visible @shamoon (#8185)</li> <li>Fix: warn with proper error on ASN exists in trash @shamoon (#8176)</li> </ul>"},{"location":"changelog/#maintenance_3","title":"Maintenance","text":"<ul> <li>Chore: Updates all runner images to use Ubuntu Noble @stumpylog (#8213)</li> <li>Chore(deps): Bump stumpylog/image-cleaner-action from 0.8.0 to 0.9.0 in the actions group @dependabot (#8142)</li> </ul>"},{"location":"changelog/#dependencies_6","title":"Dependencies","text":"<ul> <li>Chore(deps): Bump stumpylog/image-cleaner-action from 0.8.0 to 0.9.0 in the actions group @dependabot (#8142)</li> </ul>"},{"location":"changelog/#all-app-changes_12","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_13","title":"Bug Fixes","text":"<ul> <li>Fix: fix dark mode icon blend mode in 2.13.3 @shamoon (#8166)</li> <li>Fix: fix clipped popup preview in 2.13.3 @shamoon (#8165)</li> </ul>"},{"location":"changelog/#all-app-changes_13","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_14","title":"Bug Fixes","text":"<ul> <li>Fix: fix auto-clean PDFs, create parent dir for storing unmodified original @shamoon (#8157)</li> <li>Fix: correctly handle exists, false in custom field query filter @yichi-yang (#8158)</li> <li>Fix: dont use filters for inverted thumbnails in Safari @shamoon (#8121)</li> <li>Fix: use static object for activedisplayfields to prevent changes @shamoon (#8120)</li> <li>Fix: dont invert pdf colors in FF @shamoon (#8110)</li> <li>Fix: make mail account password and refresh token text fields @shamoon (#8107)</li> </ul>"},{"location":"changelog/#dependencies_7","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_14","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_15","title":"Bug Fixes","text":"<ul> <li>Fix: remove auth tokens from export @shamoon (#8100)</li> <li>Fix: cf query dropdown styling affecting other components @shamoon (#8095)</li> </ul>"},{"location":"changelog/#all-app-changes_15","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_16","title":"Bug Fixes","text":"<ul> <li>Fix: allow removing dead document links from UI, validate via API @shamoon (#8081)</li> <li>Fix: Removes whitenoise patches and upgrades it to 6.8.1 @stumpylog (#8079)</li> <li>Fix: Make all document related objects soft delete, fix filepath when deleted @shamoon (#8067)</li> <li>Fix: handle uuid fields created under mariadb and Django 4 @shamoon (#8034)</li> <li>Fix: Update filename correctly if the document is in the trash @stumpylog (#8066)</li> <li>Fix: Handle a special case where removing none marker could result in an absolute path @stumpylog (#8060)</li> <li>Fix: disable custom field signals during import in 2.13.0 @shamoon (#8065)</li> <li>Fix: doc link documents search should exclude null @shamoon (#8064)</li> <li>Fix: fix custom field query empty element removal @shamoon (#8056)</li> <li>Fix / Enhancement: auto-rename document files when select type custom fields are changed @shamoon (#8045)</li> <li>Fix: dont try to load PAPERLESS_MODEL_FILE as env from file @shamoon (#8040)</li> <li>Fix: dont include all allauth urls @shamoon (#8010)</li> <li>Fix: oauth settings without base url @shamoon (#8020)</li> <li>Fix / Enhancement: include social accounts and api tokens in export @shamoon (#8016)</li> </ul>"},{"location":"changelog/#maintenance_4","title":"Maintenance","text":"<ul> <li>Fix: Removes whitenoise patches and upgrades it to 6.8.1 @stumpylog (#8079)</li> </ul>"},{"location":"changelog/#all-app-changes_16","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","title":"Notable Changes","text":"<ul> <li>Feature: OAuth2 Gmail and Outlook email support @shamoon (#7866)</li> <li>Feature: Enhanced templating for filename format @stumpylog (#7836)</li> <li>Feature: custom fields queries @shamoon (#7761)</li> <li>Chore: Drop Python 3.9 support @stumpylog (#7774)</li> </ul>"},{"location":"changelog/#features_5","title":"Features","text":"<ul> <li>Enhancement: QoL, auto-focus default select field in custom field dropdown @shamoon (#7961)</li> <li>Change: open not edit @shamoon (#7942)</li> <li>Enhancement: support retain barcode split pages @shamoon (#7912)</li> <li>Enhancement: don't wait for doc API to load preview @shamoon (#7894)</li> <li>Feature: OAuth2 Gmail and Outlook email support @shamoon (#7866)</li> <li>Enhancement: live preview of storage path @shamoon (#7870)</li> <li>Enhancement: management list button improvements @shamoon (#7848)</li> <li>Enhancement: check for mail destination directory, log post-consume errors @mrichtarsky (#7808)</li> <li>Enhancement: workflow overview toggle enable button @shamoon (#7818)</li> <li>Enhancement: disable-able mail rules, add toggle to overview @shamoon (#7810)</li> <li>Feature: auto-clean some invalid pdfs @shamoon (#7651)</li> <li>Feature: page count @s0llvan (#7750)</li> <li>Enhancement: use apt only when needed docker-entrypoint.sh @gawa971 (#7756)</li> <li>Enhancement: set Django SESSION_EXPIRE_AT_BROWSER_CLOSE from PAPERLESS_ACCOUNT_SESSION_REMEMBER @shamoon (#7748)</li> <li>Enhancement: allow setting session cookie age @shamoon (#7743)</li> <li>Feature: copy workflows and mail rules, improve layout @shamoon (#7727)</li> </ul>"},{"location":"changelog/#bug-fixes_17","title":"Bug Fixes","text":"<ul> <li>Fix: remove space before my profile button in dropdown @tooomm (#7963)</li> <li>Fix: v2.13.0 RC1 - Handling of Nones when using custom fields in filepath templating @stumpylog (#7933)</li> <li>Fix: v2.13.0 RC1 - trigger move and rename after CustomFieldInstance saved @shamoon (#7927)</li> <li>Fix: v2.13.0 RC1 - increase field max lengths to accommodate larger tokens @shamoon (#7916)</li> <li>Fix: preserve text linebreaks in doc edit @shamoon (#7908)</li> <li>Fix: only show colon on cards if correspondent and title shown @shamoon (#7893)</li> <li>Fix: Allow ASN values of 0 from barcodes @stumpylog (#7878)</li> <li>Fix: fix auto-dismiss completed tasks on open document @shamoon (#7869)</li> <li>Fix: trigger change warning for saved views with default fields if changed @shamoon (#7865)</li> <li>Fix: hidden canvas element causes scroll bug @shamoon (#7770)</li> <li>Fix: handle overflowing dropdowns on mobile @shamoon (#7758)</li> <li>Fix: chrome scrolling in >= 129 @shamoon (#7738)</li> </ul>"},{"location":"changelog/#maintenance_5","title":"Maintenance","text":"<ul> <li>Enhancement: use apt only when needed docker-entrypoint.sh @gawa971 (#7756)</li> </ul>"},{"location":"changelog/#dependencies_8","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_17","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_18","title":"Bug Fixes","text":"<ul> <li>Fix: wait to apply tag changes until other changes saved with multiple workflow actions @shamoon (#7711)</li> <li>Fix: delete_pages should require ownership (not just change perms) @shamoon (#7714)</li> <li>Fix: filter out shown custom fields that have been deleted from saved\u2026 @shamoon (#7710)</li> <li>Fix: only filter by string or number properties for filter pipe @shamoon (#7699)</li> <li>Fix: saved view permissions fixes @shamoon (#7672)</li> <li>Fix: add permissions for OPTIONS requests for notes @shamoon (#7661)</li> </ul>"},{"location":"changelog/#all-app-changes_18","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","title":"Features / Enhancements","text":"<ul> <li>Enhancement: re-work mail rule dialog, support multiple include patterns @shamoon (#7635)</li> <li>Enhancement: add Korean language @shamoon (#7573)</li> <li>Enhancement: allow multiple filename attachment exclusion patterns for a mail rule @MelleD (#5524)</li> <li>Refactor: Use django-filter logic for filtering full text search queries @yichi-yang (#7507)</li> <li>Refactor: Reduce number of SQL queries when serializing List[Document] @yichi-yang (#7505)</li> </ul>"},{"location":"changelog/#bug-fixes_19","title":"Bug Fixes","text":"<ul> <li>Fix: use JSON for note audit log entries @shamoon (#7650)</li> <li>Fix: Rework system check so it won't crash if tesseract is not found @stumpylog (#7640)</li> <li>Fix: correct broken pdfjs worker src after upgrade to pdfjs v4 @shamoon (#7626)</li> <li>Chore: remove unused frontend dependencies @shamoon (#7607)</li> <li>Fix: fix non-clickable scroll wheel in file uploads list @shamoon (#7591)</li> <li>Fix: deselect file tasks select all button on dismiss @shamoon (#7592)</li> <li>Fix: saved view sidebar heading not always visible @shamoon (#7584)</li> <li>Fix: correct select field wrapping with long text @shamoon (#7572)</li> <li>Fix: update ng-bootstrap to fix datepicker bug @shamoon (#7567)</li> </ul>"},{"location":"changelog/#dependencies_9","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_19","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_20","title":"Bug Fixes","text":"<ul> <li>Fix: fix nltk tokenizer breaking change @shamoon (#7522)</li> </ul>"},{"location":"changelog/#all-app-changes_20","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_21","title":"Bug Fixes","text":"<ul> <li>Fix: use JSON for update archive file auditlog entries @shamoon (#7503)</li> <li>Fix: respect deskew / rotate pages from AppConfig if set @shamoon (#7501)</li> </ul>"},{"location":"changelog/#dependencies_10","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_21","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_22","title":"Bug Fixes","text":"<ul> <li>Fix: initial upload message not being dismissed @shamoon (#7438)</li> </ul>"},{"location":"changelog/#all-app-changes_22","title":"All App Changes","text":"<ul> <li>Fix: initial upload message not being dismissed @shamoon (#7438)</li> </ul>"},{"location":"changelog/#paperless-ngx-2113","title":"paperless-ngx 2.11.3","text":""},{"location":"changelog/#features_6","title":"Features","text":"<ul> <li>Enhancement: optimize tasks / stats reload @shamoon (#7402)</li> <li>Enhancement: allow specifying default currency for Monetary custom field @shamoon (#7381)</li> <li>Enhancement: specify when pre-check fails for documents in trash @shamoon (#7355)</li> </ul>"},{"location":"changelog/#bug-fixes_23","title":"Bug Fixes","text":"<ul> <li>Fix: clear selection after reload for management lists @shamoon (#7421)</li> <li>Fix: disable inline create buttons if insufficient permissions @shamoon (#7401)</li> <li>Fix: use entire document for dropzone @shamoon (#7342)</li> </ul>"},{"location":"changelog/#maintenance_6","title":"Maintenance","text":"<ul> <li>Chore(deps): Bump stumpylog/image-cleaner-action from 0.7.0 to 0.8.0 in the actions group @dependabot (#7371)</li> </ul>"},{"location":"changelog/#dependencies_11","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_23","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":"<ul> <li>Change: more clearly handle init permissions error @shamoon (#7334)</li> <li>Chore: add permissions info link from webUI @shamoon (#7310)</li> <li>Fix: increase search input text contrast with light custom theme colors @JayBkr (#7303)</li> </ul>"},{"location":"changelog/#dependencies_12","title":"Dependencies","text":"<ul> <li>Chore(deps-dev): Bump the development group with 2 updates @dependabot (#7296)</li> <li>Chore(deps): Bump tika-client from 0.5.0 to 0.6.0 in the small-changes group @dependabot (#7297)</li> </ul>"},{"location":"changelog/#all-app-changes_24","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_7","title":"Features","text":"<ul> <li>Enhancement: include owner username in post-consumption variables @Freddy-0 (#7270)</li> </ul>"},{"location":"changelog/#bug-fixes_24","title":"Bug Fixes","text":"<ul> <li>Fix: support multiple inbox tags from stats widget @shamoon (#7281)</li> <li>Fix: Removes Turkish from the NLTK languages @stumpylog (#7246)</li> <li>Fix: include trashed docs in existing doc check @shamoon (#7229)</li> </ul>"},{"location":"changelog/#dependencies_13","title":"Dependencies","text":"<ul> <li>Chore(deps-dev): Bump the development group with 2 updates @dependabot (#7261)</li> <li>Chore(deps): Bump the small-changes group across 1 directory with 2 updates @dependabot (#7266)</li> </ul>"},{"location":"changelog/#all-app-changes_25","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","title":"Breaking Changes","text":"<ul> <li>Feature: Upgrade Gotenberg to v8 @stumpylog (#7094)</li> </ul>"},{"location":"changelog/#features_8","title":"Features","text":"<ul> <li>Enhancement: disable add split button when appropriate @shamoon (#7215)</li> <li>Enhancement: wrapping of saved view fields d-n-d UI @shamoon (#7216)</li> <li>Enhancement: support custom field icontains filter for select type @shamoon (#7199)</li> <li>Feature: select custom field type @shamoon (#7167)</li> <li>Feature: automatic sso redirect @shamoon (#7168)</li> <li>Enhancement: show more columns in mail frontend admin @shamoon (#7158)</li> <li>Enhancement: use request user as owner of split / merge docs @shamoon (#7112)</li> <li>Enhancement: improve date parsing with accented characters @fdubuy (#7100)</li> <li>Feature: improve history display of object names etc @shamoon (#7102)</li> <li>Feature: Upgrade Gotenberg to v8 @stumpylog (#7094)</li> </ul>"},{"location":"changelog/#bug-fixes_25","title":"Bug Fixes","text":"<ul> <li>Fix: include documents in trash for existing asn check @shamoon (#7189)</li> <li>Fix: include documents in trash in sanity check @shamoon (#7133)</li> <li>Fix: handle errors for trash actions and only show documents user can restore or delete @shamoon (#7119)</li> <li>Fix: dont include documents in trash in counts @shamoon (#7111)</li> <li>Fix: use temp dir for split / merge @shamoon (#7105)</li> </ul>"},{"location":"changelog/#maintenance_7","title":"Maintenance","text":"<ul> <li>Chore: upgrade to DRF 3.15 @shamoon (#7134)</li> <li>Chore(deps): Bump docker/build-push-action from 5 to 6 in the actions group @dependabot (#7125)</li> <li>Chore: Ignores DRF 3.15.2 @stumpylog (#7122)</li> <li>Chore: show docker tag in UI for ci test builds @shamoon (#7083)</li> </ul>"},{"location":"changelog/#dependencies_14","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_26","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_26","title":"Bug Fixes","text":"<ul> <li>Fix: always update document modified property on bulk edit operations @shamoon (#7079)</li> <li>Fix: correct frontend retrieval of trash delay setting @shamoon (#7067)</li> <li>Fix: index fresh document data after update archive file @shamoon (#7057)</li> <li>Fix: Safari browser PDF viewer not loading in 2.10.x @shamoon (#7056)</li> <li>Fix: Prefer the exporter metadata JSON file over the version JSON file @stumpylog (#7048)</li> </ul>"},{"location":"changelog/#all-app-changes_27","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_27","title":"Bug Fixes","text":"<ul> <li>Fix: dont require admin perms to view trash on frontend @shamoon (#7028)</li> </ul>"},{"location":"changelog/#paperless-ngx-2100","title":"paperless-ngx 2.10.0","text":""},{"location":"changelog/#features_9","title":"Features","text":"<ul> <li>Feature: documents trash aka soft delete @shamoon (#6944)</li> <li>Enhancement: better boolean custom field display @shamoon (#7001)</li> <li>Feature: Allow encrypting sensitive fields in export @stumpylog (#6927)</li> <li>Enhancement: allow consumption of odg files @daniel-boehme (#6940)</li> </ul>"},{"location":"changelog/#bug-fixes_28","title":"Bug Fixes","text":"<ul> <li>Fix: Document history could include extra fields @stumpylog (#6989)</li> <li>Fix: use local pdf worker js @shamoon (#6990)</li> <li>Fix: Revert masking the content field from auditlog @tribut (#6981)</li> <li>Fix: respect model permissions for tasks API endpoint @shamoon (#6958)</li> <li>Fix: Make the logging of an email message to be something useful @stumpylog (#6901)</li> </ul>"},{"location":"changelog/#documentation","title":"Documentation","text":"<ul> <li>Documentation: Corrections and clarifications for Python support @stumpylog (#6995)</li> </ul>"},{"location":"changelog/#maintenance_8","title":"Maintenance","text":"<ul> <li>Chore(deps): Bump stumpylog/image-cleaner-action from 0.6.0 to 0.7.0 in the actions group @dependabot (#6968)</li> <li>Chore: Configures dependabot to ignore djangorestframework @stumpylog (#6967)</li> </ul>"},{"location":"changelog/#dependencies_15","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_28","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_10","title":"Features","text":"<ul> <li>Feature: Allow a data only export/import cycle @stumpylog (#6871)</li> <li>Change: rename 'redo OCR' to 'reprocess' to clarify behavior @shamoon (#6866)</li> <li>Enhancement: Support custom path for the classification file @lino-b (#6858)</li> <li>Enhancement: default to title/content search, allow choosing full search link from global search @shamoon (#6805)</li> <li>Enhancement: only include correspondent 'last_correspondence' if requested @shamoon (#6792)</li> <li>Enhancement: delete pages PDF action @shamoon (#6772)</li> <li>Enhancement: support custom logo / title on login page @shamoon (#6775)</li> </ul>"},{"location":"changelog/#bug-fixes_29","title":"Bug Fixes","text":"<ul> <li>Fix: including ordering param for id__in retrievals @shamoon (#6875)</li> <li>Fix: Don't allow the workflow save to override other process updates @stumpylog (#6849)</li> <li>Fix: consistently use created_date for doc display @shamoon (#6758)</li> </ul>"},{"location":"changelog/#maintenance_9","title":"Maintenance","text":"<ul> <li>Chore: Change the code formatter to Ruff @stumpylog (#6756)</li> <li>Chore: Backend updates @stumpylog (#6755)</li> <li>Chore(deps): Bump crowdin/github-action from 1 to 2 in the actions group @dependabot (#6881)</li> </ul>"},{"location":"changelog/#dependencies_16","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_29","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_30","title":"Bug Fixes","text":"<ul> <li>Security: disallow API remote-user auth if disabled @shamoon (#6739)</li> <li>Fix: retain sort field from global search filtering, use FILTER_HAS_TAGS_ALL @shamoon (#6737)</li> </ul>"},{"location":"changelog/#all-app-changes_30","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_31","title":"Bug Fixes","text":"<ul> <li>Fix: restore search highlighting on large cards results @shamoon (#6728)</li> <li>Fix: global search filtering links broken in 2.8.4 @shamoon (#6726)</li> <li>Fix: some buttons incorrectly aligned in 2.8.4 @shamoon (#6715)</li> <li>Fix: don't format ASN as number on dashboard @shamoon (#6708)</li> </ul>"},{"location":"changelog/#all-app-changes_31","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_11","title":"Features","text":"<ul> <li>Enhancement: display current ASN in statistics @darmiel (#6692)</li> <li>Enhancement: global search tweaks @shamoon (#6674)</li> </ul>"},{"location":"changelog/#bug-fixes_32","title":"Bug Fixes","text":"<ul> <li>Security: Correctly disable in pdfjs @shamoon (#6702)</li> <li>Fix: history timestamp tooltip illegible in dark mode @shamoon (#6696)</li> <li>Fix: only count inbox documents from inbox tags with permissions @shamoon (#6670)</li> </ul>"},{"location":"changelog/#all-app-changes_32","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_33","title":"Bug Fixes","text":"<ul> <li>Fix: respect superuser for document history @shamoon (#6661)</li> <li>Fix: allow 0 in monetary field @shamoon (#6658)</li> <li>Fix: custom field removal doesn't always trigger change detection @shamoon (#6653)</li> <li>Fix: Downgrade and lock lxml @stumpylog (#6655)</li> <li>Fix: correctly handle global search esc key when open and button foucsed @shamoon (#6644)</li> <li>Fix: consistent monetary field display in list and cards @shamoon (#6645)</li> <li>Fix: doc links and more illegible in light mode @shamoon (#6643)</li> <li>Fix: Allow auditlog to be disabled @stumpylog (#6638)</li> </ul>"},{"location":"changelog/#documentation_1","title":"Documentation","text":"<ul> <li>Chore(docs): Update the sample Compose file to latest database @stumpylog (#6639)</li> </ul>"},{"location":"changelog/#all-app-changes_33","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_34","title":"Bug Fixes","text":"<ul> <li>Fix: Restore the compression of static files for x86_64 @stumpylog (#6627)</li> <li>Fix: make backend monetary validation accept unpadded decimals @shamoon (#6626)</li> <li>Fix: allow bulk edit with existing fields @shamoon (#6625)</li> <li>Fix: table view doesn't immediately display custom fields on app startup @shamoon (#6600)</li> <li>Fix: dont use limit in subqueries in global search for mariadb compatibility @shamoon (#6611)</li> <li>Fix: exclude admin perms from group permissions serializer @shamoon (#6608)</li> <li>Fix: global search text illegible in light mode @shamoon (#6602)</li> <li>Fix: document history text color illegible in light mode @shamoon (#6601)</li> </ul>"},{"location":"changelog/#all-app-changes_34","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_35","title":"Bug Fixes","text":"<ul> <li>Fix: saved views dont immediately display custom fields in table view @shamoon (#6594)</li> <li>Fix: bulk edit custom fields should support multiple items @shamoon (#6589)</li> </ul>"},{"location":"changelog/#dependencies_17","title":"Dependencies","text":"<ul> <li>Chore(deps-dev): Bump jinja2 from 3.1.3 to 3.1.4 @dependabot (#6579)</li> <li>Chore(deps-dev): Bump mkdocs-glightbox from 0.3.7 to 0.4.0 in the small-changes group @dependabot (#6581)</li> </ul>"},{"location":"changelog/#all-app-changes_35","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_1","title":"Breaking Changes","text":"<ul> <li>Fix: remove admin.logentry perm, use admin (staff) status @shamoon (#6380)</li> </ul>"},{"location":"changelog/#notable-changes_1","title":"Notable Changes","text":"<ul> <li>Feature: global search, keyboard shortcuts / hotkey support @shamoon (#6449)</li> <li>Feature: custom fields filtering \\& bulk editing @shamoon (#6484)</li> <li>Feature: customizable fields display for documents, saved views \\& dashboard widgets @shamoon (#6439)</li> <li>Feature: document history (audit log UI) @shamoon (#6388)</li> <li>Chore: Convert the consumer to a plugin @stumpylog (#6361)</li> </ul>"},{"location":"changelog/#features_12","title":"Features","text":"<ul> <li>Feature: global search, keyboard shortcuts / hotkey support @shamoon (#6449)</li> <li>Feature: customizable fields display for documents, saved views \\& dashboard widgets @shamoon (#6439)</li> <li>Feature: document history (audit log UI) @shamoon (#6388)</li> <li>Enhancement: refactor monetary field @shamoon (#6370)</li> <li>Chore: Convert the consumer to a plugin @stumpylog (#6361)</li> </ul>"},{"location":"changelog/#bug-fixes_36","title":"Bug Fixes","text":"<ul> <li>Fix: always check workflow if set @shamoon (#6474)</li> <li>Fix: use responsive tables for management lists @DlieBG (#6460)</li> <li>Fix: password reset done template @shamoon (#6444)</li> <li>Fix: show message on empty group list @DlieBG (#6393)</li> <li>Fix: remove admin.logentry perm, use admin (staff) status @shamoon (#6380)</li> <li>Fix: dont dismiss active alerts on dismiss completed @shamoon (#6364)</li> <li>Fix: Allow lowercase letters in monetary currency code field @shamoon (#6359)</li> <li>Fix: Allow negative monetary values with a current code @stumpylog (#6358)</li> <li>Fix: add timezone fallback to install script @Harald-Berghoff (#6336)</li> </ul>"},{"location":"changelog/#maintenance_10","title":"Maintenance","text":"<ul> <li>Chore(deps): Bump stumpylog/image-cleaner-action from 0.5.0 to 0.6.0 in the actions group @dependabot (#6541)</li> <li>Chore(deps): Bump all allowed backend packages @stumpylog (#6562)</li> </ul>"},{"location":"changelog/#dependencies_18","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_36","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_37","title":"Bug Fixes","text":"<ul> <li>Fix: select dropdown background colors not visible in light mode @shamoon (#6323)</li> <li>Fix: spacing in reset and incorrect display in saved views @shamoon (#6324)</li> <li>Fix: disable invalid create endpoints @shamoon (#6320)</li> <li>Fix: dont initialize page numbers, allow split with browser pdf viewer @shamoon (#6314)</li> </ul>"},{"location":"changelog/#all-app-changes_37","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_38","title":"Bug Fixes","text":"<ul> <li>Fix: Only disable split button if pages = 1 @shamoon (#6304)</li> <li>Fix: Use correct custom field id when splitting @shamoon (#6303)</li> <li>Fix: Rotation fails due to celery chord @stumpylog (#6306)</li> <li>Fix: split user / group objects error @shamoon (#6302)</li> </ul>"},{"location":"changelog/#all-app-changes_38","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_2","title":"Notable Changes","text":"<ul> <li>Feature: PDF actions - merge, split \\& rotate @shamoon (#6094)</li> <li>Change: enable auditlog by default, fix import / export @shamoon (#6267)</li> </ul>"},{"location":"changelog/#enhancements","title":"Enhancements","text":"<ul> <li>Enhancement: always place search term first in autocomplete results @shamoon (#6142)</li> </ul>"},{"location":"changelog/#maintenance_11","title":"Maintenance","text":"<ul> <li>Chore: Standardize subprocess running and logging @stumpylog (#6275)</li> </ul>"},{"location":"changelog/#bug-fixes_39","title":"Bug Fixes","text":"<ul> <li>Fix: Escape the secret key when writing it to the env file @stumpylog (#6243)</li> <li>Fix: Hide sidebar labels if group is empty @shamoon (#6254)</li> <li>Fix: management list clear all should clear header checkbox @shamoon (#6253)</li> <li>Fix: start-align object names in some UI lists @shamoon (#6188)</li> <li>Fix: allow scroll long upload files alerts list @shamoon (#6184)</li> <li>Fix: document_renamer fails with audit_log enabled @shamoon (#6175)</li> <li>Fix: catch sessionStorage errors for large documents @shamoon (#6150)</li> </ul>"},{"location":"changelog/#dependencies_19","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_39","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_40","title":"Bug Fixes","text":"<ul> <li>Fix: allow setting allauth @shamoon (#6105)</li> <li>Change: dont require empty bulk edit parameters @shamoon (#6059)</li> </ul>"},{"location":"changelog/#dependencies_20","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_40","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_13","title":"Features","text":"<ul> <li>Enhancement: move and rename files when storage paths deleted, update file handling docs @shamoon (#6033)</li> <li>Enhancement: better detection of default currency code @shamoon (#6020)</li> </ul>"},{"location":"changelog/#bug-fixes_41","title":"Bug Fixes","text":"<ul> <li>Fix: make document counts in object lists permissions-aware @shamoon (#6019)</li> </ul>"},{"location":"changelog/#all-app-changes_41","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_42","title":"All App Changes","text":"<ul> <li>Change: tweaks to system status @shamoon (#6008)</li> </ul>"},{"location":"changelog/#paperless-ngx-260","title":"paperless-ngx 2.6.0","text":""},{"location":"changelog/#features_14","title":"Features","text":"<ul> <li>Feature: Allow user to control PIL image pixel limit @stumpylog (#5997)</li> <li>Feature: Allow a user to disable the pixel limit for OCR entirely @stumpylog (#5996)</li> <li>Feature: workflow removal action @shamoon (#5928)</li> <li>Feature: system status @shamoon (#5743)</li> <li>Enhancement: better monetary field with currency code @shamoon (#5858)</li> <li>Enhancement: support disabling regular login @shamoon (#5816)</li> </ul>"},{"location":"changelog/#bug-fixes_42","title":"Bug Fixes","text":"<ul> <li>Fix: refactor base path settings, correct logout redirect @shamoon (#5976)</li> <li>Fix: always pass from UI, dont require in API @shamoon (#5962)</li> <li>Fix: Clear metadata cache when the filename(s) change @stumpylog (#5957)</li> <li>Fix: include monetary, float and doc link values in search filters @shamoon (#5951)</li> <li>Fix: Better handling of a corrupted index @stumpylog (#5950)</li> <li>Fix: Don't assume the location of scratch directory in Docker @stumpylog (#5948)</li> <li>Fix: ensure document title always limited to 128 chars @shamoon (#5934)</li> <li>Fix: use for password reset emails, if set @shamoon (#5902)</li> <li>Fix: Correct docker compose check in install script @ShanSanear (#5917)</li> <li>Fix: respect global permissions for UI settings @shamoon (#5919)</li> <li>Fix: allow disable email verification during signup @shamoon (#5895)</li> <li>Fix: refactor accounts templates and create signup template @shamoon (#5899)</li> </ul>"},{"location":"changelog/#maintenance_12","title":"Maintenance","text":"<ul> <li>Chore(deps): Bump the actions group with 3 updates @dependabot (#5907)</li> <li>Chore: Ignores uvicorn updates in dependabot @stumpylog (#5906)</li> </ul>"},{"location":"changelog/#dependencies_21","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_43","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_43","title":"Bug Fixes","text":"<ul> <li>Fix: handle title placeholder for docs without original_filename @shamoon (#5828)</li> <li>Fix: bulk edit objects does not respect global permissions @shamoon (#5888)</li> <li>Fix: intermittent save \\& close warnings @shamoon (#5838)</li> <li>Fix: inotify read timeout not in ms @grembo (#5876)</li> <li>Fix: allow relative date queries not in quick list @shamoon (#5801)</li> <li>Fix: pass rule id to consumed .eml files @shamoon (#5800)</li> </ul>"},{"location":"changelog/#dependencies_22","title":"Dependencies","text":"<ul> <li>Chore(deps): Bump cryptography from 42.0.2 to 42.0.4 @dependabot (#5851)</li> <li>Chore(deps-dev): Bump ip from 2.0.0 to 2.0.1 in /src-ui @dependabot (#5835)</li> <li>Chore(deps): Bump undici and @angular-devkit/build-angular in /src-ui @dependabot (#5796)</li> </ul>"},{"location":"changelog/#all-app-changes_44","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_44","title":"Bug Fixes","text":"<ul> <li>Fix: dont allow allauth redirects to any host @shamoon (#5783)</li> <li>Fix: Interaction when both splitting and ASN are enabled @stumpylog (#5779)</li> <li>Fix: moved ssl_mode parameter for mysql backend engine @MaciejSzczurek (#5771)</li> </ul>"},{"location":"changelog/#all-app-changes_45","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_45","title":"Bug Fixes","text":"<ul> <li>Fix: Generated secret key may include single or double quotes @schmidtnz (#5767)</li> <li>Fix: consumer status alerts container blocks elements @shamoon (#5762)</li> <li>Fix: handle document notes user format api change @shamoon (#5751)</li> <li>Fix: Assign ASN from barcode only after any splitting @stumpylog (#5745)</li> </ul>"},{"location":"changelog/#dependencies_23","title":"Dependencies","text":"<ul> <li>Chore(deps): Bump the major-versions group with 1 update @dependabot (#5741)</li> </ul>"},{"location":"changelog/#all-app-changes_46","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_46","title":"Bug Fixes","text":"<ul> <li>Fix: Splitting on ASN barcodes even if not enabled @stumpylog (#5740)</li> </ul>"},{"location":"changelog/#dependencies_24","title":"Dependencies","text":"<ul> <li>Chore(deps-dev): Bump the development group with 2 updates @dependabot (#5737)</li> <li>Chore(deps): Bump the django group with 1 update @dependabot (#5739)</li> </ul>"},{"location":"changelog/#all-app-changes_47","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_2","title":"Breaking Changes","text":"<ul> <li>Enhancement: bulk delete objects @shamoon (#5688)</li> </ul>"},{"location":"changelog/#notable-changes_3","title":"Notable Changes","text":"<ul> <li>Feature: OIDC \\& social authentication @mpflanzer (#5190)</li> </ul>"},{"location":"changelog/#features_15","title":"Features","text":"<ul> <li>Enhancement: confirm buttons @shamoon (#5680)</li> <li>Enhancement: bulk delete objects @shamoon (#5688)</li> <li>Feature: allow create objects from bulk edit @shamoon (#5667)</li> <li>Feature: Allow tagging by putting barcodes on documents @pkrahmer (#5580)</li> <li>Feature: Cache metadata and suggestions in Redis @stumpylog (#5638)</li> <li>Feature: Japanese translation @shamoon (#5641)</li> <li>Feature: option for auto-remove inbox tags on save @shamoon (#5562)</li> <li>Enhancement: allow paperless to run in read-only filesystem @hegerdes (#5596)</li> <li>Enhancement: mergeable bulk edit permissions @shamoon (#5508)</li> <li>Enhancement: re-implement remote user auth for unsafe API requests as opt-in @shamoon (#5561)</li> <li>Enhancement: Respect PDF cropbox for thumbnail generation @henningBunk (#5531)</li> </ul>"},{"location":"changelog/#bug-fixes_47","title":"Bug Fixes","text":"<ul> <li>Fix: Test metadata items for Unicode issues @stumpylog (#5707)</li> <li>Change: try to show preview even if metadata fails @shamoon (#5706)</li> <li>Fix: only check workflow trigger source if not empty @shamoon (#5701)</li> <li>Fix: frontend validation of number fields fails upon save @shamoon (#5646)</li> <li>Fix: Explicit validation of custom field name unique constraint @shamoon (#5647)</li> <li>Fix: Don't attempt to retrieve object types user doesn't have permissions to @shamoon (#5612)</li> </ul>"},{"location":"changelog/#documentation_2","title":"Documentation","text":"<ul> <li>Documentation: add detail about consumer polling behavior @silmaril42 (#5674)</li> <li>Paperless-ngx Demo: new and improved @shamoon (#5639)</li> <li>Documentation: Add docs about missing timezones in MySQL/MariaDB @Programie (#5583)</li> </ul>"},{"location":"changelog/#maintenance_13","title":"Maintenance","text":"<ul> <li>Chore(deps): Bump the actions group with 1 update @dependabot (#5629)</li> <li>Chore(deps): Bump the actions group with 1 update @dependabot (#5597)</li> </ul>"},{"location":"changelog/#dependencies_25","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_48","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_48","title":"Bug Fixes","text":"<ul> <li>Fix: Ensure the scratch directory exists before consuming via the folder @stumpylog (#5579)</li> </ul>"},{"location":"changelog/#all-app-changes_49","title":"All App Changes","text":"<ul> <li>Fix: Ensure the scratch directory exists before consuming via the folder @stumpylog (#5579)</li> </ul>"},{"location":"changelog/#paperless-ngx-242","title":"paperless-ngx 2.4.2","text":""},{"location":"changelog/#bug-fixes_49","title":"Bug Fixes","text":"<ul> <li>Fix: improve one of the date matching regexes @shamoon (#5540)</li> <li>Fix: tweak doc detail component behavior while awaiting metadata @shamoon (#5546)</li> </ul>"},{"location":"changelog/#all-app-changes_50","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_3","title":"Breaking Changes","text":"<ul> <li>Change: merge workflow permissions assignments instead of overwrite @shamoon (#5496)</li> </ul>"},{"location":"changelog/#bug-fixes_50","title":"Bug Fixes","text":"<ul> <li>Fix: Minor frontend things in 2.4.0 @shamoon (#5514)</li> <li>Fix: install script fails on alpine linux @shamoon (#5520)</li> <li>Fix: enforce permissions for app config @shamoon (#5516)</li> <li>Fix: render images not converted to pdf, refactor doc detail rendering @shamoon (#5475)</li> <li>Fix: Dont parse numbers with exponent as integer @shamoon (#5457)</li> </ul>"},{"location":"changelog/#maintenance_14","title":"Maintenance","text":"<ul> <li>Chore: Build fix- branches @shamoon (#5501)</li> </ul>"},{"location":"changelog/#dependencies_26","title":"Dependencies","text":"<ul> <li>Chore(deps-dev): Bump the development group with 1 update @dependabot (#5503)</li> </ul>"},{"location":"changelog/#all-app-changes_51","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_16","title":"Features","text":"<ul> <li>Enhancement: support remote user auth directly against API (DRF) @shamoon (#5386)</li> <li>Feature: Add additional caching support to suggestions and metadata @stumpylog (#5414)</li> <li>Feature: help tooltips @shamoon (#5383)</li> <li>Enhancement: warn when outdated doc detected @shamoon (#5372)</li> <li>Feature: app branding @shamoon (#5357)</li> </ul>"},{"location":"changelog/#bug-fixes_51","title":"Bug Fixes","text":"<ul> <li>Fix: doc link removal when has never been assigned @shamoon (#5451)</li> <li>Fix: dont lose permissions ui if owner changed from @shamoon (#5433)</li> <li>Fix: Getting next ASN when no documents have an ASN @stumpylog (#5431)</li> <li>Fix: signin username floating label @shamoon (#5424)</li> <li>Fix: shared by me filter with multiple users / groups in postgres @shamoon (#5396)</li> <li>Fix: Catch new warning when loading the classifier @stumpylog (#5395)</li> <li>Fix: doc detail component fixes @shamoon (#5373)</li> </ul>"},{"location":"changelog/#maintenance_15","title":"Maintenance","text":"<ul> <li>Chore: better bootstrap icons @shamoon (#5403)</li> <li>Chore: Close outdated support / general discussions @shamoon (#5443)</li> </ul>"},{"location":"changelog/#dependencies_27","title":"Dependencies","text":"<ul> <li>Chore(deps): Bump the small-changes group with 2 updates @dependabot (#5413)</li> <li>Chore(deps-dev): Bump the development group with 2 updates @dependabot (#5412)</li> <li>Chore(deps-dev): Bump jinja2 from 3.1.2 to 3.1.3 @dependabot (#5352)</li> </ul>"},{"location":"changelog/#all-app-changes_52","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":"<ul> <li>Enhancement: Explain behavior of unset app config boolean to user @shamoon (#5345)</li> <li>Enhancement: title assignment placeholder error handling, fallback @shamoon (#5282)</li> </ul>"},{"location":"changelog/#bug-fixes_52","title":"Bug Fixes","text":"<ul> <li>Fix: Don't require the JSON user arguments field, interpret empty string as @stumpylog (#5320)</li> </ul>"},{"location":"changelog/#maintenance_16","title":"Maintenance","text":"<ul> <li>Chore: Backend dependencies update @stumpylog (#5336)</li> <li>Chore: add pre-commit hook for codespell @shamoon (#5324)</li> </ul>"},{"location":"changelog/#all-app-changes_53","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_53","title":"Bug Fixes","text":"<ul> <li>Fix: triggered workflow assignment of customfield fails if field exists in v2.3.1 @shamoon (#5302)</li> <li>Fix: Decoding of user arguments for OCR @stumpylog (#5307)</li> <li>Fix: empty workflow trigger match field cannot be saved in v.2.3.1 @shamoon (#5301)</li> <li>Fix: Use local time for added/updated workflow triggers @stumpylog (#5304)</li> <li>Fix: workflow edit form loses unsaved changes @shamoon (#5299)</li> </ul>"},{"location":"changelog/#all-app-changes_54","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_54","title":"Bug Fixes","text":"<ul> <li>Fix: edit workflow form not displaying trigger settings @shamoon (#5276)</li> <li>Fix: Prevent passing 0 pages to OCRMyPDF @stumpylog (#5275)</li> </ul>"},{"location":"changelog/#all-app-changes_55","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_4","title":"Notable Changes","text":"<ul> <li>Feature: Workflows @shamoon (#5121)</li> <li>Feature: Allow setting backend configuration settings via the UI @stumpylog (#5126)</li> </ul>"},{"location":"changelog/#features_17","title":"Features","text":"<ul> <li>Feature: Workflows @shamoon (#5121)</li> <li>Feature: Allow setting backend configuration settings via the UI @stumpylog (#5126)</li> <li>Enhancement: fetch mails in bulk @falkenbt (#5249)</li> <li>Enhancement: add parameter to post_document API @bevanjkay (#5217)</li> </ul>"},{"location":"changelog/#bug-fixes_55","title":"Bug Fixes","text":"<ul> <li>Chore: Replaces deprecated Django alias with standard library @stumpylog (#5262)</li> <li>Fix: Crash in barcode ASN reading when the file type isn't supported @stumpylog (#5261)</li> <li>Fix: Allows pre-consume scripts to modify the working path again @stumpylog (#5260)</li> <li>Change: Use fnmatch for more sane workflow path matching @shamoon (#5250)</li> <li>Fix: zip exports not respecting the --delete option @stumpylog (#5245)</li> <li>Fix: correctly format tip admonition @ChrisRBe (#5229)</li> <li>Fix: filename format remove none when part of directory @shamoon (#5210)</li> <li>Fix: Improve Performance for Listing and Paginating Documents @antoinelibert (#5195)</li> <li>Fix: Disable custom field remove button if user does not have permissions @shamoon (#5194)</li> <li>Fix: overlapping button focus highlight on login @shamoon (#5193)</li> <li>Fix: symmetric doc links with target doc value None @shamoon (#5187)</li> <li>Fix: setting empty doc link with docs to be removed @shamoon (#5174)</li> <li>Enhancement: improve validation of custom field values @shamoon (#5166)</li> <li>Fix: type casting of db values for 'shared by me' filter @shamoon (#5155)</li> </ul>"},{"location":"changelog/#documentation_3","title":"Documentation","text":"<ul> <li>Fix: correctly format tip admonition @ChrisRBe (#5229)</li> </ul>"},{"location":"changelog/#maintenance_17","title":"Maintenance","text":"<ul> <li>Chore(deps): Bump the actions group with 5 updates @dependabot (#5203)</li> </ul>"},{"location":"changelog/#dependencies_28","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_56","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_56","title":"Bug Fixes","text":"<ul> <li>Fix: saving doc links with no value @shamoon (#5144)</li> <li>Fix: allow multiple consumption templates to assign the same custom field @shamoon (#5142)</li> <li>Fix: some dropdowns broken in 2.2.0 @shamoon (#5134)</li> </ul>"},{"location":"changelog/#all-app-changes_57","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_18","title":"Features","text":"<ul> <li>Enhancement: Add tooltip for select dropdown items @shamoon (#5070)</li> <li>Chore: Update Angular to v17 including new Angular control-flow @shamoon (#4980)</li> <li>Enhancement: symmetric document links @shamoon (#4907)</li> <li>Enhancement: shared icon \\& shared by me filter @shamoon (#4859)</li> <li>Enhancement: Improved popup preview, respect embedded viewer, error handling @shamoon (#4947)</li> <li>Enhancement: Allow deletion of documents via the fuzzy matching command @stumpylog (#4957)</li> <li>Enhancement: document link field fixes @shamoon (#5020)</li> <li>Enhancement: above and below doc detail save buttons @shamoon (#5008)</li> </ul>"},{"location":"changelog/#bug-fixes_57","title":"Bug Fixes","text":"<ul> <li>Fix: Case where a mail attachment has no filename to use @stumpylog (#5117)</li> <li>Fix: Disable auto-login for API token requests @shamoon (#5094)</li> <li>Fix: update ASN regex to support Unicode @eukub (#5099)</li> <li>Fix: ensure CSRF-Token on Index view @baflo (#5082)</li> <li>Fix: Stop auto-refresh logs / tasks after close @shamoon (#5089)</li> <li>Fix: Make the admin panel accessible when using a large number of documents @bogdal (#5052)</li> <li>Fix: dont allow null property via API @shamoon (#5063)</li> <li>Fix: Updates Ghostscript to 10.02.1 for more bug fixes to it @stumpylog (#5040)</li> <li>Fix: allow system keyboard shortcuts in date fields @shamoon (#5009)</li> <li>Fix password change detection on profile edit @shamoon (#5028)</li> </ul>"},{"location":"changelog/#documentation_4","title":"Documentation","text":"<ul> <li>Documentation: organize API endpoints @dgsponer (#5077)</li> </ul>"},{"location":"changelog/#maintenance_18","title":"Maintenance","text":"<ul> <li>Chore: Bulk backend update @stumpylog (#5061)</li> </ul>"},{"location":"changelog/#dependencies_29","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_58","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_58","title":"Bug Fixes","text":"<ul> <li>Fix: Document metadata is lost during barcode splitting @stumpylog (#4982)</li> <li>Fix: Export of custom field instances during a split manifest export @stumpylog (#4984)</li> <li>Fix: Apply user arguments even in the case of the forcing OCR @stumpylog (#4981)</li> <li>Fix: support show errors for select dropdowns @shamoon (#4979)</li> <li>Fix: Don't attempt to parse none objects during date searching @bogdal (#4977)</li> </ul>"},{"location":"changelog/#all-app-changes_59","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_59","title":"Bug Fixes","text":"<ul> <li>Fix: sort consumption templates by order by default @shamoon (#4956)</li> <li>Fix: Updates gotenberg-client, including workaround for Gotenberg non-latin handling @stumpylog (#4944)</li> <li>Fix: allow text copy in pngx pdf viewer @shamoon (#4938)</li> <li>Fix: Don't allow autocomplete searches to fail on schema field matches @stumpylog (#4934)</li> <li>Fix: Convert search dates to UTC in advanced search @bogdal (#4891)</li> <li>Fix: Use the attachment filename so downstream template matching works @stumpylog (#4931)</li> <li>Fix: frontend handle autocomplete failure gracefully @shamoon (#4903)</li> </ul>"},{"location":"changelog/#dependencies_30","title":"Dependencies","text":"<ul> <li>Chore(deps-dev): Bump the small-changes group with 2 updates @dependabot (#4942)</li> <li>Chore(deps-dev): Bump the development group with 1 update @dependabot (#4939)</li> </ul>"},{"location":"changelog/#all-app-changes_60","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_60","title":"Bug Fixes","text":"<ul> <li>Fix: disable toggle for share link creation without archive version, fix auto-copy in Safari @shamoon (#4885)</li> <li>Fix: storage paths link incorrect in dashboard widget @shamoon (#4878)</li> <li>Fix: respect baseURI for pdfjs worker URL @shamoon (#4865)</li> <li>Fix: Allow users to configure the From email for password reset @stumpylog (#4867)</li> <li>Fix: dont show move icon for file tasks badge @shamoon (#4860)</li> </ul>"},{"location":"changelog/#maintenance_19","title":"Maintenance","text":"<ul> <li>Chore: Simplifies how the documentation site is deployed @stumpylog (#4858)</li> </ul>"},{"location":"changelog/#all-app-changes_61","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_19","title":"Features","text":"<ul> <li>Enhancement: implement document link custom field @shamoon (#4799)</li> <li>Feature: Adds additional warnings during an import if it might fail @stumpylog (#4814)</li> <li>Feature: pngx PDF viewer with updated pdfjs @shamoon (#4679)</li> <li>Enhancement: support automatically assigning custom fields via consumption templates @shamoon (#4727)</li> <li>Feature: update user profile @shamoon (#4678)</li> <li>Enhancement: Allow excluding mail attachments by name @stumpylog (#4691)</li> <li>Enhancement: auto-refresh logs \\& tasks @shamoon (#4680)</li> </ul>"},{"location":"changelog/#bug-fixes_61","title":"Bug Fixes","text":"<ul> <li>Fix: welcome widget text color @shamoon (#4829)</li> <li>Fix: export consumption templates \\& custom fields in exporter @shamoon (#4825)</li> <li>Fix: bulk edit object permissions should use permissions object @shamoon (#4797)</li> <li>Fix: empty string for consumption template field should be interpreted as @shamoon (#4762)</li> <li>Fix: use default permissions for objects created via dropdown @shamoon (#4778)</li> <li>Fix: Alpha layer removal could allow duplicates @stumpylog (#4781)</li> <li>Fix: update checker broke in v2.0.0 @shamoon (#4773)</li> <li>Fix: only show global drag-drop when files included @shamoon (#4767)</li> </ul>"},{"location":"changelog/#documentation_5","title":"Documentation","text":"<ul> <li>Enhancement: implement document link custom field @shamoon (#4799)</li> <li>Fix: export consumption templates \\& custom fields in exporter @shamoon (#4825)</li> <li>Documentation: Fix typos @omahs (#4737)</li> </ul>"},{"location":"changelog/#maintenance_20","title":"Maintenance","text":"<ul> <li>Bump the actions group with 2 updates @dependabot (#4745)</li> </ul>"},{"location":"changelog/#dependencies_31","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_62","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":"<p>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.</p>"},{"location":"changelog/#bug-fixes_62","title":"Bug Fixes","text":"<ul> <li>Fix: Increase field the length for consumption template source @stumpylog (#4719)</li> <li>Fix: Set RGB color conversion strategy for PDF outputs @stumpylog (#4709)</li> <li>Fix: Add a warning about a low image DPI which may cause OCR to fail @stumpylog (#4708)</li> <li>Fix: share links for URLs containing 'api' incorrect in dropdown @shamoon (#4701)</li> </ul>"},{"location":"changelog/#all-app-changes_63","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":"<p>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.</p>"},{"location":"changelog/#breaking-changes_4","title":"Breaking Changes","text":"<ul> <li>Breaking: Rename the environment variable for self-signed email certificates @stumpylog (#4346)</li> <li>Breaking: Drop support for Python 3.8 @stumpylog (#4156)</li> <li>Breaking: Remove ARMv7 building of the Docker image @stumpylog (#3973)</li> </ul>"},{"location":"changelog/#notable-changes_5","title":"Notable Changes","text":"<ul> <li>Feature: consumption templates @shamoon (#4196)</li> <li>Feature: Share links @shamoon (#3996)</li> <li>Enhancement: Updates the underlying image to use Python 3.11 @stumpylog (#4150)</li> </ul>"},{"location":"changelog/#features_20","title":"Features","text":"<ul> <li>Feature: compact notifications @shamoon (#4545)</li> <li>Chore: Backend bulk updates @stumpylog (#4509)</li> <li>Feature: Hungarian translation @shamoon (#4552)</li> <li>Chore: API support for id args for documents \\& objects @shamoon (#4519)</li> <li>Feature: Add Bulgarian translation @shamoon (#4470)</li> <li>Feature: Audit Trail @nanokatz (#4425)</li> <li>Feature: Add ahead of time compression of the static files for x86_64 @stumpylog (#4390)</li> <li>Feature: sort sidebar views @shamoon (#4381)</li> <li>Feature: Switches to a new client to handle communication with Gotenberg @stumpylog (#4391)</li> <li>barcode logic: strip non-numeric characters from detected ASN string @queaker (#4379)</li> <li>Feature: Include more updated base tools in Docker image @stumpylog (#4319)</li> <li>CI: speed-up frontend tests on ci @shamoon (#4316)</li> <li>Feature: password reset @shamoon (#4289)</li> <li>Enhancement: dashboard improvements, drag-n-drop reorder dashboard views @shamoon (#4252)</li> <li>Feature: Updates Django to 4.2.5 @stumpylog (#4278)</li> <li>Enhancement: settings reorganization \\& improvements, separate admin section @shamoon (#4251)</li> <li>Feature: consumption templates @shamoon (#4196)</li> <li>Enhancement: support default permissions for object creation via frontend @shamoon (#4233)</li> <li>Fix: Set permissions before declaring volumes for rootless @stumpylog (#4225)</li> <li>Enhancement: bulk edit object permissions @shamoon (#4176)</li> <li>Enhancement: Allow the user the specify the export zip file name @stumpylog (#4189)</li> <li>Feature: Share links @shamoon (#3996)</li> <li>Chore: update docker image and ci to node 20 @shamoon (#4184)</li> <li>Fix: Trim unneeded libraries from Docker image @stumpylog (#4183)</li> <li>Feature: New management command for fuzzy matching document content @stumpylog (#4160)</li> <li>Enhancement: Updates the underlying image to use Python 3.11 @stumpylog (#4150)</li> <li>Enhancement: frontend better handle slow backend requests @shamoon (#4055)</li> <li>Chore: update docker image \\& ci testing node to v18 @shamoon (#4149)</li> <li>Enhancement: Improved error notifications @shamoon (#4062)</li> <li>Feature: Official support for Python 3.11 @stumpylog (#4146)</li> <li>Enhancement: Add Afrikaans, Greek \\& Norwegian languages @shamoon (#4088)</li> <li>Enhancement: add task id to pre/post consume script as env @andreheuer (#4037)</li> <li>Enhancement: update bootstrap to v5.3.1 for backend static pages @shamoon (#4060)</li> </ul>"},{"location":"changelog/#bug-fixes_63","title":"Bug Fixes","text":"<ul> <li>Fix: Add missing spaces to help string in @joouha (#4674)</li> <li>Fix: Typo invalidates precondition for doctype, resulting in Exception @ArminGruner (#4668)</li> <li>Fix: Miscellaneous visual fixes in v2.0.0-beta.rc1 2 @shamoon (#4635)</li> <li>Fix: Delay consumption after MODIFY inotify events @frozenbrain (#4626)</li> <li>Documentation: Add note that trash dir must exist @shamoon (#4608)</li> <li>Fix: Miscellaneous v2.0 visual fixes @shamoon (#4576)</li> <li>Fix: Force UTF-8 for exporter manifests and don't allow escaping @stumpylog (#4574)</li> <li>Fix: plain text preview overflows @shamoon (#4555)</li> <li>Fix: add permissions for custom fields with migration @shamoon (#4513)</li> <li>Fix: visually hidden text breaks delete button wrap @shamoon (#4462)</li> <li>Fix: API statistics document_file_type_counts return type @shamoon (#4464)</li> <li>Fix: Always return a list for audit log check @shamoon (#4463)</li> <li>Fix: Only create a Correspondent if the email matches rule filters @stumpylog (#4431)</li> <li>Fix: Combination of consume template with recursive tagging @stumpylog (#4442)</li> <li>Fix: replace drag drop \\& clipboard deps with angular cdk @shamoon (#4362)</li> <li>Fix: update document modified time on note creation / deletion @shamoon (#4374)</li> <li>Fix: Updates to latest imap_tools which includes fix for the meta charset in HTML content @stumpylog (#4355)</li> <li>Fix: Missing creation of a folder in Docker image @stumpylog (#4347)</li> <li>Fix: Retry Tika parsing when Tika returns HTTP 500 @stumpylog (#4334)</li> <li>Fix: get highest ASN regardless of user @shamoon (#4326)</li> <li>Fix: Generate secret key with C locale and increase allowed characters @stumpylog (#4277)</li> <li>Fix: long notes cause visual overflow @shamoon (#4287)</li> <li>Fix: Ensures all old connections are closed in certain long lived places @stumpylog (#4265)</li> <li>CI: fix playwright browser version mismatch failures @shamoon (#4239)</li> <li>Fix: Set a non-zero polling internal when inotify cannot import @stumpylog (#4230)</li> <li>Fix: Set permissions before declaring volumes for rootless @stumpylog (#4225)</li> <li>Documentation: Fix fuzzy matching details @stumpylog (#4207)</li> <li>Fix: application of theme color vars at root @shamoon (#4193)</li> <li>Fix: Trim unneeded libraries from Docker image @stumpylog (#4183)</li> <li>Fix: support storage path placeholder via API @shamoon (#4179)</li> <li>Fix: Logs the errors during thumbnail generation @stumpylog (#4171)</li> <li>Fix: remove owner details from saved_views api endpoint @shamoon (#4158)</li> <li>Fix: dashboard widget card borders hidden by bkgd color @shamoon (#4155)</li> <li>Fix: hide entire add user / group buttons if insufficient permissions @shamoon (#4133)</li> </ul>"},{"location":"changelog/#documentation_6","title":"Documentation","text":"<ul> <li>Documentation: Update documentation to refer only to Docker Compose v2 command @stumpylog (#4650)</li> <li>Documentation: fix typo, add to features list @tooomm (#4624)</li> <li>Documentation: Add note that trash dir must exist @shamoon (#4608)</li> <li>Documentation: Structure backup sections more clearly @quantenProjects (#4559)</li> <li>Documentation: update docs, screenshots ahead of Paperless-ngx v2.0 @shamoon (#4542)</li> <li>Chore: Cleanup command arguments and standardize process count handling @stumpylog (#4541)</li> <li>Add section for SELinux troubleshooting @nachtjasmin (#4528)</li> <li>Documentation: clarify document_exporter includes settings @coaxial (#4533)</li> <li>Change: Install script improvements @m-GDEV (#4387)</li> <li>Fix: update document modified time on note creation / deletion @shamoon (#4374)</li> <li>Fix: correct set owner API location in docs, additional test @shamoon (#4366)</li> <li>Documentation: Remove old information about building the Docker image locally @stumpylog (#4354)</li> <li>Documentation enhancement: add direct links for all config vars @shamoon (#4237)</li> <li>Documentation: Fix fuzzy matching details @stumpylog (#4207)</li> </ul>"},{"location":"changelog/#maintenance_21","title":"Maintenance","text":"<ul> <li>Chore: Backend bulk updates @stumpylog (#4509)</li> <li>Bump the actions group with 1 update @dependabot (#4476)</li> <li>Feature: Add Bulgarian translation @shamoon (#4470)</li> <li>Chore: Stop duplicated action runs against internal PRs @stumpylog (#4430)</li> <li>CI: separate frontend deps install @shamoon (#4336)</li> <li>CI: speed-up frontend tests on ci @shamoon (#4316)</li> <li>Fix: Generate secret key with C locale and increase allowed characters @stumpylog (#4277)</li> <li>Bump leonsteinhaeuser/project-beta-automations from 2.1.0 to 2.2.1 @dependabot (#4281)</li> <li>Chore: Updates dependabot to group more dependencies @stumpylog (#4280)</li> <li>Change: update translation string for tasks dialog @shamoon (#4263)</li> <li>CI: fix playwright browser version mismatch failures @shamoon (#4239)</li> <li>Bump docker/login-action from 2 to 3 @dependabot (#4221)</li> <li>Bump docker/setup-buildx-action from 2 to 3 @dependabot (#4220)</li> <li>Bump docker/setup-qemu-action from 2 to 3 @dependabot (#4211)</li> <li>Bump stumpylog/image-cleaner-action from 0.2.0 to 0.3.0 @dependabot (#4210)</li> <li>Bump docker/metadata-action from 4 to 5 @dependabot (#4209)</li> <li>Bump docker/build-push-action from 4 to 5 @dependabot (#4212)</li> <li>Bump actions/checkout from 3 to 4 @dependabot (#4208)</li> <li>Chore: update docker image and ci to node 20 @shamoon (#4184)</li> </ul>"},{"location":"changelog/#dependencies_32","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_64","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_64","title":"Bug Fixes","text":"<ul> <li>Fix: ghostscript rendering error doesn't trigger frontend failure message @shamoon (#4092)</li> </ul>"},{"location":"changelog/#all-app-changes_65","title":"All App Changes","text":"<ul> <li>Fix: ghostscript rendering error doesn't trigger frontend failure message @shamoon (#4092)</li> </ul>"},{"location":"changelog/#paperless-ngx-1173","title":"paperless-ngx 1.17.3","text":""},{"location":"changelog/#bug-fixes_65","title":"Bug Fixes","text":"<ul> <li>Fix: When PDF/A rendering fails, add a consideration for the user to add args to override @stumpylog (#4083)</li> </ul>"},{"location":"changelog/#dependencies_33","title":"Dependencies","text":"<ul> <li>Chore: update frontend PDF viewer (including pdf-js) @shamoon (#4065)</li> </ul>"},{"location":"changelog/#maintenance_22","title":"Maintenance","text":"<ul> <li>Dev: Upload code coverage in the same job @stumpylog (#4084)</li> </ul>"},{"location":"changelog/#all-app-changes_66","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_21","title":"Features","text":"<ul> <li>Enhancement: Allow to set a prefix for keys and channels in redis @amo13 (#3993)</li> </ul>"},{"location":"changelog/#bug-fixes_66","title":"Bug Fixes","text":"<ul> <li>Fix: Increase the HTTP timeouts for Tika/Gotenberg to maximum task time @stumpylog (#4061)</li> <li>Fix: Allow adding an SSL certificate for IMAP SSL context @stumpylog (#4048)</li> <li>Fix: tag creation sometimes retained search text @shamoon (#4038)</li> <li>Fix: enforce permissions on bulk_edit operations @shamoon (#4007)</li> </ul>"},{"location":"changelog/#all-app-changes_67","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_22","title":"Features","text":"<ul> <li>Fix / Enhancement: restrict status messages by owner if set \\& improve 404 page @shamoon (#3959)</li> <li>Feature: Add Ukrainian translation @shamoon (#3941)</li> </ul>"},{"location":"changelog/#bug-fixes_67","title":"Bug Fixes","text":"<ul> <li>Fix: handle ASN = 0 on frontend cards @shamoon (#3988)</li> <li>Fix: improve light color filled primary button text legibility @shamoon (#3980)</li> <li>Fix / Enhancement: restrict status messages by owner if set \\& improve 404 page @shamoon (#3959)</li> <li>Fix: handle very old date strings in correspondent list @shamoon (#3953)</li> </ul>"},{"location":"changelog/#documentation_7","title":"Documentation","text":"<ul> <li>docs(bare-metal): add new dependency @bin101 (#3931)</li> </ul>"},{"location":"changelog/#dependencies_34","title":"Dependencies","text":"<ul> <li>Chore: Loosen Pipfile restriction on some packages and update them @stumpylog (#3972)</li> </ul>"},{"location":"changelog/#all-app-changes_68","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_23","title":"Features","text":"<ul> <li>Add support for additional UK date formats @brainrecursion (#3887)</li> <li>Add 'doc_pk' to PAPERLESS_FILENAME_FORMAT handling @mechanarchy (#3861)</li> <li>Feature: hover buttons for saved view widgets @shamoon (#3875)</li> <li>Feature: collate two single-sided multipage scans @brakhane (#3784)</li> <li>Feature: include global and object-level permissions in export / import @shamoon (#3672)</li> <li>Enhancement / Fix: Migrate encrypted png thumbnails to webp @shamoon (#3719)</li> <li>Feature: Add Slovak translation @shamoon (#3722)</li> </ul>"},{"location":"changelog/#bug-fixes_68","title":"Bug Fixes","text":"<ul> <li>Fix: cancel possibly slow queries on doc details @shamoon (#3925)</li> <li>Fix: note creation / deletion should respect doc permissions @shamoon (#3903)</li> <li>Fix: notes show persistent scrollbars @shamoon (#3904)</li> <li>Fix: Provide SSL context to IMAP client @stumpylog (#3886)</li> <li>Fix/enhancement: permissions for mail rules \\& accounts @shamoon (#3869)</li> <li>Fix: Classifier special case when no items are set to automatic matching @stumpylog (#3858)</li> <li>Fix: issues with copy2 or copystat and SELinux permissions @stumpylog (#3847)</li> <li>Fix: Parsing office document timestamps @stumpylog (#3836)</li> <li>Fix: Add warning to install script need for permissions @shamoon (#3835)</li> <li>Fix interaction between API and barcode archive serial number @stumpylog (#3834)</li> <li>Enhancement / Fix: Migrate encrypted png thumbnails to webp @shamoon (#3719)</li> <li>Fix: add UI tour step padding @hakimio (#3791)</li> <li>Fix: translate file tasks types in footer @shamoon (#3749)</li> <li>Fix: limit ng-select size for addition of filter button @shamoon (#3731)</li> </ul>"},{"location":"changelog/#documentation_8","title":"Documentation","text":"<ul> <li>Documentation: improvements to grammar, spelling, indentation @mechanarchy (#3844)</li> </ul>"},{"location":"changelog/#maintenance_23","title":"Maintenance","text":"<ul> <li>Bump stumpylog/image-cleaner-action from 0.1.0 to 0.2.0 @dependabot (#3910)</li> <li>Chore: group frontend angular dependabot updates @shamoon (#3750)</li> </ul>"},{"location":"changelog/#dependencies_35","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_69","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_24","title":"Features","text":"<ul> <li>Feature: support barcode upscaling for better detection of small barcodes @bmachek (#3655)</li> </ul>"},{"location":"changelog/#bug-fixes_69","title":"Bug Fixes","text":"<ul> <li>Fix: owner removed when set_permissions passed on object create @shamoon (#3702)</li> </ul>"},{"location":"changelog/#all-app-changes_70","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_70","title":"Bug Fixes","text":"<ul> <li>Fix: prevent button wrapping when sidebar narrows in MS Edge @shamoon (#3682)</li> <li>Fix: Handling for filenames with non-ascii and no content attribute @stumpylog (#3695)</li> <li>Fix: Generation of thumbnails for existing stored emails @stumpylog (#3696)</li> <li>Fix: Use row gap for filter editor @kleinweby (#3662)</li> </ul>"},{"location":"changelog/#documentation_9","title":"Documentation","text":"<ul> <li>Documentation: update API docs re permissions @shamoon (#3697)</li> </ul>"},{"location":"changelog/#maintenance_24","title":"Maintenance","text":"<ul> <li>Chore: Updates codecov configuration for the flag settings and notification delay @stumpylog (#3656)</li> </ul>"},{"location":"changelog/#all-app-changes_71","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_71","title":"Bug Fixes","text":"<ul> <li>Fix: Set user and home environment through supervisord @stumpylog (#3638)</li> <li>Fix: Ignore errors when trying to copy the original file's stats @stumpylog (#3652)</li> <li>Fix: Copy default thumbnail if thumbnail generation fails @plu (#3632)</li> <li>Fix: Set user and home environment through supervisord @stumpylog (#3638)</li> <li>Fix: Fix quick install with external database not being fully ready @stumpylog (#3637)</li> </ul>"},{"location":"changelog/#maintenance_25","title":"Maintenance","text":"<ul> <li>Chore: Update default Postgres version for new installs @stumpylog (#3640)</li> </ul>"},{"location":"changelog/#all-app-changes_72","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_72","title":"Bug Fixes","text":"<ul> <li>Fix: Increase httpx operation timeouts to 30s @stumpylog (#3627)</li> <li>Fix: Better error handling and checking when parsing documents via Tika @stumpylog (#3617)</li> </ul>"},{"location":"changelog/#development","title":"Development","text":"<ul> <li>Development: frontend unit testing @shamoon (#3597)</li> </ul>"},{"location":"changelog/#maintenance_26","title":"Maintenance","text":"<ul> <li>Chore: Bumps the CI/Docker pipenv version @stumpylog (#3622)</li> <li>Chore: Set CI artifact retention days @stumpylog (#3621)</li> </ul>"},{"location":"changelog/#all-app-changes_73","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_73","title":"Bug Fixes","text":"<ul> <li>Fix: PIL ImportError on ARM devices with Docker @stumpylog (#3605)</li> </ul>"},{"location":"changelog/#maintenance_27","title":"Maintenance","text":"<ul> <li>Chore: Enable the image cleanup action @stumpylog (#3606)</li> </ul>"},{"location":"changelog/#paperless-ngx-1160","title":"paperless-ngx 1.16.0","text":""},{"location":"changelog/#notable-changes_6","title":"Notable Changes","text":"<ul> <li>Chore: Update base image to Debian bookworm @stumpylog (#3469)</li> </ul>"},{"location":"changelog/#features_25","title":"Features","text":"<ul> <li>Feature: Update to a simpler Tika library @stumpylog (#3517)</li> <li>Feature: Allow to filter documents by original filename and checksum @jayme-github (#3485)</li> </ul>"},{"location":"changelog/#bug-fixes_74","title":"Bug Fixes","text":"<ul> <li>Fix: return user first / last name from backend @shamoon (#3579)</li> <li>Fix use of <code>PAPERLESS_DB_TIMEOUT</code> for all db types @shamoon (#3576)</li> <li>Fix: handle mail rules with no filters on some imap servers @shamoon (#3554)</li> </ul>"},{"location":"changelog/#dependencies_36","title":"Dependencies","text":"<ul> <li>Chore: Python dependency updates (celery 5.3.0 in particular) @stumpylog (#3584)</li> </ul>"},{"location":"changelog/#all-app-changes_74","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_75","title":"Bug Fixes","text":"<ul> <li>Fix incorrect colors in v1.15.0 @shamoon (#3523)</li> </ul>"},{"location":"changelog/#all-app-changes_75","title":"All App Changes","text":"<ul> <li>Fix incorrect colors in v1.15.0 @shamoon (#3523)</li> </ul>"},{"location":"changelog/#paperless-ngx-1150","title":"paperless-ngx 1.15.0","text":""},{"location":"changelog/#features_26","title":"Features","text":"<ul> <li>Feature: quick filters from document detail @shamoon (#3476)</li> <li>Feature: Add explanations to relative dates @shamoon (#3471)</li> <li>Enhancement: paginate frontend tasks @shamoon (#3445)</li> <li>Feature: Better encapsulation of barcode logic @stumpylog (#3425)</li> <li>Enhancement: Improve frontend error handling @shamoon (#3413)</li> </ul>"},{"location":"changelog/#bug-fixes_76","title":"Bug Fixes","text":"<ul> <li>Fix: KeyError error on unauthenticated API calls \\& persist authentication when enabled @ajgon (#3516)</li> <li>Fix: exclude consumer \\& AnonymousUser users from export manifest @shamoon (#3487)</li> <li>Fix: prevent date suggestion search if disabled @shamoon (#3472)</li> <li>Sync Pipfile.lock based on latest Pipfile @adamantike (#3475)</li> <li>Fix: DocumentSerializer should return correct original filename @jayme-github (#3473)</li> <li>consumer.py: read from original file (instead of temp copy) @chrisblech (#3466)</li> <li>Bugfix: Catch an nltk AttributeError and handle it @stumpylog (#3453)</li> </ul>"},{"location":"changelog/#documentation_10","title":"Documentation","text":"<ul> <li>Adding doc on how to setup Fail2ban @GuillaumeHullin (#3414)</li> <li>Docs: Fix typo @MarcelBochtler (#3437)</li> <li>[Documentation] Move nginx @shamoon (#3420)</li> <li>Documentation: Note possible dependency removal for bare metal @stumpylog (#3408)</li> </ul>"},{"location":"changelog/#development_1","title":"Development","text":"<ul> <li>Development: migrate frontend tests to playwright @shamoon (#3401)</li> </ul>"},{"location":"changelog/#dependencies_37","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_76","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_27","title":"Features","text":"<ul> <li>Feature: owner filtering @shamoon (#3309)</li> <li>Enhancement: dynamic counts include all pages, hide for Any @shamoon (#3329)</li> <li>Enhancement: save tour completion, hide welcome widget @shamoon (#3321)</li> </ul>"},{"location":"changelog/#bug-fixes_77","title":"Bug Fixes","text":"<ul> <li>Fix: Adds better handling for files with invalid utf8 content @stumpylog (#3387)</li> <li>Fix: respect permissions for autocomplete suggestions @shamoon (#3359)</li> <li>Fix: Transition to new library for finding IPs for failed logins @stumpylog (#3382)</li> <li>[Security] Render frontend text as plain text @shamoon (#3366)</li> <li>Fix: default frontend to current owner, allow setting no owner on create @shamoon (#3347)</li> <li>Fix: dont perform mail actions when rule filename filter not met @shamoon (#3336)</li> <li>Fix: permission-aware bulk editing in 1.14.1+ @shamoon (#3345)</li> </ul>"},{"location":"changelog/#maintenance_28","title":"Maintenance","text":"<ul> <li>Chore: Rework workflows @stumpylog (#3242)</li> </ul>"},{"location":"changelog/#dependencies_38","title":"Dependencies","text":"<ul> <li>Chore: Upgrade channels to v4 @stumpylog (#3383)</li> <li>Chore: Upgrades Python dependencies to their latest allowed versions @stumpylog (#3365)</li> </ul>"},{"location":"changelog/#all-app-changes_77","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_78","title":"Bug Fixes","text":"<ul> <li>Fix: Inversion in tagged mail searching @stumpylog (#3305)</li> <li>Fix dynamic count labels hidden in light mode @shamoon (#3303)</li> </ul>"},{"location":"changelog/#all-app-changes_78","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_28","title":"Features","text":"<ul> <li>Enhancement: better keyboard nav for filter/edit dropdowns @shamoon (#3227)</li> </ul>"},{"location":"changelog/#bug-fixes_79","title":"Bug Fixes","text":"<ul> <li>Bump filelock from 3.10.2 to 3.12.0 to fix permissions bug @rbrownwsws (#3282)</li> <li>Fix: Handle cases where media files aren't all in the same filesystem @stumpylog (#3261)</li> <li>Fix: Prevent erroneous warning when starting container @stumpylog (#3262)</li> <li>Retain doc changes on tab switch after refresh doc @shamoon (#3243)</li> <li>Fix: Don't send Gmail related setting if the server doesn't support it @stumpylog (#3240)</li> <li>Fix: close all docs on logout @shamoon (#3232)</li> <li>Fix: Respect superuser for advanced queries, test coverage for object perms @shamoon (#3222)</li> <li>Fix: ALLOWED_HOSTS logic being overwritten when * is set @ikaruswill (#3218)</li> </ul>"},{"location":"changelog/#dependencies_39","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_79","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_29","title":"Features","text":"<ul> <li>Feature: Finnish translation @shamoon (#3215)</li> </ul>"},{"location":"changelog/#bug-fixes_80","title":"Bug Fixes","text":"<ul> <li>Fix: Load saved views from app frame, not dashboard @shamoon (#3211)</li> <li>Fix: advanced search or date searching + doc type/correspondent/storage path broken @shamoon (#3209)</li> <li>Fix MixedContentTypeError in add_inbox_tags handler @e1mo (#3212)</li> </ul>"},{"location":"changelog/#all-app-changes_80","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_81","title":"Bug Fixes","text":"<ul> <li>Fix: reduce frequency of permissions queries to speed up v1.14.0 @shamoon (#3201)</li> <li>Fix: permissions-aware statistics @shamoon (#3199)</li> <li>Fix: Use document owner for matching if set @shamoon (#3198)</li> <li>Fix: respect permissions on document view actions @shamoon (#3174)</li> <li>Increment API version for 1.14.1+ @shamoon (#3191)</li> <li>Fix: dropdown Private items with empty set @shamoon (#3189)</li> <li>Documentation: add note for macOS @shamoon (#3190)</li> <li>Fix: make the importer a little more robust against some errors @stumpylog (#3188)</li> <li>Fix: Specify backend for auto-login @shamoon (#3163)</li> <li>Fix: StoragePath missing the owned or granted filter @stumpylog (#3180)</li> <li>Fix: Redis socket connections fail due to redis-py @stumpylog (#3176)</li> <li>Fix: Handle delete mail action with no filters @shamoon (#3161)</li> <li>Fix typos and wrong version number in doc @FizzyMUC (#3171)</li> </ul>"},{"location":"changelog/#documentation_11","title":"Documentation","text":"<ul> <li>Documentation: add note for macOS @shamoon (#3190)</li> <li>Fix typos and wrong version number in doc @FizzyMUC (#3171)</li> </ul>"},{"location":"changelog/#maintenance_29","title":"Maintenance","text":"<ul> <li>Chore: Fix isort not running, upgrade to the latest black @stumpylog (#3177)</li> </ul>"},{"location":"changelog/#all-app-changes_81","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_7","title":"Notable Changes","text":"<ul> <li>Feature: multi-user permissions @shamoon (#2147)</li> </ul>"},{"location":"changelog/#features_30","title":"Features","text":"<ul> <li>Feature: Stronger typing for file consumption @stumpylog (#2744)</li> <li>Feature: double-click docs @shamoon (#2966)</li> <li>feature: Add support for zxing as barcode scanning lib @margau (#2907)</li> <li>Feature: Enable images to be released on Quay.io @stumpylog (#2972)</li> <li>Feature: test mail account @shamoon (#2949)</li> <li>Feature: Capture celery and kombu logs to a file @stumpylog (#2954)</li> <li>Fix: Resolve Redis connection issues with ACLs @stumpylog (#2939)</li> <li>Feature: Allow mail account to use access tokens @stumpylog (#2930)</li> <li>Fix: Consumer polling could overwhelm database @stumpylog (#2922)</li> <li>Feature: Improved statistics widget @shamoon (#2910)</li> <li>Enhancement: rename comments to notes and improve notes UI @shamoon (#2904)</li> <li>Allow psql client certificate authentication @Ongy (#2899)</li> <li>Enhancement: support filtering multiple correspondents, doctypes \\& storage paths @shamoon (#2893)</li> <li>Feature: Change celery serializer to pickle @stumpylog (#2861)</li> <li>Feature: Allow naming to include owner and original name @stumpylog (#2873)</li> <li>Feature: Allows filtering email by the TO value(s) as well @stumpylog (#2871)</li> <li>Feature: owner-aware unique model name constraint @shamoon (#2827)</li> <li>Feature/2396 better mail actions @jonaswinkler (#2718)</li> <li>Feature: Reduce classifier memory usage somewhat during training @stumpylog (#2733)</li> <li>Feature: Add PAPERLESS_OCR_SKIP_ARCHIVE_FILE config setting @bdr99 (#2743)</li> <li>Feature: dynamic document counts in dropdowns @shamoon (#2704)</li> <li>Allow setting the ASN on document upload @stumpylog (#2713)</li> <li>Feature: Log failed login attempts @shamoon (#2359)</li> <li>Feature: Rename documents when storage path format changes @stumpylog (#2696)</li> <li>Feature: update error message colors \\& show on document failures @shamoon (#2689)</li> <li>Feature: multi-user permissions @shamoon (#2147)</li> </ul>"},{"location":"changelog/#bug-fixes_82","title":"Bug Fixes","text":"<ul> <li>Fix: Allow setting additional Django settings for proxies @stumpylog (#3135)</li> <li>Fix: Use exclude instead of difference for mariadb @shamoon (#2983)</li> <li>Fix: permissions display should not show users with inherited permissions \\& unable to change owner @shamoon (#2818)</li> <li>Fix: Resolve Redis connection issues with ACLs @stumpylog (#2939)</li> <li>Fix: unable to edit correspondents (in ) @shamoon (#2938)</li> <li>Fix: Consumer polling could overwhelm database @stumpylog (#2922)</li> <li>Fix: Chrome struggles with commas @stumpylog (#2892)</li> <li>Fix formatting in Setup documentation page @igrybkov (#2880)</li> <li>Fix: logout on change password via frontend @shamoon (#2863)</li> <li>Fix: give superuser full doc perms @shamoon (#2820)</li> <li>Fix: Append Gmail labels instead of replacing @stumpylog (#2860)</li> <li>Fix: Ensure email date is made aware during action processing @stumpylog (#2837)</li> <li>Fix: disable bulk edit dialog buttons during operation @shamoon (#2819)</li> <li>fix database locked error @jonaswinkler (#2808)</li> <li>Fix: Disable suggestions for read-only docs @shamoon (#2813)</li> <li>Update processed mail migration @shamoon (#2804)</li> <li>Fix: Ensure scratch directory exists before using @stumpylog (#2775)</li> <li>Don't submit owner via API on document upload @jonaswinkler (#2777)</li> <li>Fix: only offer log files that exist @shamoon (#2739)</li> <li>Fix: permissions editing and initial view issues @shamoon (#2717)</li> <li>Fix: reset saved view ID on quickFilter @shamoon (#2703)</li> <li>Fix: bulk edit reset apply button state @shamoon (#2701)</li> <li>Fix: add missing i18n for mobile preview tab title @nathanaelhoun (#2692)</li> </ul>"},{"location":"changelog/#documentation_12","title":"Documentation","text":"<ul> <li>Whitespace changes, making sure the example is correctly aligned @denilsonsa (#3089)</li> <li>Docs: Include additional information about barcodes @stumpylog (#2889)</li> <li>Fix formatting in Setup documentation page @igrybkov (#2880)</li> <li>[Documentation] Update docker-compose steps to support podman @white-gecko (#2855)</li> <li>docs: better language code help @tooomm (#2830)</li> <li>Feature: Add an option to disable matching @bdr99 (#2727)</li> <li>Docs: Remove outdated PAPERLESS_WORKER_RETRY @shamoon (#2694)</li> <li>Fix: add missing i18n for mobile preview tab title @nathanaelhoun (#2692)</li> </ul>"},{"location":"changelog/#maintenance_30","title":"Maintenance","text":"<ul> <li>Chore: Configure ruff as the primary linter for Python @stumpylog (#2988)</li> <li>Feature: Enable images to be released on Quay.io @stumpylog (#2972)</li> <li>Chore: Updates locked pipenv to latest version @stumpylog (#2943)</li> <li>Chore: Properly collapse section in releases @tooomm (#2838)</li> <li>Chore: Don't include changelog PR for different releases @tooomm (#2832)</li> <li>Chore: Speed up frontend CI testing @stumpylog (#2796)</li> <li>Bump leonsteinhaeuser/project-beta-automations from 2.0.1 to 2.1.0 @dependabot (#2789)</li> </ul>"},{"location":"changelog/#dependencies_40","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_82","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_31","title":"Features","text":"<ul> <li>Feature: allow disable warn on close saved view with changes @shamoon (#2681)</li> <li>Feature: Add option to enable response compression @stumpylog (#2621)</li> <li>Feature: split documents on ASN barcode @muued (#2554)</li> </ul>"},{"location":"changelog/#bug-fixes_83","title":"Bug Fixes","text":"<ul> <li>Fix: Ignore path filtering didn't handle sub directories @stumpylog (#2674)</li> <li>Bugfix: Generation of secret key hangs during install script @stumpylog (#2657)</li> <li>Fix: Remove files produced by barcode splitting when completed @stumpylog (#2648)</li> <li>Fix: add missing storage path placeholders @shamoon (#2651)</li> <li>Fix long dropdown contents break document detail column view @shamoon (#2638)</li> <li>Fix: tags dropdown should stay closed when removing @shamoon (#2625)</li> <li>Bugfix: Configure scheduled tasks to expire after some time @stumpylog (#2614)</li> <li>Bugfix: Limit management list pagination maxSize to 5 @Kaaybi (#2618)</li> <li>Fix: Don't crash on bad ASNs during indexing @stumpylog (#2586)</li> <li>Fix: Prevent mktime OverflowError except in even more rare caes @stumpylog (#2574)</li> <li>Bugfix: Whoosh relative date queries weren't handling timezones @stumpylog (#2566)</li> <li>Fix importing files with non-ascii names @Kexogg (#2555)</li> </ul>"},{"location":"changelog/#documentation_13","title":"Documentation","text":"<ul> <li>Chore: update recommended Gotenberg to 7.8, docs note possible incompatibility @shamoon (#2608)</li> <li>[Documentation] Add v1.12.2 changelog @github-actions (#2553)</li> </ul>"},{"location":"changelog/#maintenance_31","title":"Maintenance","text":"<ul> <li>Chore: Faster Docker image cleanup @stumpylog (#2687)</li> <li>Chore: Remove duplicated folder @stumpylog (#2561)</li> <li>Chore: Switch test coverage to Codecov @stumpylog (#2582)</li> <li>Bump docker/build-push-action from 3 to 4 @dependabot (#2576)</li> <li> <p>Chore: Run tests which require convert in the CI @stumpylog (#2570)</p> </li> <li> <p>Feature: split documents on ASN barcode @muued (#2554)</p> </li> <li>Bugfix: Whoosh relative date queries weren't handling timezones @stumpylog (#2566)</li> <li>Fix importing files with non-ascii names @Kexogg (#2555)</li> </ul>"},{"location":"changelog/#paperless-ngx-1122","title":"paperless-ngx 1.12.2","text":"<p>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.</p>"},{"location":"changelog/#bug-fixes_84","title":"Bug Fixes","text":"<ul> <li>Bugfix: Allow pre-consume scripts to modify incoming file @stumpylog (#2547)</li> <li>Bugfix: Return to page based barcode scanning @stumpylog (#2544)</li> <li>Fix: Try to prevent title debounce overwriting @shamoon (#2543)</li> <li>Fix comment search highlight + multi-word search @shamoon (#2542)</li> <li>Bugfix: Request PDF/A format from Gotenberg @stumpylog (#2530)</li> <li>Fix: Trigger reindex for pre-existing comments @shamoon (#2519)</li> </ul>"},{"location":"changelog/#documentation_14","title":"Documentation","text":"<ul> <li>Bugfix: Allow pre-consume scripts to modify incoming file @stumpylog (#2547)</li> <li>Fix: Trigger reindex for pre-existing comments @shamoon (#2519)</li> <li>Minor updates to development documentation @clemensrieder (#2474)</li> <li>[Documentation] Add v1.12.1 changelog @github-actions (#2515)</li> </ul>"},{"location":"changelog/#maintenance_32","title":"Maintenance","text":"<ul> <li>Chore: Fix tag cleaner to work with attestations @stumpylog (#2532)</li> <li>Chore: Make installers statically versioned @stumpylog (#2517)</li> </ul>"},{"location":"changelog/#all-app-changes_83","title":"All App Changes","text":"<ul> <li>Bugfix: Allow pre-consume scripts to modify incoming file @stumpylog (#2547)</li> <li>Bugfix: Return to page based barcode scanning @stumpylog (#2544)</li> <li>Fix: Try to prevent title debounce overwriting @shamoon (#2543)</li> <li>Fix comment search highlight + multi-word search @shamoon (#2542)</li> <li>Bugfix: Request PDF/A format from Gotenberg @stumpylog (#2530)</li> </ul>"},{"location":"changelog/#paperless-ngx-1121","title":"paperless-ngx 1.12.1","text":""},{"location":"changelog/#bug-fixes_85","title":"Bug Fixes","text":"<ul> <li>Fix: comments not showing in search until after manual reindex in v1.12 @shamoon (#2513)</li> <li>Fix: date range search broken in 1.12 @shamoon (#2509)</li> </ul>"},{"location":"changelog/#documentation_15","title":"Documentation","text":"<ul> <li>[Documentation] Add v1.12.0 changelog @github-actions (#2507)</li> </ul>"},{"location":"changelog/#maintenance_33","title":"Maintenance","text":"<ul> <li>Moves back to the main release-drafter now that it does what we wanted @stumpylog (#2503)</li> </ul>"},{"location":"changelog/#all-app-changes_84","title":"All App Changes","text":"<ul> <li>Fix: comments not showing in search until after manual reindex in v1.12 @shamoon (#2513)</li> <li>Fix: date range search broken in 1.12 @shamoon (#2509)</li> </ul>"},{"location":"changelog/#paperless-ngx-1120","title":"paperless-ngx 1.12.0","text":""},{"location":"changelog/#features_32","title":"Features","text":"<ul> <li>New document_exporter options @mhelleboid (#2448)</li> <li>Read ASN from barcode on page @peterkappelt (#2437)</li> <li>Add AppleMail color tag support @clemensrieder (#2407)</li> <li>Feature: Retain original filename on upload @stumpylog (#2404)</li> <li>Feature: Control scheduled tasks via cron expressions @stumpylog (#2403)</li> <li>Simplify json parsing in build scripts @tribut (#2370)</li> <li>Feature: include comments in advanced search @shamoon (#2351)</li> </ul>"},{"location":"changelog/#bug-fixes_86","title":"Bug Fixes","text":"<ul> <li>Fix: limit asn integer size @shamoon (#2498)</li> <li>Bugfix: Rescales images for better barcode locating @stumpylog (#2468)</li> <li>Fix: fix downgrade migration @shamoon (#2494)</li> <li>Fix: Allow setting mailrule order from frontend @shamoon (#2459)</li> <li>Fix: tag color ordering @shamoon (#2456)</li> <li>Fix: Better Handle arbitrary ISO 8601 strings after celery serializing @shamoon (#2441)</li> <li>Use correct canonical path for nltk_data @amo13 (#2429)</li> <li>Fix: Include optional socket file in release @stumpylog (#2409)</li> <li>Fix: display rtl content in correct direction @shamoon (#2302)</li> <li>Fixed endpoint count in Docs The REST API @PascalSenn (#2386)</li> <li>Fix subpath for websockets @tribut (#2371)</li> <li>Fix: Make missing environment from file files informational only @stumpylog (#2368)</li> <li>Bugfix: Backend tests weren't using correct Python version @stumpylog (#2363)</li> <li>Fix: preview content remains hidden on mobile @shamoon (#2346)</li> <li>Bugfix: Removal of alpha channel truncates multipage TIFFs @stumpylog (#2335)</li> <li>Documentation: update build instructions to remove deprecated @shamoon (#2334)</li> </ul>"},{"location":"changelog/#documentation_16","title":"Documentation","text":"<ul> <li>Docs: Fix typo - docker-compose.yml file name in setup doc @muli (#2477)</li> <li>document existence of document_thumbnails @frrad (#2470)</li> <li>Add optional sudo command to bare metal docs @shamoon (#2464)</li> <li>Fix link @edenhaus (#2458)</li> <li>Documentation: Fix comment re bare metal runserver command @shamoon (#2420)</li> <li>Fix formatting of config variable in docs @peterkappelt (#2445)</li> <li>Update docs nginx reverse proxy example @Sprinterfreak (#2443)</li> <li>[Documentation] Add note re for dev server @shamoon (#2387)</li> <li>Fixed endpoint count in Docs The REST API @PascalSenn (#2386)</li> <li>[ Docs] Update bare metal setup instructions @natrius (#2281)</li> <li>[Docs] Add Paperless Mobile app to docs @astubenbord (#2378)</li> <li>Tiny spelling change @veverkap (#2369)</li> <li>Documentation: update build instructions to remove deprecated @shamoon (#2334)</li> <li>[Documentation] Add note that PAPERLESS_URL can't contain a path @shamoon (#2319)</li> <li>[Documentation] Add v1.11.3 changelog @github-actions (#2311)</li> </ul>"},{"location":"changelog/#maintenance_34","title":"Maintenance","text":"<ul> <li>Fix: Include optional socket file in release @stumpylog (#2409)</li> <li>Chore: remove helm chart code @shamoon (#2388)</li> <li>Simplify json parsing in build scripts @tribut (#2370)</li> <li>Bugfix: Backend tests weren't using correct Python version @stumpylog (#2363)</li> <li>Bump tj-actions/changed-files from 34 to 35 @dependabot (#2303)</li> </ul>"},{"location":"changelog/#dependencies_41","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_85","title":"All App Changes","text":"<ul> <li>New document_exporter options @mhelleboid (#2448)</li> <li>Fix: limit asn integer size @shamoon (#2498)</li> <li>Fix: fix downgrade migration @shamoon (#2494)</li> <li>Read ASN from barcode on page @peterkappelt (#2437)</li> <li>Fix: Allow setting mailrule order from frontend @shamoon (#2459)</li> <li>Chore: Update to Angular 15 \\& associated frontend deps @shamoon (#2411)</li> <li>Fix: tag color ordering @shamoon (#2456)</li> <li>Fix: Better Handle arbitrary ISO 8601 strings after celery serializing @shamoon (#2441)</li> <li>Use correct canonical path for nltk_data @amo13 (#2429)</li> <li>Add AppleMail color tag support @clemensrieder (#2407)</li> <li>Chore: Convert document exporter to use pathlib @stumpylog (#2416)</li> <li>Feature: Retain original filename on upload @stumpylog (#2404)</li> <li>Feature: Control scheduled tasks via cron expressions @stumpylog (#2403)</li> <li>Fix: display rtl content in correct direction @shamoon (#2302)</li> <li>Fix subpath for websockets @tribut (#2371)</li> <li>Bugfix: Backend tests weren't using correct Python version @stumpylog (#2363)</li> <li>Feature: include comments in advanced search @shamoon (#2351)</li> <li>Chore: More frontend tests @shamoon (#2352)</li> <li>Chore: Fixing up some minor annoyances @stumpylog (#2348)</li> <li>Bugfix: Removal of alpha channel truncates multipage TIFFs @stumpylog (#2335)</li> <li>Documentation: update build instructions to remove deprecated @shamoon (#2334)</li> <li>Add Arabic language to frontend @KhaledEmad7 (#2313)</li> <li>Bump @typescript-eslint/parser from 5.43.0 to 5.47.1 in /src-ui @dependabot (#2306)</li> <li>Bump @typescript-eslint/eslint-plugin from 5.43.0 to 5.47.1 in /src-ui @dependabot (#2308)</li> </ul>"},{"location":"changelog/#paperless-ngx-1113","title":"paperless-ngx 1.11.3","text":""},{"location":"changelog/#breaking-changes_5","title":"Breaking Changes","text":"<p>Note: PR #2279 could represent a breaking change to the API which may affect third party applications that were only checking the <code>post_document</code> endpoint for e.g. result = 'OK' as opposed to e.g. HTTP status = 200</p> <ul> <li>Bugfix: Return created task ID when posting document to API @stumpylog (#2279)</li> </ul>"},{"location":"changelog/#bug-fixes_87","title":"Bug Fixes","text":"<ul> <li>Bugfix: Fix no content when processing some RTL files @stumpylog (#2295)</li> <li>Bugfix: Handle email dates maybe being naive @stumpylog (#2293)</li> <li>Fix: live filterable dropdowns broken in 1.11.x @shamoon (#2292)</li> <li>Bugfix: Reading environment from files didn't work for management commands @stumpylog (#2261)</li> <li>Bugfix: Return created task ID when posting document to API @stumpylog (#2279)</li> </ul>"},{"location":"changelog/#all-app-changes_86","title":"All App Changes","text":"<ul> <li>Bugfix: Fix no content when processing some RTL files @stumpylog (#2295)</li> <li>Bugfix: Handle email dates maybe being naive @stumpylog (#2293)</li> <li>Fix: live filterable dropdowns broken in 1.11.x @shamoon (#2292)</li> <li>Bugfix: Return created task ID when posting document to API @stumpylog (#2279)</li> </ul>"},{"location":"changelog/#paperless-ngx-1112","title":"paperless-ngx 1.11.2","text":"<p>Versions 1.11.1 and 1.11.2 contain bug fixes from v1.11.0 that prevented use of the new email consumption feature</p>"},{"location":"changelog/#bug-fixes_88","title":"Bug Fixes","text":"<ul> <li>Fix frontend mailrule missing consumption scope parameter @shamoon (#2280)</li> <li>Fix: missing frontend email attachment options @shamoon (#2272)</li> <li>Fix: edit dialog creation in v1.11.0 @shamoon (#2273)</li> </ul>"},{"location":"changelog/#all-app-changes_87","title":"All App Changes","text":"<ul> <li>Fix frontend mailrule missing consumption scope parameter @shamoon (#2280)</li> <li>Fix: missing frontend email attachment options @shamoon (#2272)</li> <li>Fix: edit dialog creation in v1.11.0 @shamoon (#2273)</li> </ul>"},{"location":"changelog/#paperless-ngx-1110","title":"paperless-ngx 1.11.0","text":""},{"location":"changelog/#notable-changes_8","title":"Notable Changes","text":"<ul> <li>Feature: frontend paperless mail @shamoon (#2000)</li> <li>Feature: Ability to consume mails and eml files @p-h-a-i-l (#848)</li> </ul>"},{"location":"changelog/#features_33","title":"Features","text":"<ul> <li>Chore: Downgrade hiredis to 2.0.0 @stumpylog (#2262)</li> <li>Add ability to provide the configuration file path using an env variable @hashworks (#2241)</li> <li>Feature: Adds option to allow a user to export directly to a zipfile @stumpylog (#2004)</li> <li>Feature: Adds PaperlessTask admin page interface @stumpylog (#2184)</li> <li>Feature: speed up frontend by truncating content @shamoon (#2028)</li> <li>Feature: Allow bulk download API to follow file name formatting @stumpylog (#2003)</li> <li>Feature: Bake NLTK into Docker image @stumpylog (#2129)</li> <li>Feature: frontend paperless mail @shamoon (#2000)</li> <li>Feature: Ability to consume mails and eml files @p-h-a-i-l (#848)</li> </ul>"},{"location":"changelog/#bug-fixes_89","title":"Bug Fixes","text":"<ul> <li>Bugfix: Handle RTL languages better @stumpylog (#1665)</li> <li>Fixed typo in docs @mendelk (#2256)</li> <li>Fix: support in advanced search, fix tags filter badge count for excluded @shamoon (#2205)</li> <li>Bugfix: Don't run system checks on migrate @stumpylog (#2183)</li> <li>Bugfix: Decoding task signals could fail on datetime type @stumpylog (#2058)</li> </ul>"},{"location":"changelog/#documentation_17","title":"Documentation","text":"<ul> <li>Fixed typo in docs @mendelk (#2256)</li> <li>Docs: More fixes and improvements @tooomm (#2203)</li> <li>Docs: Fix leftover issues from conversion @tooomm (#2172)</li> <li>Docs: Fix broken internal links @tooomm (#2165)</li> <li>Update setup.md @Weltraumschaf (#2157)</li> <li>Chore: Cleanup of new documentation @stumpylog (#2137)</li> <li>[Documentation] Add v1.10.2 changelog @github-actions (#2114)</li> </ul>"},{"location":"changelog/#maintenance_35","title":"Maintenance","text":"<ul> <li>Chore: Adds notable label for release drafter @stumpylog (#2200)</li> <li>Chore: Prevent forks from having failing CI runs by default @tooomm (#2166)</li> <li>Chore: migrate to eslint @shamoon (#2199)</li> <li>Feature: Adds PaperlessTask admin page interface @stumpylog (#2184)</li> <li>Chore: Changes qpdf to be cross compiled for large speed up @stumpylog (#2181)</li> <li>Chore: Decrease time to build pikepdf @stumpylog (#2178)</li> <li>Chore: Minor CI cleanups @stumpylog (#2175)</li> </ul>"},{"location":"changelog/#all-app-changes_88","title":"All App Changes","text":"<ul> <li>Add ability to provide the configuration file path using an env variable @hashworks (#2241)</li> <li>Fix: support in advanced search, fix tags filter badge count for excluded @shamoon (#2205)</li> <li>Chore: migrate to eslint @shamoon (#2199)</li> <li>Feature: Adds option to allow a user to export directly to a zipfile @stumpylog (#2004)</li> <li>Feature: Adds PaperlessTask admin page interface @stumpylog (#2184)</li> <li>Bugfix: Decoding task signals could fail on datetime type @stumpylog (#2058)</li> <li>Feature: speed up frontend by truncating content @shamoon (#2028)</li> <li>Feature: Allow bulk download API to follow file name formatting @stumpylog (#2003)</li> <li>Feature: Bake NLTK into Docker image @stumpylog (#2129)</li> <li>Chore: Apply live testing backoff logic to new mail tests @stumpylog (#2134)</li> <li>Feature: frontend paperless mail @shamoon (#2000)</li> <li>Feature: Ability to consume mails and eml files @p-h-a-i-l (#848)</li> </ul>"},{"location":"changelog/#paperless-ngx-1102","title":"paperless-ngx 1.10.2","text":""},{"location":"changelog/#features_34","title":"Features","text":"<ul> <li>Take ownership of k8s-at-home Helm chart @alexander-bauer (#1947)</li> </ul>"},{"location":"changelog/#bug-fixes_90","title":"Bug Fixes","text":"<ul> <li>Bugfix: Language code checks around two part languages @stumpylog (#2112)</li> <li>Bugfix: Redis socket compatibility didn't handle URLs with ports @stumpylog (#2109)</li> <li>Bugfix: Incompatible URL schemes for socket based Redis @stumpylog (#2092)</li> <li>Fix doc links in contributing @tooomm (#2102)</li> </ul>"},{"location":"changelog/#documentation_18","title":"Documentation","text":"<ul> <li>Docs: Some more small MkDocs updates @tooomm (#2106)</li> <li>Chore: Cleans up documentation links @stumpylog (#2104)</li> <li>Feature: Move docs to material-mkdocs @shamoon (#2067)</li> <li>Chore: Add v1.10.1 changelong @shamoon (#2082)</li> </ul>"},{"location":"changelog/#maintenance_36","title":"Maintenance","text":"<ul> <li>Take ownership of k8s-at-home Helm chart @alexander-bauer (#1947)</li> </ul>"},{"location":"changelog/#all-app-changes_89","title":"All App Changes","text":"<ul> <li>Bugfix: Language code checks around two part languages @stumpylog (#2112)</li> <li>Bugfix: Redis socket compatibility didn't handle URLs with ports @stumpylog (#2109)</li> <li>Bugfix: Incompatible URL schemes for socket based Redis @stumpylog (#2092)</li> </ul>"},{"location":"changelog/#paperless-ngx-1101","title":"paperless-ngx 1.10.1","text":""},{"location":"changelog/#features_35","title":"Features","text":"<ul> <li>Feature: Allows documents in WebP format @stumpylog (#1984)</li> </ul>"},{"location":"changelog/#bug-fixes_91","title":"Bug Fixes","text":"<ul> <li>Fix: frontend tasks display in 1.10.0 @shamoon (#2073)</li> <li>Bugfix: Custom startup commands weren't run as root @stumpylog (#2069)</li> <li>Bugfix: Add libatomic for armv7 compatibility @stumpylog (#2066)</li> <li>Bugfix: Don't silence an exception when trying to handle file naming @stumpylog (#2062)</li> <li>Bugfix: Some tesseract languages aren't detected as installed. @stumpylog (#2057)</li> </ul>"},{"location":"changelog/#maintenance_37","title":"Maintenance","text":"<ul> <li>Chore: Use a maintained upload-release-asset @stumpylog (#2055)</li> </ul>"},{"location":"changelog/#dependencies_42","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_90","title":"All App Changes","text":"<ul> <li>Bump tslib from 2.4.0 to 2.4.1 in /src-ui @dependabot (#2076)</li> <li>Bump @angular-builders/jest from 14.0.1 to 14.1.0 in /src-ui @dependabot (#2079)</li> <li>Bump jest-preset-angular from 12.2.2 to 12.2.3 in /src-ui @dependabot (#2078)</li> <li>Bump ngx-file-drop from 14.0.1 to 14.0.2 in /src-ui @dependabot (#2080)</li> <li>Bump @ngneat/dirty-check-forms from 3.0.2 to 3.0.3 in /src-ui @dependabot (#2077)</li> <li>Fix: frontend tasks display in 1.10.0 @shamoon (#2073)</li> <li>Bugfix: Don't silence an exception when trying to handle file naming @stumpylog (#2062)</li> <li>Bugfix: Some tesseract languages aren't detected as installed. @stumpylog (#2057)</li> </ul>"},{"location":"changelog/#paperless-ngx-1100","title":"paperless-ngx 1.10.0","text":""},{"location":"changelog/#features_36","title":"Features","text":"<ul> <li>Feature: Capture stdout \\& stderr of the pre/post consume scripts @stumpylog (#1967)</li> <li>Feature: Allow running custom container initialization scripts @stumpylog (#1838)</li> <li>Feature: Add more file name formatting options @stumpylog (#1906)</li> <li>Feature: 1.9.2 UI tweaks @shamoon (#1886)</li> <li>Feature: Optional celery monitoring with Flower @stumpylog (#1810)</li> <li>Feature: Save pending tasks for frontend @stumpylog (#1816)</li> <li>Feature: Improved processing for automatic matching @stumpylog (#1609)</li> <li>Feature: Transition to celery for background tasks @stumpylog (#1648)</li> <li>Feature: UI Welcome Tour @shamoon (#1644)</li> <li>Feature: slim sidebar @shamoon (#1641)</li> <li>change default matching algo to auto and move to constant @NiFNi (#1754)</li> <li>Feature: Enable end to end Tika testing in CI @stumpylog (#1757)</li> <li>Feature: frontend update checking settings @shamoon (#1692)</li> <li>Feature: Upgrade to qpdf 11, pikepdf 6 \\& ocrmypdf 14 @stumpylog (#1642)</li> </ul>"},{"location":"changelog/#bug-fixes_92","title":"Bug Fixes","text":"<ul> <li>Bugfix: Fix created_date being a string @stumpylog (#2023)</li> <li>Bugfix: Fixes an issue with mixed text and images when redoing OCR @stumpylog (#2017)</li> <li>Bugfix: Always re-try barcodes with pdf2image @stumpylog (#1953)</li> <li>Fix: using <code>CONSUMER_SUBDIRS_AS_TAGS</code> causes failure with Celery in <code>dev</code> @shamoon (#1942)</li> <li>Fix mail consumption broken in <code>dev</code> after move to celery @shamoon (#1934)</li> <li>Bugfix: Prevent file handling from running with stale data @stumpylog (#1905)</li> <li>Chore: Reduce nuisance CI test failures @stumpylog (#1922)</li> <li>Bugfix: Unintentional deletion of feature tagged Docker images @stumpylog (#1896)</li> <li>Fix: independent control of saved views @shamoon (#1868)</li> <li>Fix: frontend relative date searches @shamoon (#1865)</li> <li>Chore: Fixes pipenv issues @stumpylog (#1873)</li> <li>Bugfix: Handle password protected PDFs during barcode detection @stumpylog (#1858)</li> <li>Fix: Allows configuring barcodes with pdf2image instead of pikepdf @stumpylog (#1857)</li> <li>Bugfix: Reverts the change around skip_noarchive @stumpylog (#1829)</li> <li>Fix: missing loadViewConfig breaks loading saved view @shamoon (#1792)</li> <li>Bugfix: Fallback to pdf2image if pikepdf fails @stumpylog (#1745)</li> <li>Fix: creating new storage path on document edit fails to update menu @shamoon (#1777)</li> <li>Bugfix: Files containing barcodes uploaded via web are not consumed after splitting @stumpylog (#1762)</li> <li>Bugfix: Fix email labeling for non-Gmail servers @stumpylog (#1755)</li> <li>Fix: allow preview for .csv files @shamoon (#1744)</li> <li>Bugfix: csv recognition by consumer @bin101 (#1726)</li> <li>Bugfix: Include document title when a duplicate is detected @stumpylog (#1696)</li> <li>Bugfix: Set MySql charset @stumpylog (#1687)</li> <li>Mariadb compose files should use <code>PAPERLESS_DBPASS</code> @shamoon (#1683)</li> </ul>"},{"location":"changelog/#documentation_19","title":"Documentation","text":"<ul> <li>Documentation: Update MariaDB docs to note some potential issues @stumpylog (#2016)</li> <li>Documentation: Add note re MS exchange servers @shamoon (#1780)</li> <li>Chore: Updates Gotenberg versions @stumpylog (#1768)</li> <li>Documentation: Tweak LinuxServer @stumpylog (#1761)</li> <li>Documentation: Adds troubleshooting note about Kubernetes and ports @stumpylog (#1731)</li> <li>Documentation: LinuxServer.io Migration @stumpylog (#1733)</li> <li>[Documentation] Add v1.9.2 changelog @github-actions (#1671)</li> </ul>"},{"location":"changelog/#maintenance_38","title":"Maintenance","text":"<ul> <li>Bump tj-actions/changed-files from 32 to 34 @dependabot (#1915)</li> <li>Chore: Fix <code>dev</code> trying to build Pillow or lxml @stumpylog (#1909)</li> <li>Chore: Fixes pipenv issues @stumpylog (#1873)</li> <li>Chore: Simplified registry cleanup @stumpylog (#1812)</li> <li>Chore: Fixing deprecated workflow commands @stumpylog (#1786)</li> <li>Chore: Python library update + test fixes @stumpylog (#1773)</li> <li>Chore: Updates Gotenberg versions @stumpylog (#1768)</li> <li>Bump leonsteinhaeuser/project-beta-automations from 1.3.0 to 2.0.1 @dependabot (#1703)</li> <li>Bump tj-actions/changed-files from 29.0.2 to 31.0.2 @dependabot (#1702)</li> <li>Bump actions/checkout from 2 to 3 @dependabot (#1704)</li> <li>Bump actions/setup-python from 3 to 4 @dependabot (#1705)</li> </ul>"},{"location":"changelog/#dependencies_43","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_91","title":"All App Changes","text":"<ul> <li>Add info that re-do OCR doesn't automatically refresh content @shamoon (#2025)</li> <li>Bugfix: Fix created_date being a string @stumpylog (#2023)</li> <li>Bugfix: Fixes an issue with mixed text and images when redoing OCR @stumpylog (#2017)</li> <li>Bugfix: Don't allow exceptions during date parsing to fail consume @stumpylog (#1998)</li> <li>Feature: Capture stdout \\& stderr of the pre/post consume scripts @stumpylog (#1967)</li> <li>Bugfix: Always re-try barcodes with pdf2image @stumpylog (#1953)</li> <li>Fix: using <code>CONSUMER_SUBDIRS_AS_TAGS</code> causes failure with Celery in <code>dev</code> @shamoon (#1942)</li> <li>Fix mail consumption broken in <code>dev</code> after move to celery @shamoon (#1934)</li> <li>Bugfix: Prevent file handling from running with stale data @stumpylog (#1905)</li> <li>Chore: Reduce nuisance CI test failures @stumpylog (#1922)</li> <li>Bump scikit-learn from 1.1.2 to 1.1.3 @dependabot (#1903)</li> <li>Bump angular packages as bundle @dependabot (#1910)</li> <li>Bump ngx-ui-tour-ng-bootstrap from 11.0.0 to 11.1.0 in /src-ui @dependabot (#1911)</li> <li>Bump jest-environment-jsdom from 29.1.2 to 29.2.2 in /src-ui @dependabot (#1914)</li> <li>Feature: Add more file name formatting options @stumpylog (#1906)</li> <li>Bump pillow from 9.2.0 to 9.3.0 @dependabot (#1904)</li> <li>Bump pytest from 7.1.3 to 7.2.0 @dependabot (#1902)</li> <li>Bump tox from 3.26.0 to 3.27.0 @dependabot (#1901)</li> <li>directly use rapidfuzz @maxbachmann (#1899)</li> <li>Feature: 1.9.2 UI tweaks @shamoon (#1886)</li> <li>Bump zipp from 3.9.0 to 3.10.0 @dependabot (#1860)</li> <li>Fix: independent control of saved views @shamoon (#1868)</li> <li>Fix: frontend relative date searches @shamoon (#1865)</li> <li>Django error W003 - MariaDB may not allow unique CharFields to have a max_length > 255. @Sblop (#1881)</li> <li>Bump pytest-env from 0.6.2 to 0.8.1 @dependabot (#1859)</li> <li>Fix: Allows configuring barcodes with pdf2image instead of pikepdf @stumpylog (#1857)</li> <li>Feature: Save pending tasks for frontend @stumpylog (#1816)</li> <li>Bugfix: Reverts the change around skip_noarchive @stumpylog (#1829)</li> <li>Bump sphinx from 5.2.3 to 5.3.0 @dependabot (#1817)</li> <li>Fix: missing loadViewConfig breaks loading saved view @shamoon (#1792)</li> <li>Bugfix: Fallback to pdf2image if pikepdf fails @stumpylog (#1745)</li> <li>Fix: creating new storage path on document edit fails to update menu @shamoon (#1777)</li> <li>Chore: Python library update + test fixes @stumpylog (#1773)</li> <li>Feature: Improved processing for automatic matching @stumpylog (#1609)</li> <li>Feature: Transition to celery for background tasks @stumpylog (#1648)</li> <li>Feature: UI Welcome Tour @shamoon (#1644)</li> <li>Feature: slim sidebar @shamoon (#1641)</li> <li>Bugfix: Files containing barcodes uploaded via web are not consumed after splitting @stumpylog (#1762)</li> <li>change default matching algo to auto and move to constant @NiFNi (#1754)</li> <li>Bugfix: Fix email labeling for non-Gmail servers @stumpylog (#1755)</li> <li>Feature: frontend update checking settings @shamoon (#1692)</li> <li>Fix: allow preview for .csv files @shamoon (#1744)</li> <li>Bump myst-parser from 0.18.0 to 0.18.1 @dependabot (#1738)</li> <li>Bugfix: csv recognition by consumer @bin101 (#1726)</li> <li>Bugfix: Include document title when a duplicate is detected @stumpylog (#1696)</li> <li>Bump rxjs from 7.5.6 to 7.5.7 in /src-ui @dependabot (#1720)</li> <li>Bump uuid from 8.3.2 to 9.0.0 in /src-ui @dependabot (#1716)</li> <li>Bump ng2-pdf-viewer from 9.1.0 to 9.1.2 in /src-ui @dependabot (#1717)</li> <li>Bump ngx-color from 8.0.2 to 8.0.3 in /src-ui @dependabot (#1715)</li> <li>Bump concurrently from 7.3.0 to 7.4.0 in /src-ui @dependabot (#1719)</li> <li>Bump @types/node from 18.7.14 to 18.7.23 in /src-ui @dependabot (#1718)</li> <li>Bump jest-environment-jsdom from 29.0.1 to 29.1.2 in /src-ui @dependabot (#1714)</li> <li>Bump @angular/cli @angular/core @dependabot (#1708)</li> <li>Bump cypress from 10.7.0 to 10.9.0 in /src-ui @dependabot (#1707)</li> <li>Bump bootstrap from 5.2.0 to 5.2.1 in /src-ui @dependabot (#1710)</li> <li>Bump typescript from 4.7.4 to 4.8.4 in /src-ui @dependabot (#1706)</li> <li>Bugfix: Set MySql charset @stumpylog (#1687)</li> </ul>"},{"location":"changelog/#paperless-ngx-192","title":"paperless-ngx 1.9.2","text":""},{"location":"changelog/#bug-fixes_93","title":"Bug Fixes","text":"<ul> <li>Bugfix: Allow PAPERLESS_OCR_CLEAN=none @shamoon (#1670)</li> </ul>"},{"location":"changelog/#all-app-changes_92","title":"All App Changes","text":"<ul> <li>Chore: Bumps version numbers to 1.9.2 @stumpylog (#1666)</li> </ul>"},{"location":"changelog/#paperless-ngx-191","title":"paperless-ngx 1.9.1","text":""},{"location":"changelog/#notes","title":"Notes","text":"<ul> <li>Version 1.9.1 incorrectly displays the version string as 1.9.0</li> </ul>"},{"location":"changelog/#bug-fixes_94","title":"Bug Fixes","text":"<ul> <li>Bugfix: Fixes missing OCR mode skip_noarchive @stumpylog (#1645)</li> <li>Fix reset button padding on small screens @shamoon (#1646)</li> </ul>"},{"location":"changelog/#documentation_20","title":"Documentation","text":"<ul> <li>Improve docs re @janis-ax (#1625)</li> <li>[Documentation] Add v1.9.0 changelog @github-actions (#1639)</li> </ul>"},{"location":"changelog/#all-app-changes_93","title":"All App Changes","text":"<ul> <li>Bugfix: Fixes missing OCR mode skip_noarchive @stumpylog (#1645)</li> <li>Fix reset button padding on small screens @shamoon (#1646)</li> </ul>"},{"location":"changelog/#paperless-ngx-190","title":"paperless-ngx 1.9.0","text":""},{"location":"changelog/#features_37","title":"Features","text":"<ul> <li>Feature: Faster, less memory barcode handling @stumpylog (#1594)</li> <li>Feature: Display django-q process names @stumpylog (#1567)</li> <li>Feature: Add MariaDB support @bckelly1 (#543)</li> <li>Feature: Simplify IMAP login for UTF-8 @stumpylog (#1492)</li> <li>Feature: Even better re-do of OCR @stumpylog (#1451)</li> <li>Feature: document comments @tim-vogel (#1375)</li> <li>Adding date suggestions to the documents details view @Eckii24 (#1367)</li> <li>Feature: Event driven consumer @stumpylog (#1421)</li> <li>Feature: Adds storage paths to re-tagger command @stumpylog (#1446)</li> <li>Feature: Preserve original filename in metadata @GwynHannay (#1440)</li> <li>Handle tags for gmail email accounts @sisao (#1433)</li> <li>Update redis image @tribut (#1436)</li> <li>PAPERLESS_REDIS may be set via docker secrets @DennisGaida (#1405)</li> </ul>"},{"location":"changelog/#bug-fixes_95","title":"Bug Fixes","text":"<ul> <li>paperless_cmd.sh: use exec to run supervisord @lemmi (#1617)</li> <li>Fix: Double barcode separation creates empty file @stumpylog (#1596)</li> <li>Fix: Resolve issue with slow classifier @stumpylog (#1576)</li> <li>Fix document comments not updating on document navigation @shamoon (#1566)</li> <li>Fix: Include storage paths in document exporter @shamoon (#1557)</li> <li>Chore: Cleanup and validate settings @stumpylog (#1551)</li> <li>Bugfix: Better gunicorn settings for workers @stumpylog (#1500)</li> <li>Fix actions button in tasks table @shamoon (#1488)</li> <li>Fix: Add missing filter rule types to SavedViewFilterRule model \\& fix migrations @shamoon (#1463)</li> <li>Fix paperless.conf.example typo @qcasey (#1460)</li> <li>Bugfix: Fixes the creation of an archive file, even if noarchive was specified @stumpylog (#1442)</li> <li>Fix: created_date should not be required @shamoon (#1412)</li> <li>Fix: dev backend testing @stumpylog (#1420)</li> <li>Bugfix: Catch all exceptions during the task signals @stumpylog (#1387)</li> <li>Fix: saved view page parameter @shamoon (#1376)</li> <li>Fix: Correct browser unsaved changes warning @shamoon (#1369)</li> <li>Fix: correct date pasting with other formats @shamoon (#1370)</li> <li>Bugfix: Allow webserver bind address to be configured @stumpylog (#1358)</li> <li>Bugfix: Chain exceptions during exception handling @stumpylog (#1354)</li> <li>Fix: missing tooltip translation \\& filter editor wrapping @shamoon (#1305)</li> <li>Bugfix: Interaction between barcode and directories as tags @stumpylog (#1303)</li> </ul>"},{"location":"changelog/#documentation_21","title":"Documentation","text":"<ul> <li>[Beta] Paperless-ngx v1.9.0 Release Candidate @stumpylog (#1560)</li> <li>docs/configuration: Fix binary variable defaults @erikarvstedt (#1528)</li> <li>Info about installing on subpath @viktor-c (#1350)</li> <li>Docs: move scanner \\& software recs to GH wiki @shamoon (#1482)</li> <li>Docs: Update mobile scanner section @tooomm (#1467)</li> <li>Adding date suggestions to the documents details view @Eckii24 (#1367)</li> <li>docs: scanners: add Brother ads4700w @ocelotsloth (#1450)</li> <li>Feature: Adds storage paths to re-tagger command @stumpylog (#1446)</li> <li>Changes to Redis documentation @Zerteax (#1441)</li> <li>Update scanners.rst @glassbox-sco (#1430)</li> <li>Update scanners.rst @derlucas (#1415)</li> <li>Bugfix: Allow webserver bind address to be configured @stumpylog (#1358)</li> <li>docs: fix small typo @tooomm (#1352)</li> <li>[Documentation] Add v1.8.0 changelog @github-actions (#1298)</li> </ul>"},{"location":"changelog/#maintenance_39","title":"Maintenance","text":"<ul> <li>[Beta] Paperless-ngx v1.9.0 Release Candidate @stumpylog (#1560)</li> <li>paperless_cmd.sh: use exec to run supervisord @lemmi (#1617)</li> <li>Chore: Extended container image cleanup @stumpylog (#1556)</li> <li>Chore: Smaller library images @stumpylog (#1546)</li> <li>Bump tj-actions/changed-files from 24 to 29.0.2 @dependabot (#1493)</li> <li>Bugfix: Better gunicorn settings for workers @stumpylog (#1500)</li> <li>[CI] Fix release drafter issues @qcasey (#1301)</li> <li>Fix: dev backend testing @stumpylog (#1420)</li> <li>Chore: Exclude dependabot PRs from Project, set status to Needs Review @qcasey (#1397)</li> <li>Chore: Add to label PRs based on and title @qcasey (#1396)</li> <li>Chore: use pre-commit in the Ci workflow @stumpylog (#1362)</li> <li>Chore: Fixes permissions for image tag cleanup @stumpylog (#1315)</li> <li>Bump leonsteinhaeuser/project-beta-automations from 1.2.1 to 1.3.0 @dependabot (#1328)</li> <li>Bump tj-actions/changed-files from 23.1 to 24 @dependabot (#1329)</li> <li>Feature: Remove requirements.txt and use pipenv everywhere @stumpylog (#1316)</li> </ul>"},{"location":"changelog/#dependencies_44","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_94","title":"All App Changes","text":"<ul> <li>[Beta] Paperless-ngx v1.9.0 Release Candidate @stumpylog (#1560)</li> <li>Feature: Faster, less memory barcode handling @stumpylog (#1594)</li> <li>Fix: Consume directory permissions were not updated @stumpylog (#1605)</li> <li>Fix: Double barcode separation creates empty file @stumpylog (#1596)</li> <li>Fix: Parsing Tika documents fails with AttributeError @stumpylog (#1591)</li> <li>Fix: Resolve issue with slow classifier @stumpylog (#1576)</li> <li>Feature: Display django-q process names @stumpylog (#1567)</li> <li>Fix document comments not updating on document navigation @shamoon (#1566)</li> <li>Feature: Add MariaDB support @bckelly1 (#543)</li> <li>Fix: Include storage paths in document exporter @shamoon (#1557)</li> <li>Chore: Cleanup and validate settings @stumpylog (#1551)</li> <li>Bump pikepdf from 5.5.0 to 5.6.1 @dependabot (#1537)</li> <li>Bump black from 22.6.0 to 22.8.0 @dependabot (#1539)</li> <li>Bump tqdm from 4.64.0 to 4.64.1 @dependabot (#1540)</li> <li>Bump pytest from 7.1.2 to 7.1.3 @dependabot (#1538)</li> <li>Bump angular packages, jest-preset-angular in src-ui @dependabot (#1502)</li> <li>Bump jest-environment-jsdom from 28.1.3 to 29.0.1 in /src-ui @dependabot (#1507)</li> <li>Bump @types/node from 18.6.3 to 18.7.14 in /src-ui @dependabot (#1506)</li> <li>Bump @angular-builders/jest from 14.0.0 to 14.0.1 in /src-ui @dependabot (#1505)</li> <li>Bump zone.js from 0.11.7 to 0.11.8 in /src-ui @dependabot (#1504)</li> <li>Bump ngx-color from 8.0.1 to 8.0.2 in /src-ui @dependabot (#1494)</li> <li>Bump cypress from 10.3.1 to 10.7.0 in /src-ui @dependabot (#1496)</li> <li>Bump @cypress/schematic from 2.0.0 to 2.1.1 in /src-ui @dependabot (#1495)</li> <li>Bump @popperjs/core from 2.11.5 to 2.11.6 in /src-ui @dependabot (#1498)</li> <li>Feature: Simplify IMAP login for UTF-8 @stumpylog (#1492)</li> <li>Fix actions button in tasks table @shamoon (#1488)</li> <li>Fix: Add missing filter rule types to SavedViewFilterRule model \\& fix migrations @shamoon (#1463)</li> <li>Feature: Even better re-do of OCR @stumpylog (#1451)</li> <li>Feature: document comments @tim-vogel (#1375)</li> <li>Adding date suggestions to the documents details view @Eckii24 (#1367)</li> <li>Bump sphinx from 5.0.2 to 5.1.1 @dependabot (#1297)</li> <li>Feature: Event driven consumer @stumpylog (#1421)</li> <li>Bugfix: Fixes the creation of an archive file, even if noarchive was specified @stumpylog (#1442)</li> <li>Feature: Adds storage paths to re-tagger command @stumpylog (#1446)</li> <li>Feature: Preserve original filename in metadata @GwynHannay (#1440)</li> <li>Handle tags for gmail email accounts @sisao (#1433)</li> <li>Fix: should not be required @shamoon (#1412)</li> <li>Bugfix: Catch all exceptions during the task signals @stumpylog (#1387)</li> <li>Fix: saved view page parameter @shamoon (#1376)</li> <li>Fix: Correct browser unsaved changes warning @shamoon (#1369)</li> <li>Fix: correct date pasting with other formats @shamoon (#1370)</li> <li>Chore: use pre-commit in the Ci workflow @stumpylog (#1362)</li> <li>Bugfix: Chain exceptions during exception handling @stumpylog (#1354)</li> <li>Bump watchfiles from 0.15.0 to 0.16.1 @dependabot (#1285)</li> <li>Bump cypress from 10.3.0 to 10.3.1 in /src-ui @dependabot (#1342)</li> <li>Bump ngx-color from 7.3.3 to 8.0.1 in /src-ui @dependabot (#1343)</li> <li>Bump @angular/cli from 14.0.4 to 14.1.0 in /src-ui @dependabot (#1330)</li> <li>Bump @types/node from 18.0.0 to 18.6.3 in /src-ui @dependabot (#1341)</li> <li>Bump jest-preset-angular from 12.1.0 to 12.2.0 in /src-ui @dependabot (#1340)</li> <li>Bump concurrently from 7.2.2 to 7.3.0 in /src-ui @dependabot (#1326)</li> <li>Bump ng2-pdf-viewer from 9.0.0 to 9.1.0 in /src-ui @dependabot (#1337)</li> <li>Bump jest-environment-jsdom from 28.1.2 to 28.1.3 in /src-ui @dependabot (#1336)</li> <li>Bump ngx-file-drop from 13.0.0 to 14.0.1 in /src-ui @dependabot (#1331)</li> <li>Bump jest and @types/jest in /src-ui @dependabot (#1333)</li> <li>Bump bootstrap from 5.1.3 to 5.2.0 in /src-ui @dependabot (#1327)</li> <li>Bump typescript from 4.6.4 to 4.7.4 in /src-ui @dependabot (#1324)</li> <li>Bump ts-node from 10.8.1 to 10.9.1 in /src-ui @dependabot (#1325)</li> <li>Bump rxjs from 7.5.5 to 7.5.6 in /src-ui @dependabot (#1323)</li> <li>Fix: missing tooltip translation \\& filter editor wrapping @shamoon (#1305)</li> <li>Feature: Remove requirements.txt and use pipenv everywhere @stumpylog (#1316)</li> <li>Bugfix: Interaction between barcode and directories as tags @stumpylog (#1303)</li> </ul>"},{"location":"changelog/#paperless-ngx-180","title":"paperless-ngx 1.8.0","text":""},{"location":"changelog/#features_38","title":"Features","text":"<ul> <li>Feature use env vars in pre post scripts @ziprandom (#1154)</li> <li>frontend task queue @shamoon (#1020)</li> <li>Fearless scikit-learn updates @stumpylog (#1082)</li> <li>Adds support for Docker secrets @stumpylog (#1034)</li> <li>make frontend timezone un-aware @shamoon (#957)</li> <li>Change document thumbnails to WebP @stumpylog (#1127)</li> <li>Fork django-q to update dependencies @stumpylog (#1014)</li> <li>Fix: Rework query params logic @shamoon (#1000)</li> <li>Enhancement: show note on language change and offer reload @shamoon (#1030)</li> <li>Include error information when Redis connection fails @stumpylog (#1016)</li> <li>frontend settings saved to database @shamoon (#919)</li> <li>Add \"Created\" as additional (optional) parameter for post_documents @eingemaischt (#965)</li> <li>Convert Changelog to markdown, auto-commit future changelogs @qcasey (#935)</li> <li>allow all ASN filtering functions @shamoon (#920)</li> <li>gunicorn: Allow IPv6 sockets @vlcty (#924)</li> <li>initial app loading indicators @shamoon (#899)</li> </ul>"},{"location":"changelog/#bug-fixes_96","title":"Bug Fixes","text":"<ul> <li>Fix: dropdown selected items not visible again @shamoon (#1261)</li> <li>[CI] Fix automatic changelog generation on release @qcasey (#1249)</li> <li>Fix: Prevent duplicate api calls on text filtering @shamoon (#1133)</li> <li>make frontend timezone un-aware @shamoon (#957)</li> <li>Feature / fix quick toggleable filters @shamoon (#1122)</li> <li>Chore: Manually downgrade reportlab (and update everything else) @stumpylog (#1116)</li> <li>Bugfix: Don't assume default Docker folders @stumpylog (#1088)</li> <li>Bugfix: Better sanity check messages @stumpylog (#1049)</li> <li>Fix vertical margins between pages of pdf viewer @shamoon (#1081)</li> <li>Bugfix: Pass debug setting on to django-q @stumpylog (#1058)</li> <li>Bugfix: Don't assume the document has a title set @stumpylog (#1057)</li> <li>Bugfix: Corrects the setting of max pixel size for OCR @stumpylog (#1008)</li> <li>better date pasting @shamoon (#1007)</li> <li>Enhancement: Alphabetize tags by default @shamoon (#1017)</li> <li>Fix: Rework query params logic @shamoon (#1000)</li> <li>Fix: add translation for some un-translated tooltips @shamoon (#995)</li> <li>Change npm --no-optional to --omit=optional @shamoon (#986)</li> <li>Add <code>myst-parser</code> to fix readthedocs @qcasey (#982)</li> <li>Fix: Title is changed after switching doc quickly @shamoon (#979)</li> <li>Fix: warn when closing a document with unsaved changes due to max open docs @shamoon (#956)</li> <li>Bugfix: Adds configurable intoify debounce time @stumpylog (#953)</li> <li>Bugfix: Fixes document filename date off by 1 issue @stumpylog (#942)</li> <li>fixes #949: change to MIME detection for files @gador (#962)</li> <li>docs: fix some typos @Berjou (#948)</li> <li>[Docs] Fix 2 small typos @tooomm (#946)</li> <li>[Readme] Fix typo @tooomm (#941)</li> <li>Fix: management pages plurals incorrect in other languages @shamoon (#939)</li> <li>Fix: v1.7.1 frontend visual fixes @shamoon (#933)</li> <li>Fix: unassigned query params ignored @shamoon (#930)</li> <li>Fix: allow commas in non-multi rules query params @shamoon (#923)</li> <li>Fix: Include version in export for better error messages @stumpylog (#883)</li> <li>Bugfix: Superuser Management Won't Reset Password @stumpylog (#903)</li> <li>Fix Ignore Date Parsing @stumpylog (#721)</li> </ul>"},{"location":"changelog/#documentation_22","title":"Documentation","text":"<ul> <li>Feature use env vars in pre post scripts @ziprandom (#1154)</li> <li>Add <code>myst-parser</code> to fix readthedocs @qcasey (#982)</li> <li>Add \"Created\" as additional (optional) parameter for post_documents @eingemaischt (#965)</li> <li>Bugfix: Adds configurable intoify debounce time @stumpylog (#953)</li> <li>docs: fix some typos @Berjou (#948)</li> <li>[Docs] Fix 2 small typos @tooomm (#946)</li> <li>Convert Changelog to markdown, auto-commit future changelogs @qcasey (#935)</li> <li>[Readme] Fix typo @tooomm (#941)</li> </ul>"},{"location":"changelog/#maintenance_40","title":"Maintenance","text":"<ul> <li>Adds support for Docker secrets @stumpylog (#1034)</li> <li>Bugfix: Don't assume default Docker folders @stumpylog (#1088)</li> <li>Include error information when Redis connection fails @stumpylog (#1016)</li> <li>Fix: add translation for some un-translated tooltips @shamoon (#995)</li> <li>gunicorn: Allow IPv6 sockets @vlcty (#924)</li> </ul>"},{"location":"changelog/#dependencies_45","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_39","title":"Features","text":"<ul> <li>(chore) Runs pyupgrade to Python 3.8+ @stumpylog (#890)</li> <li>Dockerfile Organization \\& Enhancements @stumpylog (#888)</li> <li>mobile friendlier manage pages @shamoon (#873)</li> <li>Use semver for release process @stumpylog (#851)</li> <li>Enable Docker Hub push @stumpylog (#828)</li> <li>Feature barcode tiff support @gador (#766)</li> <li>Updates GHA workflow to rebuild intermediate images on changes @stumpylog (#820)</li> <li>Adds simple Python to wait for Redis broker to be ready @stumpylog (#788)</li> <li>Update GHA workflow to build all Docker images @stumpylog (#761)</li> </ul>"},{"location":"changelog/#bug-fixes_97","title":"Bug Fixes","text":"<ul> <li>Feature / fix saved view \\& sort field query params @shamoon (#881)</li> <li>Mobile friendlier manage pages @shamoon (#873)</li> <li>Add timeout to healthcheck @shamoon (#880)</li> <li>Always accept yyyy-mm-dd date inputs @shamoon (#864)</li> <li>Fix local Docker image building @stumpylog (#849)</li> <li>Fix: show errors on invalid date input @shamoon (#862)</li> <li>Fix: Older dates do not display on frontend @shamoon (#852)</li> <li>Fixes IMAP UTF8 Authentication @stumpylog (#725)</li> <li>Fix password field remains visible @shamoon (#840)</li> <li>Fixes Pillow build for armv7 @stumpylog (#815)</li> <li>Update frontend localization source file @shamoon (#814)</li> <li>Fix install script extra OCR languages format @stumpylog (#777)</li> </ul>"},{"location":"changelog/#documentation_23","title":"Documentation","text":"<ul> <li>Use semver for release process @stumpylog (#851)</li> <li>Deployment: Consolidate tika compose files @qcasey (#866)</li> <li>Fix local Docker image building @stumpylog (#849)</li> </ul>"},{"location":"changelog/#maintenance_41","title":"Maintenance","text":"<ul> <li>Dockerfile Organization \\& Enhancements @stumpylog (#888)</li> <li>Add timeout to healthcheck @shamoon (#880)</li> <li>Use semver for release process @stumpylog (#851)</li> <li>Deployment: Consolidate tika compose files @qcasey (#866)</li> <li>Fixes Pillow build for armv7 @stumpylog (#815)</li> <li>Update frontend localization source file @shamoon (#814)</li> <li>Fix install script extra OCR languages format @stumpylog (#777)</li> <li>Adds simple Python to wait for Redis broker to be ready @stumpylog (#788)</li> </ul>"},{"location":"changelog/#dependencies_46","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_6","title":"Breaking Changes","text":"<ul> <li><code>PAPERLESS_URL</code> is now required when using a reverse proxy. See #674.</li> </ul>"},{"location":"changelog/#features_40","title":"Features","text":"<ul> <li>Allow setting more than one tag in mail rules @jonasc (#270)</li> <li>Global drag'n'drop @shamoon (#283)</li> <li>Fix: download buttons should disable while waiting @shamoon (#630)</li> <li>Update checker @shamoon (#591)</li> <li>Show prompt on password-protected pdfs @shamoon (#564)</li> <li>Filtering query params aka browser navigation for filtering @shamoon (#540)</li> <li>Clickable tags in dashboard widgets @shamoon (#515)</li> <li>Add bottom pagination @shamoon (#372)</li> <li>Feature barcode splitter @gador (#532)</li> <li>App loading screen @shamoon (#298)</li> <li>Use progress bar for delayed buttons @shamoon (#415)</li> <li>Add minimum length for documents text filter @shamoon (#401)</li> <li>Added nav buttons in the document detail view @GruberViktor (#273)</li> <li>Improve date keyboard input @shamoon (#253)</li> <li>Color theming @shamoon (#243)</li> <li>Parse dates when entered without separators @GruberViktor (#250)</li> </ul>"},{"location":"changelog/#bug-fixes_98","title":"Bug Fixes","text":"<ul> <li>Add \"localhost\" to ALLOWED_HOSTS @gador (#700)</li> <li>Fix: scanners table @qcasey (#690)</li> <li>Adds wait for file before consuming @stumpylog (#483)</li> <li>Fix: frontend document editing erases time data @shamoon (#654)</li> <li>Increase length of SavedViewFilterRule @stumpylog (#612)</li> <li>Fixes attachment filename matching during mail fetching @stumpylog (#680)</li> <li>Add <code>PAPERLESS_URL</code> env variable & CSRF var @shamoon (#674)</li> <li>Fix: download buttons should disable while waiting @shamoon (#630)</li> <li>Fixes downloaded filename, add more consumer ignore settings @stumpylog (#599)</li> <li>FIX BUG: case-sensitive matching was not possible @danielBreitlauch (#594)</li> <li>Uses shutil.move instead of rename @gador (#617)</li> <li>Fix npm deps 01.02.22 2 @shamoon (#610)</li> <li>Fix npm dependencies 01.02.22 @shamoon (#600)</li> <li>Fix issue 416: implement <code>PAPERLESS_OCR_MAX_IMAGE_PIXELS</code> @hacker-h (#441)</li> <li>Fix: exclude cypress from build in Dockerfile @FrankStrieter (#526)</li> <li>Corrections to pass pre-commit hooks @schnuffle (#454)</li> <li>Fix 311 unable to click checkboxes in document list @shamoon (#313)</li> <li>Fix imap tools bug @stumpylog (#393)</li> <li>Fix filterable dropdown buttons aren't translated @shamoon (#366)</li> <li>Fix 224: \"Auto-detected date is day before receipt date\" @a17t (#246)</li> <li>Fix minor sphinx errors @shamoon (#322)</li> <li>Fix page links hidden @shamoon (#314)</li> <li>Fix: Include excluded items in dropdown count @shamoon (#263)</li> </ul>"},{"location":"changelog/#translation","title":"Translation","text":"<ul> <li>@miku323 contributed to Slovenian translation</li> <li>@FaintGhost contributed to Chinese Simplified translation</li> <li>@DarkoBG79 contributed to Serbian translation</li> <li>Kemal Secer contributed to Turkish translation</li> <li>@Prominence contributed to Belarusian translation</li> </ul>"},{"location":"changelog/#documentation_24","title":"Documentation","text":"<ul> <li>Fix: scanners table @qcasey (#690)</li> <li>Add <code>PAPERLESS_URL</code> env variable & CSRF var @shamoon (#674)</li> <li>Fixes downloaded filename, add more consumer ignore settings @stumpylog (#599)</li> <li>Fix issue 416: implement <code>PAPERLESS_OCR_MAX_IMAGE_PIXELS</code> @hacker-h (#441)</li> <li>Fix minor sphinx errors @shamoon (#322)</li> </ul>"},{"location":"changelog/#maintenance_42","title":"Maintenance","text":"<ul> <li>Add <code>PAPERLESS_URL</code> env variable & CSRF var @shamoon (#674)</li> <li>Chore: Implement release-drafter action for Changelogs @qcasey (#669)</li> <li>Chore: Add CODEOWNERS @qcasey (#667)</li> <li>Support docker-compose v2 in install @stumpylog (#611)</li> <li>Add Belarusian localization @shamoon (#588)</li> <li>Add Turkish localization @shamoon (#536)</li> <li>Add Serbian localization @shamoon (#504)</li> <li>Create PULL_REQUEST_TEMPLATE.md @shamoon (#304)</li> <li>Add Chinese localization @shamoon (#247)</li> <li>Add Slovenian language for frontend @shamoon (#315)</li> </ul>"},{"location":"changelog/#paperless-ngx-160","title":"paperless-ngx 1.6.0","text":"<p>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!</p> <p>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:</p> <ul> <li>Updated docs, scripts, CI, and containers to paperless-ngx.</li> <li>Updated Python and Angular dependencies.</li> <li>Dropped support for Python 3.7.</li> <li>Dropped support for Ansible playbooks (thanks @slankes #109). If someone would like to continue supporting them, please see our ansible repo.</li> <li>Python code is now required to use Black formatting (thanks @kpj #168).</li> <li>@tribut added support for a custom SSO logout redirect (jonaswinkler#1258). See <code>PAPERLESS_LOGOUT_REDIRECT_URL</code>.</li> <li>@shamoon added a loading indicator when document list is reloading (jonaswinkler#1297).</li> <li>@shamoon improved the PDF viewer on mobile (#2).</li> <li>@shamoon added 'any' / 'all' and 'not' filtering with tags (#10).</li> <li>@shamoon added warnings for unsaved changes, with smart edit buttons (#13).</li> <li>@benjaminfrank enabled a non-root access to port 80 via systemd (#18).</li> <li>@tribut added simple \"delete to trash\" functionality (#24). See <code>PAPERLESS_TRASH_DIR</code>.</li> <li>@amenk fixed the search box overlay menu on mobile (#32).</li> <li>@dblitt updated the login form to not auto-capitalize usernames (#36).</li> <li>@evilsidekick293 made the worker timeout configurable (#37). See <code>PAPERLESS_WORKER_TIMEOUT</code>.</li> <li>@Nicarim fixed downloads of UTF-8 formatted documents in Firefox (#56).</li> <li>@mweimerskirch sorted the language dropdown by locale (#78).</li> <li>@mweimerskirch enabled the Czech (#83) and Danish (#84) translations.</li> <li>@cschmatzler enabled specifying the webserver port (#124). See <code>PAPERLESS_PORT</code>.</li> <li>@muellermartin fixed an error when uploading transparent PNGs (#133).</li> <li>@shamoon created a slick new logo (#165).</li> <li>@tim-vogel fixed exports missing groups (#193).</li> </ul> <p>Known issues:</p> <ul> <li>1.6.0 included a malformed package-lock.json, as a result users who want to build the docker image themselves need to change line 6 of the <code>Dockerfile</code> to <code>RUN npm update npm -g && npm install --legacy-peer-deps</code>.</li> </ul> <p>Thank you to the following people for their documentation updates, fixes, and comprehensive testing:</p> <p>@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</p> <p>Another big thanks to the people who have contributed translations:</p> <ul> <li>Michel Weimerskirch (michel_weimerskirch) suggested 31 translations into French and Luxembourgish.</li> <li>jo.vandeginste suggested 21 translations into Dutch.</li> <li>Lars S\u00f8rensen (Lrss) suggested 486 translations into Danish.</li> <li>Alex (Sky-Dragon) voted for 46 translations in German.</li> <li>Yannic Schr\u00f6der (yschroeder) suggested 14 translations into German.</li> <li>David Morais Ferreira (DavidMoraisFerreira) voted for 10 translations in Portuguese and Luxembourgish.</li> <li>David Morais Ferreira (DavidMoraisFerreira) suggested 88 translations into French, German, Portuguese, Portuguese, Brazilian and Luxembourgish.</li> <li>\u6c6a\u6ce0\u6ca3 (wlfcss) suggested 13 translations into Chinese Traditional.</li> <li>Lars S\u00f8rensen (Lrss) suggested 167 translations into Danish.</li> <li>Philmo67 suggested 11 translations into French.</li> </ul>"},{"location":"changelog/#paperless-ng","title":"Paperless-ng","text":""},{"location":"changelog/#paperless-ng-150","title":"paperless-ng 1.5.0","text":"<p>Support for Python 3.6 was dropped.</p> <ul> <li>Updated python dependencies.</li> <li>Base image of the docker image changed from Debian Buster to Debian Bullseye due to its recent release.</li> <li>The docker image now uses python 3.9.</li> <li>Added the Luxembourgish locale. Thanks for translating!</li> <li>Daniel Albers added support for making the files and folders ignored by the paperless consume folder scanner configurable. See <code>PAPERLESS_CONSUMER_IGNORE_PATTERNS</code>.</li> </ul>"},{"location":"changelog/#paperless-ng-145","title":"paperless-ng 1.4.5","text":"<p>This is a maintenance release.</p> <ul> <li>Updated Python and Angular dependencies.</li> <li>Changed the algorithm that changes permissions during startup. This is still fast, and will hopefully cause less issues.</li> <li>Fixed an issue that would sometimes cause paperless to write an incomplete classification model file to disk.</li> <li>Fixed an issue with the OCRmyPDF parser that would always try to extract text with PDFminer even from non-PDF files.</li> </ul>"},{"location":"changelog/#paperless-ng-144","title":"paperless-ng 1.4.4","text":"<ul> <li>Drastically decreased the startup time of the docker container. The startup script adjusts file permissions of all data only if changes are required.</li> <li>Paperless mail: Added ability to specify the character set for each server.</li> <li>Document consumption: Ignore Mac OS specific files such as <code>.DS_STORE</code> and <code>._XXXXX.pdf</code>.</li> <li>Fixed an issue with the automatic matching algorithm that prevents paperless from consuming new files.</li> <li>Updated translations.</li> </ul>"},{"location":"changelog/#paperless-ng-143","title":"paperless-ng 1.4.3","text":"<ul> <li>Additions and changes<ul> <li>Added Swedish locale.</li> <li>St\u00e9phane Brunner added an option to disable the progress bars of all management commands.</li> <li>Jo Vandeginste added support for RTF documents to the Apache TIKA parser.</li> <li>Michael Shamoon added dark mode for the login and logout pages.</li> <li>Alexander Menk added additional stylesheets for printing. You can now print any page of paperless and the print result will hide the page header, sidebar, and action buttons.</li> <li>Added support for sorting when using full text search.</li> </ul> </li> <li>Fixes<ul> <li>puuu fixed <code>PAPERLESS_FORCE_SCRIPT_NAME</code>. You can now host paperless on sub paths such as <code>https://localhost:8000/paperless/</code>.</li> <li>Fixed an issue with the document consumer crashing on certain documents due to issues with pdfminer.six. This library is used for PDF text extraction.</li> </ul> </li> </ul>"},{"location":"changelog/#paperless-ng-142","title":"paperless-ng 1.4.2","text":"<ul> <li>Fixed an issue with <code>sudo</code> that caused paperless to not start on many Raspberry Pi devices. Thank you WhiteHatTux!</li> </ul>"},{"location":"changelog/#paperless-ng-141","title":"paperless-ng 1.4.1","text":"<ul> <li>Added Polish locale.</li> <li>Changed some parts of the Dockerfile to hopefully restore functionality on certain ARM devices.</li> <li>Updated python dependencies.</li> <li>Michael Shamoon added a sticky filter / bulk edit bar.</li> <li>sbrl changed the docker-entrypoint.sh script to increase compatibility with NFS shares.</li> <li>Chris Nagy added support for creating a super user by passing <code>PAPERLESS_ADMIN_USER</code> and <code>PAPERLESS_ADMIN_PASSWORD</code> as environment variables to the docker container.</li> </ul>"},{"location":"changelog/#paperless-ng-140","title":"paperless-ng 1.4.0","text":"<ul> <li>Docker images now use tesseract 4.1.1, which should fix a series of issues with OCR.</li> <li>The full text search now displays results using the default document list. This enables selection, filtering and bulk edit on search results.</li> <li>Changes<ul> <li>Firefox only: Highlight search query in PDF previews.</li> <li>New URL pattern for accessing documents by ASN directly (http:///asn/123) <li>Added logging when executing pre* and post-consume scripts.</li> <li>Better error logging during document consumption.</li> <li>Updated python dependencies.</li> <li>Automatically inserts typed text when opening \"Create new\" dialogs on the document details page.</li> <li>Fixes<ul> <li>Fixed an issue with null characters in the document content.</li> </ul> </li> <p>Note</p> <p>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 <code>document_index reindex</code> management command (see Managing the document search index).</p>"},{"location":"changelog/#paperless-ng-132","title":"paperless-ng 1.3.2","text":"<ul> <li>Added translation into Portuguese.</li> <li>Changes<ul> <li>The exporter now exports user accounts, mail accounts, mail rules and saved views as well.</li> </ul> </li> <li>Fixes<ul> <li>Minor layout issues with document cards and the log viewer.</li> <li>Fixed an issue with any/all/exact matching when characters used in regular expressions were used for the match.</li> </ul> </li> </ul>"},{"location":"changelog/#paperless-ng-131","title":"paperless-ng 1.3.1","text":"<ul> <li>Added translation into Spanish and Russian.</li> <li>Other changes<ul> <li>ISO-8601 date format will now always show years with 4 digits.</li> <li>Added the ability to search for a document with a specific ASN.</li> <li>The document cards now display ASN, types and dates in a more organized way.</li> <li>Added document previews when hovering over the preview button.</li> </ul> </li> <li>Fixes<ul> <li>The startup check for write permissions now works properly on NFS shares.</li> <li>Fixed an issue with the search results score indicator.</li> <li>Paperless was unable to generate thumbnails for encrypted PDF files and failed. Paperless will now generate a default thumbnail for these files.</li> <li>Fixed <code>AUTO_LOGIN_USERNAME</code>: Unable to perform POST/PUT/DELETE requests and unable to receive WebSocket messages.</li> </ul> </li> </ul>"},{"location":"changelog/#paperless-ng-130","title":"paperless-ng 1.3.0","text":"<p>This release contains new database migrations.</p> <ul> <li>Changes<ul> <li>The REST API is versioned from this point onwards. This will allow me to make changes without breaking existing clients. See the documentation about API versioning for details.</li> <li>Added a color picker for tag colors.</li> <li>Added the ability to use the filter for searching the document content as well.</li> <li>Added translations into Italian and Romanian. Thank you!</li> <li>Close individual documents from the sidebar. Thanks to Michael Shamoon.</li> <li>BolkoSchreiber added an option to disable/enable thumbnail inversion in dark mode.</li> <li>Simon Taddiken added the ability to customize the header used for remote user authentication with SSO applications.</li> </ul> </li> <li>Bug fixes<ul> <li>Fixed an issue with the auto matching algorithm when more than 256 tags were used.</li> </ul> </li> </ul>"},{"location":"changelog/#paperless-ng-121","title":"paperless-ng 1.2.1","text":"<ul> <li>Rodrigo Avelino translated Paperless into Portuguese (Brazil)!</li> <li>The date input fields now respect the currently selected date format.</li> <li>Added a fancy icon when adding paperless to the home screen on iOS devices. Thanks to Joel Nordell.</li> <li>When using regular expression matching, the regular expression is now validated before saving the tag/correspondent/type.</li> <li>Regression fix: Dates on the front end did not respect date locale settings in some cases.</li> </ul>"},{"location":"changelog/#paperless-ng-120","title":"paperless-ng 1.2.0","text":"<ul> <li>Changes to the OCRmyPDF integration<ul> <li>Added support for deskewing and automatic rotation of incorrectly rotated pages. This is enabled by default, see OCR settings.</li> <li>Better support for encrypted files.</li> <li>Better support for various other PDF files: Paperless will now attempt to force OCR with safe options when OCR fails with the configured options.</li> <li>Added an explicit option to skip cleaning with <code>unpaper</code>.</li> </ul> </li> <li>Download multiple selected documents as a zip archive.</li> <li>The document list now remembers the current page.</li> <li>Improved responsiveness when switching between saved views and the document list.</li> <li>Increased the default wait time when observing files in the consumption folder with polling from 1 to 5 seconds. This will decrease the likelihood of paperless consuming partially written files.</li> <li>Fixed a crash of the document archiver management command when trying to process documents with unknown mime types.</li> <li>Paperless no longer depends on <code>libpoppler-cpp-dev</code>.</li> </ul>"},{"location":"changelog/#paperless-ng-114","title":"paperless-ng 1.1.4","text":"<ul> <li>Added English (GB) locale.</li> <li>Added ISO-8601 date display option.</li> </ul>"},{"location":"changelog/#paperless-ng-113","title":"paperless-ng 1.1.3","text":"<ul> <li>Added a docker-specific configuration option to adjust the number of worker processes of the web server. See Docker options.</li> <li>Some more memory usage optimizations.</li> <li>Don't show inbox statistics if no inbox tag is defined.</li> </ul>"},{"location":"changelog/#paperless-ng-112","title":"paperless-ng 1.1.2","text":"<ul> <li>Always show top left corner of thumbnails, even for extra wide documents.</li> <li>Added a management command for executing the sanity checker directly. See management utilities.</li> <li>The weekly sanity check now reports messages in the log files.</li> <li>Fixed an issue with the metadata tab not reporting anything in case of missing files.</li> <li>Reverted a change from 1.1.0 that caused huge memory usage due to redis caching.</li> <li>Some memory usage optimizations.</li> </ul>"},{"location":"changelog/#paperless-ng-111","title":"paperless-ng 1.1.1","text":"<p>This release contains new database migrations.</p> <ul> <li>Fixed a bug in the sanity checker that would cause it to display \"x not in list\" errors instead of actual issues.</li> <li>Fixed a bug with filename generation for archive filenames that would cause the archive files of two documents to overlap.<ul> <li>This happened when <code>PAPERLESS_FILENAME_FORMAT</code> is used and the filenames of two or more documents are the same, except for the file extension.</li> <li>Paperless will now store the archive filename in the database as well instead of deriving it from the original filename, and use the same logic for detecting and avoiding filename clashes that's also used for original filenames.</li> <li>The migrations will repair any missing archive files. If you're using tika, ensure that tika is running while performing the migration. Docker-compose will take care of that.</li> </ul> </li> <li>Fixed a bug with thumbnail regeneration when TIKA integration was used.</li> <li>Added ASN as a placeholder field to the filename format.</li> <li>The docker image now comes with built-in shortcuts for most management commands. These are now the recommended way to execute management commands, since these also ensure that they're always executed as the paperless user and you're less likely to run into permission issues. See management commands.</li> </ul>"},{"location":"changelog/#paperless-ng-110","title":"paperless-ng 1.1.0","text":"<ul> <li> <p>Document processing status</p> <ul> <li>Paperless now shows the status of processing documents on the dashboard in real time.</li> <li>Status notifications when<ul> <li>New documents are detected in the consumption folder, in mails, uploaded on the front end, or added with one of the mobile apps.</li> <li>Documents are successfully added to paperless.</li> <li>Document consumption failed (with error messages)</li> </ul> </li> <li>Configuration options to enable/disable individual notifications.</li> </ul> </li> <li> <p>Live updates to document lists and saved views when new documents are added.</p> <p>Tip</p> <p>For status notifications and live updates to work, paperless now requires an ASGI-enabled web server. The docker images uses <code>gunicorn</code> and an ASGI-enabled worker called uvicorn, and there is no need to configure anything.</p> <p>For bare metal installations, changes are required for the notifications to work. Adapt the service <code>paperless-webserver.service</code> to use the supplied <code>gunicorn.conf.py</code> configuration file and adapt the reference to the ASGI application as follows:</p> <pre><code>ExecStart=/opt/paperless/.local/bin/gunicorn -c /opt/paperless/gunicorn.conf.py paperless.asgi:application\n</code></pre> <p>Paperless will continue to work with WSGI, but you will not get any status notifications.</p> <p>Apache <code>mod_wsgi</code> users, see this note.</p> </li> <li> <p>Paperless now offers suggestions for tags, correspondents and types on the document detail page.</p> </li> <li> <p>Added an interactive easy install script that automatically downloads, configures and starts paperless with docker.</p> </li> <li> <p>Official support for Python 3.9.</p> </li> <li> <p>Other changes and fixes</p> <ul> <li>Adjusted the default parallelization settings to run more than one task in parallel on systems with 4 or less cores. This addresses issues with paperless not consuming any new files when other tasks are running.</li> <li>Fixed a rare race condition that would cause paperless to process incompletely written files when using the upload on the dashboard.</li> <li>The document classifier no longer issues warnings and errors when auto matching is not used at all.</li> <li>Better icon for document previews.</li> <li>Better info section in the side bar.</li> <li>Paperless no longer logs to the database. Instead, logs are written to rotating log files. This solves many \"database is locked\" issues on Raspberry Pi, especially when SQLite is used.</li> <li>By default, log files are written to <code>PAPERLESS_DATA_DIR/log/</code>. Logging settings can be adjusted with <code>PAPERLESS_LOGGING_DIR</code>, <code>PAPERLESS_LOGROTATE_MAX_SIZE</code> and <code>PAPERLESS_LOGROTATE_MAX_BACKUPS</code>.</li> </ul> </li> </ul>"},{"location":"changelog/#paperless-ng-100","title":"paperless-ng 1.0.0","text":"<p>Nothing special about this release, but since there are relatively few bug reports coming in, I think that this is reasonably stable.</p> <ul> <li>Document export<ul> <li>The document exporter has been rewritten to support updating an already existing export in place. This enables incremental backups with <code>rsync</code>.</li> <li>The document exporter supports naming exported files according to <code>PAPERLESS_FILENAME_FORMAT</code>.</li> <li>The document exporter locks the media directory and the database during execution to ensure that the resulting export is consistent.</li> <li>See the updated documentation for more details.</li> </ul> </li> <li>Other changes and additions<ul> <li>Added a language selector to the settings.</li> <li>Added date format options to the settings.</li> <li>Range selection with shift clicking is now possible in the document list.</li> <li>Filtering correspondent, type and tag management pages by name.</li> <li>Focus \"Name\" field in dialogs by default.</li> </ul> </li> </ul>"},{"location":"changelog/#paperless-ng-0914","title":"paperless-ng 0.9.14","text":"<p>Starting with this version, releases are getting built automatically. This release also comes with changes on how to install and update paperless.</p> <ul> <li>Paperless now uses GitHub Actions to make releases and build docker images.<ul> <li>Docker images are available for amd64, armhf, and aarch64.</li> <li>When you pull an image from Docker Hub, Docker will automatically select the correct image for you.</li> </ul> </li> <li>Changes to docker installations and updates<ul> <li>The <code>-dockerfiles.tar.xz</code> release archive is gone. Instead, simply grab the docker files from <code>/docker/compose</code> in the repository if you wish to install paperless by pulling from the hub.</li> <li>The docker compose files in <code>/docker/compose</code> were changed to always use the <code>latest</code> version automatically. In order to do further updates, simply do a <code>docker-compose pull</code>. The documentation has been updated.</li> <li>The docker compose files were changed to restart paperless on system boot only if it was running before shutdown.</li> <li>Documentation of the docker-compose files about what they do.</li> </ul> </li> <li>Changes to bare metal installations and updates<ul> <li>The release archive is built exactly like before. However, the release now comes with already compiled translation messages and collected static files. Therefore, the update steps <code>compilemessages</code> and <code>collectstatic</code> are now obsolete.</li> </ul> </li> <li>Other changes<ul> <li>A new configuration option <code>PAPERLESS_IGNORE_DATES</code> was added by jayme-github. This can be used to instruct paperless to ignore certain dates (such as your date of birth) when guessing the date from the document content. This was actually introduced in 0.9.12, I just forgot to mention it in the changelog.</li> <li>The filter drop downs now display selected entries on top of all other entries.</li> <li>The PostgreSQL client now supports setting an explicit <code>sslmode</code> to force encryption of the connection to PostgreSQL.</li> <li>The docker images now come with <code>jbig2enc</code>, which is a lossless image encoder for PDF documents and decreases the size of certain PDF/A documents.</li> <li>When using any of the manual matching algorithms, paperless now logs messages about when and why these matching algorithms matched.</li> <li>The default settings for parallelization in paperless were adjusted to always leave one CPU core free.</li> <li>Added an option to the frontend to choose which method to use for displaying PDF documents.</li> </ul> </li> <li>Fixes<ul> <li>An issue with the tika parser not picking up files from the consumption directory was fixed.</li> <li>A couple changes to the dark mode and fixes to several other layout issues.</li> <li>An issue with the drop downs for correspondents, tags and types not properly supporting filtering with special characters was fixed.</li> <li>Fixed an issue with filenames of downloaded files: Dates where off by one day due to timezone issues.</li> <li>Searching will continue to work even when the index returns non-existing documents. This resulted in \"Document does not exist\" errors before. Instead, a warning is logged, indicating the issue.</li> <li>An issue with the consumer crashing when invalid regular expression were used was fixed.</li> </ul> </li> </ul>"},{"location":"changelog/#paperless-ng-0913","title":"paperless-ng 0.9.13","text":"<ul> <li>Fixed an issue with Paperless not starting due to the new Tika integration when <code>USERMAP_UID</code> and <code>USERMAP_GID</code> was used in the <code>docker-compose.env</code> file.</li> </ul>"},{"location":"changelog/#paperless-ng-0912","title":"paperless-ng 0.9.12","text":"<ul> <li>Paperless localization<ul> <li>Thanks to the combined efforts of many users, Paperless is now available in English, Dutch, French and German.</li> </ul> </li> <li>Thanks to Jo Vandeginste, Paperless has optional support for Office documents such as .docx, .doc, .odt and more.<ul> <li>See the Tika settings on how to enable this feature. This feature requires two additional services (one for parsing Office documents and metadata extraction and another for converting Office documents to PDF), and is therefore not enabled on default installations.</li> <li>As with all other documents, paperless converts Office documents to PDF and stores both the original as well as the archived PDF.</li> </ul> </li> <li>Dark mode<ul> <li>Thanks to Michael Shamoon, paperless now has a dark mode. Configuration is available in the settings.</li> </ul> </li> <li>Other changes and additions<ul> <li>The PDF viewer now uses a local copy of some dependencies instead of fetching them from the internet. Thanks to slorenz.</li> <li>Revamped search bar styling thanks to Michael Shamoon.</li> <li>Sorting in the document list by clicking on table headers.</li> <li>A button was added to the document detail page that assigns a new ASN to a document.</li> <li>Form field validation: When providing invalid input in a form (such as a duplicate ASN or no name), paperless now has visual indicators and clearer error messages about what's wrong.</li> <li>Paperless disables buttons with network actions (such as save and delete) when a network action is active. This indicates that something is happening and prevents double clicking.</li> <li>When using \"Save & next\", the title field is focussed automatically to better support keyboard editing.</li> <li>E-Mail: Added filter rule parameters to allow inline attachments (watch out for mails with inlined images!) and attachment filename filters with wildcards.</li> <li>Support for remote user authentication thanks to Michael Shamoon. This is useful for hiding Paperless behind single sign on applications such as authelia.</li> <li>\"Clear filters\" has been renamed to \"Reset filters\" and now correctly restores the default filters on saved views. Thanks to Michael Shamoon</li> </ul> </li> <li>Fixes<ul> <li>Paperless was unable to save views when \"Not assigned\" was chosen in one of the filter dropdowns.</li> <li>Clearer error messages when pre and post consumption scripts do not exist.</li> <li>The post consumption script is executed later in the consumption process. Before the change, an ID was passed to the script referring to a document that did not yet exist in the database.</li> </ul> </li> </ul>"},{"location":"changelog/#paperless-ng-0911","title":"paperless-ng 0.9.11","text":"<ul> <li>Fixed an issue with the docker image not starting at all due to a configuration change of the web server.</li> </ul>"},{"location":"changelog/#paperless-ng-0910","title":"paperless-ng 0.9.10","text":"<ul> <li>Bulk editing<ul> <li>Thanks to Michael Shamoon, we've got a new interface for the bulk editor.</li> <li>There are some configuration options in the settings to alter the behavior.</li> </ul> </li> <li>Other changes and additions<ul> <li>Thanks to zjean, paperless now publishes a webmanifest, which is useful for adding the application to home screens on mobile devices.</li> <li>The Paperless-ng logo now navigates to the dashboard.</li> <li>Filter for documents that don't have any correspondents, types or tags assigned.</li> <li>Tags, types and correspondents are now sorted case insensitive.</li> <li>Lots of preparation work for localization support.</li> </ul> </li> <li>Fixes<ul> <li>Added missing dependencies for Raspberry Pi builds.</li> <li>Fixed an issue with plain text file consumption: Thumbnail generation failed due to missing fonts.</li> <li>An issue with the search index reporting missing documents after bulk deletes was fixed.</li> <li>Issue with the tag selector not clearing input correctly.</li> <li>The consumer used to stop working when encountering an incomplete classifier model file.</li> </ul> </li> </ul> <p>Note</p> <p>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.</p> <p>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 <code>document_index</code> with the argument <code>reindex</code>.</p>"},{"location":"changelog/#paperless-ng-099","title":"paperless-ng 0.9.9","text":"<p>Christmas release!</p> <ul> <li>Bulk editing<ul> <li>Paperless now supports bulk editing.</li> <li>The following operations are available: Add and remove correspondents, tags, document types from selected documents, as well as mass-deleting documents.</li> <li>We've got a more fancy UI in the works that makes these features more accessible, but that's not quite ready yet.</li> </ul> </li> <li>Searching<ul> <li>Paperless now supports searching for similar documents (\"More like this\") both from the document detail page as well as from individual search results.</li> <li>A search score indicates how well a document matches the search query, or how similar a document is to a given reference document.</li> </ul> </li> <li>Other additions and changes<ul> <li>Clarification in the UI that the fields \"Match\" and \"Is insensitive\" are not relevant for the Auto matching algorithm.</li> <li>New select interface for tags, types and correspondents allows filtering. This also improves tag selection. Thanks again to Michael Shamoon!</li> <li>Page navigation controls for the document viewer, thanks to Michael Shamoon.</li> <li>Layout changes to the small cards document list.</li> <li>The dashboard now displays the username (or full name if specified in the admin) on the dashboard.</li> </ul> </li> <li>Fixes<ul> <li>An error that caused the document importer to crash was fixed.</li> <li>An issue with changes not being possible when <code>PAPERLESS_COOKIE_PREFIX</code> is used was fixed.</li> <li>The date selection filters now allow manual entry of dates.</li> </ul> </li> <li>Feature Removal<ul> <li>Most of the guesswork features have been removed. Paperless no longer tries to extract correspondents and tags from file names.</li> </ul> </li> </ul>"},{"location":"changelog/#paperless-ng-098","title":"paperless-ng 0.9.8","text":"<p>This release addresses two severe issues with the previous release.</p> <ul> <li>The delete buttons for document types, correspondents and tags were not working.</li> <li>The document section in the admin was causing internal server errors (500).</li> </ul>"},{"location":"changelog/#paperless-ng-097","title":"paperless-ng 0.9.7","text":"<ul> <li>Front end<ul> <li>Thanks to the hard work of Michael Shamoon, paperless now comes with a much more streamlined UI for filtering documents.</li> <li>Michael Shamoon replaced the document preview with another component. This should fix compatibility with Safari browsers.</li> <li>Added buttons to the management pages to quickly show all documents with one specific tag, correspondent, or title.</li> <li>Paperless now stores your saved views on the server and associates them with your user account. This means that you can access your views on multiple devices and have separate views for different users. You will have to recreate your views.</li> <li>The GitHub and documentation links now open in new tabs/windows. Thanks to rYR79435.</li> <li>Paperless now generates default saved view names when saving views with certain filter rules.</li> <li>Added a small version indicator to the front end.</li> </ul> </li> <li>Other additions and changes<ul> <li>The new filename format field <code>{tag_list}</code> inserts a list of tags into the filename, separated by comma.</li> <li>The <code>document_retagger</code> no longer removes inbox tags or tags without matching rules.</li> <li>The new configuration option <code>PAPERLESS_COOKIE_PREFIX</code> allows you to run multiple instances of paperless on different ports. This option enables you to be logged in into multiple instances by specifying different cookie names for each instance.</li> </ul> </li> <li>Fixes<ul> <li>Sometimes paperless would assign dates in the future to newly consumed documents.</li> <li>The filename format fields <code>{created_month}</code> and <code>{created_day}</code> now use a leading zero for single digit values.</li> <li>The filename format field <code>{tags}</code> can no longer be used without arguments.</li> <li>Paperless was not able to consume many images (especially images from mobile scanners) due to missing DPI information. Paperless now assumes A4 paper size for PDF generation if no DPI information is present.</li> <li>Documents with empty titles could not be opened from the table view due to the link being empty.</li> <li>Fixed an issue with filenames containing special characters such as <code>:</code> not being accepted for upload.</li> <li>Fixed issues with thumbnail generation for plain text files.</li> </ul> </li> </ul>"},{"location":"changelog/#paperless-ng-096","title":"paperless-ng 0.9.6","text":"<p>This release focusses primarily on many small issues with the UI.</p> <ul> <li>Front end<ul> <li>Paperless now has proper window titles.</li> <li>Fixed an issue with the small cards when more than 7 tags were used.</li> <li>Navigation of the \"Show all\" links adjusted. They navigate to the saved view now, if available in the sidebar.</li> <li>Some indication on the document lists that a filter is active was added.</li> <li>There's a new filter to filter for documents that do not have a certain tag.</li> <li>The file upload box now shows upload progress.</li> <li>The document edit page was reorganized.</li> <li>The document edit page shows various information about a document.</li> <li>An issue with the height of the preview was fixed.</li> <li>Table issues with too long document titles fixed.</li> </ul> </li> <li>API<ul> <li>The API now serves file names with documents.</li> <li>The API now serves various metadata about documents.</li> <li>API documentation updated.</li> </ul> </li> <li>Other<ul> <li>Fixed an issue with the docker image when a non-standard PostgreSQL port was used.</li> <li>The docker image was trying check for installed languages before actually installing them.</li> <li><code>FILENAME_FORMAT</code> placeholder for document types.</li> <li>The filename formatter is now less restrictive with file names and tries to conserve the original correspondents, types and titles as much as possible.</li> <li>The filename formatter does not include the document ID in filenames anymore. It will rather append <code>_01</code>, <code>_02</code>, etc when it detects duplicate filenames.</li> </ul> </li> </ul> <p>Note</p> <p>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 <code>document_renamer</code> management command.</p>"},{"location":"changelog/#paperless-ng-095","title":"paperless-ng 0.9.5","text":"<p>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.</p> <ul> <li>OCR<ul> <li>Paperless now uses OCRmyPDF to perform OCR on documents. It still uses tesseract under the hood, but the PDF parser of Paperless has changed considerably and will behave different for some documents.</li> <li>OCRmyPDF creates archived PDF/A documents with embedded text that can be selected in the front end.</li> <li>Paperless stores archived versions of documents alongside with the originals. The originals can be accessed on the document edit page. If available, a dropdown menu will appear next to the download button.</li> <li>Many of the configuration options regarding OCR have changed. See OCR settings for details.</li> <li>Paperless no longer guesses the language of your documents. It always uses the language that you specified with <code>PAPERLESS_OCR_LANGUAGE</code>. Be sure to set this to the language the majority of your documents are in. Multiple languages can be specified, but that requires more CPU time.</li> <li>The management command <code>document_archiver</code> can be used to create archived versions for already existing documents.</li> </ul> </li> <li>Tags from consumption folder.<ul> <li>Thanks to jayme-github, paperless now consumes files from sub folders in the consumption folder and is able to assign tags based on the sub folders a document was found in. This can be configured with <code>PAPERLESS_CONSUMER_RECURSIVE</code> and <code>PAPERLESS_CONSUMER_SUBDIRS_AS_TAGS</code>.</li> </ul> </li> <li>API<ul> <li>The API now offers token authentication.</li> <li>The endpoint for uploading documents now supports specifying custom titles, correspondents, tags and types. This can be used by clients to override the default behavior of paperless. See POSTing documents.</li> <li>The document endpoint of API now serves documents in this form:<ul> <li>correspondents, document types and tags are referenced by their ID in the fields <code>correspondent</code>, <code>document_type</code> and <code>tags</code>. The <code>*_id</code> versions are gone. These fields are read/write.</li> <li>paperless does not serve nested tags, correspondents or types anymore.</li> </ul> </li> </ul> </li> <li>Front end<ul> <li>Paperless does some basic caching of correspondents, tags and types and will only request them from the server when necessary or when entirely reloading the page.</li> <li>Document list fetching is about 10%-30% faster now, especially when lots of tags/correspondents are present.</li> <li>Some minor improvements to the front end, such as document count in the document list, better highlighting of the current page, and improvements to the filter behavior.</li> </ul> </li> <li>Fixes:<ul> <li>A bug with the generation of filenames for files with unsupported types caused the exporter and document saving to crash.</li> <li>Mail handling no longer exits entirely when encountering errors. It will skip the account/rule/message on which the error occurred.</li> <li>Assigning correspondents from mail sender names failed for very long names. Paperless no longer assigns correspondents in these cases.</li> </ul> </li> </ul>"},{"location":"changelog/#paperless-ng-094","title":"paperless-ng 0.9.4","text":"<ul> <li>Searching:<ul> <li>Paperless now supports searching by tags, types and dates and correspondents. In order to have this applied to your existing documents, you need to perform a <code>document_index reindex</code> management command (see document search index) that adds the data to the search index. You only need to do this once, since the schema of the search index changed. Paperless keeps the index updated after that whenever something changes.</li> <li>Paperless now has spelling corrections (\"Did you mean\") for miss-typed queries.</li> <li>The documentation contains information about the query syntax.</li> </ul> </li> <li>Front end:<ul> <li>Clickable tags, correspondents and types allow quick filtering for related documents.</li> <li>Saved views are now editable.</li> <li>Preview documents directly in the browser.</li> <li>Navigation from the dashboard to saved views.</li> </ul> </li> <li>Fixes:<ul> <li>A severe error when trying to use post consume scripts.</li> <li>An error in the consumer that cause invalid messages of missing files to show up in the log.</li> </ul> </li> <li>The documentation now contains information about bare metal installs and a section about how to setup the development environment.</li> </ul>"},{"location":"changelog/#paperless-ng-093","title":"paperless-ng 0.9.3","text":"<ul> <li>Setting <code>PAPERLESS_AUTO_LOGIN_USERNAME</code> replaces <code>PAPERLESS_DISABLE_LOGIN</code>. You have to specify your username.</li> <li>Added a simple sanity checker that checks your documents for missing or orphaned files, files with wrong checksums, inaccessible files, and documents with empty content.</li> <li>It is no longer possible to encrypt your documents. For the time being, paperless will continue to operate with already encrypted documents.</li> <li>Fixes:<ul> <li>Paperless now uses inotify again, since the watchdog was causing issues which I was not aware of.</li> <li>Issue with the automatic classifier not working with only one tag.</li> <li>A couple issues with the search index being opened to eagerly.</li> </ul> </li> <li>Added lots of tests for various parts of the application.</li> </ul>"},{"location":"changelog/#paperless-ng-092","title":"paperless-ng 0.9.2","text":"<ul> <li>Major changes to the front end (colors, logo, shadows, layout of the cards, better mobile support)</li> <li>Paperless now uses mime types and libmagic detection to determine if a file type is supported and which parser to use. Removes all file type checks that where present in MANY different places in paperless.</li> <li>Mail consumer now correctly consumes documents even when their content type was not set correctly. (i.e. PDF documents with content type <code>application/octet-stream</code>)</li> <li>Basic sorting of mail rules added</li> <li>Much better admin for mail rule editing.</li> <li>Docker entrypoint script awaits the database server if it is configured.</li> <li>Disabled editing of logs.</li> <li>New setting <code>PAPERLESS_OCR_PAGES</code> limits the tesseract parser to the first n pages of scanned documents.</li> <li>Fixed a bug where tasks with too long task names would not show up in the admin.</li> </ul>"},{"location":"changelog/#paperless-ng-091","title":"paperless-ng 0.9.1","text":"<ul> <li>Moved documentation of the settings to the actual documentation.</li> <li>Updated release script to force the user to choose between SQLite and PostgreSQL. This avoids confusion when upgrading from paperless.</li> </ul>"},{"location":"changelog/#paperless-ng-090","title":"paperless-ng 0.9.0","text":"<ul> <li>Deprecated: GnuPG. See this note on the state of GnuPG in paperless-ng. This features will most likely be removed in future versions.</li> <li>Added: New frontend. Features:<ul> <li>Single page application: It's much more responsive than the django admin pages.</li> <li>Dashboard. Shows recently scanned documents, or todo notes, or other documents at wish. Allows uploading of documents. Shows basic statistics.</li> <li>Better document list with multiple display options.</li> <li>Full text search with result highlighting, auto completion and scoring based on the query. It uses a document search index in the background.</li> <li>Saveable filters.</li> <li>Better log viewer.</li> </ul> </li> <li>Added: Document types. Assign these to documents just as correspondents. They may be used in the future to perform automatic operations on documents depending on the type.</li> <li>Added: Inbox tags. Define an inbox tag and it will automatically be assigned to any new document scanned into the system.</li> <li>Added: Automatic matching. A new matching algorithm that automatically assigns tags, document types and correspondents to your documents. It uses a neural network trained on your data.</li> <li>Added: Archive serial numbers. Assign these to quickly find documents stored in physical binders.</li> <li>Added: Enabled the internal user management of django. This isn't really a multi user solution, however, it allows more than one user to access the website and set some basic permissions / renew passwords.</li> <li>Modified [breaking]: All new mail consumer with customizable filters, actions and multiple account support. Replaces the old mail consumer. The new mail consumer needs different configuration but can be configured to act exactly like the old consumer.</li> <li>Modified: Changes to the consumer:<ul> <li>Now uses the excellent watchdog library that should make sure files are discovered no matter what the platform is.</li> <li>The consumer now uses a task scheduler to run consumption processes in parallel. This means that consuming many documents should be much faster on systems with many cores.</li> <li>Concurrency is controlled with the new settings <code>PAPERLESS_TASK_WORKERS</code> and <code>PAPERLESS_THREADS_PER_WORKER</code>. See TODO for details on concurrency.</li> <li>The consumer no longer blocks the database for extended periods of time.</li> <li>An issue with tesseract running multiple threads per page and slowing down the consumer was fixed.</li> </ul> </li> <li>Modified [breaking]: REST Api changes:<ul> <li>New filters added, other filters removed (case sensitive filters, slug filters)</li> <li>Endpoints for thumbnails, previews and downloads replace the old <code>/fetch/</code> urls. Redirects are in place.</li> <li>Endpoint for document uploads replaces the old <code>/push</code> url. Redirects are in place.</li> <li>Foreign key relationships are now served as IDs, not as urls.</li> </ul> </li> <li>Modified [breaking]: PostgreSQL:<ul> <li>If <code>PAPERLESS_DBHOST</code> is specified in the settings, paperless uses PostgreSQL instead of SQLite. Username, database and password all default to <code>paperless</code> if not specified.</li> </ul> </li> <li>Modified [breaking]: document_retagger management command rework. See Document retagger for details. Replaces <code>document_correspondents</code> management command.</li> <li>Removed [breaking]: Reminders.</li> <li>Removed: All customizations made to the django admin pages.</li> <li>Removed [breaking]: The docker image no longer supports SSL. If you want to expose paperless to the internet, hide paperless behind a proxy server that handles SSL requests.</li> <li>Internal changes: Mostly code cleanup, including:<ul> <li>Rework of the code of the tesseract parser. This is now a lot cleaner.</li> <li>Rework of the filename handling code. It was a mess.</li> <li>Fixed some issues with the document exporter not exporting all documents when encountering duplicate filenames.</li> <li>Added a task scheduler that takes care of checking mail, training the classifier, maintaining the document search index and consuming documents.</li> <li>Updated dependencies. Now uses Pipenv all around.</li> <li>Updated Dockerfile and docker-compose. Now uses <code>supervisord</code> to run everything paperless-related in a single container.</li> </ul> </li> <li>Settings:<ul> <li><code>PAPERLESS_FORGIVING_OCR</code> is now default and gone. Reason: Even if <code>langdetect</code> fails to detect a language, tesseract still does a very good job at ocr'ing a document with the default language. Certain language specifics such as umlauts may not get picked up properly.</li> <li><code>PAPERLESS_DEBUG</code> defaults to <code>false</code>.</li> <li>The presence of <code>PAPERLESS_DBHOST</code> now determines whether to use PostgreSQL or SQLite.</li> <li><code>PAPERLESS_OCR_THREADS</code> is gone and replaced with <code>PAPERLESS_TASK_WORKERS</code> and <code>PAPERLESS_THREADS_PER_WORKER</code>. Refer to the config example for details.</li> <li><code>PAPERLESS_OPTIMIZE_THUMBNAILS</code> allows you to disable or enable thumbnail optimization. This is useful on less powerful devices.</li> </ul> </li> <li>Many more small changes here and there. The usual stuff.</li> </ul>"},{"location":"changelog/#paperless","title":"Paperless","text":""},{"location":"changelog/#270","title":"2.7.0","text":"<ul> <li>syntonym submitted a pull request to catch IMAP connection errors #475.</li> <li>St\u00e9phane Brunner added <code>psycopg2</code> to the Pipfile #489. He also fixed a syntax error in <code>docker-compose.yml.example</code> #488 and added DjangoQL, which allows a litany of handy search functionality #492.</li> <li>CkuT and JOKer hacked out a simple, but super-helpful optimisation to how the thumbnails are served up, improving performance considerably #481.</li> <li>tsia added a few fields to the tags REST API. #483.</li> <li>Brian Cribbs improved the documentation to help people using Paperless over NFS #484.</li> <li>Brendan M. Sleight updated the documentation to include a note for setting the <code>DEBUG</code> value. The <code>paperless.conf.example</code> file was also updated to mirror the project defaults.</li> </ul>"},{"location":"changelog/#261","title":"2.6.1","text":"<ul> <li>We now have a logo, complete with a favicon :-)</li> <li>Removed some problematic tests.</li> <li>Fix the docker-compose example config to include a shared consume volume so that using the push API will work for users of the Docker install. Thanks to Colin Frei for fixing this in #466.</li> <li>khrise submitted a pull request to include the <code>added</code> property to the REST API #471.</li> </ul>"},{"location":"changelog/#260","title":"2.6.0","text":"<ul> <li>Allow an infinite number of logs to be deleted. Thanks to Ulli for noting the problem in #433.</li> <li>Fix the <code>RecentCorrespondentsFilter</code> correspondents filter that was added in 2.4 to play nice with the defaults. Thanks to tsia and Sblop who pointed this out. #423.</li> <li>Updated dependencies to include (among other things) a security patch to requests.</li> <li>Fix text in sample data for tests so that the language guesser stops thinking that everything is in Catalan because we had Lorem ipsum in there.</li> <li>Tweaked the gunicorn sample command to use filesystem paths instead of Python paths. #441</li> <li>Added pretty colour boxes next to the hex values in the Tags section, thanks to a pull request from Joshua Taillon #442.</li> <li>Added a <code>.editorconfig</code> file to better specify coding style.</li> <li>Joshua Taillon also added some logic to tie Paperless' date guessing logic into how it parses file names on import. #440</li> </ul>"},{"location":"changelog/#250","title":"2.5.0","text":"<ul> <li>New dependency: Paperless now optimises thumbnail generation with optipng, so you'll need to install that somewhere in your PATH or declare its location in <code>PAPERLESS_OPTIPNG_BINARY</code>. The Docker image has already been updated on the Docker Hub, so you just need to pull the latest one from there if you're a Docker user.</li> <li>\"Login free\" instances of Paperless were breaking whenever you tried to edit objects in the admin: adding/deleting tags or correspondents, or even fixing spelling. This was due to the \"user hack\" we were applying to sessions that weren't using a login, as that hack user didn't have a valid id. The fix was to attribute the first user id in the system to this hack user. #394</li> <li>A problem in how we handle slug values on Tags and Correspondents required a few changes to how we handle this field #393:<ol> <li>Slugs are no longer editable. They're derived from the name of the tag or correspondent at save time, so if you wanna change the slug, you have to change the name, and even then you're restricted to the rules of the <code>slugify()</code> function. The slug value is still visible in the admin though.</li> <li>I've added a migration to go over all existing tags & correspondents and rewrite the <code>.slug</code> values to ones conforming to the <code>slugify()</code> rules.</li> <li>The consumption process now uses the same rules as <code>.save()</code> in determining a slug and using that to check for an existing tag/correspondent.</li> </ol> </li> <li>An annoying bug in the date capture code was causing some bogus dates to be attached to documents, which in turn busted the UI. Thanks to Andrew Peng for reporting this. #414.</li> <li>A bug in the Dockerfile meant that Tesseract language files weren't being installed correctly. euri10 was quick to provide a fix: #406, #413.</li> <li>Document consumption is now wrapped in a transaction as per an old ticket #262.</li> <li>The <code>get_date()</code> functionality of the parsers has been consolidated onto the <code>DocumentParser</code> class since much of that code was redundant anyway.</li> </ul>"},{"location":"changelog/#240","title":"2.4.0","text":"<ul> <li>A new set of actions are now available thanks to jonaswinkler's very first pull request! You can now do nifty things like tag documents in bulk, or set correspondents in bulk. #405</li> <li>The import/export system is now a little smarter. By default, documents are tagged as <code>unencrypted</code>, since exports are by their nature unencrypted. It's now in the import step that we decide the storage type. This allows you to export from an encrypted system and import into an unencrypted one, or vice-versa.</li> <li>The migration history has been slightly modified to accommodate PostgreSQL users. Additionally, you can now tell paperless to use PostgreSQL simply by declaring <code>PAPERLESS_DBUSER</code> in your environment. This will attempt to connect to your Postgres database without a password unless you also set <code>PAPERLESS_DBPASS</code>.</li> <li>A bug was found in the REST API filter system that was the result of an update of django-filter some time ago. This has now been patched in #412. Thanks to thepill for spotting it!</li> </ul>"},{"location":"changelog/#230","title":"2.3.0","text":"<ul> <li>Support for consuming plain text & markdown documents was added by Joshua Taillon! This was a long-requested feature, and it's addition is likely to be greatly appreciated by the community: #395 Thanks also to David Martin for his assistance on the issue.</li> <li>dubit0 found & fixed a bug that prevented management commands from running before we had an operational database: #396</li> <li>Joshua also added a simple update to the thumbnail generation process to improve performance: #399</li> <li>As his last bit of effort on this release, Joshua also added some code to allow you to view the documents inline rather than download them as an attachment. #400</li> <li>Finally, ahyear found a slip in the Docker documentation and patched it. #401</li> </ul>"},{"location":"changelog/#221","title":"2.2.1","text":"<ul> <li>Kyle Lucy reported a bug quickly after the release of 2.2.0 where we broke the <code>DISABLE_LOGIN</code> feature: #392.</li> </ul>"},{"location":"changelog/#220","title":"2.2.0","text":"<ul> <li>Thanks to dadosch, Wolfgang Mader, and Tim Brooks this is the first version of Paperless that supports Django 2.0! As a result of their hard work, you can now also run Paperless on Python 3.7 as well: #386 & #390.</li> <li>St\u00e9phane Brunner added a few lines of code that made tagging interface a lot easier on those of us with lots of different tags: #391.</li> <li>Kilian Koeltzsch noticed a bug in how we capture & automatically create tags, so that's fixed now too: #384.</li> <li>erikarvstedt tweaked the behaviour of the test suite to be better behaved for packaging environments: #383.</li> <li>Lukasz Soluch added CORS support to make building a new Javascript-based front-end cleaner & easier: #387.</li> </ul>"},{"location":"changelog/#210","title":"2.1.0","text":"<ul> <li>Enno Lohmeier added three simple features that make Paperless a lot more user (and developer) friendly:<ol> <li>There's a new search box on the front page: #374.</li> <li>The correspondents & tags pages now have a column showing the number of relevant documents: #375.</li> <li>The Dockerfile has been tweaked to build faster for those of us who are doing active development on Paperless using the Docker environment: #376.</li> </ol> </li> <li>You now also have the ability to customise the interface to your heart's content by creating a file called <code>overrides.css</code> and/or <code>overrides.js</code> in the root of your media directory. Thanks to Mark McFate for this idea: #371</li> </ul>"},{"location":"changelog/#200","title":"2.0.0","text":"<p>This is a big release as we've changed a core-functionality of Paperless: we no longer encrypt files with GPG by default.</p> <p>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 <code>paperless</code> 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.</p>"},{"location":"changelog/#migrating-from-1x","title":"Migrating from 1.x","text":"<p>Encryption isn't gone, it's just off for new users. So long as you have <code>PAPERLESS_PASSPHRASE</code> 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:</p> <ol> <li>Run <code>./manage.py migrate && ./manage.py change_storage_type gpg unencrypted</code>. This will go through your entire database and Decrypt All The Things.</li> <li>Remove <code>PAPERLESS_PASSPHRASE</code> from your <code>paperless.conf</code> file, or simply stop declaring it in your environment.</li> </ol> <p>Special thanks to erikarvstedt, matthewmoto, and mcronce who did the bulk of the work on this big change.</p>"},{"location":"changelog/#140","title":"1.4.0","text":"<ul> <li>Quentin Dawans has refactored the document consumer to allow for some command-line options. Notably, you can now direct it to consume from a particular <code>--directory</code>, limit the <code>--loop-time</code>, set the time between mail server checks with <code>--mail-delta</code> or just run it as a one-off with <code>--one-shot</code>. See #305 & #313 for more information.</li> <li>Refactor the use of travis/tox/pytest/coverage into two files: <code>.travis.yml</code> and <code>setup.cfg</code>.</li> <li>Start generating requirements.txt from a Pipfile. I'll probably switch over to just using pipenv in the future.</li> <li>All for a alternative FreeBSD-friendly location for <code>paperless.conf</code>. Thanks to Martin Arendtsen who provided this (#322).</li> <li>Document consumption events are now logged in the Django admin events log. Thanks to CkuT for doing the legwork on this one and to Quentin Dawans & David Martin for helping to coordinate & work out how the feature would be developed.</li> <li>erikarvstedt contributed a pull request (#328) to add <code>--noreload</code> to the default server start process. This helps reduce the load imposed by the running webservice.</li> <li>Through some discussion on #253 and #323, we've removed a few of the hardcoded URL values to make it easier for people to host Paperless on a subdirectory. Thanks to Quentin Dawans and Kyle Lucy for helping to work this out.</li> <li>The clickable area for documents on the listing page has been increased to a more predictable space thanks to a glorious hack from erikarvstedt in #344.</li> <li>Strubbl noticed an annoying bug in the bash script wrapping the Docker entrypoint and fixed it with some very creating Bash skills: #352.</li> <li>You can now use the search field to find documents by tag thanks to thinkjk's first ever issue: #354.</li> <li>Inotify is now being used to detect additions to the consume directory thanks to some excellent work from erikarvstedt on #351</li> </ul>"},{"location":"changelog/#130","title":"1.3.0","text":"<ul> <li>You can now run Paperless without a login, though you'll still have to create at least one user. This is thanks to a pull-request from matthewmoto: #295. Note that logins are still required by default, and that you need to disable them by setting <code>PAPERLESS_DISABLE_LOGIN=\"true\"</code> in your environment or in <code>/etc/paperless.conf</code>.</li> <li>Fix for #303 where sketchily-formatted documents could cause the consumer to break and insert half-records into the database breaking all sorts of things. We now capture the return codes of both <code>convert</code> and <code>unpaper</code> and fail-out nicely.</li> <li>Fix for additional date types thanks to input from Isaac and code from BastianPoe (#301).</li> <li>Fix for running migrations in the Docker container (#299). Thanks to Georgi Todorov for the fix (#300) and to Pit for the review.</li> <li>Fix for Docker cases where the issuing user is not UID 1000. This was a collaborative fix between Jeffrey Portman and Pit in #311 and #312 to fix #306.</li> <li>Patch the historical migrations to support MySQL's um, interesting way of handing indexes (#308). Thanks to Simon Taddiken for reporting the problem and helping me find where to fix it.</li> </ul>"},{"location":"changelog/#120","title":"1.2.0","text":"<ul> <li>New Docker image, now based on Alpine, thanks to the efforts of addadi and Pit. This new image is dramatically smaller than the Debian-based one, and it also has a new home on Docker Hub. A proper thank-you to Pit for hosting the image on his Docker account all this time, but after some discussion, we decided the image needed a more official-looking home.</li> <li>BastianPoe has added the long-awaited feature to automatically skip the OCR step when the PDF already contains text. This can be overridden by setting <code>PAPERLESS_OCR_ALWAYS=YES</code> either in your <code>paperless.conf</code> or in the environment. Note that this also means that Paperless now requires <code>libpoppler-cpp-dev</code> to be installed. Important: You'll need to run <code>pip install -r requirements.txt</code> after the usual <code>git pull</code> to properly update.</li> <li>BastianPoe has also contributed a monumental amount of work (#291) to solving #158: setting the document creation date based on finding a date in the document text.</li> </ul>"},{"location":"changelog/#110","title":"1.1.0","text":"<ul> <li>Fix for #283, a redirect bug which broke interactions with paperless-desktop. Thanks to chris-aeviator for reporting it.</li> <li>Addition of an optional new financial year filter, courtesy of David Martin #256</li> <li>Fixed a typo in how thumbnails were named in exports #285, courtesy of Dan Panzarella</li> </ul>"},{"location":"changelog/#100","title":"1.0.0","text":"<ul> <li>Upgrade to Django 1.11. You'll need to run ``pip install -r requirements.txt`` after the usual ``git pull`` to properly update.</li> <li>Replace the templatetag-based hack we had for document listing in favour of a slightly less ugly solution in the form of another template tag with less copypasta.</li> <li>Support for multi-word-matches for auto-tagging thanks to an excellent patch from ishirav #277.</li> <li>Fixed a CSS bug reported by Stefan Hagen that caused an overlapping of the text and checkboxes under some resolutions #272.</li> <li>Patched the Docker config to force the serving of static files. Credit for this one goes to dev-rke via #248.</li> <li>Fix file permissions during Docker start up thanks to Pit on #268.</li> <li>Date fields in the admin are now expressed as HTML5 date fields thanks to Lukas Winkler's issue #278</li> </ul>"},{"location":"changelog/#080","title":"0.8.0","text":"<ul> <li>Paperless can now run in a subdirectory on a host (<code>/paperless</code>), rather than always running in the root (<code>/</code>) thanks to maphy-psd's work on #255.</li> </ul>"},{"location":"changelog/#070","title":"0.7.0","text":"<ul> <li>Potentially breaking change: As per #235, Paperless will no longer automatically delete documents attached to correspondents when those correspondents are themselves deleted. This was Django's default behaviour, but didn't make much sense in Paperless' case. Thanks to Thomas Brueggemann and David Martin for their input on this one.</li> <li>Fix for #232 wherein Paperless wasn't recognising <code>.tif</code> files properly. Thanks to ayounggun for reporting this one and to Kusti Skyt\u00e9n for posting the correct solution in the GitHub issue.</li> </ul>"},{"location":"changelog/#060","title":"0.6.0","text":"<ul> <li>Abandon the shared-secret trick we were using for the POST API in favour of BasicAuth or Django session.</li> <li>Fix the POST API so it actually works. #236</li> <li>Breaking change: We've dropped the use of <code>PAPERLESS_SHARED_SECRET</code> as it was being used both for the API (now replaced with a normal auth) and form email polling. Now that we're only using it for email, this variable has been renamed to <code>PAPERLESS_EMAIL_SECRET</code>. The old value will still work for a while, but you should change your config if you've been using the email polling feature. Thanks to Joshua Gilman for all the help with this feature.</li> </ul>"},{"location":"changelog/#050","title":"0.5.0","text":"<ul> <li>Support for fuzzy matching in the auto-tagger & auto-correspondent systems thanks to Jake Gysland's patch #220.</li> <li>Modified the Dockerfile to prepare an export directory (#212). Thanks to combined efforts from Pit and Strubbl in working out the kinks on this one.</li> <li>Updated the import/export scripts to include support for thumbnails. Big thanks to CkuT for finding this shortcoming and doing the work to get it fixed in #224.</li> <li>All of the following changes are thanks to David Martin: * Bumped the dependency on pyocr to 0.4.7 so new users can make use of Tesseract 4 if they so prefer (#226).<ul> <li>Fixed a number of issues with the automated mail handler (#227, #228)</li> <li>Amended the documentation for better handling of systemd service files (#229)</li> <li>Amended the Django Admin configuration to have nice headers (#230)</li> </ul> </li> </ul>"},{"location":"changelog/#041","title":"0.4.1","text":"<ul> <li>Fix for #206 wherein the pluggable parser didn't recognise files with all-caps suffixes like <code>.PDF</code></li> </ul>"},{"location":"changelog/#040","title":"0.4.0","text":"<ul> <li>Introducing reminders. See #199 for more information, but the short explanation is that you can now attach simple notes & times to documents which are made available via the API. Currently, the default API (basically just the Django admin) doesn't really make use of this, but Thomas Brueggemann over at Paperless Desktop has said that he would like to make use of this feature in his project.</li> </ul>"},{"location":"changelog/#036","title":"0.3.6","text":"<ul> <li>Fix for #200 (!!) where the API wasn't configured to allow updating the correspondent or the tags for a document.</li> <li>The <code>content</code> field is now optional, to allow for the edge case of a purely graphical document.</li> <li>You can no longer add documents via the admin. This never worked in the first place, so all I've done here is remove the link to the broken form.</li> <li>The consumer code has been heavily refactored to support a pluggable interface. Install a paperless consumer via pip and tell paperless about it with an environment variable, and you're good to go. Proper documentation is on its way.</li> </ul>"},{"location":"changelog/#035","title":"0.3.5","text":"<ul> <li>A serious facelift for the documents listing page wherein we drop the tabular layout in favour of a tiled interface.</li> <li>Users can now configure the number of items per page.</li> <li>Fix for #171: Allow users to specify their own <code>SECRET_KEY</code> value.</li> <li>Moved the dotenv loading to the top of settings.py</li> <li>Fix for #112: Added checks for binaries required for document consumption.</li> </ul>"},{"location":"changelog/#034","title":"0.3.4","text":"<ul> <li>Removal of django-suit due to a licensing conflict I bumped into in 0.3.3. Note that you can use Django Suit with Paperless, but only in a non-profit situation as their free license prohibits for-profit use. As a result, I can't bundle Suit with Paperless without conflicting with the GPL. Further development will be done against the stock Django admin.</li> <li>I shrunk the thumbnails a little 'cause they were too big for me, even on my high-DPI monitor.</li> <li>BasicAuth support for document and thumbnail downloads, as well as the Push API thanks to \\@thomasbrueggemann. See #179.</li> </ul>"},{"location":"changelog/#033","title":"0.3.3","text":"<ul> <li>Thumbnails in the UI and a Django-suit -based face-lift courtesy of \\@ekw!</li> <li>Timezone, items per page, and default language are now all configurable, also thanks to \\@ekw.</li> </ul>"},{"location":"changelog/#032","title":"0.3.2","text":"<ul> <li>Fix for #172: defaulting ALLOWED_HOSTS to <code>[\"*\"]</code> and allowing the user to set her own value via <code>PAPERLESS_ALLOWED_HOSTS</code> should the need arise.</li> </ul>"},{"location":"changelog/#031","title":"0.3.1","text":"<ul> <li>Added a default value for <code>CONVERT_BINARY</code></li> </ul>"},{"location":"changelog/#030","title":"0.3.0","text":"<ul> <li>Updated to using django-filter 1.x</li> <li>Added some system checks so new users aren't confused by misconfigurations.</li> <li>Consumer loop time is now configurable for systems with slow writes. Just set <code>PAPERLESS_CONSUMER_LOOP_TIME</code> to a number of seconds. The default is 10.</li> <li>As per #44, we've removed support for <code>PAPERLESS_CONVERT</code>, <code>PAPERLESS_CONSUME</code>, and <code>PAPERLESS_SECRET</code>. Please use <code>PAPERLESS_CONVERT_BINARY</code>, <code>PAPERLESS_CONSUMPTION_DIR</code>, and <code>PAPERLESS_SHARED_SECRET</code> respectively instead.</li> </ul>"},{"location":"changelog/#020","title":"0.2.0","text":"<ul> <li>#150: The media root is now a variable you can set in <code>paperless.conf</code>.</li> <li>#148: The database location (sqlite) is now a variable you can set in <code>paperless.conf</code>.</li> <li>#146: Fixed a bug that allowed unauthorised access to the <code>/fetch</code> URL.</li> <li>#131: Document files are now automatically removed from disk when they're deleted in Paperless.</li> <li>#121: Fixed a bug where Paperless wasn't setting document creation time based on the file naming scheme.</li> <li>#81: Added a hook to run an arbitrary script after every document is consumed.</li> <li>#98: Added optional environment variables for ImageMagick so that it doesn't explode when handling Very Large Documents or when it's just running on a low-memory system. Thanks to Florian Harr for his help on this one.</li> <li>#89 Ported the auto-tagging code to correspondents as well. Thanks to Justin Snyman for the pointers in the issue queue.</li> <li>Added support for guessing the date from the file name along with the correspondent, title, and tags. Thanks to Tikitu de Jager for his pull request that I took forever to merge and to Pit for his efforts on the regex front.</li> <li>#94: Restored support for changing the created date in the UI. Thanks to Martin Honermeyer and Tim White for working with me on this.</li> </ul>"},{"location":"changelog/#011","title":"0.1.1","text":"<ul> <li>Potentially Breaking Change: All references to \"sender\" in the code have been renamed to \"correspondent\" to better reflect the nature of the property (one could quite reasonably scan a document before sending it to someone.)</li> <li>#67: Rewrote the document exporter and added a new importer that allows for full metadata retention without depending on the file name and modification time. A big thanks to Tikitu de Jager, Pit, Florian Jung, and Christopher Luu for their code snippets and contributing conversation that lead to this change.</li> <li>#20: Added unpaper support to help in cleaning up the scanned image before it's OCR'd. Thanks to Pit for this one.</li> <li>#71 Added (encrypted) thumbnails in anticipation of a proper UI.</li> <li>#68: Added support for using a proper config file at <code>/etc/paperless.conf</code> and modified the systemd unit files to use it.</li> <li>Refactored the Vagrant installation process to use environment variables rather than asking the user to modify <code>settings.py</code>.</li> <li>#44: Harmonise environment variable names with constant names.</li> <li>#60: Setup logging to actually use the Python native logging framework.</li> <li>#53: Fixed an annoying bug that caused <code>.jpeg</code> and <code>.JPG</code> images to be imported but made unavailable.</li> </ul>"},{"location":"changelog/#010","title":"0.1.0","text":"<ul> <li>Docker support! Big thanks to Wayne Werner, Brian Conn, and Tikitu de Jager for this one, and especially to Pit who spearheadded this effort.</li> <li>A simple REST API is in place, but it should be considered unstable.</li> <li>Cleaned up the consumer to use temporary directories instead of a single scratch space. (Thanks Pit)</li> <li>Improved the efficiency of the consumer by parsing pages more intelligently and introducing a threaded OCR process (thanks again Pit).</li> <li>#45: Cleaned up the logic for tag matching. Reported by darkmatter.</li> <li>#47: Auto-rotate landscape documents. Reported by Paul and fixed by Pit.</li> <li>#48: Matching algorithms should do so on a word boundary (darkmatter)</li> <li>#54: Documented the re-tagger (zedster)</li> <li>#57: Make sure file is preserved on import failure (darkmatter)</li> <li>Added tox with pep8 checking</li> </ul>"},{"location":"changelog/#006","title":"0.0.6","text":"<ul> <li>Added support for parallel OCR (significant work from Pit)</li> <li>Sped up the language detection (significant work from Pit)</li> <li>Added simple logging</li> </ul>"},{"location":"changelog/#005","title":"0.0.5","text":"<ul> <li>Added support for image files as documents (png, jpg, gif, tiff)</li> <li>Added a crude means of HTTP POST for document imports</li> <li>Added IMAP mail support</li> <li>Added a re-tagging utility</li> <li>Documentation for the above as well as data migration</li> </ul>"},{"location":"changelog/#004","title":"0.0.4","text":"<ul> <li>Added automated tagging basted on keyword matching</li> <li>Cleaned up the document listing page</li> <li>Removed <code>User</code> and <code>Group</code> from the admin</li> <li>Added <code>pytz</code> to the list of requirements</li> </ul>"},{"location":"changelog/#003","title":"0.0.3","text":"<ul> <li>Added basic tagging</li> </ul>"},{"location":"changelog/#002","title":"0.0.2","text":"<ul> <li>Added language detection</li> <li>Added datestamps to <code>document_exporter</code>.</li> <li>Changed <code>settings.TESSERACT_LANGUAGE</code> to <code>settings.OCR_LANGUAGE</code>.</li> </ul>"},{"location":"changelog/#001","title":"0.0.1","text":"<ul> <li>Initial release</li> </ul>"},{"location":"configuration/","title":"Configuration","text":"<p>Paperless provides a wide range of customizations. Depending on how you run paperless, these settings have to be defined in different places.</p> <p>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.</p> <ul> <li> <p>If you run paperless on docker, <code>paperless.conf</code> is not used. Rather, configure paperless by copying necessary options to <code>docker-compose.env</code>.</p> </li> <li> <p>If you are running paperless on anything else, paperless will search for the configuration file in these locations and use the first one it finds:</p> <ul> <li>The environment variable <code>PAPERLESS_CONFIGURATION_PATH</code></li> <li><code>/path/to/paperless/paperless.conf</code></li> <li><code>/etc/paperless.conf</code></li> <li><code>/usr/local/etc/paperless.conf</code></li> </ul> </li> </ul>"},{"location":"configuration/#required-services","title":"Required services","text":""},{"location":"configuration/#redis-broker","title":"Redis Broker","text":""},{"location":"configuration/#PAPERLESS_REDIS","title":"<code>PAPERLESS_REDIS=<url></code>","text":"<p>This is required for processing scheduled tasks such as email fetching, index optimization and for training the automatic document matcher.</p> <ul> <li>If your Redis server needs login credentials PAPERLESS_REDIS = <code>redis://<username>:<password>@<host>:<port></code></li> <li>With the requirepass option PAPERLESS_REDIS = <code>redis://:<password>@<host>:<port></code></li> <li>To include the redis database index PAPERLESS_REDIS = <code>redis://<username>:<password>@<host>:<port>/<DBIndex></code></li> </ul> <p>More information on securing your Redis Instance.</p> <p>Defaults to <code>redis://localhost:6379</code>.</p>"},{"location":"configuration/#PAPERLESS_REDIS_PREFIX","title":"<code>PAPERLESS_REDIS_PREFIX=<prefix></code>","text":"<p>Prefix to be used in Redis for keys and channels. Useful for sharing one Redis server among multiple Paperless instances.</p> <p>Defaults to no prefix.</p>"},{"location":"configuration/#database","title":"Database","text":""},{"location":"configuration/#PAPERLESS_DBENGINE","title":"<code>PAPERLESS_DBENGINE=<engine_name></code>","text":"<p>Optional, gives the ability to choose Postgres or MariaDB for database engine. Available options are <code>postgresql</code> and <code>mariadb</code>.</p> <p>Default is <code>postgresql</code>.</p> <p>Warning</p> <p>Using MariaDB comes with some caveats. See MySQL Caveats.</p>"},{"location":"configuration/#PAPERLESS_DBHOST","title":"<code>PAPERLESS_DBHOST=<hostname></code>","text":"<p>By default, sqlite is used as the database backend. This can be changed here.</p> <p>Set PAPERLESS_DBHOST and another database will be used instead of sqlite.</p>"},{"location":"configuration/#PAPERLESS_DBPORT","title":"<code>PAPERLESS_DBPORT=<port></code>","text":"<p>Adjust port if necessary.</p> <p>Default is 5432.</p>"},{"location":"configuration/#PAPERLESS_DBNAME","title":"<code>PAPERLESS_DBNAME=<name></code>","text":"<p>Database name in PostgreSQL or MariaDB.</p> <p>Defaults to \"paperless\".</p>"},{"location":"configuration/#PAPERLESS_DBUSER","title":"<code>PAPERLESS_DBUSER=<name></code>","text":"<p>Database user in PostgreSQL or MariaDB.</p> <p>Defaults to \"paperless\".</p>"},{"location":"configuration/#PAPERLESS_DBPASS","title":"<code>PAPERLESS_DBPASS=<password></code>","text":"<p>Database password for PostgreSQL or MariaDB.</p> <p>Defaults to \"paperless\".</p>"},{"location":"configuration/#PAPERLESS_DBSSLMODE","title":"<code>PAPERLESS_DBSSLMODE=<mode></code>","text":"<p>SSL mode to use when connecting to PostgreSQL or MariaDB.</p> <p>See the official documentation about sslmode for PostgreSQL.</p> <p>See the official documentation about sslmode for MySQL and MariaDB.</p> <p>Note: SSL mode values differ between PostgreSQL and MariaDB.</p> <p>Default is <code>prefer</code> for PostgreSQL and <code>PREFERRED</code> for MariaDB.</p>"},{"location":"configuration/#PAPERLESS_DBSSLROOTCERT","title":"<code>PAPERLESS_DBSSLROOTCERT=<ca-path></code>","text":"<p>SSL root certificate path</p> <p>See the official documentation about sslmode for PostgreSQL. Changes path of <code>root.crt</code>.</p> <p>See the official documentation about sslmode for MySQL and MariaDB.</p> <p>Defaults to unset, using the documented path in the home directory.</p>"},{"location":"configuration/#PAPERLESS_DBSSLCERT","title":"<code>PAPERLESS_DBSSLCERT=<client-cert-path></code>","text":"<p>SSL client certificate path</p> <p>See the official documentation about sslmode for PostgreSQL.</p> <p>See the official documentation about sslmode for MySQL and MariaDB.</p> <p>Changes path of <code>postgresql.crt</code>.</p> <p>Defaults to unset, using the documented path in the home directory.</p>"},{"location":"configuration/#PAPERLESS_DBSSLKEY","title":"<code>PAPERLESS_DBSSLKEY=<client-cert-key></code>","text":"<p>SSL client key path</p> <p>See the official documentation about sslmode for PostgreSQL.</p> <p>See the official documentation about sslmode for MySQL and MariaDB.</p> <p>Changes path of <code>postgresql.key</code>.</p> <p>Defaults to unset, using the documented path in the home directory.</p>"},{"location":"configuration/#PAPERLESS_DB_TIMEOUT","title":"<code>PAPERLESS_DB_TIMEOUT=<int></code>","text":"<p>Amount of time for a database connection to wait for the database to unlock. Mostly applicable for sqlite based installation. Consider changing to postgresql if you are having concurrency problems with sqlite.</p> <p>Defaults to unset, keeping the Django defaults.</p>"},{"location":"configuration/#optional-services","title":"Optional Services","text":""},{"location":"configuration/#tika","title":"Tika","text":"<p>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).</p> <p>If you wish to use this, you must provide a Tika server and a Gotenberg server, configure their endpoints, and enable the feature.</p>"},{"location":"configuration/#PAPERLESS_TIKA_ENABLED","title":"<code>PAPERLESS_TIKA_ENABLED=<bool></code>","text":"<p>Enable (or disable) the Tika parser.</p> <p>Defaults to false.</p>"},{"location":"configuration/#PAPERLESS_TIKA_ENDPOINT","title":"<code>PAPERLESS_TIKA_ENDPOINT=<url></code>","text":"<p>Set the endpoint URL where Paperless can reach your Tika server.</p> <p>Defaults to \"http://localhost:9998\".</p>"},{"location":"configuration/#PAPERLESS_TIKA_GOTENBERG_ENDPOINT","title":"<code>PAPERLESS_TIKA_GOTENBERG_ENDPOINT=<url></code>","text":"<p>Set the endpoint URL where Paperless can reach your Gotenberg server.</p> <p>Defaults to \"http://localhost:3000\".</p> <p>If you run paperless on docker, you can add those services to the Docker Compose file (see the provided <code>docker-compose.sqlite-tika.yml</code> file for reference).</p> <p>Add all three configuration parameters to your configuration. If using Docker, this may be the <code>environment</code> key of the webserver or a <code>docker-compose.env</code> file. Bare metal installations may have a <code>.conf</code> file containing the configuration parameters. Be sure to use the correct format and watch out for indentation if editing the YAML file.</p>"},{"location":"configuration/#email-parsing","title":"Email Parsing","text":""},{"location":"configuration/#PAPERLESS_EMAIL_PARSE_DEFAULT_LAYOUT","title":"[<code>PAPERLESS_EMAIL_PARSE_DEFAULT_LAYOUT=<int></code>(#PAPERLESS_EMAIL_PARSE_DEFAULT_LAYOUT)","text":"<p>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.</p> <ul> <li><code>1</code> = Text, then HTML</li> <li><code>2</code> = HTML, then text</li> <li><code>3</code> = HTML only</li> <li><code>4</code> = Text only</li> </ul>"},{"location":"configuration/#paths-and-folders","title":"Paths and folders","text":""},{"location":"configuration/#PAPERLESS_CONSUMPTION_DIR","title":"<code>PAPERLESS_CONSUMPTION_DIR=<path></code>","text":"<p>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.</p> <p>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.</p> <p>Defaults to \"../consume/\", relative to the \"src\" directory.</p>"},{"location":"configuration/#PAPERLESS_DATA_DIR","title":"<code>PAPERLESS_DATA_DIR=<path></code>","text":"<p>This is where paperless stores all its data (search index, SQLite database, classification model, etc).</p> <p>Defaults to \"../data/\", relative to the \"src\" directory.</p>"},{"location":"configuration/#PAPERLESS_EMPTY_TRASH_DIR","title":"<code>PAPERLESS_EMPTY_TRASH_DIR=<path></code>","text":"<p>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.</p> <p>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.</p> <p>Note that the directory must exist prior to using this setting.</p> <p>Defaults to empty (i.e. really delete files).</p> <p>This setting was previously named PAPERLESS_TRASH_DIR.</p>"},{"location":"configuration/#PAPERLESS_MEDIA_ROOT","title":"<code>PAPERLESS_MEDIA_ROOT=<path></code>","text":"<p>This is where your documents and thumbnails are stored.</p> <p>You can set this and PAPERLESS_DATA_DIR to the same folder to have paperless store all its data within the same volume.</p> <p>Defaults to \"../media/\", relative to the \"src\" directory.</p>"},{"location":"configuration/#PAPERLESS_STATICDIR","title":"<code>PAPERLESS_STATICDIR=<path></code>","text":"<p>Override the default STATIC_ROOT here. This is where all static files created using \"collectstatic\" manager command are stored.</p> <p>Unless you're doing something fancy, there is no need to override this. If this is changed, you may need to run <code>collectstatic</code> again.</p> <p>Defaults to \"../static/\", relative to the \"src\" directory.</p>"},{"location":"configuration/#PAPERLESS_FILENAME_FORMAT","title":"<code>PAPERLESS_FILENAME_FORMAT=<format></code>","text":"<p>Changes the filenames paperless uses to store documents in the media directory. See File name handling for details.</p> <p>Default is none, which disables this feature.</p>"},{"location":"configuration/#PAPERLESS_FILENAME_FORMAT_REMOVE_NONE","title":"<code>PAPERLESS_FILENAME_FORMAT_REMOVE_NONE=<bool></code>","text":"<p>Tells paperless to replace placeholders in <code>PAPERLESS_FILENAME_FORMAT</code> 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.</p> <p>Defaults to <code>false</code> which disables this feature.</p>"},{"location":"configuration/#PAPERLESS_LOGGING_DIR","title":"<code>PAPERLESS_LOGGING_DIR=<path></code>","text":"<p>This is where paperless will store log files.</p> <p>Defaults to <code>PAPERLESS_DATA_DIR/log/</code>.</p>"},{"location":"configuration/#PAPERLESS_NLTK_DIR","title":"<code>PAPERLESS_NLTK_DIR=<path></code>","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. <p>Previously, the location defaulted to <code>PAPERLESS_DATA_DIR/nltk</code>. Unless you are using this in a bare metal install or other setup, this folder is no longer needed and can be removed manually.</p> <p>Defaults to <code>/usr/share/nltk_data</code></p>"},{"location":"configuration/#PAPERLESS_MODEL_FILE","title":"<code>PAPERLESS_MODEL_FILE=<path></code>","text":"<p>This is where paperless will store the classification model.</p> <p>Defaults to <code>PAPERLESS_DATA_DIR/classification_model.pickle</code>.</p>"},{"location":"configuration/#logging","title":"Logging","text":""},{"location":"configuration/#PAPERLESS_LOGROTATE_MAX_SIZE","title":"<code>PAPERLESS_LOGROTATE_MAX_SIZE=<num></code>","text":"<p>Maximum file size for log files before they are rotated, in bytes.</p> <p>Defaults to 1 MiB.</p>"},{"location":"configuration/#PAPERLESS_LOGROTATE_MAX_BACKUPS","title":"<code>PAPERLESS_LOGROTATE_MAX_BACKUPS=<num></code>","text":"<p>Number of rotated log files to keep.</p> <p>Defaults to 20.</p>"},{"location":"configuration/#hosting-and-security","title":"Hosting & Security","text":""},{"location":"configuration/#PAPERLESS_SECRET_KEY","title":"<code>PAPERLESS_SECRET_KEY=<key></code>","text":"<p>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.</p> <p>Use any sequence of characters. The more, the better. You don't need to remember this. Just face-roll your keyboard.</p> <p>Default is listed in the file <code>src/paperless/settings.py</code>.</p>"},{"location":"configuration/#PAPERLESS_URL","title":"<code>PAPERLESS_URL=<url></code>","text":"<p>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</p> <p>Defaults to empty string, leaving the other settings unaffected.</p> <p>Note</p> <p>This value cannot contain a path (e.g. domain.com/path), even if you are installing paperless-ngx at a subpath.</p>"},{"location":"configuration/#PAPERLESS_CSRF_TRUSTED_ORIGINS","title":"<code>PAPERLESS_CSRF_TRUSTED_ORIGINS=<comma-separated-list></code>","text":"<p>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</p> <p>Can also be set using PAPERLESS_URL (see above).</p> <p>Defaults to empty string, which does not add any origins to the trusted list.</p>"},{"location":"configuration/#PAPERLESS_ALLOWED_HOSTS","title":"<code>PAPERLESS_ALLOWED_HOSTS=<comma-separated-list></code>","text":"<p>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</p> <p>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,\"</p> <p>Can also be set using PAPERLESS_URL (see above).</p> <p>\"localhost\" is always allowed for docker healthcheck</p> <p>Defaults to \"*\", which is all hosts.</p>"},{"location":"configuration/#PAPERLESS_CORS_ALLOWED_HOSTS","title":"<code>PAPERLESS_CORS_ALLOWED_HOSTS=<comma-separated-list></code>","text":"<p>You need to add your servers to the list of allowed hosts that can do CORS calls. Set this to your public domain name.</p> <p>Can also be set using PAPERLESS_URL (see above).</p> <p>Defaults to \"http://localhost:8000\".</p>"},{"location":"configuration/#PAPERLESS_TRUSTED_PROXIES","title":"<code>PAPERLESS_TRUSTED_PROXIES=<comma-separated-list></code>","text":"<p>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).</p> <p>Defaults to empty string.</p>"},{"location":"configuration/#PAPERLESS_FORCE_SCRIPT_NAME","title":"<code>PAPERLESS_FORCE_SCRIPT_NAME=<path></code>","text":"<p>To host paperless under a subpath url like example.com/paperless you set this value to /paperless. No trailing slash!</p> <p>Defaults to none, which hosts paperless at \"/\".</p>"},{"location":"configuration/#PAPERLESS_STATIC_URL","title":"<code>PAPERLESS_STATIC_URL=<path></code>","text":"<p>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.</p> <p>Defaults to \"/static/\".</p> <p>Note</p> <p>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 <code>PAPERLESS_FORCE_SCRIPT_NAME</code> (see above).</p>"},{"location":"configuration/#PAPERLESS_AUTO_LOGIN_USERNAME","title":"<code>PAPERLESS_AUTO_LOGIN_USERNAME=<username></code>","text":"<p>Specify a username here so that paperless will automatically perform login with the selected user.</p> <p>Danger</p> <p>Do not use this when exposing paperless on the internet. There are no checks in place that would prevent you from doing this.</p> <p>Defaults to none, which disables this feature.</p>"},{"location":"configuration/#PAPERLESS_ADMIN_USER","title":"<code>PAPERLESS_ADMIN_USER=<username></code>","text":"<p>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 <code>createsuperuser</code> command separately, such as Kubernetes or AWS ECS.</p> <p>Requires PAPERLESS_ADMIN_PASSWORD be set.</p> <p>Note</p> <p>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.</p>"},{"location":"configuration/#PAPERLESS_ADMIN_MAIL","title":"<code>PAPERLESS_ADMIN_MAIL=<email></code>","text":"<p>(Optional) Specify superuser email address. Only used when PAPERLESS_ADMIN_USER is set.</p> <p>Defaults to <code>root@localhost</code>.</p>"},{"location":"configuration/#PAPERLESS_ADMIN_PASSWORD","title":"<code>PAPERLESS_ADMIN_PASSWORD=<password></code>","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":"<code>PAPERLESS_COOKIE_PREFIX=<str></code>","text":"<p>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.</p> <p>After changing this, you will have to login again.</p> <p>Defaults to <code>\"\"</code>, which does not alter the cookie names.</p>"},{"location":"configuration/#PAPERLESS_ENABLE_HTTP_REMOTE_USER","title":"<code>PAPERLESS_ENABLE_HTTP_REMOTE_USER=<bool></code>","text":"<p>Allows authentication via HTTP_REMOTE_USER which is used by some SSO applications.</p> <p>Warning</p> <p>This will allow authentication by simply adding a <code>Remote-User: <username></code> 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).</p> <p>If you're exposing paperless to the internet directly (i.e. without a reverse proxy), do not use this.</p> <p>Also see the warning in the official documentation.</p> <p>Defaults to \"false\" which disables this feature.</p>"},{"location":"configuration/#PAPERLESS_ENABLE_HTTP_REMOTE_USER_API","title":"<code>PAPERLESS_ENABLE_HTTP_REMOTE_USER_API=<bool></code>","text":"<p>Allows authentication via HTTP_REMOTE_USER directly against the API</p> <p>Warning</p> <p>See the warning above about securing your installation when using remote user header authentication. This setting is separate from <code>PAPERLESS_ENABLE_HTTP_REMOTE_USER</code> to avoid introducing a security vulnerability to existing reverse proxy setups. As above, ensure that your reverse proxy does not simply pass the <code>Remote-User</code> header from the internet to paperless.</p> <p>Defaults to \"false\" which disables this feature.</p>"},{"location":"configuration/#PAPERLESS_HTTP_REMOTE_USER_HEADER_NAME","title":"<code>PAPERLESS_HTTP_REMOTE_USER_HEADER_NAME=<str></code>","text":"<p>If \"PAPERLESS_ENABLE_HTTP_REMOTE_USER\" or <code>PAPERLESS_ENABLE_HTTP_REMOTE_USER_API</code> 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 <code>HTTP*</code> followed by the normalized actual header name.</p> <p>Defaults to \"HTTP_REMOTE_USER\".</p>"},{"location":"configuration/#PAPERLESS_LOGOUT_REDIRECT_URL","title":"<code>PAPERLESS_LOGOUT_REDIRECT_URL=<str></code>","text":"<p>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.</p> <p>Defaults to None, which disables this feature.</p>"},{"location":"configuration/#PAPERLESS_USE_X_FORWARD_HOST","title":"<code>PAPERLESS_USE_X_FORWARD_HOST=<bool></code>","text":"<p>Configures the Django setting USE_X_FORWARDED_HOST which may be needed for hosting behind a proxy.</p> <p>Defaults to False</p>"},{"location":"configuration/#PAPERLESS_USE_X_FORWARD_PORT","title":"<code>PAPERLESS_USE_X_FORWARD_PORT=<bool></code>","text":"<p>Configures the Django setting USE_X_FORWARDED_PORT which may be needed for hosting behind a proxy.</p> <p>Defaults to False</p>"},{"location":"configuration/#PAPERLESS_PROXY_SSL_HEADER","title":"<code>PAPERLESS_PROXY_SSL_HEADER=<json-list></code>","text":"<p>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 <code>'[\"HTTP_X_FORWARDED_PROTO\", \"https\"]'</code>.</p> <p>Defaults to None</p> <p>Warning</p> <p>Settings this value has security implications. Read the Django documentation and be sure you understand its usage before setting it.</p>"},{"location":"configuration/#PAPERLESS_EMAIL_CERTIFICATE_LOCATION","title":"<code>PAPERLESS_EMAIL_CERTIFICATE_LOCATION=<path></code>","text":"<p>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.</p> <p>Defaults to None.</p> <p>Warning</p> <p>Settings this value has security implications for the security of your email. Understand what it does and be sure you need to before setting.</p>"},{"location":"configuration/#authentication","title":"Authentication & SSO","text":""},{"location":"configuration/#PAPERLESS_ACCOUNT_ALLOW_SIGNUPS","title":"<code>PAPERLESS_ACCOUNT_ALLOW_SIGNUPS=<bool></code>","text":"<p>Allow users to signup for a new Paperless-ngx account.</p> <p>Defaults to False</p>"},{"location":"configuration/#PAPERLESS_ACCOUNT_DEFAULT_GROUPS","title":"<code>PAPERLESS_ACCOUNT_DEFAULT_GROUPS=<comma-separated-list></code>","text":"<p>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.</p> <p>Defaults to None</p>"},{"location":"configuration/#PAPERLESS_SOCIALACCOUNT_PROVIDERS","title":"<code>PAPERLESS_SOCIALACCOUNT_PROVIDERS=<json></code>","text":"<p>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. <code>allauth.socialaccount.providers.openid_connect</code> for the OIDC Connect provider).</p> <p>Defaults to None, which does not enable any third party authentication systems.</p>"},{"location":"configuration/#PAPERLESS_SOCIAL_AUTO_SIGNUP","title":"<code>PAPERLESS_SOCIAL_AUTO_SIGNUP=<bool></code>","text":"<p>Attempt to signup the user using retrieved email, username etc from the third party authentication system. See the corresponding django-allauth documentation</p> <p>Defaults to False</p>"},{"location":"configuration/#PAPERLESS_SOCIALACCOUNT_ALLOW_SIGNUPS","title":"<code>PAPERLESS_SOCIALACCOUNT_ALLOW_SIGNUPS=<bool></code>","text":"<p>Allow users to signup for a new Paperless-ngx account using any setup third party authentication systems.</p> <p>Defaults to True</p>"},{"location":"configuration/#PAPERLESS_SOCIAL_ACCOUNT_SYNC_GROUPS","title":"<code>PAPERLESS_SOCIAL_ACCOUNT_SYNC_GROUPS=<bool></code>","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. <p>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.:</p> <pre><code>{\"openid_connect\":{\"SCOPE\": [\"openid\",\"profile\",\"email\",\"groups\"]...\n</code></pre> <p>Defaults to False</p>"},{"location":"configuration/#PAPERLESS_SOCIAL_ACCOUNT_DEFAULT_GROUPS","title":"<code>PAPERLESS_SOCIAL_ACCOUNT_DEFAULT_GROUPS=<comma-separated-list></code>","text":"<p>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.</p> <p>Defaults to None</p>"},{"location":"configuration/#PAPERLESS_ACCOUNT_DEFAULT_HTTP_PROTOCOL","title":"<code>PAPERLESS_ACCOUNT_DEFAULT_HTTP_PROTOCOL=<string></code>","text":"<p>The protocol used when generating URLs, e.g. login callback URLs. See the corresponding django-allauth documentation</p> <p>Defaults to 'https'</p>"},{"location":"configuration/#PAPERLESS_ACCOUNT_EMAIL_VERIFICATION","title":"<code>PAPERLESS_ACCOUNT_EMAIL_VERIFICATION=<string></code>","text":"<p>Determines whether email addresses are verified during signup (as performed by Django allauth). See the relevant paperless settings and the allauth docs</p> <p>Defaults to 'optional'</p> <p>Note</p> <p>If you do not have a working email server set up you should set this to 'none'.</p>"},{"location":"configuration/#PAPERLESS_DISABLE_REGULAR_LOGIN","title":"<code>PAPERLESS_DISABLE_REGULAR_LOGIN=<bool></code>","text":"<p>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 <code>/admin/</code> in your web server or reverse proxy configuration.</p> <p>You can optionally also automatically redirect users to the SSO login with PAPERLESS_REDIRECT_LOGIN_TO_SSO</p> <p>Defaults to False</p>"},{"location":"configuration/#PAPERLESS_REDIRECT_LOGIN_TO_SSO","title":"<code>PAPERLESS_REDIRECT_LOGIN_TO_SSO=<bool></code>","text":"<p>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.</p> <p>Defaults to False</p>"},{"location":"configuration/#PAPERLESS_ACCOUNT_SESSION_REMEMBER","title":"<code>PAPERLESS_ACCOUNT_SESSION_REMEMBER=<bool></code>","text":"<p>If false, sessions will expire at browser close, if true will use <code>PAPERLESS_SESSION_COOKIE_AGE</code> for expiration. See the corresponding django-allauth documentation</p> <p>Defaults to True</p>"},{"location":"configuration/#PAPERLESS_SESSION_COOKIE_AGE","title":"<code>PAPERLESS_SESSION_COOKIE_AGE=<int></code>","text":"<p>Login session cookie expiration. Applies if <code>PAPERLESS_ACCOUNT_SESSION_REMEMBER</code> is enabled. See the corresponding django documentation</p> <p>Defaults to 1209600 (2 weeks)</p>"},{"location":"configuration/#ocr","title":"OCR settings","text":"<p>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.</p>"},{"location":"configuration/#PAPERLESS_OCR_LANGUAGE","title":"<code>PAPERLESS_OCR_LANGUAGE=<lang></code>","text":"<p>Customize the language that paperless will attempt to use when parsing documents.</p> <p>It should be a 3-letter code, see the list of languages Tesseract supports.</p> <p>Set this to the language most of your documents are written in.</p> <p>This can be a combination of multiple languages such as <code>deu+eng</code>, in which case Tesseract will use whatever language matches best. Keep in mind that Tesseract uses much more CPU time with multiple languages enabled.</p> <p>If you are including languages that are not installed by default, you will need to also set <code>PAPERLESS_OCR_LANGUAGES</code> for docker deployments or install the tesseract language packages manually for bare metal installations.</p> <p>Defaults to \"eng\".</p> <p>Note</p> <p>If your language contains a '-' such as chi-sim, you must use <code>chi_sim</code>.</p>"},{"location":"configuration/#PAPERLESS_OCR_MODE","title":"<code>PAPERLESS_OCR_MODE=<mode></code>","text":"<p>Tell paperless when and how to perform ocr on your documents. Three modes are available:</p> <ul> <li> <p><code>skip</code>: Paperless skips all pages and will perform ocr only on pages where no text is present. This is the safest option.</p> </li> <li> <p><code>redo</code>: Paperless will OCR all pages of your documents and attempt to replace any existing text layers with new text. This will be useful for documents from scanners that already performed OCR with insufficient results. It will also perform OCR on purely digital documents.</p> <p>This option may fail on some documents that have features that cannot be removed, such as forms. In this case, the text from the document is used instead.</p> </li> <li> <p><code>force</code>: Paperless rasterizes your documents, converting any text into images and puts the OCRed text on top. This works for all documents, however, the resulting document may be significantly larger and text won't appear as sharp when zoomed in.</p> </li> </ul> <p>The default is <code>skip</code>, which only performs OCR when necessary and always creates archived documents.</p> <p>Read more about this in the OCRmyPDF documentation.</p>"},{"location":"configuration/#PAPERLESS_OCR_SKIP_ARCHIVE_FILE","title":"<code>PAPERLESS_OCR_SKIP_ARCHIVE_FILE=<mode></code>","text":"<p>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.</p> <ul> <li><code>never</code>: Never skip creating an archived version.</li> <li><code>with_text</code>: Skip creating an archived version for documents that already have embedded text.</li> <li><code>always</code>: Always skip creating an archived version.</li> </ul> <p>The default is <code>never</code>.</p>"},{"location":"configuration/#PAPERLESS_OCR_CLEAN","title":"<code>PAPERLESS_OCR_CLEAN=<mode></code>","text":"<p>Tells paperless to use <code>unpaper</code> 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:</p> <ul> <li><code>clean</code>: Apply unpaper.</li> <li><code>clean-final</code>: Apply unpaper, and use the cleaned images to build the output file instead of the original images.</li> <li><code>none</code>: Do not apply unpaper.</li> </ul> <p>Defaults to <code>clean</code>.</p> <p>Note</p> <p><code>clean-final</code> is incompatible with ocr mode <code>redo</code>. When both <code>clean-final</code> and the ocr mode <code>redo</code> is configured, <code>clean</code> is used instead.</p>"},{"location":"configuration/#PAPERLESS_OCR_DESKEW","title":"<code>PAPERLESS_OCR_DESKEW=<bool></code>","text":"<p>Tells paperless to correct skewing (slight rotation of input images mainly due to improper scanning)</p> <p>Defaults to <code>true</code>, which enables this feature.</p> <p>Note</p> <p>Deskewing is incompatible with ocr mode <code>redo</code>. Deskewing will get disabled automatically if <code>redo</code> is used as the ocr mode.</p>"},{"location":"configuration/#PAPERLESS_OCR_ROTATE_PAGES","title":"<code>PAPERLESS_OCR_ROTATE_PAGES=<bool></code>","text":"<p>Tells paperless to correct page rotation (90\u00b0, 180\u00b0 and 270\u00b0 rotation).</p> <p>If you notice that paperless is not rotating incorrectly rotated pages (or vice versa), try adjusting the threshold up or down (see below).</p> <p>Defaults to <code>true</code>, which enables this feature.</p>"},{"location":"configuration/#PAPERLESS_OCR_ROTATE_PAGES_THRESHOLD","title":"<code>PAPERLESS_OCR_ROTATE_PAGES_THRESHOLD=<num></code>","text":"<p>Adjust the threshold for automatic page rotation by <code>PAPERLESS_OCR_ROTATE_PAGES</code>. 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.</p> <p>Defaults to \"12\".</p>"},{"location":"configuration/#PAPERLESS_OCR_OUTPUT_TYPE","title":"<code>PAPERLESS_OCR_OUTPUT_TYPE=<type></code>","text":"<p>Specify the the type of PDF documents that paperless should produce.</p> <ul> <li><code>pdf</code>: Modify the PDF document as little as possible.</li> <li><code>pdfa</code>: Convert PDF documents into PDF/A-2b documents, which is a subset of the entire PDF specification and meant for storing documents long term.</li> <li><code>pdfa-1</code>, <code>pdfa-2</code>, <code>pdfa-3</code> to specify the exact version of PDF/A you wish to use.</li> </ul> <p>If not specified, <code>pdfa</code> is used. Remember that paperless also keeps the original input file as well as the archived version.</p>"},{"location":"configuration/#PAPERLESS_OCR_PAGES","title":"<code>PAPERLESS_OCR_PAGES=<num></code>","text":"<p>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.</p> <p>Specifying 1 here will only use the first page.</p> <p>The value must be greater than or equal to 1 to be used.</p> <p>When combined with <code>PAPERLESS_OCR_MODE=redo</code> or <code>PAPERLESS_OCR_MODE=force</code>, paperless will not modify any text it finds on excluded pages and copy it verbatim.</p> <p>Defaults to unset, which disables this feature and always uses all pages.</p>"},{"location":"configuration/#PAPERLESS_OCR_IMAGE_DPI","title":"<code>PAPERLESS_OCR_IMAGE_DPI=<num></code>","text":"<p>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.</p> <p>Set this to the DPI your scanner produces images at.</p> <p>Defaults to unset, which will automatically calculate image DPI so that the produced PDF documents are A4 sized.</p>"},{"location":"configuration/#PAPERLESS_OCR_MAX_IMAGE_PIXELS","title":"<code>PAPERLESS_OCR_MAX_IMAGE_PIXELS=<num></code>","text":"<p>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.</p> <p>If unset, will default to the value determined by Pillow.</p> <p>Setting this value to 0 will entirely disable the limit. See the below warning.</p> <p>Note</p> <p>Increasing this limit could cause Paperless to consume additional resources when consuming a file. Be sure you have sufficient system resources.</p> <p>Warning</p> <p>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</p>"},{"location":"configuration/#PAPERLESS_OCR_COLOR_CONVERSION_STRATEGY","title":"<code>PAPERLESS_OCR_COLOR_CONVERSION_STRATEGY=<RGB></code>","text":"<p>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.</p> <p>Valid options are CMYK, Gray, LeaveColorUnchanged, RGB or UseDeviceIndependentColor.</p> <p>You can find more on the settings here in the Ghostscript documentation.</p> <p>Warning</p> <p>Utilizing some of the options may result in errors when creating archive files from PDFs.</p>"},{"location":"configuration/#PAPERLESS_OCR_USER_ARGS","title":"<code>PAPERLESS_OCR_USER_ARGS=<json></code>","text":"<p>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.</p> <p>Warning</p> <p>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!</p> <p>Specify arguments as a JSON dictionary. Keep note of lower case booleans and double quoted parameter names and strings. Examples:</p> <pre><code>{\"deskew\": true, \"optimize\": 3, \"unpaper_args\": \"--pre-rotate 90\"}\n</code></pre>"},{"location":"configuration/#software_tweaks","title":"Software tweaks","text":""},{"location":"configuration/#PAPERLESS_TASK_WORKERS","title":"<code>PAPERLESS_TASK_WORKERS=<num></code>","text":"<p>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.</p> <p>Defaults to 1</p>"},{"location":"configuration/#PAPERLESS_THREADS_PER_WORKER","title":"<code>PAPERLESS_THREADS_PER_WORKER=<num></code>","text":"<p>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.</p> <p>Warning</p> <p>Ensure that the product</p> <p><code>PAPERLESS_TASK_WORKERS * PAPERLESS_THREADS_PER_WORKER</code></p> <p>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.</p> <p>The default is a balance between the two, according to your CPU core count, with a slight favor towards threads per worker:</p> CPU core count Workers Threads > 1 > 1 > 1 > 2 > 2 > 1 > 4 > 2 > 2 > 6 > 2 > 3 > 8 > 2 > 4 > 12 > 3 > 4 > 16 > 4 > 4 <p>If you only specify PAPERLESS_TASK_WORKERS, paperless will adjust PAPERLESS_THREADS_PER_WORKER automatically.</p>"},{"location":"configuration/#PAPERLESS_WORKER_TIMEOUT","title":"<code>PAPERLESS_WORKER_TIMEOUT=<num></code>","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":"<code>PAPERLESS_TIME_ZONE=<timezone></code>","text":"<p>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.</p> <p>Defaults to UTC.</p>"},{"location":"configuration/#PAPERLESS_ENABLE_NLTK","title":"<code>PAPERLESS_ENABLE_NLTK=<bool></code>","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. <p>See also <code>PAPERLESS_NLTK_DIR</code>.</p> <p>Defaults to 1.</p>"},{"location":"configuration/#PAPERLESS_EMAIL_TASK_CRON","title":"<code>PAPERLESS_EMAIL_TASK_CRON=<cron expression></code>","text":"Configures the scheduled email fetching frequency. The value should be a valid crontab(5) expression describing when to run. <p>If set to the string \"disable\", no emails will be fetched automatically.</p> <p>Defaults to <code>*/10 * * * *</code> or every ten minutes.</p>"},{"location":"configuration/#PAPERLESS_TRAIN_TASK_CRON","title":"<code>PAPERLESS_TRAIN_TASK_CRON=<cron expression></code>","text":"Configures the scheduled automatic classifier training frequency. The value should be a valid crontab(5) expression describing when to run. <p>If set to the string \"disable\", the classifier will not be trained automatically.</p> <p>Defaults to <code>5 */1 * * *</code> or every hour at 5 minutes past the hour.</p>"},{"location":"configuration/#PAPERLESS_INDEX_TASK_CRON","title":"<code>PAPERLESS_INDEX_TASK_CRON=<cron expression></code>","text":"Configures the scheduled search index update frequency. The value should be a valid crontab(5) expression describing when to run. <p>If set to the string \"disable\", the search index will not be automatically updated.</p> <p>Defaults to <code>0 0 * * *</code> or daily at midnight.</p>"},{"location":"configuration/#PAPERLESS_SANITY_TASK_CRON","title":"<code>PAPERLESS_SANITY_TASK_CRON=<cron expression></code>","text":"Configures the scheduled sanity checker frequency. <p>If set to the string \"disable\", the sanity checker will not run automatically.</p> <p>Defaults to <code>30 0 * * sun</code> or Sunday at 30 minutes past midnight.</p>"},{"location":"configuration/#PAPERLESS_ENABLE_COMPRESSION","title":"<code>PAPERLESS_ENABLE_COMPRESSION=<bool></code>","text":"Enables compression of the responses from the webserver. <p>Defaults to 1, enabling compression.</p> <p>Note</p> <p>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</p>"},{"location":"configuration/#PAPERLESS_CONVERT_MEMORY_LIMIT","title":"<code>PAPERLESS_CONVERT_MEMORY_LIMIT=<num></code>","text":"<p>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.</p> <p>For more information on how to use this value, you should search the web for \"MAGICK_MEMORY_LIMIT\".</p> <p>Defaults to 0, which disables the limit.</p>"},{"location":"configuration/#PAPERLESS_CONVERT_TMPDIR","title":"<code>PAPERLESS_CONVERT_TMPDIR=<path></code>","text":"<p>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.</p> <p>For more information on how to use this value, you should search the web for \"MAGICK_TMPDIR\".</p> <p>Default is none, which disables the temporary directory.</p>"},{"location":"configuration/#PAPERLESS_APPS","title":"<code>PAPERLESS_APPS=<string></code>","text":"<p>A comma-separated list of Django apps to be included in Django's <code>INSTALLED_APPS</code>. This setting should be used with caution!</p> <p>Defaults to None, which does not add any additional apps.</p>"},{"location":"configuration/#PAPERLESS_MAX_IMAGE_PIXELS","title":"<code>PAPERLESS_MAX_IMAGE_PIXELS=<number></code>","text":"Configures the maximum size of an image PIL will allow to load without warning or error. <p>If unset, will default to the value determined by Pillow.</p> <p>Defaults to None, which does change the limit</p> <p>Warning</p> <p>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.</p>"},{"location":"configuration/#consume_config","title":"Document Consumption","text":""},{"location":"configuration/#PAPERLESS_CONSUMER_DISABLE","title":"<code>PAPERLESS_CONSUMER_DISABLE=<bool></code>","text":"Completely disable 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":"<code>PAPERLESS_CONSUMER_DELETE_DUPLICATES=<bool></code>","text":"<p>When the consumer detects a duplicate document, it will not touch the original document. This default behavior can be changed here.</p> <p>Defaults to false.</p>"},{"location":"configuration/#PAPERLESS_CONSUMER_RECURSIVE","title":"<code>PAPERLESS_CONSUMER_RECURSIVE=<bool></code>","text":"<p>Enable recursive watching of the consumption directory. Paperless will then pickup files from files in subdirectories within your consumption directory as well.</p> <p>Defaults to false.</p>"},{"location":"configuration/#PAPERLESS_CONSUMER_SUBDIRS_AS_TAGS","title":"<code>PAPERLESS_CONSUMER_SUBDIRS_AS_TAGS=<bool></code>","text":"<p>Set the names of subdirectories as tags for consumed files. E.g. <code><CONSUMPTION_DIR>/foo/bar/file.pdf</code> will add the tags \"foo\" and \"bar\" to the consumed file. Paperless will create any tags that don't exist yet.</p> <p>This is useful for sorting documents with certain tags such as <code>car</code> or <code>todo</code> prior to consumption. These folders won't be deleted.</p> <p>PAPERLESS_CONSUMER_RECURSIVE must be enabled for this to work.</p> <p>Defaults to false.</p>"},{"location":"configuration/#PAPERLESS_CONSUMER_IGNORE_PATTERNS","title":"<code>PAPERLESS_CONSUMER_IGNORE_PATTERNS=<json></code>","text":"<p>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.</p> <p>This can be adjusted by configuring a custom json array with patterns to exclude.</p> <p>For example, <code>.DS_STORE/*</code> will ignore any files found in a folder named <code>.DS_STORE</code>, including <code>.DS_STORE/bar.pdf</code> and <code>foo/.DS_STORE/bar.pdf</code></p> <p>A pattern like <code>._*</code> will ignore anything starting with <code>._</code>, including: <code>._foo.pdf</code> and <code>._bar/foo.pdf</code></p> <p>Defaults to <code>[\".DS_Store\", \".DS_STORE\", \"._*\", \".stfolder/*\", \".stversions/*\", \".localized/*\", \"desktop.ini\", \"@eaDir/*\", \"Thumbs.db\"]</code>.</p>"},{"location":"configuration/#PAPERLESS_CONSUMER_BARCODE_SCANNER","title":"<code>PAPERLESS_CONSUMER_BARCODE_SCANNER=<string></code>","text":"<p>Sets the barcode scanner used for barcode functionality.</p> <p>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.</p>"},{"location":"configuration/#PAPERLESS_PRE_CONSUME_SCRIPT","title":"<code>PAPERLESS_PRE_CONSUME_SCRIPT=<filename></code>","text":"<p>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.</p> <p>For more information, take a look at pre-consumption script.</p> <p>The default is blank, which means nothing will be executed.</p>"},{"location":"configuration/#PAPERLESS_POST_CONSUME_SCRIPT","title":"<code>PAPERLESS_POST_CONSUME_SCRIPT=<filename></code>","text":"<p>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.</p> <p>For more information, take a look at Post-consumption script.</p> <p>The default is blank, which means nothing will be executed.</p>"},{"location":"configuration/#PAPERLESS_FILENAME_DATE_ORDER","title":"<code>PAPERLESS_FILENAME_DATE_ORDER=<format></code>","text":"<p>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.</p> <p>A date in a filename must have some separators (<code>.</code>, <code>,</code>, <code>-</code>, <code>/</code>, etc) for it to be parsed.</p> <p>Defaults to none, which disables this feature.</p>"},{"location":"configuration/#PAPERLESS_NUMBER_OF_SUGGESTED_DATES","title":"<code>PAPERLESS_NUMBER_OF_SUGGESTED_DATES=<num></code>","text":"<p>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.</p> <p>The task to find all dates can be time-consuming and increases with a higher (maximum) number of suggested dates and slower hardware.</p> <p>Defaults to 3. Set to 0 to disable this feature.</p>"},{"location":"configuration/#PAPERLESS_THUMBNAIL_FONT_NAME","title":"<code>PAPERLESS_THUMBNAIL_FONT_NAME=<filename></code>","text":"<p>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.</p> <p>Note that this won't have any effect on already generated thumbnails.</p> <p>Defaults to <code>/usr/share/fonts/liberation/LiberationSerif-Regular.ttf</code>.</p>"},{"location":"configuration/#PAPERLESS_IGNORE_DATES","title":"<code>PAPERLESS_IGNORE_DATES=<string></code>","text":"<p>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.</p> <p>The date is parsed using the order specified in PAPERLESS_DATE_ORDER</p> <p>Defaults to an empty string to not ignore any dates.</p>"},{"location":"configuration/#PAPERLESS_DATE_ORDER","title":"<code>PAPERLESS_DATE_ORDER=<format></code>","text":"<p>Paperless will try to determine the document creation date from its contents. Specify the date format Paperless should expect to see within your documents.</p> <p>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.</p>"},{"location":"configuration/#PAPERLESS_ENABLE_GPG_DECRYPTOR","title":"<code>PAPERLESS_ENABLE_GPG_DECRYPTOR=<bool></code>","text":"<p>Enable or disable the GPG decryptor for encrypted emails. See GPG Decryptor for more information.</p> <p>Defaults to false.</p>"},{"location":"configuration/#polling","title":"Polling","text":""},{"location":"configuration/#PAPERLESS_CONSUMER_POLLING","title":"<code>PAPERLESS_CONSUMER_POLLING=<num></code>","text":"<p>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 <code>inotify</code>.</p> <p>Defaults to 0, which disables polling and uses filesystem notifications.</p>"},{"location":"configuration/#PAPERLESS_CONSUMER_POLLING_RETRY_COUNT","title":"<code>PAPERLESS_CONSUMER_POLLING_RETRY_COUNT=<num></code>","text":"<p>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.</p> <p>Defaults to 5.</p>"},{"location":"configuration/#PAPERLESS_CONSUMER_POLLING_DELAY","title":"<code>PAPERLESS_CONSUMER_POLLING_DELAY=<num></code>","text":"<p>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.</p> <p>Defaults to 5.</p>"},{"location":"configuration/#inotify","title":"iNotify","text":""},{"location":"configuration/#PAPERLESS_CONSUMER_INOTIFY_DELAY","title":"<code>PAPERLESS_CONSUMER_INOTIFY_DELAY=<num></code>","text":"<p>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.</p> <p>Defaults to 0.5 seconds.</p>"},{"location":"configuration/#incoming_mail","title":"Incoming Mail","text":""},{"location":"configuration/#email_oauth","title":"Email OAuth","text":""},{"location":"configuration/#PAPERLESS_OAUTH_CALLBACK_BASE_URL","title":"<code>PAPERLESS_OAUTH_CALLBACK_BASE_URL=<str></code>","text":"<p>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 <code>PAPERLESS_URL</code> setting. At least one of these settings must be set to enable OAuth Email setup.</p> <p>Defaults to none (thus will use PAPERLESS_URL).</p> <p>Note</p> <p>This setting only applies to OAuth Email setup (not to the SSO setup).</p>"},{"location":"configuration/#PAPERLESS_GMAIL_OAUTH_CLIENT_ID","title":"<code>PAPERLESS_GMAIL_OAUTH_CLIENT_ID=<str></code>","text":"<p>The OAuth client ID for Gmail. This is required for Gmail OAuth Email setup. See OAuth Email Setup for more information.</p> <p>Defaults to none.</p>"},{"location":"configuration/#PAPERLESS_GMAIL_OAUTH_CLIENT_SECRET","title":"<code>PAPERLESS_GMAIL_OAUTH_CLIENT_SECRET=<str></code>","text":"<p>The OAuth client secret for Gmail. This is required for Gmail OAuth Email setup. See OAuth Email Setup for more information.</p> <p>Defaults to none.</p>"},{"location":"configuration/#PAPERLESS_OUTLOOK_OAUTH_CLIENT_ID","title":"<code>PAPERLESS_OUTLOOK_OAUTH_CLIENT_ID=<str></code>","text":"<p>The OAuth client ID for Outlook. This is required for Outlook OAuth Email setup. See OAuth Email Setup for more information.</p> <p>Defaults to none.</p>"},{"location":"configuration/#PAPERLESS_OUTLOOK_OAUTH_CLIENT_SECRET","title":"<code>PAPERLESS_OUTLOOK_OAUTH_CLIENT_SECRET=<str></code>","text":"<p>The OAuth client secret for Outlook. This is required for Outlook OAuth Email setup. See OAuth Email Setup for more information.</p> <p>Defaults to none.</p>"},{"location":"configuration/#encrypted_emails","title":"Encrypted Emails","text":""},{"location":"configuration/#PAPERLESS_EMAIL_GNUPG_HOME","title":"<code>PAPERLESS_EMAIL_GNUPG_HOME=<str></code>","text":"<p>Optional, sets the <code>GNUPG_HOME</code> path to use with GPG decryptor for encrypted emails. See GPG Decryptor for more information. If not set, defaults to the default <code>GNUPG_HOME</code> path.</p> <p>Defaults to ."},{"location":"configuration/#barcodes","title":"Barcodes","text":""},{"location":"configuration/#PAPERLESS_CONSUMER_ENABLE_BARCODES","title":"<code>PAPERLESS_CONSUMER_ENABLE_BARCODES=<bool></code>","text":"<p>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.</p> <p>For ease of use, it is suggested to use a standardized separation page, e.g. here.</p> <p>If no barcodes are detected in the uploaded file, no page separation will happen.</p> <p>The original document will be removed and the separated pages will be saved as pdf.</p> <p>See additional information in the advanced usage documentation</p> <p>Defaults to false.</p>"},{"location":"configuration/#PAPERLESS_CONSUMER_BARCODE_TIFF_SUPPORT","title":"<code>PAPERLESS_CONSUMER_BARCODE_TIFF_SUPPORT=<bool></code>","text":"<p>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.</p> <p>Defaults to false.</p>"},{"location":"configuration/#PAPERLESS_CONSUMER_BARCODE_STRING","title":"<code>PAPERLESS_CONSUMER_BARCODE_STRING=<string></code>","text":"<p>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.</p> <p>Defaults to \"PATCHT\"</p>"},{"location":"configuration/#PAPERLESS_CONSUMER_BARCODE_RETAIN_SPLIT_PAGES","title":"<code>PAPERLESS_CONSUMER_BARCODE_RETAIN_SPLIT_PAGES=<bool></code>","text":"<p>If set to true, all pages that are split by a barcode (such as PATCHT) will be kept.</p> <p>Defaults to false.</p>"},{"location":"configuration/#PAPERLESS_CONSUMER_ENABLE_ASN_BARCODE","title":"<code>PAPERLESS_CONSUMER_ENABLE_ASN_BARCODE=<bool></code>","text":"<p>Enables the detection of barcodes in the scanned document and setting the ASN (archive serial number) if a properly formatted barcode is detected.</p> <p>The barcode must consist of a (configurable) prefix and the ASN to be set, for instance <code>ASN00123</code>. The content after the prefix is cleaned of non-numeric characters.</p> <p>This option is compatible with barcode page separation, since pages will be split up before reading the ASN.</p> <p>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.</p> <p>Defaults to false.</p>"},{"location":"configuration/#PAPERLESS_CONSUMER_ASN_BARCODE_PREFIX","title":"<code>PAPERLESS_CONSUMER_ASN_BARCODE_PREFIX=<string></code>","text":"<p>Defines the prefix that is used to identify a barcode as an ASN barcode.</p> <p>Defaults to \"ASN\"</p>"},{"location":"configuration/#PAPERLESS_CONSUMER_BARCODE_UPSCALE","title":"<code>PAPERLESS_CONSUMER_BARCODE_UPSCALE=<float></code>","text":"<p>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.</p> <p>Defaults to 0.0</p>"},{"location":"configuration/#PAPERLESS_CONSUMER_BARCODE_DPI","title":"<code>PAPERLESS_CONSUMER_BARCODE_DPI=<int></code>","text":"<p>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.</p> <p>Defaults to \"300\"</p>"},{"location":"configuration/#PAPERLESS_CONSUMER_BARCODE_MAX_PAGES","title":"<code>PAPERLESS_CONSUMER_BARCODE_MAX_PAGES=<int></code>","text":"<p>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.</p> <p>Defaults to \"0\", allowing all pages to be checked for barcodes.</p>"},{"location":"configuration/#PAPERLESS_CONSUMER_ENABLE_TAG_BARCODE","title":"<code>PAPERLESS_CONSUMER_ENABLE_TAG_BARCODE=<bool></code>","text":"<p>Enables the detection of barcodes in the scanned document and assigns or creates tags if a properly formatted barcode is detected.</p> <p>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.</p> <p>Matching is case insensitive.</p> <p>Defaults to false.</p>"},{"location":"configuration/#PAPERLESS_CONSUMER_TAG_BARCODE_MAPPING","title":"<code>PAPERLESS_CONSUMER_TAG_BARCODE_MAPPING=<json dict></code>","text":"<p>Defines a dictionary of filter regex and substitute expressions.</p> <p>Syntax: <code>{\"<regex>\": \"<substitute>\" [,...]]}</code></p> <p>A barcode is considered for tagging if the barcode text matches at least one of the provided pattern. <p>If a match is found, the rule is applied. This allows very versatile reformatting and mapping of barcode pattern to tag values. <p>If a tag is not found it will be created.</p> <p>Defaults to:</p> <p><code>{\"TAG:(.*)\": \"\\\\g<1>\"}</code> 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 <code>\\\\g<1></code> that replaces the original barcode text by the content in match group #1. Consequently, the tag is the barcode text without its TAG: prefix.</p> <p>More examples:</p> <p><code>{\"ASN12.*\": \"JOHN\", \"ASN13.*\": \"SMITH\"}</code> for example maps - ASN12nnnn barcodes to the tag JOHN and - ASN13nnnn barcodes to the tag SMITH.</p> <p><code>{\"T-J\": \"JOHN\", \"T-S\": \"SMITH\", \"T-D\": \"DOE\"}</code> directly maps - T-J barcodes to the tag JOHN, - T-S barcodes to the tag SMITH and - T-D barcodes to the tag DOE.</p> <p>Please refer to the Python regex documentation for more information.</p>"},{"location":"configuration/#audit-trail","title":"Audit Trail","text":""},{"location":"configuration/#PAPERLESS_AUDIT_LOG_ENABLED","title":"<code>PAPERLESS_AUDIT_LOG_ENABLED=<bool></code>","text":"<p>Enables the audit trail for documents, document types, correspondents, and tags.</p> <p>Defaults to true.</p>"},{"location":"configuration/#collate","title":"Collate Double-Sided Documents","text":""},{"location":"configuration/#PAPERLESS_CONSUMER_ENABLE_COLLATE_DOUBLE_SIDED","title":"<code>PAPERLESS_CONSUMER_ENABLE_COLLATE_DOUBLE_SIDED=<bool></code>","text":"<p>Enables automatic collation of two single-sided scans into a double-sided document.</p> <p>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.</p> <p><code>PAPERLESS_CONSUMER_RECURSIVE</code> must be enabled for this to work.</p> <p>For more information, read the corresponding section in the advanced documentation.</p> <p>Defaults to false.</p>"},{"location":"configuration/#PAPERLESS_CONSUMER_COLLATE_DOUBLE_SIDED_SUBDIR_NAME","title":"<code>PAPERLESS_CONSUMER_COLLATE_DOUBLE_SIDED_SUBDIR_NAME=<str></code>","text":"<p>The name of the subdirectory that the collate feature expects documents to arrive.</p> <p>This only has an effect if <code>PAPERLESS_CONSUMER_ENABLE_COLLATE_DOUBLE_SIDED</code> has been enabled. Note that Paperless will not automatically create the directory.</p> <p>Defaults to \"double-sided\".</p>"},{"location":"configuration/#PAPERLESS_CONSUMER_COLLATE_DOUBLE_SIDED_TIFF_SUPPORT","title":"<code>PAPERLESS_CONSUMER_COLLATE_DOUBLE_SIDED_TIFF_SUPPORT=<bool></code>","text":"<p>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 <code>PAPERLESS_CONSUMER_ENABLE_COLLATE_DOUBLE_SIDED</code> has been enabled.</p> <p>Defaults to false.</p>"},{"location":"configuration/#trash","title":"Trash","text":""},{"location":"configuration/#PAPERLESS_EMPTY_TRASH_DELAY","title":"<code>PAPERLESS_EMPTY_TRASH_DELAY=<num></code>","text":"<p>Sets how long in days documents remain in the 'trash' before they are permanently deleted.</p> <p>Defaults to 30 days, minimum of 1 day.</p>"},{"location":"configuration/#PAPERLESS_EMPTY_TRASH_TASK_CRON","title":"<code>PAPERLESS_EMPTY_TRASH_TASK_CRON=<cron expression></code>","text":"<p>Configures the schedule to empty the trash of expired deleted documents.</p> <p>Defaults to <code>0 1 * * *</code>, once per day.</p>"},{"location":"configuration/#binaries","title":"Binaries","text":"<p>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.</p>"},{"location":"configuration/#PAPERLESS_CONVERT_BINARY","title":"<code>PAPERLESS_CONVERT_BINARY=<path></code>","text":"Defaults to \"convert\"."},{"location":"configuration/#PAPERLESS_GS_BINARY","title":"<code>PAPERLESS_GS_BINARY=<path></code>","text":"Defaults to \"gs\"."},{"location":"configuration/#docker","title":"Docker-specific options","text":"<p>These options don't have any effect in <code>paperless.conf</code>. These options adjust the behavior of the docker container. Configure these in <code>docker-compose.env</code>.</p>"},{"location":"configuration/#PAPERLESS_WEBSERVER_WORKERS","title":"<code>PAPERLESS_WEBSERVER_WORKERS=<num></code>","text":"<p>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.</p> <p>Defaults to 1.</p> <p>Note</p> <p>This option may also be set with <code>GRANIAN_WORKERS</code> and this option may be removed in the future</p>"},{"location":"configuration/#PAPERLESS_BIND_ADDR","title":"<code>PAPERLESS_BIND_ADDR=<ip address></code>","text":"<p>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.</p> <p>Defaults to <code>::</code>, meaning all interfaces, including IPv6.</p> <p>Note</p> <p>This option may also be set with <code>GRANIAN_HOST</code> and this option may be removed in the future</p>"},{"location":"configuration/#PAPERLESS_PORT","title":"<code>PAPERLESS_PORT=<port></code>","text":"<p>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).</p> <p>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 <code>docker-compose.yml</code>.</p> <p>Defaults to 8000.</p> <p>Note</p> <p>This option may also be set with <code>GRANIAN_PORT</code> and this option may be removed in the future</p>"},{"location":"configuration/#USERMAP_UID","title":"<code>USERMAP_UID=<uid></code>","text":"<p>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</p> <pre><code>id -u\n</code></pre> <p>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.</p> <p>Defaults to 1000.</p>"},{"location":"configuration/#USERMAP_GID","title":"<code>USERMAP_GID=<gid></code>","text":"<p>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</p> <pre><code>id -g\n</code></pre> <p>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.</p> <p>Defaults to 1000.</p>"},{"location":"configuration/#PAPERLESS_OCR_LANGUAGES","title":"<code>PAPERLESS_OCR_LANGUAGES=<list></code>","text":"<p>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\".</p> <pre><code>PAPERLESS_OCR_LANGUAGES=tur ces chi-tra\n</code></pre> <p>Make sure it's a space-separated list when using several values.</p> <p>To actually use these languages, also set the default OCR language of paperless:</p> <pre><code>PAPERLESS_OCR_LANGUAGE=tur\n</code></pre> <p>Defaults to none, which does not install any additional languages.</p> <p>Warning</p> <p>This option must not be used in rootless containers.</p>"},{"location":"configuration/#PAPERLESS_ENABLE_FLOWER","title":"<code>PAPERLESS_ENABLE_FLOWER=<defined></code>","text":"<p>If this environment variable is defined, the Celery monitoring tool Flower will be started by the container.</p> <p>You can read more about this in the advanced documentation.</p>"},{"location":"configuration/#PAPERLESS_SUPERVISORD_WORKING_DIR","title":"<code>PAPERLESS_SUPERVISORD_WORKING_DIR=<defined></code>","text":"<p>Warning</p> <pre><code>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</code></pre>"},{"location":"configuration/#frontend-settings","title":"Frontend Settings","text":""},{"location":"configuration/#PAPERLESS_APP_TITLE","title":"<code>PAPERLESS_APP_TITLE=<str></code>","text":"If set, overrides the default name \"Paperless-ngx\""},{"location":"configuration/#PAPERLESS_APP_LOGO","title":"<code>PAPERLESS_APP_LOGO=<path></code>","text":"Path to an image file in the /media/logo directory, must include 'logo', e.g. <code>/logo/Atari_logo.svg</code>"},{"location":"configuration/#PAPERLESS_ENABLE_UPDATE_CHECK","title":"<code>PAPERLESS_ENABLE_UPDATE_CHECK=<bool></code>","text":"<p>Note</p> <p>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.</p>"},{"location":"configuration/#email-sending","title":"Email sending","text":"<p>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</p>"},{"location":"configuration/#PAPERLESS_EMAIL_HOST","title":"<code>PAPERLESS_EMAIL_HOST=<str></code>","text":"Defaults to 'localhost'."},{"location":"configuration/#PAPERLESS_EMAIL_PORT","title":"<code>PAPERLESS_EMAIL_PORT=<int></code>","text":"Defaults to port 25."},{"location":"configuration/#PAPERLESS_EMAIL_HOST_USER","title":"<code>PAPERLESS_EMAIL_HOST_USER=<str></code>","text":"Defaults to ''."},{"location":"configuration/#PAPERLESS_EMAIL_FROM","title":"<code>PAPERLESS_EMAIL_FROM=<str></code>","text":"Defaults to PAPERLESS_EMAIL_HOST_USER if not set."},{"location":"configuration/#PAPERLESS_EMAIL_HOST_PASSWORD","title":"<code>PAPERLESS_EMAIL_HOST_PASSWORD=<str></code>","text":"Defaults to ''."},{"location":"configuration/#PAPERLESS_EMAIL_USE_TLS","title":"<code>PAPERLESS_EMAIL_USE_TLS=<bool></code>","text":"Defaults to false."},{"location":"configuration/#PAPERLESS_EMAIL_USE_SSL","title":"<code>PAPERLESS_EMAIL_USE_SSL=<bool></code>","text":"Defaults to false."},{"location":"development/","title":"Development","text":"<p>This section describes the steps you need to take to start development on Paperless-ngx.</p> <p>Check out the source from GitHub. The repository is organized in the following way:</p> <ul> <li><code>main</code> always represents the latest release and will only see changes when a new release is made.</li> <li><code>dev</code> contains the code that will be in the next release.</li> <li><code>feature-X</code> contains bigger changes that will be in some release, but not necessarily the next one.</li> </ul> <p>When making functional changes to Paperless-ngx, always make your changes on the <code>dev</code> branch.</p> <p>Apart from that, the folder structure is as follows:</p> <ul> <li><code>docs/</code> - Documentation.</li> <li><code>src-ui/</code> - Code of the front end.</li> <li><code>src/</code> - Code of the back end.</li> <li><code>scripts/</code> - Various scripts that help with different parts of development.</li> <li><code>docker/</code> - Files required to build the docker image.</li> </ul>"},{"location":"development/#contributing-to-paperless-ngx","title":"Contributing to Paperless-ngx","text":"<p>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!</p> <p>Before contributing please review our code of conduct and other important information in the contributing guidelines.</p>"},{"location":"development/#code-formatting-with-pre-commit-hooks","title":"Code formatting with pre-commit hooks","text":"<p>To ensure a consistent style and formatting across the project source, the project utilizes Git <code>pre-commit</code> 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.</p> <p>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 <code>ruff</code>, will format failing files, so all you need to do is <code>git add</code> those files again and retry your commit.</p>"},{"location":"development/#general-setup","title":"General setup","text":"<p>After you forked and cloned the code from GitHub you need to perform a first-time setup.</p> <p>Note</p> <p>Every command is executed directly from the root folder of the project unless specified otherwise.</p> <ol> <li> <p>Install prerequisites + uv as mentioned in Bare metal route.</p> </li> <li> <p>Copy <code>paperless.conf.example</code> to <code>paperless.conf</code> and enable debug mode within the file via <code>PAPERLESS_DEBUG=true</code>.</p> </li> <li> <p>Create <code>consume</code> and <code>media</code> directories:</p> <pre><code>mkdir -p consume media\n</code></pre> </li> <li> <p>Install the Python dependencies:</p> <pre><code>$ uv sync --group dev\n</code></pre> </li> <li> <p>Install pre-commit hooks:</p> <pre><code>$ uv run pre-commit install\n</code></pre> </li> <li> <p>Apply migrations and create a superuser (also can be done via the web UI) for your development instance:</p> <pre><code># src/\n\n$ uv run manage.py migrate\n$ uv run manage.py createsuperuser\n</code></pre> </li> <li> <p>You can now either ...</p> <ul> <li> <p>install redis or</p> </li> <li> <p>use the included <code>scripts/start_services.sh</code> to use docker to fire up a redis instance (and some other services such as tika, gotenberg and a database server) or</p> </li> <li> <p>spin up a bare redis container</p> <pre><code>docker run -d -p 6379:6379 --restart unless-stopped redis:latest\n</code></pre> </li> </ul> </li> <li> <p>Continue with either back-end or front-end development \u2013 or both :-).</p> </li> </ol>"},{"location":"development/#back-end-development","title":"Back end development","text":"<p>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.</p> <p>Configure the IDE to use the <code>src/</code>-folder as the base source folder. Configure the following launch configurations in your IDE:</p> <ul> <li><code>python3 manage.py runserver</code></li> <li><code>python3 manage.py document_consumer</code></li> <li><code>celery --app paperless worker -l DEBUG</code> (or any other log level)</li> </ul> <p>To start them all:</p> <pre><code># src/\n\n$ python3 manage.py runserver & \\\n python3 manage.py document_consumer & \\\n celery --app paperless worker -l DEBUG\n</code></pre> <p>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:</p> <pre><code># src-ui/\n\n$ pnpm install\n$ ng build --configuration production\n</code></pre>"},{"location":"development/#testing","title":"Testing","text":"<ul> <li>Run <code>pytest</code> in the <code>src/</code> directory to execute all tests. This also generates a HTML coverage report. When runnings test, <code>paperless.conf</code> is loaded as well. However, the tests rely on the default configuration. This is not ideal. But for now, make sure no settings except for DEBUG are overridden when testing.</li> </ul> <p>Note</p> <p>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 <code># noqa: E501</code> to disable this check for certain lines.</p>"},{"location":"development/#package-management","title":"Package Management","text":"<p>Paperless uses <code>uv</code> to manage packages and virtual environments for both development and production. To accomplish some common tasks using <code>uv</code>, follow the shortcuts below:</p> <p>To upgrade all locked packages to the latest allowed versions: <code>uv lock --upgrade</code></p> <p>To upgrade a single locked package: <code>uv lock --upgrade-package <package></code></p> <p>To add a new package: <code>uv add <package></code></p> <p>To add a new development package <code>uv add --dev <package></code></p>"},{"location":"development/#front-end-development","title":"Front end development","text":"<p>The front end is built using AngularJS. In order to get started, you need Node.js (version 14.15+) and <code>pnpm</code>.</p> <p>Note</p> <p>The following commands are all performed in the <code>src-ui</code>-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.</p> <ol> <li> <p>Install the Angular CLI. You might need sudo privileges to perform this command:</p> <pre><code>pnpm install -g @angular/cli\n</code></pre> </li> <li> <p>Make sure that it's on your path.</p> </li> <li> <p>Install all necessary modules:</p> <pre><code>pnpm install\n</code></pre> </li> <li> <p>You can launch a development server by running:</p> <pre><code>ng serve\n</code></pre> <p>This will automatically update whenever you save. However, in-place compilation might fail on syntax errors, in which case you need to restart it.</p> <p>By default, the development server is available on <code>http://localhost:4200/</code> and is configured to access the API at <code>http://localhost:8000/api/</code>, which is the default of the backend. If you enabled <code>DEBUG</code> 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.</p> </li> </ol>"},{"location":"development/#testing-and-code-style","title":"Testing and code style","text":"<p>The front end code (.ts, .html, .scss) use <code>prettier</code> for code formatting via the Git <code>pre-commit</code> hooks which run automatically on commit. See above for installation instructions. You can also run this via the CLI with a command such as</p> <pre><code>$ git ls-files -- '*.ts' | xargs pre-commit run prettier --files\n</code></pre> <p>Front end testing uses Jest and Playwright. Unit tests and e2e tests, respectively, can be run non-interactively with:</p> <pre><code>$ ng test\n$ npx playwright test\n</code></pre> <p>Playwright also includes a UI which can be run with:</p> <pre><code>$ npx playwright test --ui\n</code></pre>"},{"location":"development/#building-the-frontend","title":"Building the frontend","text":"<p>In order to build the front end and serve it as part of Django, execute:</p> <pre><code>$ ng build --configuration production\n</code></pre> <p>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.</p>"},{"location":"development/#localization","title":"Localization","text":"<p>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.</p>"},{"location":"development/#front-end-localization","title":"Front end localization","text":"<ul> <li>The AngularJS front end does localization according to the Angular documentation.</li> <li>The source language of the project is \"en_US\".</li> <li>The source strings end up in the file <code>src-ui/messages.xlf</code>.</li> <li>The translated strings need to be placed in the <code>src-ui/src/locale/</code> folder.</li> <li>In order to extract added or changed strings from the source files, call <code>ng extract-i18n</code>.</li> </ul> <p>Adding new languages requires adding the translated files in the <code>src-ui/src/locale/</code> folder and adjusting a couple files.</p> <ol> <li> <p>Adjust <code>src-ui/angular.json</code>:</p> <pre><code>\"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</code></pre> </li> <li> <p>Add the language to the <code>LANGUAGE_OPTIONS</code> array in <code>src-ui/src/app/services/settings.service.ts</code>:</p> <pre><code>`dateInputFormat` is a special string that defines the behavior of\nthe date input fields and absolutely needs to contain \"dd\", \"mm\"\nand \"yyyy\".\n</code></pre> </li> <li> <p>Import and register the Angular data for this locale in <code>src-ui/src/app/app.module.ts</code>:</p> <pre><code>import localeDe from '@angular/common/locales/de'\nregisterLocaleData(localeDe)\n</code></pre> </li> </ol>"},{"location":"development/#back-end-localization","title":"Back end localization","text":"<p>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).</p> <ul> <li>The django application does localization according to the Django documentation.</li> <li>The source language of the project is \"en_US\".</li> <li>Localization files end up in the folder <code>src/locale/</code>.</li> <li>In order to extract strings from the application, call <code>python3 manage.py makemessages -l en_US</code>. This is important after making changes to translatable strings.</li> <li>The message files need to be compiled for them to show up in the application. Call <code>python3 manage.py compilemessages</code> to do this. The generated files don't get committed into git, since these are derived artifacts. The build pipeline takes care of executing this command.</li> </ul> <p>Adding new languages requires adding the translated files in the <code>src/locale/</code>-folder and adjusting the file <code>src/paperless/settings.py</code> to include the new language:</p> <pre><code>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</code></pre>"},{"location":"development/#building-the-documentation","title":"Building the documentation","text":"<p>The documentation is built using material-mkdocs, see their documentation. If you want to build the documentation locally, this is how you do it:</p> <ol> <li> <p>Build the documentation</p> <pre><code>$ uv run mkdocs build --config-file mkdocs.yml\n</code></pre> <p>alternatively...</p> </li> <li> <p>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.</p> <pre><code>$ uv run mkdocs serve\n</code></pre> </li> </ol>"},{"location":"development/#building-the-docker-image","title":"Building the Docker image","text":"<p>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.</p> <p>Make sure you have the <code>docker-buildx</code> package installed. Building the image works as with any image:</p> <pre><code>docker build --file Dockerfile --tag paperless:local .\n</code></pre>"},{"location":"development/#extending-paperless-ngx","title":"Extending Paperless-ngx","text":"<p>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.</p>"},{"location":"development/#making-custom-parsers","title":"Making custom parsers","text":"<p>Paperless-ngx uses parsers to add documents. A parser is responsible for:</p> <ul> <li>Retrieving the content from the original</li> <li>Creating a thumbnail</li> <li>optional: Retrieving a created date from the original</li> <li>optional: Creating an archived document from the original</li> </ul> <p>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.</p> <p>The parser itself must extend <code>documents.parsers.DocumentParser</code> and must implement the methods <code>parse</code> and <code>get_thumbnail</code>. You can provide your own implementation to <code>get_date</code> if you don't want to rely on Paperless-ngx' default date guessing mechanisms.</p> <pre><code>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</code></pre> <p>If you encounter any issues during parsing, raise a <code>documents.parsers.ParseError</code>.</p> <p>The <code>self.tempdir</code> 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.</p> <p>After that, you need to announce your parser to Paperless-ngx. You need to connect a handler to the <code>document_consumer_declaration</code> signal. Have a look in the file <code>src/paperless_tesseract/apps.py</code> on how that's done. The handler is a method that returns information about your parser:</p> <pre><code>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</code></pre> <ul> <li><code>parser</code> is a reference to a class that extends <code>DocumentParser</code>.</li> <li><code>weight</code> is used whenever two or more parsers are able to parse a file: The parser with the higher weight wins. This can be used to override the parsers provided by Paperless-ngx.</li> <li><code>mime_types</code> is a dictionary. The keys are the mime types your parser supports and the value is the default file extension that Paperless-ngx should use when storing files and serving them for download. We could guess that from the file extensions, but some mime types have many extensions associated with them and the Python methods responsible for guessing the extension do not always return the same value.</li> </ul>"},{"location":"development/#using-visual-studio-code-devcontainer","title":"Using Visual Studio Code devcontainer","text":"<p>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).</p> <p>To get started:</p> <ol> <li> <p>Clone the repository on your machine and open the Paperless-ngx folder in VS Code.</p> </li> <li> <p>VS Code will prompt you with \"Reopen in container\". Do so and wait for the environment to start.</p> </li> <li> <p>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.</p> </li> <li> <p>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</p> </li> </ol>"},{"location":"faq/","title":"Frequently Asked Questions","text":""},{"location":"faq/#whats-the-general-plan-for-paperless-ngx","title":"What's the general plan for Paperless-ngx?","text":"<p>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.</p>"},{"location":"faq/#im-using-docker-where-are-my-documents","title":"I'm using docker. Where are my documents?","text":"<p>A: By default, your documents are stored inside the docker volume <code>paperless_media</code>. 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</p> <pre><code>/var/lib/docker/volumes/paperless_media/_data\n</code></pre> <p>Warning</p> <p>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.</p> <p>Note</p> <p>Files consumed from the consumption directory are re-created inside this media directory and are removed from the consumption directory itself.</p>"},{"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":"<p>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.</p> <ul> <li>Paperless-ngx never modifies your original documents. It keeps checksums of all documents and uses a scheduled sanity checker to check that they remain the same.</li> <li>By default, paperless uses the internal ID of each document as its filename. This might not be very convenient for export. However, you can adjust the way files are stored in paperless by configuring the filename format.</li> <li>The exporter is another easy way to get your files out of paperless with reasonable file names.</li> </ul>"},{"location":"faq/#what-file-types-does-paperless-ngx-support","title":"What file types does paperless-ngx support?","text":"<p>A: Currently, the following files are supported:</p> <ul> <li>PDF documents, PNG images, JPEG images, TIFF images, GIF images and WebP images are processed with OCR and converted into PDF documents.</li> <li>Plain text documents are supported as well and are added verbatim to paperless.</li> <li>With the optional Tika integration enabled (see Tika configuration), Paperless also supports various Office documents (.docx, .doc, odt, .ppt, .pptx, .odp, .xls, .xlsx, .ods).</li> </ul> <p>Paperless-ngx determines the type of a file by inspecting its content. The file extensions do not matter.</p>"},{"location":"faq/#will-paperless-ngx-run-on-raspberry-pi","title":"Will paperless-ngx run on Raspberry Pi?","text":"<p>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.</p> <p>Note</p> <p>You can adjust some of the settings so that paperless uses less processing power. See setup for details.</p>"},{"location":"faq/#how-do-i-install-paperless-ngx-on-raspberry-pi","title":"How do I install paperless-ngx on Raspberry Pi?","text":"<p>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.</p> <p>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.</p> <p>Note</p> <p>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.</p>"},{"location":"faq/#how-do-i-run-this-on-unraid","title":"How do I run this on Unraid?","text":"<p>A: Paperless-ngx is available as community app in Unraid. Uli Fahrer created a container template for that.</p>"},{"location":"faq/#how-do-i-run-this-on-my-toaster","title":"How do I run this on my toaster?","text":"<p>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.</p>"},{"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":"<p>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.</p> <p>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.</p>"},{"location":"setup/","title":"Setup","text":""},{"location":"setup/#installation","title":"Installation","text":"<p>You can go multiple routes to setup and run Paperless:</p> <ul> <li>Use the script to setup a Docker install</li> <li>Use the Docker compose templates</li> <li>Build the Docker image yourself</li> <li>Install Paperless-ngx directly on your system manually (\"bare metal\")</li> <li>A user-maintained list of commercial hosting providers can be found in the wiki</li> </ul> <p>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</p> <p>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.</p>"},{"location":"setup/#docker_script","title":"Use the Installation Script","text":"<p>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.</p> <ol> <li> <p>Make sure that Docker and Docker Compose are installed.</p> </li> <li> <p>Download and run the installation script:</p> <pre><code>bash -c \"$(curl --location --silent --show-error https://raw.githubusercontent.com/paperless-ngx/paperless-ngx/main/install-paperless-ngx.sh)\"\n</code></pre> <p>Note</p> <p>macOS users will need to install gnu-sed with support for running as <code>sed</code> as well as wget.</p> </li> </ol>"},{"location":"setup/#docker","title":"Use Docker Compose","text":"<ol> <li> <p>Make sure that Docker and Docker Compose are installed.</p> </li> <li> <p>Go to the /docker/compose directory on the project page and download one of the <code>docker-compose.*.yml</code> files, depending on which database backend you want to use. Place the files in a local directory and rename it <code>docker-compose.yml</code>. Download the <code>docker-compose.env</code> file and the <code>.env</code> file as well in the same directory.</p> <p>If you want to enable optional support for Office and other documents, download a file with <code>-tika</code> in the file name.</p> <p>Tip</p> <p>For new installations, it is recommended to use PostgreSQL as the database backend.</p> </li> <li> <p>Modify <code>docker-compose.yml</code> 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.:</p> <pre><code>- ./consume:/usr/src/paperless/consume\n</code></pre> <p>Replace the part before the colon with a local directory of your choice:</p> <pre><code>- /home/jonaswinkler/paperless-inbox:/usr/src/paperless/consume\n</code></pre> <p>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:</p> <pre><code>ports:\n - 8010:8000\n</code></pre> <p>Rootless</p> <p>Warning</p> <p>It is currently not possible to run the container rootless if additional languages are specified via <code>PAPERLESS_OCR_LANGUAGES</code>.</p> <p>If you want to run Paperless as a rootless container, you will need to do the following in your <code>docker-compose.yml</code>:</p> <ul> <li>set the <code>user</code> running the container to map to the <code>paperless</code> user in the container. This value (<code>user_id</code> below), should be the same id that <code>USERMAP_UID</code> and <code>USERMAP_GID</code> are set to in the next step. See <code>USERMAP_UID</code> and <code>USERMAP_GID</code> here.</li> </ul> <p>Your entry for Paperless should contain something like:</p> <pre><code>webserver:\n image: ghcr.io/paperless-ngx/paperless-ngx:latest\n user: <user_id>\n</code></pre> </li> <li> <p>Modify <code>docker-compose.env</code> with any configuration options you'd like. See the configuration documentation for all options.</p> <p>You may also need to set <code>USERMAP_UID</code> and <code>USERMAP_GID</code> to the uid and gid of your user on the host system. Use <code>id -u</code> and <code>id -g</code> 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 <code>id \"username\"</code> to check.</p> <p>Note</p> <p>You can utilize Docker secrets for configuration settings by appending <code>_FILE</code> to configuration values. For example <code>PAPERLESS_DBUSER</code> can be set using <code>PAPERLESS_DBUSER_FILE=/var/run/secrets/password.txt</code>.</p> <p>Warning</p> <p>Some file systems such as NFS network shares don't support file system notifications with <code>inotify</code>. 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 <code>PAPERLESS_CONSUMER_POLLING</code>, which will disable inotify. See here.</p> </li> <li> <p>Run <code>docker compose pull</code>. 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 <code>image</code> line to <code>image: paperlessngx/paperless-ngx:latest</code>.</p> </li> <li> <p>Run <code>docker compose up -d</code>. This will create and start the necessary containers.</p> </li> <li> <p>Congratulations! Your Paperless-ngx instance should now be accessible at <code>http://127.0.0.1:8000</code> (or similar, depending on your configuration). When you first access the web interface, you will be prompted to create a superuser account.</p> </li> </ol>"},{"location":"setup/#docker_build","title":"Build the Docker image yourself","text":"<ol> <li> <p>Clone the entire repository of paperless:</p> <pre><code>git clone https://github.com/paperless-ngx/paperless-ngx\n</code></pre> <p>The main branch always reflects the latest stable version.</p> </li> <li> <p>Copy one of the <code>docker/compose/docker-compose.*.yml</code> to <code>docker-compose.yml</code> in the root folder, depending on which database backend you want to use. Copy <code>docker-compose.env</code> into the project root as well.</p> </li> <li> <p>In the <code>docker-compose.yml</code> file, find the line that instructs Docker Compose to pull the paperless image from Docker Hub:</p> <pre><code>webserver:\n image: ghcr.io/paperless-ngx/paperless-ngx:latest\n</code></pre> <p>and replace it with a line that instructs Docker Compose to build the image from the current working directory instead:</p> <pre><code>webserver:\n build:\n context: .\n</code></pre> </li> <li> <p>Follow the Docker setup above except when asked to run <code>docker compose pull</code> to pull the image, run</p> <pre><code>docker compose build\n</code></pre> <p>instead to build the image.</p> </li> </ol>"},{"location":"setup/#bare_metal","title":"Bare Metal Route","text":"<p>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.</p> <p>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.</p> <ol> <li> <p>Install dependencies. Paperless requires the following packages.</p> <ul> <li><code>python3</code></li> <li><code>python3-pip</code></li> <li><code>python3-dev</code></li> <li><code>default-libmysqlclient-dev</code> for MariaDB</li> <li><code>pkg-config</code> for mysqlclient (python dependency)</li> <li><code>fonts-liberation</code> for generating thumbnails for plain text files</li> <li><code>imagemagick</code> >= 6 for PDF conversion</li> <li><code>gnupg</code> for handling encrypted documents</li> <li><code>libpq-dev</code> for PostgreSQL</li> <li><code>libmagic-dev</code> for mime type detection</li> <li><code>mariadb-client</code> for MariaDB compile time</li> <li><code>libzbar0</code> for barcode detection</li> <li><code>poppler-utils</code> for barcode detection</li> </ul> <p>Use this list for your preferred package management:</p> <pre><code>python3 python3-pip python3-dev imagemagick fonts-liberation gnupg libpq-dev default-libmysqlclient-dev pkg-config libmagic-dev libzbar0 poppler-utils\n</code></pre> <p>These dependencies are required for OCRmyPDF, which is used for text recognition.</p> <ul> <li><code>unpaper</code></li> <li><code>ghostscript</code></li> <li><code>icc-profiles-free</code></li> <li><code>qpdf</code></li> <li><code>liblept5</code></li> <li><code>libxml2</code></li> <li><code>pngquant</code> (suggested for certain PDF image optimizations)</li> <li><code>zlib1g</code></li> <li><code>tesseract-ocr</code> >= 4.0.0 for OCR</li> <li><code>tesseract-ocr</code> language packs (<code>tesseract-ocr-eng</code>, <code>tesseract-ocr-deu</code>, etc)</li> </ul> <p>Use this list for your preferred package management:</p> <pre><code>unpaper ghostscript icc-profiles-free qpdf liblept5 libxml2 pngquant zlib1g tesseract-ocr\n</code></pre> <p>On Raspberry Pi, these libraries are required as well:</p> <ul> <li><code>libatlas-base-dev</code></li> <li><code>libxslt1-dev</code></li> <li><code>mime-support</code></li> </ul> <p>You will also need these for installing some of the python dependencies:</p> <ul> <li><code>build-essential</code></li> <li><code>python3-setuptools</code></li> <li><code>python3-wheel</code></li> </ul> <p>Use this list for your preferred package management:</p> <pre><code>build-essential python3-setuptools python3-wheel\n</code></pre> </li> <li> <p>Install <code>redis</code> >= 6.0 and configure it to start automatically.</p> </li> <li> <p>Optional. Install <code>postgresql</code> and configure a database, user and password for paperless. If you do not wish to use PostgreSQL, MariaDB and SQLite are available as well.</p> <p>Note</p> <p>On bare-metal installations using SQLite, ensure the JSON1 extension is enabled. This is usually the case, but not always.</p> </li> <li> <p>Create a system user with a new home folder under which you wish to run paperless.</p> <pre><code>adduser paperless --system --home /opt/paperless --group\n</code></pre> </li> <li> <p>Get the release archive from https://github.com/paperless-ngx/paperless-ngx/releases for example with</p> <pre><code>curl -O -L https://github.com/paperless-ngx/paperless-ngx/releases/download/v1.10.2/paperless-ngx-v1.10.2.tar.xz\n</code></pre> <p>Extract the archive with</p> <pre><code>tar -xf paperless-ngx-v1.10.2.tar.xz\n</code></pre> <p>and copy the contents to the home folder of the user you created before (<code>/opt/paperless</code>).</p> <p>Optional: If you cloned the git repo, you will have to compile the frontend yourself, see here and use the <code>build</code> step, not <code>serve</code>.</p> </li> <li> <p>Configure paperless. See configuration for details. Edit the included <code>paperless.conf</code> and adjust the settings to your needs. Required settings for getting paperless running are:</p> <ul> <li><code>PAPERLESS_REDIS</code> should point to your redis server, such as . <li><code>PAPERLESS_DBENGINE</code> optional, and should be one of <code>postgres</code>, <code>mariadb</code>, or <code>sqlite</code></li> <li><code>PAPERLESS_DBHOST</code> should be the hostname on which your PostgreSQL server is running. Do not configure this to use SQLite instead. Also configure port, database name, user and password as necessary.</li> <li><code>PAPERLESS_CONSUMPTION_DIR</code> should point to a folder which paperless should watch for documents. You might want to have this somewhere else. Likewise, <code>PAPERLESS_DATA_DIR</code> and <code>PAPERLESS_MEDIA_ROOT</code> define where paperless stores its data. If you like, you can point both to the same directory.</li> <li><code>PAPERLESS_SECRET_KEY</code> should be a random sequence of characters. It's used for authentication. Failure to do so allows third parties to forge authentication credentials.</li> <li><code>PAPERLESS_URL</code> if you are behind a reverse proxy. This should point to your domain. Please see configuration for more information.</li> <p>Many more adjustments can be made to paperless, especially the OCR part. The following options are recommended for everyone:</p> <ul> <li>Set <code>PAPERLESS_OCR_LANGUAGE</code> to the language most of your documents are written in.</li> <li>Set <code>PAPERLESS_TIME_ZONE</code> to your local time zone.</li> </ul> <p>Warning</p> <p>Ensure your Redis instance is secured.</p> <li> <p>Create the following directories if they are missing:</p> <ul> <li><code>/opt/paperless/media</code></li> <li><code>/opt/paperless/data</code></li> <li><code>/opt/paperless/consume</code></li> </ul> <p>Adjust as necessary if you configured different folders. Ensure that the paperless user has write permissions for every one of these folders with</p> <pre><code>ls -l -d /opt/paperless/media\n</code></pre> <p>If needed, change the owner with</p> <pre><code>sudo chown paperless:paperless /opt/paperless/media\nsudo chown paperless:paperless /opt/paperless/data\nsudo chown paperless:paperless /opt/paperless/consume\n</code></pre> </li> <li> <p>Install python requirements from the <code>requirements.txt</code> file.</p> <pre><code>sudo -Hu paperless pip3 install -r requirements.txt\n</code></pre> <p>This will install all python dependencies in the home directory of the new paperless user.</p> <p>Tip</p> <p>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</p> <p>Tip</p> <p>If you use modern Python tooling, such as <code>uv</code>, installation will not include dependencies for Postgres or Mariadb. You can select those extras with <code>--extra <EXTRA></code> or all with <code>--all-extras</code></p> </li> <li> <p>Go to <code>/opt/paperless/src</code>, and execute the following command:</p> <pre><code># This creates the database schema.\nsudo -Hu paperless python3 manage.py migrate\n</code></pre> <p>When you first access the web interface you will be prompted to create a superuser account.</p> </li> <li> <p>Optional: Test that paperless is working by executing</p> <pre><code># Manually starts the webserver\nsudo -Hu paperless python3 manage.py runserver\n</code></pre> <p>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 <code>PAPERLESS_DEBUG=true</code> in order for the development server to work normally in your browser.</p> <p>Warning</p> <p>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.</p> <p>Tip</p> <p>This will not start the consumer. Paperless does this in a separate process.</p> </li> <li> <p>Setup systemd services to run paperless automatically. You may use the service definition files included in the <code>scripts</code> folder as a starting point.</p> <p>Paperless needs the <code>webserver</code> script to run the webserver, the <code>consumer</code> script to watch the input folder, <code>taskqueue</code> for the background workers used to handle things like document consumption and the <code>scheduler</code> script to run tasks such as email checking at certain times .</p> <p>Note</p> <p>The <code>socket</code> script enables <code>granian</code> to run on port 80 without root privileges. For this you need to uncomment the <code>Require=paperless-webserver.socket</code> in the <code>webserver</code> script and configure <code>granian</code> to listen on port 80 (set <code>GRANIAN_PORT</code>).</p> <p>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.</p> <p>Note</p> <p>For instructions on using a reverse proxy, see the wiki.</p> <p>Warning</p> <p>If celery won't start (check with <code>sudo systemctl status paperless-task-queue.service</code> for paperless-task-queue.service and paperless-scheduler.service ) you need to change the path in the files. Example: <code>ExecStart=/opt/paperless/.local/bin/celery --app paperless worker --loglevel INFO</code></p> </li> <li> <p>Optional: Install a samba server and make the consumption folder available as a network share.</p> </li> <li> <p>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.</p> <p>Edit <code>/etc/ImageMagick-6/policy.xml</code> and adjust</p> <pre><code><policy domain=\"coder\" rights=\"none\" pattern=\"PDF\" />\n</code></pre> <p>to</p> <pre><code><policy domain=\"coder\" rights=\"read|write\" pattern=\"PDF\" />\n</code></pre> </li> <li> <p>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.</p> </li> <li> <p>Optional: If using the NLTK machine learning processing (see <code>PAPERLESS_ENABLE_NLTK</code> for details), download the NLTK data for the Snowball Stemmer, Stopwords and Punkt tokenizer to <code>/usr/share/nltk_data</code>. Refer to the NLTK instructions for details on how to download the data.</p> </li>"},{"location":"setup/#migrating-to-paperless-ngx","title":"Migrating to Paperless-ngx","text":"<p>Migration is possible both from Paperless-ng or directly from the 'original' Paperless.</p>"},{"location":"setup/#migrating-from-paperless-ng","title":"Migrating from Paperless-ng","text":"<p>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 <code>docker-compose.yml</code> and change:</p> <pre><code>image: jonaswinkler/paperless-ng:latest\n</code></pre> <p>to</p> <pre><code>image: ghcr.io/paperless-ngx/paperless-ngx:latest\n</code></pre> <p>and then run <code>docker compose up -d</code> which will pull the new image recreate the container. That's it!</p> <p>Users who installed with the bare-metal route should also update their Git clone to point to <code>https://github.com/paperless-ngx/paperless-ngx</code>, e.g. using the command <code>git remote set-url origin https://github.com/paperless-ngx/paperless-ngx</code> and then pull the latest version.</p>"},{"location":"setup/#migrating-from-paperless","title":"Migrating from Paperless","text":"<p>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.</p> <p>This setup describes how to update an existing paperless Docker installation. The important things to keep in mind are as follows:</p> <ul> <li>Read the changelog and take note of breaking changes.</li> <li>You should decide if you want to stick with SQLite or want to migrate your database to PostgreSQL. See documentation for details on how to move your data from SQLite to PostgreSQL. Both work fine with paperless. However, if you already have a database server running for other services, you might as well use it for paperless as well.</li> <li>The task scheduler of paperless, which is used to execute periodic tasks such as email checking and maintenance, requires a redis message broker instance. The Docker Compose route takes care of that.</li> <li>The layout of the folder structure for your documents and data remains the same, so you can just plug your old docker volumes into paperless-ngx and expect it to find everything where it should be.</li> </ul> <p>Migration to paperless-ngx is then performed in a few simple steps:</p> <ol> <li> <p>Stop paperless.</p> <pre><code>cd /path/to/current/paperless\ndocker compose down\n</code></pre> </li> <li> <p>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.</p> </li> <li> <p>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.</p> <p>Warning</p> <p>Paperless-ngx includes a <code>.env</code> file. This will set the project name for docker compose to <code>paperless</code>, 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</p> <pre><code>docker volume ls | grep _data\n</code></pre> <p>and adjust the project name in the <code>.env</code> file so that it matches the name of the volumes before the <code>_data</code> part.</p> </li> <li> <p>Download the <code>docker-compose.sqlite.yml</code> file to <code>docker-compose.yml</code>. If you want to switch to PostgreSQL, do that after you migrated your existing SQLite database.</p> </li> <li> <p>Adjust <code>docker-compose.yml</code> and <code>docker-compose.env</code> to your needs. See Docker setup details on which edits are advised.</p> </li> <li> <p>Update paperless.</p> </li> <li> <p>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:</p> <pre><code>docker compose run --rm webserver document_index reindex\n</code></pre> <p>This will migrate your database and create the search index. After that, paperless will take care of maintaining the index by itself.</p> </li> <li> <p>Start paperless-ngx.</p> <pre><code>docker compose up -d\n</code></pre> <p>This will run paperless in the background and automatically start it on system boot.</p> </li> <li> <p>Paperless installed a permanent redirect to <code>admin/</code> 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.</p> </li> <li> <p>Optionally, follow the instructions below to migrate your existing data to PostgreSQL.</p> </li> </ol>"},{"location":"setup/#migrating-from-linuxserverio-docker-image","title":"Migrating from LinuxServer.io Docker Image","text":"<p>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.</p> <ol> <li>Stop and remove the paperless container</li> <li>If using an external database, stop the container</li> <li> <p>Update Redis configuration</p> <ol> <li> <p>If <code>REDIS_URL</code> is already set, change it to <code>PAPERLESS_REDIS</code> and continue to step 4.</p> </li> <li> <p>Otherwise, in the <code>docker-compose.yml</code> add a new service for Redis, following the example compose files</p> </li> <li> <p>Set the environment variable <code>PAPERLESS_REDIS</code> so it points to the new Redis container</p> </li> </ol> </li> <li> <p>Update user mapping</p> <ol> <li> <p>If set, change the environment variable <code>PUID</code> to <code>USERMAP_UID</code></p> </li> <li> <p>If set, change the environment variable <code>PGID</code> to <code>USERMAP_GID</code></p> </li> </ol> </li> <li> <p>Update configuration paths</p> <ol> <li>Set the environment variable <code>PAPERLESS_DATA_DIR</code> to <code>/config</code></li> </ol> </li> <li> <p>Update media paths</p> <ol> <li>Set the environment variable <code>PAPERLESS_MEDIA_ROOT</code> to <code>/data/media</code></li> </ol> </li> <li> <p>Update timezone</p> <ol> <li>Set the environment variable <code>PAPERLESS_TIME_ZONE</code> to the same value as <code>TZ</code></li> </ol> </li> <li> <p>Modify the <code>image:</code> to point to <code>ghcr.io/paperless-ngx/paperless-ngx:latest</code> or a specific version if preferred.</p> </li> <li>Start the containers as before, using <code>docker compose</code>.</li> </ol>"},{"location":"setup/#sqlite_to_psql","title":"Moving data from SQLite to PostgreSQL or MySQL/MariaDB","text":"<p>The best way to migrate between database types is to perform an export and then import into a clean installation of Paperless-ngx.</p>"},{"location":"setup/#moving-back-to-paperless","title":"Moving back to Paperless","text":"<p>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.</p> <p>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.</p> <p>Execute this:</p> <pre><code>$ cd /path/to/paperless\n$ docker compose run --rm webserver migrate documents 0023\n</code></pre> <p>Or without docker:</p> <pre><code>$ cd /path/to/paperless/src\n$ python3 manage.py migrate documents 0023\n</code></pre> <p>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.</p>"},{"location":"setup/#less-powerful-devices","title":"Considerations for less powerful devices","text":"<p>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:</p> <ul> <li>Stick with SQLite to save some resources. See troubleshooting if you encounter issues with SQLite locking.</li> <li>If you do not need the filesystem-based consumer, consider disabling it entirely by setting <code>PAPERLESS_CONSUMER_DISABLE</code> to <code>true</code>.</li> <li>Consider setting <code>PAPERLESS_OCR_PAGES</code> to 1, so that paperless will only OCR the first page of your documents. In most cases, this page contains enough information to be able to find it.</li> <li><code>PAPERLESS_TASK_WORKERS</code> and <code>PAPERLESS_THREADS_PER_WORKER</code> are configured to use all cores. The Raspberry Pi models 3 and up have 4 cores, meaning that paperless will use 2 workers and 2 threads per worker. This may result in sluggish response times during consumption, so you might want to lower these settings (example: 2 workers and 1 thread to always have some computing power left for other tasks).</li> <li>Keep <code>PAPERLESS_OCR_MODE</code> at its default value <code>skip</code> and consider OCR'ing your documents before feeding them into paperless. Some scanners are able to do this!</li> <li>Set <code>PAPERLESS_OCR_SKIP_ARCHIVE_FILE</code> to <code>with_text</code> to skip archive file generation for already ocr'ed documents, or <code>always</code> to skip it for all documents.</li> <li>If you want to perform OCR on the device, consider using <code>PAPERLESS_OCR_CLEAN=none</code>. This will speed up OCR times and use less memory at the expense of slightly worse OCR results.</li> <li>If using docker, consider setting <code>PAPERLESS_WEBSERVER_WORKERS</code> to 1. This will save some memory.</li> <li>Consider setting <code>PAPERLESS_ENABLE_NLTK</code> to false, to disable the more advanced language processing, which can take more memory and processing time.</li> </ul> <p>For details, refer to configuration.</p> <p>Note</p> <p>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.</p> <p>The actual matching of the algorithm is fast and works on Raspberry Pi as well as on any other device.</p>"},{"location":"setup/#nginx","title":"Using nginx as a reverse proxy","text":"<p>Please see the wiki for user-maintained documentation of using nginx with Paperless-ngx.</p>"},{"location":"setup/#security","title":"Enhancing security","text":"<p>Please see the wiki for user-maintained documentation of how to configure security tools like Fail2ban with Paperless-ngx.</p>"},{"location":"troubleshooting/","title":"Troubleshooting","text":""},{"location":"troubleshooting/#no-files-are-added-by-the-consumer","title":"No files are added by the consumer","text":"<p>Check for the following issues:</p> <ul> <li> <p>Ensure that the directory you're putting your documents in is the folder paperless is watching. With docker, this setting is performed in the <code>docker-compose.yml</code> file. Without Docker, look at the <code>CONSUMPTION_DIR</code> setting. Don't adjust this setting if you're using docker.</p> </li> <li> <p>Ensure that redis is up and running. Paperless does its task processing asynchronously, and for documents to arrive at the task processor, it needs redis to run.</p> </li> <li> <p>Ensure that the task processor is running. Docker does this automatically. Manually invoke the task processor by executing</p> <pre><code>celery --app paperless worker\n</code></pre> </li> <li> <p>Look at the output of paperless and inspect it for any errors.</p> </li> <li> <p>Go to the admin interface, and check if there are failed tasks. If so, the tasks will contain an error message.</p> </li> </ul>"},{"location":"troubleshooting/#consumer-warns-ocr-for-xx-failed","title":"Consumer warns <code>OCR for XX failed</code>","text":"<p>If you find the OCR accuracy to be too low, and/or the document consumer warns that <code>OCR for XX failed, but we're going to stick with what we've got since FORGIVING_OCR is enabled</code>, then you might need to install the Tesseract language files marching your document's languages.</p> <p>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:</p> <pre><code>apt-get install -y tesseract-ocr-spa\n</code></pre>"},{"location":"troubleshooting/#consumer-fails-to-pickup-any-new-files","title":"Consumer fails to pickup any new files","text":"<p>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 <code>PAPERLESS_CONSUMER_POLLING</code>.</p> <p>This will disable listening to filesystem changes with inotify and paperless will manually check the consumption directory for changes instead.</p>"},{"location":"troubleshooting/#paperless-always-redirects-to-admin","title":"Paperless always redirects to /admin","text":"<p>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.</p>"},{"location":"troubleshooting/#operation-not-permitted","title":"Operation not permitted","text":"<p>You might see errors such as:</p> <pre><code>chown: changing ownership of '../export': Operation not permitted\n</code></pre> <p>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.</p> <p>Ensure that <code>chown</code> is possible on these directories.</p>"},{"location":"troubleshooting/#classifier-error-no-training-data-available","title":"Classifier error: No training data available","text":"<p>This indicates that the Auto matching algorithm found no documents to learn from. This may have two reasons:</p> <ul> <li>You don't use the Auto matching algorithm: The error can be safely ignored in this case.</li> <li>You are using the Auto matching algorithm: The classifier explicitly excludes documents with Inbox tags. Verify that there are documents in your archive without inbox tags. The algorithm will only learn from documents not in your inbox.</li> </ul>"},{"location":"troubleshooting/#userwarning-in-sklearn-on-every-single-document","title":"UserWarning in sklearn on every single document","text":"<p>You may encounter warnings like this:</p> <pre><code>/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</code></pre> <p>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.</p> <p>If you want to get rid of the warning or actually experience issues with automatic matching, delete the file <code>classification_model.pickle</code> in the data directory and let paperless recreate it.</p>"},{"location":"troubleshooting/#504-server-error-gateway-timeout-when-adding-office-documents","title":"504 Server Error: Gateway Timeout when adding Office documents","text":"<p>You may experience these errors when using the optional TIKA integration:</p> <pre><code>requests.exceptions.HTTPError: 504 Server Error: Gateway Timeout for url: http://gotenberg:3000/forms/libreoffice/convert\n</code></pre> <p>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.</p> <p>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 <code>docker-compose.yml</code> file:</p> <pre><code># 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=60'\n</code></pre>"},{"location":"troubleshooting/#permission-denied-errors-in-the-consumption-directory","title":"Permission denied errors in the consumption directory","text":"<p>You might encounter errors such as:</p> <pre><code>The following error occurred while consuming document.pdf: [Errno 13] Permission denied: '/usr/src/paperless/src/../consume/document.pdf'\n</code></pre> <p>This happens when paperless does not have permission to delete files inside the consumption directory. Ensure that <code>USERMAP_UID</code> and <code>USERMAP_GID</code> are set to the user id and group id you use on the host operating system, if these are different from <code>1000</code>. See Docker setup.</p> <p>Also ensure that you are able to read and write to the consumption directory on the host.</p>"},{"location":"troubleshooting/#oserror-errno-19-no-such-device-when-consuming-files","title":"OSError: [Errno 19] No such device when consuming files","text":"<p>If you experience errors such as:</p> <pre><code>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</code></pre> <p>Paperless uses a search index to provide better and faster full text searching. This search index is stored inside the <code>data</code> folder. The search index uses memory-mapped files (mmap). The above error indicates that paperless was unable to create and open these files.</p> <p>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.</p>"},{"location":"troubleshooting/#web-ui-stuck-at-loading","title":"Web-UI stuck at \"Loading...\"","text":"<p>This might have multiple reasons.</p> <ol> <li> <p>If you built the docker image yourself or deployed using the bare metal route, make sure that there are files in <code><paperless-root>/static/frontend/<lang-code>/</code>. If there are no files, make sure that you executed <code>collectstatic</code> successfully, either manually or as part of the docker image build.</p> <p>If the front end is still missing, make sure that the front end is compiled (files present in <code>src/documents/static/frontend</code>). If it is not, you need to compile the front end yourself or download the release archive instead of cloning the repository.</p> </li> </ol>"},{"location":"troubleshooting/#error-while-reading-metadata","title":"Error while reading metadata","text":"<p>You might find messages like these in your log files:</p> <pre><code>[WARNING] [paperless.parsing.tesseract] Error while reading metadata\n</code></pre> <p>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.</p>"},{"location":"troubleshooting/#consumer-fails-with-a-filenotfounderror","title":"Consumer fails with a FileNotFoundError","text":"<p>You might find messages like these in your log files:</p> <pre><code>[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</code></pre> <p>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.</p>"},{"location":"troubleshooting/#consumer-fails-waiting-for-file-to-remain-unmodified","title":"Consumer fails waiting for file to remain unmodified.","text":"<p>You might find messages like these in your log files:</p> <pre><code>[ERROR] [paperless.management.consumer] Timeout while waiting on file /usr/src/paperless/src/../consume/SCN_0001.pdf to remain unmodified.\n</code></pre> <p>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.</p> <p>Note</p> <p>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.</p>"},{"location":"troubleshooting/#consumer-fails-reporting-os-reports-file-as-busy-still","title":"Consumer fails reporting \"OS reports file as busy still\".","text":"<p>You might find messages like these in your log files:</p> <pre><code>[WARNING] [paperless.management.consumer] Not consuming file /usr/src/paperless/src/../consume/SCN_0001.pdf: OS reports file as busy still\n</code></pre> <p>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.</p> <p>Note</p> <p>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.</p>"},{"location":"troubleshooting/#log-reports-creating-paperlesstask-failed","title":"Log reports \"Creating PaperlessTask failed\".","text":"<p>You might find messages like these in your log files:</p> <pre><code>[ERROR] [paperless.management.consumer] Creating PaperlessTask failed: db locked\n</code></pre> <p>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.</p> <p>Consider changing to the PostgreSQL database if you will be processing many documents at once often. Otherwise, try tweaking the <code>PAPERLESS_DB_TIMEOUT</code> 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.</p>"},{"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":"<p>You are likely running using Kubernetes, which automatically creates an environment variable named <code>${serviceName}_PORT</code>. This is the same environment variable which is used by Paperless to optionally change the port granian listens on.</p> <p>To fix this, set <code>PAPERLESS_PORT</code> again to your desired port, or the default of 8000.</p>"},{"location":"troubleshooting/#database-warns-about-unique-constraint-documents_tag_name_uniq","title":"Database Warns about unique constraint \"documents_tag_name_uniq","text":"<p>You may see database log lines like:</p> <pre><code>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</code></pre> <p>This can happen during heavy consumption when using polling. Paperless will handle it correctly and the file will still be consumed</p>"},{"location":"troubleshooting/#consumption-fails-with-ghostscript-pdfa-rendering-failed","title":"Consumption fails with \"Ghostscript PDF/A rendering failed\"","text":"<p>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 <code>PAPERLESS_OCR_USER_ARGS: '{\"continue_on_soft_render_error\": true}'</code> to try to 'force' processing documents with this issue.</p>"},{"location":"troubleshooting/#convert-uuid-field","title":"Logs show \"possible incompatible database column\" when deleting documents","text":"<p>You may see errors when deleting documents like:</p> <pre><code>Data too long for column 'transaction_id' at row 1\n</code></pre> <p>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 backawards-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:</p> <pre><code>$ python3 manage.py convert_mariadb_uuid\n</code></pre>"},{"location":"troubleshooting/#platform-specific-deployment-troubleshooting","title":"Platform-Specific Deployment Troubleshooting","text":"<p>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.</p>"},{"location":"usage/","title":"Usage Overview","text":"<p>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.</p>"},{"location":"usage/#terms-and-definitions","title":"Terms and definitions","text":"<p>Paperless essentially consists of two different parts for managing your documents:</p> <ul> <li>The consumer watches a specified folder and adds all documents in that folder to paperless.</li> <li>The web server (web UI) provides a UI that you use to manage and search documents.</li> </ul> <p>Each document has data fields that you can assign to them:</p> <ul> <li>A Document is a piece of paper that sometimes contains valuable information.</li> <li>The correspondent of a document is the person, institution or company that a document either originates from, or is sent to.</li> <li>A tag is a label that you can assign to documents. Think of labels as more powerful folders: Multiple documents can be grouped together with a single tag, however, a single document can also have multiple tags. This is not possible with folders. The reason folders are not implemented in paperless is simply that tags are much more versatile than folders.</li> <li>A document type is used to demarcate the type of a document such as letter, bank statement, invoice, contract, etc. It is used to identify what a document is about.</li> <li>The date added of a document is the date the document was scanned into paperless. You cannot and should not change this date.</li> <li>The date created of a document is the date the document was initially issued. This can be the date you bought a product, the date you signed a contract, or the date a letter was sent to you.</li> <li>The archive serial number (short: ASN) of a document is the identifier of the document in your physical document binders. See recommended workflow below.</li> <li>The content of a document is the text that was OCR'ed from the document. This text is fed into the search engine and is used for matching tags, correspondents and document types.</li> <li>Paperless-ngx also supports custom fields which can be used to store additional metadata about a document.</li> </ul>"},{"location":"usage/#the-web-ui","title":"The Web UI","text":"<p>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.</p> <p>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.</p>"},{"location":"usage/#dashboard","title":"Dashboard","text":"<p>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.</p>"},{"location":"usage/#document-list","title":"Document List","text":"<p>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.</p>"},{"location":"usage/#document-detail","title":"Document Detail","text":"<p>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.</p>"},{"location":"usage/#management-lists","title":"Management Lists","text":"<p>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.</p>"},{"location":"usage/#adding-documents-to-paperless-ngx","title":"Adding documents to Paperless-ngx","text":"<p>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:</p> <ol> <li>OCR the document, if it has no text. Digital documents usually have text, and this step will be skipped for those documents.</li> <li>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.</li> <li>Paperless performs automatic matching of tags, correspondents and types on the document before storing it in the database.</li> </ol> <p>Tip</p> <p>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 <code>PAPERLESS_OCR_SKIP_ARCHIVE_FILE=with_text</code>. Please read the relevant section in the documentation.</p> <p>Note</p> <p>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.</p>"},{"location":"usage/#the-consumption-directory","title":"The consumption directory","text":"<p>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.</p> <p>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.</p> <p>Warning</p> <p>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.</p>"},{"location":"usage/#web-ui-upload","title":"Web UI Upload","text":"<p>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.</p>"},{"location":"usage/#usage-mobile_upload","title":"Mobile upload","text":"<p>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.</p>"},{"location":"usage/#incoming-mail","title":"Incoming Email","text":"<p>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:</p> <ol> <li>Define e-mail accounts.</li> <li>Define mail rules for your account.</li> </ol> <p>These rules perform the following:</p> <ol> <li>Connect to the mail server.</li> <li>Fetch all matching mails (as defined by folder, maximum age and the filters)</li> <li>Check if there are any consumable attachments.</li> <li>If so, instruct paperless to consume the attachments and optionally use the metadata provided in the rule for the new document.</li> <li>If documents were consumed from a mail, the rule action is performed on that mail.</li> </ol> <p>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.</p> <p>The actions all ensure that the same mail is not consumed twice by different means. These are as follows:</p> <ul> <li>Delete: Immediately deletes mail that paperless has consumed documents from. Use with caution.</li> <li>Mark as read: Mark consumed mail as read. Paperless will not consume documents from already read mails. If you read a mail before paperless sees it, it will be ignored.</li> <li>Flag: Sets the 'important' flag on mails with consumed documents. Paperless will not consume flagged mails.</li> <li>Move to folder: Moves consumed mails out of the way so that paperless won't consume them again.</li> <li> <p>Add custom Tag: Adds a custom tag to mails with consumed documents (the IMAP standard calls these \"keywords\"). Paperless will not consume mails already tagged. Not all mail servers support this feature!</p> <ul> <li>Apple Mail support: Apple Mail clients allow differently colored tags. For this to work use <code>apple:<color></code> (e.g. apple:green) as a custom tag. Available colors are red, orange, yellow, blue, green, violet and grey.</li> </ul> </li> </ul> <p>Warning</p> <p>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.</p> <p>Note</p> <p>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.</p> <p>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.</p> <p>Note</p> <p>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.</p> <p>Note</p> <p>Paperless will process the rules in the order defined in the admin page.</p> <p>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.</p> <p>Paperless is set up to check your mails every 10 minutes. This can be configured via <code>PAPERLESS_EMAIL_TASK_CRON</code></p>"},{"location":"usage/#oauth-email-setup","title":"OAuth Email Setup","text":"<p>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 <code>PAPERLESS_OAUTH_CALLBACK_BASE_URL</code> or <code>PAPERLESS_URL</code> to the correct value for the OAuth2 flow to work correctly.</p> <p>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.</p> <p>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.</p>"},{"location":"usage/#rest-api","title":"REST API","text":"<p>You can also submit a document using the REST API, see POSTing documents for details.</p>"},{"location":"usage/#sharing-documents-from-paperless-ngx","title":"Sharing documents from Paperless-ngx","text":"<p>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.</p>"},{"location":"usage/#share-links","title":"Share Links","text":"<p>\"Share links\" are shareable public links to files and can be created and managed under the 'Send' button on the document detail screen.</p> <ul> <li>Share links do not require a user to login and thus link directly to a file.</li> <li>Links are unique and are of the form <code>{paperless-url}/share/{randomly-generated-slug}</code>.</li> <li>Links can optionally have an expiration time set.</li> <li>After a link expires or is deleted users will be redirected to the regular paperless-ngx login.</li> </ul> <p>Tip</p> <p>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.</p>"},{"location":"usage/#email-sharing","title":"Email Sharing","text":"<p>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.</p>"},{"location":"usage/#permissions","title":"Permissions","text":"<p>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.</p> <p>Tip</p> <p>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.</p> <p>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.</p>"},{"location":"usage/#default-permissions","title":"Default permissions","text":"<p>Workflows provide advanced ways to control permissions.</p> <p>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.</p> <p>Documents consumed via the consumption directory do not have an owner or additional permissions set by default, but again, can be controlled with Workflows.</p>"},{"location":"usage/#users-and-groups","title":"Users and Groups","text":"<p>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).</p> <p>Tip</p> <p>By default, new users are not granted any permissions, except those inherited from any group(s) of which they are a member.</p>"},{"location":"usage/#superusers","title":"Superusers","text":"<p>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.</p>"},{"location":"usage/#admin-status","title":"Admin Status","text":"<p>Admin status (Django 'staff status') grants access to viewing the paperless logs and the system status dialog as well as accessing the Django backend.</p>"},{"location":"usage/#global-permissions","title":"Detailed Explanation of Global Permissions","text":"<p>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.</p> 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, in other words all users who can access workflows have access to the same set of them."},{"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":"<p>In order to enable the password reset feature you will need to setup an SMTP backend, see <code>PAPERLESS_EMAIL_HOST</code>. If your installation does not have <code>PAPERLESS_URL</code> set, the reset link included in emails will use the server host.</p>"},{"location":"usage/#two-factor-authentication","title":"Two-factor authentication","text":"<p>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.</p> <p>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.</p>"},{"location":"usage/#workflows","title":"Workflows","text":"<p>Note</p> <p>v2.3 added \"Workflows\" and existing \"Consumption Templates\" were converted automatically to the new more powerful format.</p> <p>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.</p> <p>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.</p>"},{"location":"usage/#workflow-triggers","title":"Workflow Triggers","text":""},{"location":"usage/#workflow-trigger-types","title":"Types","text":"<p>Currently, there are three events that correspond to workflow trigger 'types':</p> <ol> <li>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</li> <li>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.</li> <li>Document Updated: when a document is updated. Similar to 'added' events, triggers can include filtering by content matching, tags, doc type, or correspondent.</li> <li>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.</li> </ol> <p>The following flow diagram illustrates the three document trigger types:</p> <pre><code>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]</code></pre>"},{"location":"usage/#workflow-trigger-filters","title":"Filters","text":"<p>Workflows allow you to filter by:</p> <ul> <li>Source, e.g. documents uploaded via consume folder, API (& the web UI) and mail fetch</li> <li>File name, including wildcards e.g. *.pdf will apply to all pdfs</li> <li>File path, including wildcards. Note that enabling <code>PAPERLESS_CONSUMER_RECURSIVE</code> would allow, for example, automatically assigning documents to different owners based on the upload directory.</li> <li>Mail rule. Choosing this option will force 'mail fetch' to be the workflow source.</li> <li>Content matching (<code>Added</code> and <code>Updated</code> triggers only). Filter document content using the matching settings.</li> <li>Tags (<code>Added</code> and <code>Updated</code> triggers only). Filter for documents with any of the specified tags</li> <li>Document type (<code>Added</code> and <code>Updated</code> triggers only). Filter documents with this doc type</li> <li>Correspondent (<code>Added</code> and <code>Updated</code> triggers only). Filter documents with this correspondent</li> </ul>"},{"location":"usage/#workflow-actions","title":"Workflow Actions","text":""},{"location":"usage/#workflow-action-types","title":"Types","text":"<p>The following workflow action types are available:</p>"},{"location":"usage/#workflow-action-assignment","title":"Assignment","text":"<p>\"Assignment\" actions can assign:</p> <ul> <li>Title, see workflow placeholders below</li> <li>Tags, correspondent, document type and storage path</li> <li>Document owner</li> <li>View and / or edit permissions to users or groups</li> <li>Custom fields. Note that no value for the field will be set</li> </ul>"},{"location":"usage/#workflow-action-removal","title":"Removal","text":"<p>\"Removal\" actions can remove either all of or specific sets of the following:</p> <ul> <li>Tags, correspondents, document types or storage paths</li> <li>Document owner</li> <li>View and / or edit permissions</li> <li>Custom fields</li> </ul>"},{"location":"usage/#workflow-action-email","title":"Email","text":"<p>\"Email\" actions can send documents via email. This action requires a mail server to be configured. You can specify:</p> <ul> <li>The recipient email address(es) separated by commas</li> <li>The subject and body of the email, which can include placeholders, see placeholders below</li> <li>Whether to include the document as an attachment</li> </ul>"},{"location":"usage/#workflow-action-webhook","title":"Webhook","text":"<p>\"Webhook\" actions send a POST request to a specified URL. You can specify:</p> <ul> <li>The URL to send the request to</li> <li>The request body as text or as key-value pairs, which can include placeholders, see placeholders below.</li> <li>Encoding for the request body, either JSON or form data</li> <li>The request headers as key-value pairs</li> </ul>"},{"location":"usage/#workflow-placeholders","title":"Workflow placeholders","text":"<p>Some workflow text can include placeholders but the available options 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 with any trigger type:</p> <ul> <li><code>{correspondent}</code>: assigned correspondent name</li> <li><code>{document_type}</code>: assigned document type name</li> <li><code>{owner_username}</code>: assigned owner username</li> <li><code>{added}</code>: added datetime</li> <li><code>{added_year}</code>: added year</li> <li><code>{added_year_short}</code>: added year</li> <li><code>{added_month}</code>: added month</li> <li><code>{added_month_name}</code>: added month name</li> <li><code>{added_month_name_short}</code>: added month short name</li> <li><code>{added_day}</code>: added day</li> <li><code>{added_time}</code>: added time in HH:MM format</li> <li><code>{original_filename}</code>: original file name without extension</li> <li><code>{filename}</code>: current file name without extension</li> </ul> <p>The following placeholders are only available for \"added\" or \"updated\" triggers</p> <ul> <li><code>{created}</code>: created datetime</li> <li><code>{created_year}</code>: created year</li> <li><code>{created_year_short}</code>: created year</li> <li><code>{created_month}</code>: created month</li> <li><code>{created_month_name}</code>: created month name</li> <li><code>{created_month_name_short}</code>: created month short name</li> <li><code>{created_day}</code>: created day</li> <li><code>{created_time}</code>: created time in HH:MM format</li> <li><code>{doc_url}</code>: URL to the document in the web UI. Requires the <code>PAPERLESS_URL</code> setting to be set.</li> </ul>"},{"location":"usage/#workflow-permissions","title":"Workflow permissions","text":"<p>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.</p> <p>Given their potentially far-reaching capabilities, you may want to restrict access to workflows.</p> <p>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).</p>"},{"location":"usage/#custom-fields","title":"Custom Fields","text":"<p>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.</p> <ol> <li>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.</li> <li>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\".</li> <li>Fields can be removed by hovering over the field name revealing a \"Remove\" button.</li> </ol> <p>Important</p> <p>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.</p> <p>Note</p> <p>Once the data type for a field is set, it cannot be changed.</p> <p>Multiple fields may be attached to a document but the same field name cannot be assigned multiple times to the a single document.</p> <p>The following custom field types are supported:</p> <ul> <li><code>Text</code>: any text</li> <li><code>Boolean</code>: true / false (check / unchecked) field</li> <li><code>Date</code>: date</li> <li><code>URL</code>: a valid url</li> <li><code>Integer</code>: integer number e.g. 12</li> <li><code>Number</code>: float number e.g. 12.3456</li> <li><code>Monetary</code>: ISO 4217 currency code and a number with exactly two decimals, e.g. USD12.30</li> <li><code>Document Link</code>: reference(s) to other document(s) displayed as links, automatically creates a symmetrical link in reverse</li> <li><code>Select</code>: a pre-defined list of strings from which the user can choose</li> </ul>"},{"location":"usage/#pdf-actions","title":"PDF Actions","text":"<p>Paperless-ngx supports four basic editing operations for PDFs (these operations currently cannot be performed on non-PDF files):</p> <ul> <li>Merging documents: available when selecting multiple documents for 'bulk editing'.</li> <li>Rotating documents: available when selecting multiple documents for 'bulk editing' and from an individual document's details page.</li> <li>Splitting documents: available from an individual document's details page.</li> <li>Deleting pages: available from an individual document's details page.</li> </ul> <p>Important</p> <p>Note that rotation and deleting pages alter the Paperless-ngx original file, which would, for example, invalidate a digital signature.</p>"},{"location":"usage/#document-history","title":"Document History","text":"<p>As of version 2.7, Paperless-ngx automatically records all changes to a document and records this in an audit log. The feature requires <code>PAPERLESS_AUDIT_LOG_ENABLED</code> 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\".</p>"},{"location":"usage/#document-trash","title":"Document Trash","text":"<p>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 <code>PAPERLESS_EMPTY_TRASH_DELAY</code>, 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.</p> <p>Additionally you may configure a directory where deleted files are moved to when they the trash is emptied with <code>PAPERLESS_EMPTY_TRASH_DIR</code>. 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.</p>"},{"location":"usage/#basic-searching","title":"Best practices","text":"<p>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.</p> <p>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.</p> <p>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.</p> <p>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.</p> <p>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.</p> <p>Tip</p> <p>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.</p> <p>All of the logic above applies to correspondents as well. Attach them to documents if you feel that they help you organize your collection.</p> <p>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.</p> <p>Here are a couple examples of tags and types that you could use in your collection.</p> <ul> <li>An <code>inbox</code> tag for newly added documents that you haven't manually edited yet.</li> <li>A tag <code>car</code> for everything car related (repairs, registration, insurance, etc)</li> <li>A tag <code>todo</code> for documents that you still need to do something with, such as reply, or perform some task online.</li> <li>A tag <code>bank account x</code> for all bank statement related to that account.</li> <li>A tag <code>mail</code> for anything that you added to paperless via its mail processing capabilities.</li> <li>A tag <code>missing_metadata</code> when you still need to add some metadata to a document, but can't or don't want to do this right now.</li> </ul>"},{"location":"usage/#basic-usage_searching","title":"Searching","text":""},{"location":"usage/#global-search","title":"Global search","text":"<p>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.</p>"},{"location":"usage/#document-searches","title":"Document searches","text":"<p>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).</p> <p>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.</p> <p>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.</p> <p>Matching documents with logical expressions:</p> <pre><code>shopname AND (product1 OR product2)\n</code></pre> <p>Matching specific tags, correspondents or types:</p> <pre><code>type:invoice tag:unpaid\ncorrespondent:university certificate\n</code></pre> <p>Matching dates:</p> <pre><code>created:[2005 to 2009]\nadded:yesterday\nmodified:today\n</code></pre> <p>Matching inexact words:</p> <pre><code>produ*name\n</code></pre> <p>Note</p> <p>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.</p> <p>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.</p>"},{"location":"usage/#keyboard-shortcuts-hotkeys","title":"Keyboard shortcuts / hotkeys","text":"<p>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.</p>"},{"location":"usage/#usage-recommended-workflow","title":"The recommended workflow","text":"<p>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.</p> <p>The following diagram shows how easy it is to manage your documents.</p> <p></p>"},{"location":"usage/#preparations-in-paperless","title":"Preparations in paperless","text":"<ul> <li>Create an inbox tag that gets assigned to all new documents.</li> <li>Create a TODO tag.</li> </ul>"},{"location":"usage/#processing-of-the-physical-documents","title":"Processing of the physical documents","text":"<p>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:</p> <ol> <li>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.</li> <li>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.</li> <li>Scan the document.</li> <li>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.</li> <li>If the document has no ASN, throw it away. Yay!</li> </ol> <p>Tip</p> <p>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 <code>ASN00001</code>. 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.</p> <p>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.</p> <p>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:</p> <ol> <li>Searching in paperless for the document.</li> <li>Identify the ASN of the document, since it appears on the scan.</li> <li>Grab the relevant document binder and get the document. This is easy since they are sorted by ASN.</li> </ol>"},{"location":"usage/#processing-of-documents-in-paperless","title":"Processing of documents in paperless","text":"<p>Once you have scanned in a document, proceed in paperless as follows.</p> <ol> <li>If the document has an ASN, assign the ASN to the document.</li> <li>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.</li> <li>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.</li> <li>Assign a proper title to the document (the name of an item you bought, the subject of the letter, etc)</li> <li>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.</li> <li>Remove inbox tags from the documents.</li> </ol> <p>Tip</p> <p>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.</p>"},{"location":"usage/#task-management","title":"Task management","text":"<p>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.</p> <ul> <li>If you scan and process your documents in paperless regularly, assign a TODO tag to all scanned documents that you need to process. Create a saved view on the dashboard that shows all documents with this tag.</li> <li>If you do not scan documents regularly and use paperless solely for archiving, create a physical todo box next to your physical inbox and put documents you need to process in the TODO box. When you performed the task associated with the document, move it to the inbox.</li> </ul>"},{"location":"usage/#architecture","title":"Architecture","text":"<p>Paperless-ngx consists of the following components:</p> <ul> <li> <p>The webserver: This serves the administration pages, the API, and the new frontend. This is the main tool you'll be using to interact with paperless. You may start the webserver directly with</p> <pre><code>cd /path/to/paperless/src/\ngranian --interface asginl --ws \"paperless.asgi:application\"\n</code></pre> <p>or by any other means such as Apache <code>mod_wsgi</code>.</p> </li> <li> <p>The consumer: This is what watches your consumption folder for documents. However, the consumer itself does not really consume your documents. Now it notifies a task processor that a new file is ready for consumption. I suppose it should be named differently. This was also used to check your emails, but that's now done elsewhere as well.</p> <p>Start the consumer with the management command <code>document_consumer</code>:</p> <pre><code>cd /path/to/paperless/src/\npython3 manage.py document_consumer\n</code></pre> </li> <li> <p>The task processor: Paperless relies on Celery - Distributed Task Queue for doing most of the heavy lifting. This is a task queue that accepts tasks from multiple sources and processes these in parallel. It also comes with a scheduler that executes certain commands periodically.</p> <p>This task processor is responsible for:</p> <ul> <li>Consuming documents. When the consumer finds new documents, it notifies the task processor to start a consumption task.</li> <li>The task processor also performs the consumption of any documents you upload through the web interface.</li> <li>Consuming emails. It periodically checks your configured accounts for new emails and notifies the task processor to consume the attachment of an email.</li> <li>Maintaining the search index and the automatic matching algorithm. These are things that paperless needs to do from time to time in order to operate properly.</li> </ul> <p>This allows paperless to process multiple documents from your consumption folder in parallel! On a modern multi core system, this makes the consumption process with full OCR blazingly fast.</p> <p>The task processor comes with a built-in admin interface that you can use to check whenever any of the tasks fail and inspect the errors (i.e., wrong email credentials, errors during consuming a specific file, etc).</p> </li> <li> <p>A redis message broker: This is a really lightweight service that is responsible for getting the tasks from the webserver and the consumer to the task scheduler. These run in a different process (maybe even on different machines!), and therefore, this is necessary.</p> </li> <li> <p>Optional: A database server. Paperless supports PostgreSQL, MariaDB and SQLite for storing its data.</p> </li> </ul>"}]} |