Paperless-ngx
Community-supported document management system to scan, index and archive all your documents
Alternative to: evernote, docuware, m-files
About
Versions (100)
v3.0.0-beta.rc1
2026-05-05paperless-ngx 3.0.0-beta.rc1
Notable Changes
- Feature: Paperless AI @shamoon (#10319)
- Feature: Remote OCR (Azure AI) @shamoon (#10320)
- Feature: sharelink bundles @shamoon (#11682)
- Feature: document file versions @shamoon (#12061)
- Feature: document parser plugin framework @stumpylog (#12294)
- Feature: Replace Whoosh with tantivy search backend @stumpylog (#12471)
Breaking Changes
- [BREAKING] Feature: Simplify and improve the consumer @stumpylog (#11753)
- [BREAKING] Chore: Remove support for document and thumbnail encryption @stumpylog (#11850)
- [BREAKING] Chore: Remove old migrations and re-create them fresh for v3 @stumpylog (#11854)
- [BREAKING] Chore: Remove pybzar as a barcode reader @stumpylog (#12065)
- [BREAKING] Chore: Refactor advanced database settings to allow more user configuration @stumpylog (#12165)
- [BREAKING] Chore: Remove API v1 compatibility @stumpylog (#12166)
- [BREAKING] Enhancement: saved view sharing @shamoon (#12142)
- [BREAKING] Chore: Drop support for Python 3.10 @stumpylog (#12234)
- [BREAKING] Chore: drop support for api versions < 9 @shamoon (#12284)
- Breaking: Decouple OCR control from archive file control @stumpylog (#12448)
- Breaking: Remove the positional arguments from the pre/post consume scripts @stumpylog (#12573)
Features / Enhancements
- Feature: move to trash action for workflows @JanKleine (#11176)
- Feature: password removal action @shamoon (#11656)
- Feature: password removal workflow action @shamoon (#11665)
- Enhancement: Add ‘any of’ workflow trigger filters @shamoon (#11683)
- Fixhancement: improve ASN handling with PDF operations @shamoon (#11689)
- Tweakhancement: use anchor element for management list quick filter buttons @shamoon (#11692)
- Enhancement: Add support for app oidc @paulgessinger (#11756)
- Enhancement: allow duplicates with warnings, UI for discovery @shamoon (#11815)
- Enhancement: configurable SSO groups claim @Gabgobie (#11841)
- Enhancement: support doc_id placeholder in workflow templates @shamoon (#11847)
- Enhancement: support select all for management lists @shamoon (#11889)
- Fixhancement: auto-queue llm index if needed @shamoon (#11891)
- Tweakhancement: display document id, with copy @shamoon (#11896)
- Enhancement: improve relative dates in date filter @JanKleine (#11899)
- Enhancement: user control of doc details fields @shamoon (#11906)
- Enhancement: Add setting for default PDF Editor mode @JanKleine (#11927)
- Feature: Enable users to customize date parsing via plugins @stumpylog (#11931)
- Tweakhancement: tweak bulk delete text @shamoon (#11967)
- Enhancement: improve filter drop-down performance with virtual scrolling @shamoon (#11973)
- Enhancement: per-type object page sizing @shamoon (#11977)
- Enhancement: pngx pdf viewer @shamoon (#12043)
- Tweak: improve 2-digit year parsing @shamoon (#12044)
- Enhancement: consolidate management lists into document attributes section @shamoon (#12045)
- Enhancement: option to stop processing further mail rules @shamoon (#12053)
- Enhancment: Formatted filename for single document downloads @JanKleine (#12095)
- Tweakhancement: reset to page 1 on reset filters @shamoon (#12143)
- Enhancement: prevent duplicate mail processing across rules @shamoon (#12159)
- Feature: Switch progress bar library to rich @stumpylog (#12169)
- Enhancement: Transition sanity check to rich and improve output @stumpylog (#12182)
- Enhancement: add version label filename placeholder @JanKleine (#12185)
- Enhancement: Switch all indexing to use rich @stumpylog (#12193)
- Enhancement: Improve the retagger output using rich @stumpylog (#12194)
- Tweak: Ignore version documents for workflows, trigger updated on root when versions change @shamoon (#12217)
- Enhancement: version added workflow trigger @shamoon (#12219)
- Change: use explicit create instead of cloning for versions @shamoon (#12226)
- Fixhancement: support version-specific edits @shamoon (#12233)
- Feature: Migrate import/export to rich progress @stumpylog (#12260)
- Enhancement: Show more document details in merge dialog @svenstaro (#12271)
- Enhancement: Make the StatusConsumer truly async @stumpylog (#12298)
- Feature: Add progress information to the classifier training for a better ux @stumpylog (#12331)
- Feature: Convert Tika parser to the plugin system @stumpylog (#12333)
- Feature: Convert remote AI parser to plugin system @stumpylog (#12334)
- Change: sort custom fields alphabetically by default @shamoon (#12358)
- Chore: Convert mail parser to plugin style @stumpylog (#12397)
- Chore: Convert Tesseract parser to plugin style @stumpylog (#12403)
- Enhancement: auto-hide the search bar on mobile @shamoon (#12404)
- Chore: Drop old signal and unneeded apps, transition to parser registry instead @stumpylog (#12405)
- Fixhancement: default mail-created correspondent matching to exact @shamoon (#12414)
- Feature: Transition all checksums to use SHA256 @stumpylog (#12432)
- Tweakhancement: show file extension in StoragePath test @shamoon (#12452)
- Fixhancement: include sharelinks + bundles in export/import @shamoon (#12479)
- Enhancement: unify text search to use tantivy @shamoon (#12485)
- Security enhancement: allow opt-in blocking internal mail hosts @shamoon (#12502)
- Feature: Consumer logging correlation @stumpylog (#12510)
- Enhancement: add view_global_statistics and view_system_status permissions @shamoon (#12530)
- Enhancement: validate and sanitize uploaded logos @shamoon (#12551)
- Feature: Document fuzzy match improvements @stumpylog (#12579)
- Feature: Tune SQLite default settings for increased speed @stumpylog (#12580)
- Enhancement: add highlighting to title + content searches @shamoon (#12593)
- Tweak: remove stale index warning @shamoon (#12616)
- Feature: Allow monitoring access to tasks summary @stumpylog (#12624)
- Feature: Redesign the task system @stumpylog (#12584)
- Enhancement: new Tasks UI @shamoon (#12614)
- Enhancement: show small task summary in system status @shamoon (#12634)
- Tweakhancement: tweak tasks UI, make open doc an anchor @shamoon (#12658)
- Tweakhancement: make upload notification open an anchor link @shamoon (#12659)
- Enhancement: chat message document links @shamoon (#12670)
- Tweakhancement: localize some more task result messages @shamoon (#12672)
- Enhancement: Paperless-ngx v3 Logo @shamoon (#12673)
- Change: separate llm suggestions endpoint @shamoon (#12675)
- Tweakhancement: use fixed position instead of display none for printing @shamoon (#12706)
- Feature: Further reduce document importer memory usage @stumpylog (#12707)
- Tweak: add icons to ai suggestion dropdown @shamoon (#12708)
- Fixhancement: include trashed documents in document exporter/importer @JanKleine (#12425)
- Enhancement: Paperless-ngx v3 Logo @shamoon (#12673)
- Enhancement: saved view sharing @shamoon (#12142)
- Chore: separate actions from bulk edit endpoint @shamoon (#12286)
Performance Improvements
- Performance: improve treenode inefficiencies @shamoon (#11606)
- Performance: pre-compress static files on ARM64 @stumpylog (#11721)
- Performance: faster statistics panel on dashboard @Merinorus (#11760)
- Performance fix: use subqueries to improve object retrieval in large installs @shamoon (#11950)
- Performance: Improve exporter memory efficiency @stumpylog (#12236)
- Performance: Further export memory improvements @stumpylog (#12273)
- Lazy imports of the heavy AI modules @stumpylog (#12275)
- Performance: Stream JSON during import for memory improvements @stumpylog (#12276)
- Performance: support passing selection data with filtered document requests @shamoon (#12300)
- Performance: deprecate and remove usage of
allin API results @shamoon (#12309) - Performance: support bulk edit without id lists @shamoon (#12355)
- Performance: Increases workflow related M2M prefetching @stumpylog (#12618)
- Performance: Resolves another N+1 query related to custom fields @stumpylog (#12617)
Bug Fixes
- Fix: re-run ASN check after barcode detection @shamoon (#11681)
- Fix: use explicit order field for workflow actions @shamoon (#11781)
- Fix: ensure horizontal scroll for long tag names in list, wrap tags without parent @shamoon (#11811)
- Fix: fix tag list horizontal scroll, again @shamoon (#11839)
- Fix: ensure css color-scheme for dark mode @shamoon (#11855)
- Fix: use correct field id for overrides @shamoon (#11869)
- Fix: Running management scripts under rootless could fail @stumpylog (#11870)
- Fixhancement: change date calculation for ‘this year’ to include future documents @shamoon (#11884)
- Fix: extract all ids for nested tags @shamoon (#11888)
- Fix: fix broken docker create_classifier command in 2.20.6 @shamoon (#11965)
- Fix: prevent infinite loading crash in mail component @shamoon (#11978)
- Fix: Handle an OOM kill of celery workers in the task handler @stumpylog (#12040)
- Fix(dev): history causing infinite requests @shamoon (#12059)
- Fix: correct user dropdown button icon styling @shamoon (#12092)
- Fix: unify POSTs when toggling sidebar to prevent db lock @shamoon (#12129)
- Fix: pass api_base to OpenAIEmbedding @shamoon (#12151)
- Fix: correct page count by separating display vs collection sizes for tags @shamoon (#12170)
- Fixhancement: config option reset @shamoon (#12176)
- Fixhancement: show sequential + id version labels, fix padding @shamoon (#12196)
- Fix: correct doc version filename handling @shamoon (#12223)
- Fix: enforce path limit for db filename fields @shamoon (#12235)
- Fix: apply ordering after annotating tag document count @shamoon (#12238)
- Fix: use maxsplit=1 in Redis URL parsing to handle URLs with multiple colons @cryptomilk (#12239)
- Fix: support string coercion in filepath jinja templates @shamoon (#12244)
- Fix (dev): Add saved view compatibility in API version 9 @shamoon (#12280)
- Fix: prevent stale db filename during workflow actions @shamoon (#12289)
- Fix: use effective content for matching and suggestion content @shamoon (#12293)
- Fix: prevent wrapping with larger amounts of tags on small cards, reset moreTags setting to correct count @shamoon (#12302)
- Fix: Removes the double exec that prevented migrations from running @stumpylog (#12317)
- Fixhancement: clear descendant selections in dropdown when parent toggled @shamoon (#12326)
- Fix: correct dropdown list active color in dark mode @shamoon (#12328)
- Fixhancement: only offer basic auth for appropriate requests @shamoon (#12362)
- Fix: Don’t try to update the user when running as non-root @stumpylog (#12365)
- Fix: fix file button hover color in dark mode @shamoon (#12367)
- Fix: remove pagination from document notes api spec @shamoon (#12388)
- Fix: avoid moving files if already moved @shamoon (#12389)
- Fix: Scope the workflow saves to prevent clobbering filename/archive_filename @stumpylog (#12390)
- Fix: don’t try to usermod/groupmod when non-root + update docs @stumpylog (#12391)
- Fix: validate date CF value in serializer @shamoon (#12410)
- Fix: Respect workflow change_groups during consumption @stumpylog (#12431)
- Fix: add fallback ordering for documents by id after created @shamoon (#12440)
- Fix: limit share link viewset actions @shamoon (#12461)
- Fix: dont defer tag change application in workflows @shamoon (#12478)
- Fix: prevent duplicate parent tag IDs @shamoon (#12522)
- Fix: do not submit permissions for non-owners @shamoon (#12571)
- Fix: reject invalid requests to API notes endpoint @ggouzi (#12582)
- Fixhancement: Exact custom field monetary exact searching @stumpylog (#12592)
- Fix: prevent intermediate change event when CustomFieldQueryAtom operator changes type @ggouzi (#12597)
- Fix: relative added date check visibility @shamoon (#12600)
- Fix: Changes bare metal webserver to use uvloop @stumpylog (#12626)
- Fix: correctly scope mail account enumeration @shamoon (#12636)
- Fix: Use FileResponse for file API responses @stumpylog (#12638)
- Fix: use only allauth login/logout endpoints @shamoon (#12639)
- Fix: apply tag changes directly to document in db @shamoon (#12664)
- Fix: fix a minor pdf viewer uncaught error @shamoon (#12669)
- Fix: avoid unnecessary close_old_connections in Celery task dispatch @stumpylog (#12701)
- Fix (dev): return empty list for non-positive search limit @shamoon (#12703)
- Fix (dev): resolve tantivy search-filtered documents in bulk edit @shamoon (#12705)
- Fix: Don’t try to update the user when running as non-root @stumpylog (#12365)
Security
- Chore: Manually upgrades allauth to resolve a security issue with it @stumpylog (#11853)
- Security: prevent prototype pollution in frontend settings and list view @shamoon (#12438)
- Security: Sign the Celery pickled tasks @stumpylog (#12504)
- Security: Don’t allow the example secret key as a secret key @stumpylog (#12630)
Maintenance
- Chore: Switches to use prek in place of pre-commit @stumpylog (#12002)
- Chore: Re-work CI into multiple workflows @stumpylog (#11719)
- Chore: Build the ARM64 image using the native ARM64 runner @stumpylog (#11720)
- Chore: upgrade to Angular v21 @shamoon (#11746)
- Chore: upgrade to node v24 @shamoon (#11747)
- Chore: Bulk backend updates @stumpylog (#11543)
- Chore: remove deprecated Angular method @philipgullickson (#11919)
- Chore: Http interceptors refactor @philipgullickson (#11923)
- Chore: Fix further test flakiness @stumpylog (#11987)
- Chore: Enable mypy checking in CI @stumpylog (#11991)
- Chore: bump Angular to 21.1.3, ngx-ui-tour-ng-bootstrap to v18 @shamoon (#12015)
- Chore: Optimizes the integer fields for choice types @stumpylog (#12057)
- Chore: Pngx pdf viewer fixes @shamoon (#12083)
- Chore: Improve user migration path @stumpylog (#12232)
- Chore: pytest style paperless tests @stumpylog (#12254)
- Chore: update ESLint to v10 @shamoon (#12256)
- Chore: Finish settings refactor @stumpylog (#12263)
- Chore: Don’t upload digests file as a zip @stumpylog (#12264)
- Chore: mark document detail email action as deprecated @shamoon (#12308)
- Chore: Disables the system checks for management commands in tests and when unnecessary @stumpylog (#12332)
- Chore: Reduce system status test times @stumpylog (#12354)
- Chore: Instead of manual temporary directory management, use a context manager @stumpylog (#12430)
- Chore: logger, response and template sanitization cleanup @shamoon (#12439)
- Chore: Better typed status manager messages @stumpylog (#12509)
- Chore: Resolves some zizmor reported code scan findings @stumpylog (#12516)
- Chore: address more zizmor flags @shamoon (#12529)
- Chore: Paginate the task listing @stumpylog (#12633)