# Paperless-ngx: what changed from 2 to 3
- Product: Paperless-ngx (https://whatsnew.fyi/product/paperless-ngx)
- Vendor: Paperless-ngx
- Range: changelog entries numbered after v2.20.15 up to and including v3.1.3, stable releases only
- Entries below: 10 releases (newest first)
- Resolved: 2 is v2.20.15 and 3 is v3.1.3, the newest stable release of each major we track
- Carrying security changes: 2 · CVEs mentioned: 0 · Mentioning breaking changes: 1 · Removing or deprecating something: 1
- Page: https://whatsnew.fyi/product/paperless-ngx/compare/2...3
What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog.
Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'.
## What changed (125 changes, grouped by kind)
### Added
#### v3.1.0 (2026-08-27)
- Apply AI suggestions workflow action
- Support using remote OCR engines selectively
- Websocket heartbeat
- Sync OIDC groups to superuser and staff roles
- Merge documents as versions
- Allow selection of compression type and level during export
- Customizable icons for saved views
- Add --url argument to document_fuzzy_match to improve output
- Updates remote OCR parser to respect the OCR mode setting
#### v3.0.0 (2026-07-22)
- Replace Whoosh with tantivy search backend
- Add document parser plugin framework
- Add document file versions
- Add sharelink bundles
- Add Paperless AI
- Add remote OCR support via Azure AI
- Allow some bulk operations with all
- Add database indexes for common query and sort patterns
### Changed
#### v3.1.1 (2026-08-31)
- Show existing count for AI suggestions
- Make IMAP port required and improve error display
#### v3.1.0 (2026-08-27)
- Apply visual tweaks to welcome widget
- Better support long list of views in documents list
- Add count badge to versions dropdown
- Add jitter to IMAP polling schedule
- Render paperless_ai prompts via Jinja2 templates instead of f-strings
- Prefer existing tags, types, correspondents, and storage paths in AI suggestions
- Reduce memory and I/O overhead of the document exporter during zip exports
- More efficient mail fetching
#### v3.0.5 (2026-08-01)
- Use server side iterators during LLM index updating
- Improve sqlite-vec point-delete for document chunks
- Adjust doc details button toolbar flow
#### v3.0.4 (2026-07-28)
- More efficient diacritic normalization in dropdown filtering
- Pass LLM output language to chat if specified
- Prefetch notes and custom fields for LLM index text building
- Scope llm index updates to actually modified documents
- Resolve npm provenance issues with chokidar and semver
#### v3.0.3 (2026-07-25)
- PAPERLESS_ALLAUTH_TRUSTED_PROXY_COUNT environment variable handling
- Adjust top navbar wrapping when AI chat button visible
#### v3.0.1 (2026-07-23)
- bump postcss from 8.5.6 to 8.5.22
- bump pyasn1 from 0.6.3 to 0.6.4
- reword Settings > Default permissions description for clarity
#### v3.0.0 (2026-07-22)
- Update root modified timestamp on version changes
### Fixed
#### v3.1.3 (2026-09-04)
- Use the header loading indicator on tasks page
- Fix load sidebar size animating
- Wrap long words without spaces in dropdowns
- Tweak tool calling localization prompt
- Skip vector store document id filter for unrestricted chat users
- Adopt the request stream when pinning an outbound host
- Ensure apply AI suggestions always runs after document created
- Handle failures when enqueuing files for consumption
- Handle Celery mail task chord errors
- Refactor some signal-backed conversion technical debt
- Fix slim sidebar saved view dragging appearance
- Use signal-backed queries input in custom fields dropdown to reflect changes immediately under zoneless
- Use root doc metadata for filename generation
- Clean up some CSS
#### v3.1.2 (2026-09-01)
- Fix dark mode select disabled color and ensure disabled cursor on display mode dropdown
- Add disable to the drag-drop list component
#### v3.1.1 (2026-08-31)
- LLM suggestions no longer remove existing metadata from prompt and do not drop name suggestions
- Set global search earlier to avoid awaiting debounce
- Make sidebar responsive and centralize size values
- Simplify LLM suggestions schema and fix docstrings
- Ensure UI reset of suggestionsLoading when changing documents
- Always pass a non-empty API key for OpenAI-like servers
- Hide slim sidebar scrollbar in browsers with native scrollbars
- Correct sharelink bundle and document link permissions display bugs
- Immediately re-add document to index after trash restore
- Fix navbar brand anchor size and Safari position jitter
#### v3.1.0 (2026-08-27)
- Prevent config autocomplete craziness
- Prevent token re-use in dropdown filtering
- Exclude version documents from bulk edit all
#### v3.0.5 (2026-08-01)
- Accept Whoosh-era abbreviated relative-date units (yrs, mos, wks, etc) in search queries
- Fix edit dialog error change detection
- Key the AI suggestion cache by model and endpoint
- Validate custom field values in bulk operations
- Better handle empty fields from AI suggestions
- Normalize monetary decimal symbol by locale
- Fold overflowing path text in sanity checker
- Correct delayed add field button for custom fields
- Hide attributes collapse / show button without UI settings
- Consolidate born-digital PDF detection between archive decision and OCR
- Prevent scale vs page loop in pngx PDF viewer
- Handle hidden line breaks in email subjects when sending email
- Avoid NotSupportedError from document_importer on MariaDB
- Exclude next-period start from relative date-range filters
- Close non-atomic db connections in before_task_publish
- Fix Enter selection in search autocomplete
#### v3.0.4 (2026-07-28)
- Prevent pdfjs highlight scrolling from affecting the entire page
- Don't skip OCR/archive for tagged PDFs with no actual text
- Dedupe permission-visible documents when combined with multi-tag filters
- Ensure preview reload on live changes
- Clamp all out-of-range possible fields
- Add docstring to DocumentClassifierSchema for cleaner LLM tool description
- Guard build_document_node against stale FK on deleted correspondent/doc type
- Prevent search filter loss when closing document with Escape key
- Fix frontend permissions display for stats/system perms
#### v3.0.3 (2026-07-25)
- Preserve document fields during Gotenberg conversion to PDF
- Make email date aware as soon as possible during parsing
- Handle a plain string as Celery sometimes provides for the traceback
- Emit the torch index into the requirements.txt for people still using it
- Handle notes without a user when building the search index
#### v3.0.2 (2026-07-24)
- Fix broken migration in 3.0.1
#### v3.0.1 (2026-07-23)
- selection_data re-derives the filtered document set 5 times over
- exclude source document from its own RAG similarity results
- split mailrule maximum_age clamp into its own migration
- correct URL for W001 check
- ensure create dialog uses correct attribute type
- correct database engine from postgres to postgresql
- remove unnecessary .distinct() dominating document list queries
- wrap non-breaking words in chat messages and handle whitespace
- tag/custom-field document_count scales badly with tag count
- batch document user_can_change checks to avoid per-row N+1
- app title restoration
- handle long wrapping titles in AI chat document list
### Removed
#### v3.0.0 (2026-07-22)
- Remove positional arguments from pre/post consume scripts
- Decouple OCR control from archive file control
- Drop support for API versions less than 9
- Drop support for Python 3.10
- Refactor advanced database settings to allow more user configuration
- Remove API v1 compatibility
- Remove pybzar as a barcode reader
- Remove support for document and thumbnail encryption
- Simplify and improve the consumer
### Security
#### v3.1.2 (2026-09-01)
- Address security issue GHSA-2jhj-xqrq-rmrq
#### v3.0.0 (2026-07-22)
- Enforce current permissions in autocomplete
- Bound email linkification
## Release notes
### v3.1.3 — Paperless-ngx v3.1.3
- Date: 2026-09-04
- Version: v3.1.3
- Original notes: https://github.com/paperless-ngx/paperless-ngx/releases/tag/v3.1.3
- Permalink: https://whatsnew.fyi/product/paperless-ngx/releases/v3.1.3
- **fixed** — Use the header loading indicator on tasks page
- **fixed** — Fix load sidebar size animating
- **fixed** — Wrap long words without spaces in dropdowns
- **fixed** — Tweak tool calling localization prompt
- **fixed** — Skip vector store document id filter for unrestricted chat users
- **fixed** — Adopt the request stream when pinning an outbound host
- **fixed** — Ensure apply AI suggestions always runs after document created
- **fixed** — Handle failures when enqueuing files for consumption
- **fixed** — Handle Celery mail task chord errors
- **fixed** — Refactor some signal-backed conversion technical debt
- **fixed** — Fix slim sidebar saved view dragging appearance
- **fixed** — Use signal-backed queries input in custom fields dropdown to reflect changes immediately under zoneless
- **fixed** — Use root doc metadata for filename generation
- **fixed** — Clean up some CSS
##### paperless-ngx 3.1.3
###### Bug Fixes
- Fix: use the header loading indicator on tasks page @shamoon ([#13949](https://github.com/paperless-ngx/paperless-ngx/pull/13949))
- Fix: fix load sidebar size animating @shamoon ([#13947](https://github.com/paperless-ngx/paperless-ngx/pull/13947))
- Fix: wrap long words without spaces in dropdowns @shamoon ([#13945](https://github.com/paperless-ngx/paperless-ngx/pull/13945))
- Fix: tweak tool calling localzation prompt @shamoon ([#13943](https://github.com/paperless-ngx/paperless-ngx/pull/13943))
- Fix: skip vector store document id filter for unrestricted chat users @stumpylog ([#13937](https://github.com/paperless-ngx/paperless-ngx/pull/13937))
- Fix: adopt the request stream when pinning an outbound host @ThomasSteinbach ([#13927](https://github.com/paperless-ngx/paperless-ngx/pull/13927))
- Fix: ensure apply ai suggestions always runs after document created @shamoon ([#13940](https://github.com/paperless-ngx/paperless-ngx/pull/13940))
- Fix: Handle failures when enqueuing files for consumption @stumpylog ([#13935](https://github.com/paperless-ngx/paperless-ngx/pull/13935))
- Fix: Handle Celery mail task chord errors @stumpylog ([#13936](https://github.com/paperless-ngx/paperless-ngx/pull/13936))
- Fix/chore: refactor some signal-backed conversion technical debt @shamoon ([#13902](https://github.com/paperless-ngx/paperless-ngx/pull/13902))
- Fix: fix slim sidebar saved view dragging appearance @shamoon ([#13906](https://github.com/paperless-ngx/paperless-ngx/pull/13906))
- Fix: use signal-backed queries input in CF dropdown to reflect changes immediately under zoneless @shamoon ([#13901](https://github.com/paperless-ngx/paperless-ngx/pull/13901))
- Fix: use root doc metadata for filename generation @shamoon ([#13893](https://github.com/paperless-ngx/paperless-ngx/pull/13893))
- Fix: some css cleanup @shamoon ([#13891](https://github.com/paperless-ngx/paperless-ngx/pull/13891))
###### Dependencies
7 changes
- Chore(deps): Bump the uv group across 1 directory with 2 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#13958](https://github.com/paperless-ngx/paperless-ngx/pull/13958))
- docker-compose(deps): bump nginx from 1.31.3-alpine to 1.31.5-alpine in /docker/compose @[dependabot[bot]](https://github.com/apps/dependabot) ([#13909](https://github.com/paperless-ngx/paperless-ngx/pull/13909))
- docker-compose(deps): Bump greenmail/standalone from 2.1.11 to 2.1.13 in /docker/compose @[dependabot[bot]](https://github.com/apps/dependabot) ([#13907](https://github.com/paperless-ngx/paperless-ngx/pull/13907))
- Chore(deps-dev): Bump postcss-selector-parser from 6.1.2 to 6.1.4 in /src/paperless\_mail/templates in the npm\_and\_yarn group across 1 directory @[dependabot[bot]](https://github.com/apps/dependabot) ([#13905](https://github.com/paperless-ngx/paperless-ngx/pull/13905))
- Chore(deps): Bump nltk from 3.10.0 to 3.10.3 in the data-nlp-search group across 1 directory @[dependabot[bot]](https://github.com/apps/dependabot) ([#13917](https://github.com/paperless-ngx/paperless-ngx/pull/13917))
- Chore(deps): Bump the frontend-angular-dependencies group across 1 directory with 14 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#13915](https://github.com/paperless-ngx/paperless-ngx/pull/13915))
- Chore(deps): Bump djangorestframework from 3.17.1 to 3.17.2 in the uv group across 1 directory @[dependabot[bot]](https://github.com/apps/dependabot) ([#13904](https://github.com/paperless-ngx/paperless-ngx/pull/13904))
###### All App Changes
22 changes
- Chore(deps): Bump the uv group across 1 directory with 2 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#13958](https://github.com/paperless-ngx/paperless-ngx/pull/13958))
- Chore(deps-dev): Bump postcss-selector-parser from 6.1.2 to 6.1.4 in /src/paperless\_mail/templates in the n
_[Truncated at 4000 characters — full notes: https://github.com/paperless-ngx/paperless-ngx/releases/tag/v3.1.3]_
### v3.1.2 — Paperless-ngx v3.1.2
- Date: 2026-09-01
- Version: v3.1.2
- Original notes: https://github.com/paperless-ngx/paperless-ngx/releases/tag/v3.1.2
- Permalink: https://whatsnew.fyi/product/paperless-ngx/releases/v3.1.2
- **fixed** — Fix dark mode select disabled color and ensure disabled cursor on display mode dropdown
- **fixed** — Add disable to the drag-drop list component
- **security** — Address security issue GHSA-2jhj-xqrq-rmrq
##### paperless-ngx 3.1.2
> [!NOTE]
> This release addresses a security issue (GHSA-2jhj-xqrq-rmrq) and is recommended for all users. Our sincere thank you to the community members (and their LLMs) for reporting this.
###### Bug Fixes
- Fix: fix dark mode select disabled color, ensure disabled cursor on display mode dropdown @shamoon ([#13881](https://github.com/paperless-ngx/paperless-ngx/pull/13881))
- Fix: add disable to the drag-drop list component @shamoon ([#13880](https://github.com/paperless-ngx/paperless-ngx/pull/13880))
###### Documentation
- Chore: update screenshots for v3+ @shamoon ([#13883](https://github.com/paperless-ngx/paperless-ngx/pull/13883))
###### All App Changes
2 changes
- Fix: fix dark mode select disabled color, ensure disabled cursor on display mode dropdown @shamoon ([#13881](https://github.com/paperless-ngx/paperless-ngx/pull/13881))
- Fix: add disable to the drag-drop list component @shamoon ([#13880](https://github.com/paperless-ngx/paperless-ngx/pull/13880))
### v3.1.1 — Paperless-ngx v3.1.1
- Date: 2026-08-31
- Version: v3.1.1
- Original notes: https://github.com/paperless-ngx/paperless-ngx/releases/tag/v3.1.1
- Permalink: https://whatsnew.fyi/product/paperless-ngx/releases/v3.1.1
- **fixed** — LLM suggestions no longer remove existing metadata from prompt and do not drop name suggestions
- **fixed** — Set global search earlier to avoid awaiting debounce
- **fixed** — Make sidebar responsive and centralize size values
- **changed** — Show existing count for AI suggestions
- **fixed** — Simplify LLM suggestions schema and fix docstrings
- **changed** — Make IMAP port required and improve error display
- **fixed** — Ensure UI reset of suggestionsLoading when changing documents
- **fixed** — Always pass a non-empty API key for OpenAI-like servers
- **fixed** — Hide slim sidebar scrollbar in browsers with native scrollbars
- **fixed** — Correct sharelink bundle and document link permissions display bugs
- **fixed** — Immediately re-add document to index after trash restore
- **fixed** — Fix navbar brand anchor size and Safari position jitter
##### paperless-ngx 3.1.1
###### Bug Fixes
- Fix: 3.1.0 llm suggestions remove existing metadata from prompt, dont drop name suggestions @shamoon ([#13866](https://github.com/paperless-ngx/paperless-ngx/pull/13866))
- Fix: set global search earlier to avoid awaiting debounce @shamoon ([#13865](https://github.com/paperless-ngx/paperless-ngx/pull/13865))
- Fix: responsive sidebar, centralize and make sizes saner @shamoon ([#13863](https://github.com/paperless-ngx/paperless-ngx/pull/13863))
- Tweak/fix: show existing count for ai suggestions @shamoon ([#13861](https://github.com/paperless-ngx/paperless-ngx/pull/13861))
- Fix: 3.1.0 llm suggestions simplify schema, fix docstrings @shamoon ([#13850](https://github.com/paperless-ngx/paperless-ngx/pull/13850))
- Fix: ensure ui reset of suggestionsLoading when changing docs @shamoon ([#13840](https://github.com/paperless-ngx/paperless-ngx/pull/13840))
- Fix: always pass a non-empty api key for OpenAI-like servers @shamoon ([#13838](https://github.com/paperless-ngx/paperless-ngx/pull/13838))
- Fix: hide slim sidebar scrollbar in browsers with stupid scrollbars @shamoon ([#13837](https://github.com/paperless-ngx/paperless-ngx/pull/13837))
- Fix: correct sharelink bundle + document link permissions display bugs @shamoon ([#13827](https://github.com/paperless-ngx/paperless-ngx/pull/13827))
- Fix: immediately re-add doc to index after trash restore @shamoon ([#13818](https://github.com/paperless-ngx/paperless-ngx/pull/13818))
- Fix: navbar brand anchor size + Safari position jitter @shamoon ([#13810](https://github.com/paperless-ngx/paperless-ngx/pull/13810))
###### All App Changes
12 changes
- Fix: 3.1.0 llm suggestions remove existing metadata from prompt, dont drop name suggestions @shamoon ([#13866](https://github.com/paperless-ngx/paperless-ngx/pull/13866))
- Fix: set global search earlier to avoid awaiting debounce @shamoon ([#13865](https://github.com/paperless-ngx/paperless-ngx/pull/13865))
- Fix: responsive sidebar, centralize and make sizes saner @shamoon ([#13863](https://github.com/paperless-ngx/paperless-ngx/pull/13863))
- Tweak/fix: show existing count for ai suggestions @shamoon ([#13861](https://github.com/paperless-ngx/paperless-ngx/pull/13861))
- Fix: 3.1.0 llm suggestions simplify schema, fix docstrings @shamoon ([#13850](https://github.com/paperless-ngx/paperless-ngx/pull/13850))
- Fixhancement: make imap port required, better error display @shamoon ([#13845](https://github.com/paperless-ngx/paperless-ngx/pull/13845))
- Fix: ensure ui reset of suggestionsLoading when changing docs @shamoon ([#13840](https://github.com/paperless-ngx/paperless-ngx/pull/13840))
- Fix: always pass a non-empty api key for OpenAI-like servers @shamoon ([#13838](https://github.com/paperless-ngx/paperless-ngx/pull/13838))
- Fix: hide slim sidebar scrollbar in browsers with stupid scrollbars @shamoon ([#13837](https://github.com/paperless-ngx/paperless-ngx/pull/13837))
- Fix: correct sharelink bundle + document link permissions display bugs @shamoon ([#13827](https://github.com/paperless-ngx/paperless-ngx/pull/13827))
- Fix: immediately re-add doc to index after trash restore @shamoon ([#13818](https://github.com/paperless-ngx/paperless-ngx/pull/13818))
- Fix: navbar brand anchor size + Safari position jitter @shamoon ([#13810](https://github.com/paperless-ngx/paperless-ngx/pull/13810))
### v3.1.0 — Paperless-ngx v3.1.0
- Date: 2026-08-27
- Version: v3.1.0
- Original notes: https://github.com/paperless-ngx/paperless-ngx/releases/tag/v3.1.0
- Permalink: https://whatsnew.fyi/product/paperless-ngx/releases/v3.1.0
- **added** — Apply AI suggestions workflow action
- **added** — Support using remote OCR engines selectively
- **added** — Websocket heartbeat
- **added** — Sync OIDC groups to superuser and staff roles
- **added** — Merge documents as versions
- **added** — Allow selection of compression type and level during export
- **added** — Customizable icons for saved views
- **added** — Add --url argument to document_fuzzy_match to improve output
- **added** — Updates remote OCR parser to respect the OCR mode setting
- **changed** — Apply visual tweaks to welcome widget
- **changed** — Better support long list of views in documents list
- **changed** — Add count badge to versions dropdown
- **changed** — Add jitter to IMAP polling schedule
- **changed** — Render paperless_ai prompts via Jinja2 templates instead of f-strings
- **changed** — Prefer existing tags, types, correspondents, and storage paths in AI suggestions
- **changed** — Reduce memory and I/O overhead of the document exporter during zip exports
- **changed** — More efficient mail fetching
- **fixed** — Prevent config autocomplete craziness
- **fixed** — Prevent token re-use in dropdown filtering
- **fixed** — Exclude version documents from bulk edit all
##### paperless-ngx 3.1.0
###### Features / Enhancements
- Enhancement: Apply AI suggestions workflow action @shamoon ([#13639](https://github.com/paperless-ngx/paperless-ngx/pull/13639))
- Enhancement: welcome widget visual tweaks @shamoon ([#13794](https://github.com/paperless-ngx/paperless-ngx/pull/13794))
- Enhancement: support using remote OCR engines selectively @shamoon ([#13633](https://github.com/paperless-ngx/paperless-ngx/pull/13633))
- Enhancement: websocket heartbeat @oktupol ([#13739](https://github.com/paperless-ngx/paperless-ngx/pull/13739))
- Enhancement: more v3 ui tweaks @shamoon ([#13774](https://github.com/paperless-ngx/paperless-ngx/pull/13774))
- Tweak: better support long list of views in documents list @shamoon ([#13769](https://github.com/paperless-ngx/paperless-ngx/pull/13769))
- QoL: add count badge to versions dropdown @shamoon ([#13753](https://github.com/paperless-ngx/paperless-ngx/pull/13753))
- Tweakhancement: add jitter to IMAP polling schedule @shamoon ([#13734](https://github.com/paperless-ngx/paperless-ngx/pull/13734))
- Enhancement: sync OIDC groups to superuser and staff roles @BeSovereign ([#13060](https://github.com/paperless-ngx/paperless-ngx/pull/13060))
- Enhancement: merge documents as versions @shamoon ([#13515](https://github.com/paperless-ngx/paperless-ngx/pull/13515))
- Tweak: adjust modal proportions for small screens @shamoon ([#13728](https://github.com/paperless-ngx/paperless-ngx/pull/13728))
- Refactor: render paperless\_ai prompts via Jinja2 templates instead of f-strings @stumpylog ([#13698](https://github.com/paperless-ngx/paperless-ngx/pull/13698))
- Tweak: small visual tweaks / improvements \& fixes @shamoon ([#13700](https://github.com/paperless-ngx/paperless-ngx/pull/13700))
- Enhancement: prefer existing tags, types, correspondents, and storage paths in AI suggestions @stumpylog ([#13676](https://github.com/paperless-ngx/paperless-ngx/pull/13676))
- Tweak: tweak permissions menu labels for shared user-dependent views @shamoon ([#13685](https://github.com/paperless-ngx/paperless-ngx/pull/13685))
- Feature: Allow selection of compression type and and level during export @stumpylog ([#13661](https://github.com/paperless-ngx/paperless-ngx/pull/13661))
- Enhancement: customizable icons for saved views @shamoon ([#13388](https://github.com/paperless-ngx/paperless-ngx/pull/13388))
- Enhancement: Add --url argument to document\_fuzzy\_match to improve output @lukyjay ([#13123](https://github.com/paperless-ngx/paperless-ngx/pull/13123))
- Feature: Updates remote OCR parser to respect the OCR mode setting @stumpylog ([#13408](https://github.com/paperless-ngx/paperless-ngx/pull/13408))
- Tweak: improve no ML suggestions UX @shamoon ([#13621](https://github.com/paperless-ngx/paperless-ngx/pull/13621))
- Performance: reduce memory and I/O overhead of the document exporter during zip exports @stumpylog ([#13490](https://github.com/paperless-ngx/paperless-ngx/pull/13490))
- QoL: make name button text on attribute pages selectable @shamoon ([#13592](https://github.com/paperless-ngx/paperless-ngx/pull/13592))
- Performance: More efficient mail fetching @stumpylog ([#13432](https://github.com/paperless-ngx/paperless-ngx/pull/13432))
###### Bug Fixes
- Fix: prevent config autocomplete craziness @shamoon ([#13808](https://github.com/paperless-ngx/paperless-ngx/pull/13808))
- Fix/performance: prevent token re-use in dropdown filtering, also a perf thing @shamoon ([#13804](https://github.com/paperless-ngx/paperless-ngx/pull/13804))
- Fix: exclude version documents from bulk edit "all" @shamoon ([#13791](https://github.com/paperless-ngx/paperless-ngx/pull/13791))
- Fix: fix bottom mobile nav buttons on Android @shamoon ([#13780](https://github.com/paperless-ngx/paperless-ngx/pull/13780))
- Fix: lazy import guardian modules to fix search language setting @shamoon ([#13768](https://github.com/paperless-ngx/paperless-ngx/pull/13768))
- Fix: version indexing fixes @shamoon ([#13737](https
_[Truncated at 4000 characters — full notes: https://github.com/paperless-ngx/paperless-ngx/releases/tag/v3.1.0]_
### v3.0.5 — Paperless-ngx v3.0.5
- Date: 2026-08-01
- Version: v3.0.5
- Original notes: https://github.com/paperless-ngx/paperless-ngx/releases/tag/v3.0.5
- Permalink: https://whatsnew.fyi/product/paperless-ngx/releases/v3.0.5
- **fixed** — Accept Whoosh-era abbreviated relative-date units (yrs, mos, wks, etc) in search queries
- **fixed** — Fix edit dialog error change detection
- **fixed** — Key the AI suggestion cache by model and endpoint
- **fixed** — Validate custom field values in bulk operations
- **fixed** — Better handle empty fields from AI suggestions
- **fixed** — Normalize monetary decimal symbol by locale
- **fixed** — Fold overflowing path text in sanity checker
- **fixed** — Correct delayed add field button for custom fields
- **fixed** — Hide attributes collapse / show button without UI settings
- **fixed** — Consolidate born-digital PDF detection between archive decision and OCR
- **fixed** — Prevent scale vs page loop in pngx PDF viewer
- **fixed** — Handle hidden line breaks in email subjects when sending email
- **fixed** — Avoid NotSupportedError from document_importer on MariaDB
- **fixed** — Exclude next-period start from relative date-range filters
- **fixed** — Close non-atomic db connections in before_task_publish
- **fixed** — Fix Enter selection in search autocomplete
- **changed** — Use server side iterators during LLM index updating
- **changed** — Improve sqlite-vec point-delete for document chunks
- **changed** — Adjust doc details button toolbar flow
##### paperless-ngx 3.0.5
###### Bug Fixes
- Fix: accept Whoosh-era abbreviated relative-date units (yrs, mos, wks, etc) in search queries @stumpylog ([#13486](https://github.com/paperless-ngx/paperless-ngx/pull/13486))
- Fix: fix edit dialog error change detection @shamoon ([#13483](https://github.com/paperless-ngx/paperless-ngx/pull/13483))
- Fix: key the AI suggestion cache by model and endpoint @lunetics ([#13449](https://github.com/paperless-ngx/paperless-ngx/pull/13449))
- Fix: validate custom field values in bulk operations @shamoon ([#13457](https://github.com/paperless-ngx/paperless-ngx/pull/13457))
- Fixhancement: better handle empty fields from AI suggestions @shamoon ([#13454](https://github.com/paperless-ngx/paperless-ngx/pull/13454))
- Fix: normalize monetary decimal symbol by locale @shamoon ([#13427](https://github.com/paperless-ngx/paperless-ngx/pull/13427))
- Fix: fold overflowing path text in sanity checker @stumpylog ([#13426](https://github.com/paperless-ngx/paperless-ngx/pull/13426))
- Fix: correct delayed add field button for custom fields @shamoon ([#13424](https://github.com/paperless-ngx/paperless-ngx/pull/13424))
- Fix: hide attributes collapse / show button without UI settings @shamoon ([#13425](https://github.com/paperless-ngx/paperless-ngx/pull/13425))
- Fix: consolidate born-digital PDF detection between archive decision and OCR @stumpylog ([#13409](https://github.com/paperless-ngx/paperless-ngx/pull/13409))
- Fix: prevent scale vs page loop in pngx PDF viewer @shamoon ([#13406](https://github.com/paperless-ngx/paperless-ngx/pull/13406))
- Fix: handle hidden line breaks in email subjects when sending email @shamoon ([#13402](https://github.com/paperless-ngx/paperless-ngx/pull/13402))
- Fix: avoid NotSupportedError from document\_importer on MariaDB @stumpylog ([#13400](https://github.com/paperless-ngx/paperless-ngx/pull/13400))
- Fix: exclude next-period start from relative date-range filters @stumpylog ([#13381](https://github.com/paperless-ngx/paperless-ngx/pull/13381))
- Fix: close non-atomic db connections in before\_task\_publish @shamoon ([#13366](https://github.com/paperless-ngx/paperless-ngx/pull/13366))
- Chore/fix: refactor frontend task service @shamoon ([#13365](https://github.com/paperless-ngx/paperless-ngx/pull/13365))
- Fix: fix Enter selection in search autocomplete @shamoon ([#13361](https://github.com/paperless-ngx/paperless-ngx/pull/13361))
###### Documentation
- Documentation: PAPERLESS\_CONSUMER\_IGNORE\_PATTERNS clarifications @shamoon ([#13489](https://github.com/paperless-ngx/paperless-ngx/pull/13489))
- Documentation: Add Password Removal workflow action documentation @stumpylog ([#13377](https://github.com/paperless-ngx/paperless-ngx/pull/13377))
###### Dependencies
- Chore(deps): Bump pymdown-extensions from 10.21.3 to 11.0 in the uv group across 1 directory @[dependabot[bot]](https://github.com/apps/dependabot) ([#13378](https://github.com/paperless-ngx/paperless-ngx/pull/13378))
###### All App Changes
21 changes
- Fix: accept Whoosh-era abbreviated relative-date units (yrs, mos, wks, etc) in search queries @stumpylog ([#13486](https://github.com/paperless-ngx/paperless-ngx/pull/13486))
- Fix: fix edit dialog error change detection @shamoon ([#13483](https://github.com/paperless-ngx/paperless-ngx/pull/13483))
- Performance: sqlite-vec point-delete for document chunks @stumpylog ([#13438](https://github.com/paperless-ngx/paperless-ngx/pull/13438))
- Fix: key the AI suggestion cache by model and endpoint @lunetics ([#13449](https://github.com/paperless-ngx/paperless-ngx/pull/13449))
- Fix: validate custom field values in bulk operations @shamoon ([#13457](https://github.com/paperless-ngx/paperless-ngx/pull/13457))
- Fixhancement: better handle empty fields from AI suggestions @shamoon ([#13454](https://github.com/paperless-ngx/paperless-ngx/pull/13454))
- Performance: Use server side iterators during LLM index updating @stumpylog ([#
_[Truncated at 4000 characters — full notes: https://github.com/paperless-ngx/paperless-ngx/releases/tag/v3.0.5]_
### v3.0.4 — Paperless-ngx v3.0.4
- Date: 2026-07-28
- Version: v3.0.4
- Original notes: https://github.com/paperless-ngx/paperless-ngx/releases/tag/v3.0.4
- Permalink: https://whatsnew.fyi/product/paperless-ngx/releases/v3.0.4
- **fixed** — Prevent pdfjs highlight scrolling from affecting the entire page
- **fixed** — Don't skip OCR/archive for tagged PDFs with no actual text
- **changed** — More efficient diacritic normalization in dropdown filtering
- **fixed** — Dedupe permission-visible documents when combined with multi-tag filters
- **changed** — Pass LLM output language to chat if specified
- **fixed** — Ensure preview reload on live changes
- **fixed** — Clamp all out-of-range possible fields
- **fixed** — Add docstring to DocumentClassifierSchema for cleaner LLM tool description
- **fixed** — Guard build_document_node against stale FK on deleted correspondent/doc type
- **fixed** — Prevent search filter loss when closing document with Escape key
- **fixed** — Fix frontend permissions display for stats/system perms
- **changed** — Prefetch notes and custom fields for LLM index text building
- **changed** — Scope llm index updates to actually modified documents
- **changed** — Resolve npm provenance issues with chokidar and semver
##### paperless-ngx 3.0.4
###### Bug Fixes
- Fix: prevent pdfjs highlight scrolling from affecting the entire page @shamoon ([#13355](https://github.com/paperless-ngx/paperless-ngx/pull/13355))
- Fix: don't skip OCR/archive for tagged PDFs with no actual text @stumpylog ([#13351](https://github.com/paperless-ngx/paperless-ngx/pull/13351))
- Performance: more efficient diacritic normalization in dropdown filtering @shamoon ([#13347](https://github.com/paperless-ngx/paperless-ngx/pull/13347))
- Fix: dedupe permission-visible documents when combined with multi-tag filters @stumpylog ([#13345](https://github.com/paperless-ngx/paperless-ngx/pull/13345))
- Fixhancement: pass LLM output language to chat if specified @shamoon ([#13340](https://github.com/paperless-ngx/paperless-ngx/pull/13340))
- Fix: ensure preview reload on live changes @shamoon ([#13321](https://github.com/paperless-ngx/paperless-ngx/pull/13321))
- Fix: clamp all out out-of-range possible fields @stumpylog ([#13316](https://github.com/paperless-ngx/paperless-ngx/pull/13316))
- Fix: add docstring to DocumentClassifierSchema for cleaner LLM tool description @stumpylog ([#13315](https://github.com/paperless-ngx/paperless-ngx/pull/13315))
- Fix: guard build\_document\_node against stale FK on deleted correspondent/doc type @stumpylog ([#13318](https://github.com/paperless-ngx/paperless-ngx/pull/13318))
- Fix: prevent search filter loss when closing document with Escape key @shamoon ([#13317](https://github.com/paperless-ngx/paperless-ngx/pull/13317))
- Fix: fix frontend permissions display for stats/system perms @shamoon ([#13305](https://github.com/paperless-ngx/paperless-ngx/pull/13305))
###### Documentation
- Documentation: fix PAPERLESS\_AI\_LLM\_OUTPUT\_LANGUAGE heading level @SuperSandro2000 ([#13341](https://github.com/paperless-ngx/paperless-ngx/pull/13341))
###### Dependencies
- Chore: resolve npm provenance issues with chokidar and semver @shamoon ([#13323](https://github.com/paperless-ngx/paperless-ngx/pull/13323))
###### All App Changes
14 changes
- Fix: prevent pdfjs highlight scrolling from affecting the entire page @shamoon ([#13355](https://github.com/paperless-ngx/paperless-ngx/pull/13355))
- Fix: don't skip OCR/archive for tagged PDFs with no actual text @stumpylog ([#13351](https://github.com/paperless-ngx/paperless-ngx/pull/13351))
- Performance: more efficient diacritic normalization in dropdown filtering @shamoon ([#13347](https://github.com/paperless-ngx/paperless-ngx/pull/13347))
- Performance: prefetch notes and custom fields for LLM index text building @stumpylog ([#13350](https://github.com/paperless-ngx/paperless-ngx/pull/13350))
- Fix: dedupe permission-visible documents when combined with multi-tag filters @stumpylog ([#13345](https://github.com/paperless-ngx/paperless-ngx/pull/13345))
- Performance: Scope llm index updates to actually modified documents @stumpylog ([#13322](https://github.com/paperless-ngx/paperless-ngx/pull/13322))
- Fixhancement: pass LLM output language to chat if specified @shamoon ([#13340](https://github.com/paperless-ngx/paperless-ngx/pull/13340))
- Chore: resolve npm provenance issues with chokidar and semver @shamoon ([#13323](https://github.com/paperless-ngx/paperless-ngx/pull/13323))
- Fix: ensure preview reload on live changes @shamoon ([#13321](https://github.com/paperless-ngx/paperless-ngx/pull/13321))
- Fix: clamp all out out-of-range possible fields @stumpylog ([#13316](https://github.com/paperless-ngx/paperless-ngx/pull/13316))
- Fix: add docstring to DocumentClassifierSchema for cleaner LLM tool description @stumpylog ([#13315](https://github.com/paperless-ngx/paperless-ngx/pull/13315))
- Fix: guard build\_document\_node against stale FK on deleted correspondent/doc type @stumpylog ([#13318](https://github.com/paperless-ngx/paperless-ngx/pull/13318))
- Fix: prevent search filter loss when closing document with Escape key @shamoon ([#13317](https://github.com/paperles
_[Truncated at 4000 characters — full notes: https://github.com/paperless-ngx/paperless-ngx/releases/tag/v3.0.4]_
### v3.0.3 — Paperless-ngx v3.0.3
- Date: 2026-07-25
- Version: v3.0.3
- Original notes: https://github.com/paperless-ngx/paperless-ngx/releases/tag/v3.0.3
- Permalink: https://whatsnew.fyi/product/paperless-ngx/releases/v3.0.3
- **fixed** — Preserve document fields during Gotenberg conversion to PDF
- **fixed** — Make email date aware as soon as possible during parsing
- **fixed** — Handle a plain string as Celery sometimes provides for the traceback
- **fixed** — Emit the torch index into the requirements.txt for people still using it
- **fixed** — Handle notes without a user when building the search index
- **changed** — PAPERLESS_ALLAUTH_TRUSTED_PROXY_COUNT environment variable handling
- **changed** — Adjust top navbar wrapping when AI chat button visible
##### paperless-ngx 3.0.3
###### Bug Fixes
- Fixhancement: PAPERLESS\_ALLAUTH\_TRUSTED\_PROXY\_COUNT @shamoon ([#13281](https://github.com/paperless-ngx/paperless-ngx/pull/13281))
- Fix: preserve document fields during Gotenberg conversion to PDF @stumpylog ([#13271](https://github.com/paperless-ngx/paperless-ngx/pull/13271))
- Fix: Makes the email date aware as soon as possible during parsing @stumpylog ([#13266](https://github.com/paperless-ngx/paperless-ngx/pull/13266))
- Fix: Handle a plain string as Celery sometimes provides for the traceback @stumpylog ([#13267](https://github.com/paperless-ngx/paperless-ngx/pull/13267))
- Fix: Emit the torch index into the requirements.txt for people still using it @stumpylog ([#13265](https://github.com/paperless-ngx/paperless-ngx/pull/13265))
- Fix: handle notes without a user when building the search index @matthiasmast ([#13260](https://github.com/paperless-ngx/paperless-ngx/pull/13260))
###### Documentation
- Docs: warn bare-metal users about stale files when upgrading @stumpylog ([#13296](https://github.com/paperless-ngx/paperless-ngx/pull/13296))
- Documentation: Add the NumPy CPU baseline increase to the migration guide @stumpylog ([#13269](https://github.com/paperless-ngx/paperless-ngx/pull/13269))
###### Maintenance
- Fix: Emit the torch index into the requirements.txt for people still using it @stumpylog ([#13265](https://github.com/paperless-ngx/paperless-ngx/pull/13265))
###### All App Changes
6 changes
- Fixhancement: PAPERLESS\_ALLAUTH\_TRUSTED\_PROXY\_COUNT @shamoon ([#13281](https://github.com/paperless-ngx/paperless-ngx/pull/13281))
- Tweak: adjust top navbar wrapping when AI chat button visible @shamoon ([#13280](https://github.com/paperless-ngx/paperless-ngx/pull/13280))
- Fix: preserve document fields during Gotenberg conversion to PDF @stumpylog ([#13271](https://github.com/paperless-ngx/paperless-ngx/pull/13271))
- Fix: Makes the email date aware as soon as possible during parsing @stumpylog ([#13266](https://github.com/paperless-ngx/paperless-ngx/pull/13266))
- Fix: Handle a plain string as Celery sometimes provides for the traceback @stumpylog ([#13267](https://github.com/paperless-ngx/paperless-ngx/pull/13267))
- Fix: handle notes without a user when building the search index @matthiasmast ([#13260](https://github.com/paperless-ngx/paperless-ngx/pull/13260))
### v3.0.2 — Paperless-ngx v3.0.2
- Date: 2026-07-24
- Version: v3.0.2
- Original notes: https://github.com/paperless-ngx/paperless-ngx/releases/tag/v3.0.2
- Permalink: https://whatsnew.fyi/product/paperless-ngx/releases/v3.0.2
- **fixed** — Fix broken migration in 3.0.1
##### paperless-ngx 3.0.2
###### Bug Fixes
- Fix: fix broken migration in 3.0.1 @shamoon ([#13242](https://github.com/paperless-ngx/paperless-ngx/pull/13242))
###### All App Changes
- Fix: fix broken migration in 3.0.1 @shamoon ([#13242](https://github.com/paperless-ngx/paperless-ngx/pull/13242))
### v3.0.1 — Paperless-ngx v3.0.1
- Date: 2026-07-23
- Version: v3.0.1
- Original notes: https://github.com/paperless-ngx/paperless-ngx/releases/tag/v3.0.1
- Permalink: https://whatsnew.fyi/product/paperless-ngx/releases/v3.0.1
- **fixed** — selection_data re-derives the filtered document set 5 times over
- **fixed** — exclude source document from its own RAG similarity results
- **fixed** — split mailrule maximum_age clamp into its own migration
- **fixed** — correct URL for W001 check
- **fixed** — ensure create dialog uses correct attribute type
- **fixed** — correct database engine from postgres to postgresql
- **fixed** — remove unnecessary .distinct() dominating document list queries
- **fixed** — wrap non-breaking words in chat messages and handle whitespace
- **fixed** — tag/custom-field document_count scales badly with tag count
- **fixed** — batch document user_can_change checks to avoid per-row N+1
- **fixed** — app title restoration
- **fixed** — handle long wrapping titles in AI chat document list
- **changed** — bump postcss from 8.5.6 to 8.5.22
- **changed** — bump pyasn1 from 0.6.3 to 0.6.4
- **changed** — reword Settings > Default permissions description for clarity
> [!WARNING]
> An issue with database migrations prevents v3.0.1 from running, users should upgrade to v3.0.2
##### paperless-ngx 3.0.1
###### Bug Fixes
- Fix: selection\_data re-derives the filtered document set 5 times over @stumpylog ([#13229](https://github.com/paperless-ngx/paperless-ngx/pull/13229))
- Fix: exclude source document from its own RAG similarity results @stumpylog ([#13233](https://github.com/paperless-ngx/paperless-ngx/pull/13233))
- Fix: split mailrule maximum\_age clamp into its own migration @stumpylog ([#13231](https://github.com/paperless-ngx/paperless-ngx/pull/13231))
- Chore: mark yes in confirm button for translation @shamoon ([#13225](https://github.com/paperless-ngx/paperless-ngx/pull/13225))
- Fix: correct URL for W001 check @shamoon ([#13220](https://github.com/paperless-ngx/paperless-ngx/pull/13220))
- Fix: ensure create dialog uses correct attribute type @shamoon ([#13221](https://github.com/paperless-ngx/paperless-ngx/pull/13221))
- Fix: correct database engine from postgres to postgresql @OberstVonGatow ([#13213](https://github.com/paperless-ngx/paperless-ngx/pull/13213))
- Fix: remove unnecessary .distinct() dominating document list queries @stumpylog ([#13205](https://github.com/paperless-ngx/paperless-ngx/pull/13205))
- Fix: also wrap non-breaking words in chat messages, handle whitespace @shamoon ([#13211](https://github.com/paperless-ngx/paperless-ngx/pull/13211))
- Fix: tag/custom-field document\_count scales badly with tag count @stumpylog ([#13203](https://github.com/paperless-ngx/paperless-ngx/pull/13203))
- Fix: batch document user\_can\_change checks to avoid per-row N+1 @stumpylog ([#13204](https://github.com/paperless-ngx/paperless-ngx/pull/13204))
- Fix: fix app title restoration @shamoon ([#13208](https://github.com/paperless-ngx/paperless-ngx/pull/13208))
- Fix: handle long wrapping titles in AI chat document list @shamoon ([#13206](https://github.com/paperless-ngx/paperless-ngx/pull/13206))
###### Dependencies
- Chore(deps-dev): Bump postcss from 8.5.6 to 8.5.22 in /src/paperless\_mail/templates in the npm\_and\_yarn group across 1 directory @[dependabot[bot]](https://github.com/apps/dependabot) ([#13236](https://github.com/paperless-ngx/paperless-ngx/pull/13236))
- Chore(deps): Bump pyasn1 from 0.6.3 to 0.6.4 in the uv group across 1 directory @[dependabot[bot]](https://github.com/apps/dependabot) ([#13237](https://github.com/paperless-ngx/paperless-ngx/pull/13237))
- Chore(deps): Bump the uv group across 1 directory with 8 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#13189](https://github.com/paperless-ngx/paperless-ngx/pull/13189))
###### All App Changes
17 changes
- Chore(deps-dev): Bump postcss from 8.5.6 to 8.5.22 in /src/paperless\_mail/templates in the npm\_and\_yarn group across 1 directory @[dependabot[bot]](https://github.com/apps/dependabot) ([#13236](https://github.com/paperless-ngx/paperless-ngx/pull/13236))
- Fix: selection\_data re-derives the filtered document set 5 times over @stumpylog ([#13229](https://github.com/paperless-ngx/paperless-ngx/pull/13229))
- Chore: reword "Settings > Default permissions" description for clarity @NotaInutilis ([#13232](https://github.com/paperless-ngx/paperless-ngx/pull/13232))
- Chore(deps): Bump pyasn1 from 0.6.3 to 0.6.4 in the uv group across 1 directory @[dependabot[bot]](https://github.com/apps/dependabot) ([#13237](https://github.com/paperless-ngx/paperless-ngx/pull/13237))
- Chore(deps): Bump the uv group across 1 directory with 8 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#13189](https://github.com/paperless-ngx/paperless-ngx/pull/13189))
- Fix: exclude source document from its own RAG similarity results @stumpylog ([#13233](https://github.com/paperless-ngx/paperless-ngx/pull/13233))
- Fix: split mailrule maximum\_age clamp into its own migration @stumpylog ([#13231](https://github.com/paperless-ngx/pa
_[Truncated at 4000 characters — full notes: https://github.com/paperless-ngx/paperless-ngx/releases/tag/v3.0.1]_
### v3.0.0 — Paperless-ngx v3.0.0
- Date: 2026-07-22
- Version: v3.0.0
- Original notes: https://github.com/paperless-ngx/paperless-ngx/releases/tag/v3.0.0
- Permalink: https://whatsnew.fyi/product/paperless-ngx/releases/v3.0.0
- **removed** — Remove positional arguments from pre/post consume scripts
- **removed** — Decouple OCR control from archive file control
- **removed** — Drop support for API versions less than 9
- **removed** — Drop support for Python 3.10
- **removed** — Refactor advanced database settings to allow more user configuration
- **removed** — Remove API v1 compatibility
- **removed** — Remove pybzar as a barcode reader
- **removed** — Remove support for document and thumbnail encryption
- **removed** — Simplify and improve the consumer
- **added** — Replace Whoosh with tantivy search backend
- **added** — Add document parser plugin framework
- **added** — Add document file versions
- **added** — Add sharelink bundles
- **added** — Add Paperless AI
- **added** — Add remote OCR support via Azure AI
- **added** — Allow some bulk operations with all
- **security** — Enforce current permissions in autocomplete
- **security** — Bound email linkification
- **changed** — Update root modified timestamp on version changes
- **added** — Add database indexes for common query and sort patterns
##### paperless-ngx 3.0.0
###### Breaking Changes
- [BREAKING] Remove the positional arguments from the pre/post consume scripts @stumpylog ([#12573](https://github.com/paperless-ngx/paperless-ngx/pull/12573))
- [BREAKING] Decouple OCR control from archive file control @stumpylog ([#12448](https://github.com/paperless-ngx/paperless-ngx/pull/12448))
- [BREAKING] Chore: drop support for api versions \< 9 @shamoon ([#12284](https://github.com/paperless-ngx/paperless-ngx/pull/12284))
- [BREAKING] Chore: Drop support for Python 3.10 @stumpylog ([#12234](https://github.com/paperless-ngx/paperless-ngx/pull/12234))
- [BREAKING] Chore: Refactor advanced database settings to allow more user configuration @stumpylog ([#12165](https://github.com/paperless-ngx/paperless-ngx/pull/12165))
- [BREAKING] Remove API v1 compatability @stumpylog ([#12166](https://github.com/paperless-ngx/paperless-ngx/pull/12166))
- [BREAKING] Remove pybzar as a barcode reader @stumpylog ([#12065](https://github.com/paperless-ngx/paperless-ngx/pull/12065))
- [BREAKING] Remove support for document and thumbnail encryption @stumpylog ([#11850](https://github.com/paperless-ngx/paperless-ngx/pull/11850))
- [BREAKING] Feature: Simplify and improve the consumer @stumpylog ([#11753](https://github.com/paperless-ngx/paperless-ngx/pull/11753))
###### Notable Changes
- Feature: Replace Whoosh with tantivy search backend @stumpylog ([#12471](https://github.com/paperless-ngx/paperless-ngx/pull/12471))
- Feature: document parser plugin framework @stumpylog ([#12294](https://github.com/paperless-ngx/paperless-ngx/pull/12294))
- Feature: document file versions @shamoon ([#12061](https://github.com/paperless-ngx/paperless-ngx/pull/12061))
- Feature: sharelink bundles @shamoon ([#11682](https://github.com/paperless-ngx/paperless-ngx/pull/11682))
- Feature: Paperless AI @shamoon ([#10319](https://github.com/paperless-ngx/paperless-ngx/pull/10319))
- Feature: Remote OCR (Azure AI) @shamoon ([#10320](https://github.com/paperless-ngx/paperless-ngx/pull/10320))
###### Features / Enhancements
- [Beta] Paperless-ngx v3.0.0 Beta @shamoon ([#12713](https://github.com/paperless-ngx/paperless-ngx/pull/12713))
- Tweakhancement (beta): allow some bulk operations with all @shamoon ([#13193](https://github.com/paperless-ngx/paperless-ngx/pull/13193))
- Security (beta): enforce current permissions in autocomplete @shamoon ([#13188](https://github.com/paperless-ngx/paperless-ngx/pull/13188))
- Security (beta): bound email linkification @shamoon ([#13187](https://github.com/paperless-ngx/paperless-ngx/pull/13187))
- Change: update root modified timestamp on version changes @shamoon ([#13170](https://github.com/paperless-ngx/paperless-ngx/pull/13170))
- Performance: add DB indexes for common query/sort patterns @stumpylog ([#13167](https://github.com/paperless-ngx/paperless-ngx/pull/13167))
- Performance: use NgOptimizedImage for thumbnail lazy loading @shamoon ([#13169](https://github.com/paperless-ngx/paperless-ngx/pull/13169))
- Performance: Tantivy indexing optimization @Merinorus ([#13053](https://github.com/paperless-ngx/paperless-ngx/pull/13053))
- Chorehancement: update to Angular v22, 'zoneless' / 'reactive' @shamoon ([#13114](https://github.com/paperless-ngx/paperless-ngx/pull/13114))
- Enhancement (beta): support LLM timeout config @shamoon ([#13002](https://github.com/paperless-ngx/paperless-ngx/pull/13002))
- Enhancement: ignore diacritics, support multiple substring matching for UI filtering @shamoon ([#13021](https://github.com/paperless-ngx/paperless-ngx/pull/13021))
- Enhancement(beta): replace LanceDB vector store with sqlite-vec @stumpylog ([#12990](https://github.com/paperless-ngx/paperless-ngx/pull/12990))
- Enhancement (beta): Switch the AI vector store to LanceDB @stumpylog ([#12944](https://github.com/paperless-ngx/paperless-ngx/pull/12944))
- Fixhancement (beta): tasks dismiss all @shamoon ([#12949](https://github.com/paperless-n
_[Truncated at 4000 characters — full notes: https://github.com/paperless-ngx/paperless-ngx/releases/tag/v3.0.0]_