Diskover 2.6.0 Release Notes
Release Date: June 2026
Overview
Diskover 2.6.0 is a major platform release. It completes the migration of the Diskover API layer from PHP to Python, delivers a full overhaul of the Task Panel, introduces PostgreSQL as a first-class database backend with managed schema migrations, and adds platform-wide authorization (RBAC) enforcement across the web UI, REST API, and admin API. Scanning gains an always-on Elasticsearch ingest model with additive multi-destination fan-out and pre-scan smart sharding for large indices, and the analytics pages have been modernized as part of the Phase 2 UI redesign. The release also lays the licensing groundwork for the AI Data Assistant (MCP) add-on and includes a large set of bug fixes, performance improvements, and security hardening.
New Features & Enhancements
Python API Migration — PHP API
[DEV-712]
The Diskover API has been fully migrated from PHP to Python, with the Python admin service now the single source of truth for API behavior and PHP reduced to a thin client. The migration spans every major API surface: file search ([DEV-724]), metrics and field aggregation ([DEV-725]), JWT/auth token handling ([DEV-726]), index management — list, top paths, latest, search, and disk space ([DEV-727]), tagging — tag count, size, files, and directories ([DEV-728]), worker- and task-based endpoints ([DEV-729]), and user authentication for local, LDAP, and OAuth identities ([DEV-793]). PHP pages that previously read configuration directly from the database now call the Python config API ([DEV-732]), and the Metrics API was extended to aggregate nested Elasticsearch fields at any depth using dotted-path notation — e.g. media_info.video.frameRate or pscale.perms_acl_aces.perms — which also unlocks nested-field analytics for the AI Data Assistant ([DEV-850]). API search results were aligned with the web UI so the same query returns consistent results across the UI, the API, and connected assistants ([DEV-788]).
Task Panel Overhaul
[DEV-711]
The Task Panel has been overhauled to make managing large numbers of scan tasks faster and clearer. Delivered capabilities include:
Auto-refresh — the task and worker list updates automatically, so statuses stay current without manually reloading the page ([DEV-744]).
Clone Task — create an exact one-to-one copy of an existing task with all configuration preserved, in a single action ([DEV-745]).
Bulk edits — select multiple tasks and apply a change in one operation, including enable/disable, run/stop, reassign worker, change schedule, change scanner, and change configuration ([DEV-746]).
Configuration as a column — see which Diskover configuration each task uses directly in the task list, with links that deep-link to that configuration in Diskover Admin ([DEV-747]).
Linked configurations — navigate from a task to its related Diskover and
diskoverdconfigurations without hunting through the Admin UI ([DEV-748]).Nested task groupings — organize tasks into collapsible Task Groups using a new data model, with a dedicated Task Groups management page, group filtering, and per-row or bulk group assignment ([DEV-749]).
The tasks table itself was also redesigned for better use of screen space and more intuitive browsing and monitoring ([DEV-663]).
PostgreSQL Database Support
[DEV-731]
Diskover can now run against PostgreSQL in addition to SQLite. Database connection settings are exposed for the Diskover Admin service, which all other services source their configuration from ([DEV-731]). A migration utility dumps an existing SQLite database and hydrates PostgreSQL([DEV-730], [DEV-770]), and was subsequently hardened for customer deployments with resume-from-checkpoint, row-level verification, a dry-run schema audit, and an operations manual ([DEV-846]). Schema management now uses Alembic as the single source of truth: every application entry point runs behind a cross-dialect lock before reading the database for both PostgreSQL and SQLite ([DEV-790], [DEV-864], [DEV-881]). A pg_dump-based backup script is also included for PostgreSQL deployments: scheduled via cron, it writes timestamped, compressed (.sql.gz) backups with a TOML config file, log rotation, and a dry-run mode, and ships with a README covering setup, scheduling, and a restore runbook ([PLAT-258]).
Multi-Destination Ingest with Always-On Elasticsearch
[DEV-851]
Elasticsearch is now the always-on primary ingest destination for Diskover, and the --altingester flag has become additive and repeatable. A single scan can fan its output out to one or more additional backends (Parquet, SingleStore, Iceberg, and others) alongside the Elasticsearch write, eliminating the previous either/or trade-off that forced customers to run duplicate scans. Alternate-ingester failures are isolated and do not halt the scan or block other destinations; Elasticsearch remains the primary, must-succeed destination.
Pre-Scan Smart Sharding for Elasticsearch Indices
[DEV-706]
Diskover now determines the optimal Elasticsearch shard count before a new index is created, based on the size of the most recent completed index for the same top paths. This prevents the performance degradation caused by oversized single-shard indices on large data sets, without the risk and overhead of resharding live indices.
Parquet Output Filename Tokens
[DEV-862]
The Parquet Ingester's parquet_filename setting now supports template tokens — including %indexname, %toppath, and Python strftime codes — so output files can embed runtime context such as the index name, scanned top path, or scan timestamp without custom scripting. The ES Query Report plugin's filename substitution was audited and aligned to the same canonical token set, with the logic factored into a shared helper so the two cannot drift apart, and the Admin UI help text now documents the supported tokens ([DEV-863]).
Automatic Plugin Extra-Field Display
[DEV-707]
Plugin-generated extra fields are now detected and displayed as columns in Diskover Web automatically, without requiring manual configuration.
Critical Scan Error Handling
[DEV-735]
Critical errors encountered during a scan task no longer silently destroy indices that may have taken days to build. The scanner now handles critical error states gracefully and surfaces them to administrators ([DEV-735]), with corresponding UI/UX changes so error states are clearly displayed in the web interface when a scan hits problems on specific files or directories ([DEV-736]). Error states throughout diskover.py were also reviewed to provide more helpful messages and broader exception handling ([DEV-734]).
System Health Checks
[DEV-800]
A new Diskover Admin health endpoint reports UP/DOWN/ERROR status across the major system components — web login, Elasticsearch, the database, admin routes, the Celery broker, and workers — providing a single, machine-readable view of platform health.
Log Viewer
[DEV-887]
Diskover now includes a Log Viewer that lets administrators view and poll server logs directly from the web interface through an Elastic Agent integration, without requiring shell access to the host. Logs for the key platform services — Nginx, PHP, Diskover Admin, task workers, RabbitMQ, Celery, and Elasticsearch — can be inspected from one place.
Native Windows Service Support for diskoverd
[DEV-888]
The Windows worker (diskoverd) now runs as a true native Windows service through the Service Control Manager, replacing the previous NSSM wrapper. A redesigned installer wizard prompts for the service account (LocalSystem by default, with support for domain or local accounts), automatically grants the "Log on as a service" right, and pre-configures automatic recovery so the service restarts on failure. Program data and logs now live under C:\ProgramData\diskoverd\, with a one-time automatic migration of existing worker configuration on first start.
Unauthenticated SMTP over TLS/SSL
[DEV-569]
Diskover can now send notification email over TLS/SSL without SMTP authentication, supporting mail relays that accept unauthenticated TLS connections.
Diskover Admin Improvements
[DEV-738]
The Diskover Admin search experience was reworked to be more usable and prominent, with filtering and paging ([DEV-738]). Adding items to array/list configuration fields was simplified ([DEV-739]), field instructions were moved above their input fields across the Admin config and Edit Index Task pages alongside a broader config-UI refresh ([DEV-568]), the ILM Policies tab and Index Aliases container were modernized to match the current UI ([DEV-662]), and Admin help text was reviewed and corrected platform-wide ([DEV-437]). The configuration options were also cleaned up: redundant and non-customer-facing options were removed, and each scope now surfaces a focused set of basic options with the rest tucked into a collapsible Advanced section ([DEV-737]).
AI Data Assistant (MCP) Licensing
[DEV-861]
A new mcp_enabled license flag gates the visibility and functionality of all MCP-related features across Diskover Web, Diskover Admin, and the MCP Server, enabling the AI Data Assistant to be offered as a licensed add-on.
Security & Access Control
Platform-Wide Authorization (RBAC)
[DEV-821]
A unified, extensible authorization layer now governs what authenticated users and services can access across the Python admin API, the PHP web UI, and the PHP REST API. The authorization logic was centralized into a pure Python layer with server-side enforcement on every data endpoint, fail-closed-by-default behavior, and a role model verified across LDAP, OAuth, and local authentication. This change is strictly authorization — user authentication paths are unchanged. Follow-up refinements closed two role-enforcement gaps found during smoke testing: the PHP API write gate now keys off API privilege rather than admin status, and the secrets-bearing configuration scopes (such as the API signing key) now require admin access ([DEV-880]).
LDAP Domain Users Group Lookup
[DEV-762]
Diskover now resolves the Domain Users group during LDAP group filtering, restoring access for users whose effective permissions depend on Domain Users membership.
Groups Excluded Applies to Unix Permission Filtering
[DEV-878]
The "Groups Excluded" setting in Web.Index Filters now governs both Group Membership filtering and Unix Permission filtering, matching the behavior customers expect from a single exclusion control.
Security Advisory Remediation
[DEV-772]
Cross-site scripting and output-escaping issues flagged by GitHub security scanning were verified and patched.
User Interface & Experience
The analytics and explorer pages were modernized to align with the Phase 2 design system, introducing consistent breadcrumb navigation, compact toolbars, and standardized dropdowns and toggles.
[DEV-664] — Dashboard page modernized to match the new design system.
[DEV-668] — File Tree analytics page layout redesigned.
[DEV-669] — Smart Searches page layout modernized.
[DEV-754] — Tags page redesigned.
[DEV-757] — Reports page redesigned.
[DEV-756] — Cost Analysis page redesigned.
[DEV-753] — Heat Map page redesigned.
[DEV-755] — User Analysis page redesigned.
[DEV-752] — Tree Map page redesigned, with follow-up header-alignment and childless-folder improvements on the Tree Map and File Tree pages.
[DEV-758] — Directory Explorer page redesigned.
[DEV-759] — Space Information page aligned with the new style guidance.
Bug Fixes
Search & Dashboards
[DEV-719]
Search-results charts now pass all chart filters — minimum size and minimum/maximum modified time — into the resulting search, instead of dropping or misapplying some of them.
[DEV-716]
Dashboard charts now carry all dashboard filters (size, minimum time, maximum time) when a user clicks through to a search.
[DEV-718]
Fixed the Dashboard "file type usage → other" link, which previously generated an invalid query containing a trailing OR ).
[DEV-717]
Corrected modified-time handling in Dashboard views, including the maximum-time filter on the hot/cold data chart links.
[DEV-874]
Resolved a Dashboard file-type usage inconsistency where percentages and sizes could be incorrect — occasionally showing negative values — for some directories.
[DEV-798]
Added the missing Dashboard (load path) entry to the search-results path dropdown menu.
[DEV-799]
Removed the index from search URL parameters, preventing nginx/HTTP 500 errors in environments with many indices.
[DEV-873]
Guarded against a null index in the search-index optimizer, which previously caused a PHP fatal error on every keypress in File Search autocomplete on the master branch.
Permissions & Filtering
[DEV-780]
Closed a Unix-permissions oversharing gap: when Group Filtering was enabled, a group match could bypass the Unix permissions check. Group filtering is now correctly combined with the Unix-permissions whitelist so owner-only files are not exposed to other group members.
[DEV-792]
Group filtering now applies to the Dashboard, so filtered users no longer see files or directories they should not have access to in reports such as Largest Files/Directories.
[DEV-578]
Recursive tagging now works correctly when Group Filtering is enabled, for local, LDAP, and Okta users.
Scanning Modifications
[DEV-871]
Fixed timerollup propagation so directory roll-up times correctly reflect the newest times from contained files and subdirectories, restoring the feature's intended use for identifying stale directory trees.
[DEV-778]
Fixed double-encoding of crawl paths when persisting configuration objects to a JSON database column, which previously corrupted UNC paths (for example \\server\share) and caused "no such directory" errors.
Task Configuration
[DEV-680]
The "Add to Index" option in task configuration now persists correctly instead of resetting on save.
[DEV-689]
The year magic characters now behave correctly: %Y (four-digit) and %y (two-digit) are distinguished in the custom index-name preview.
[DEV-885]
The assigned worker now displays correctly after editing a previously-run task, showing the newest target worker rather than the original.
Authentication & SSO
[DEV-782]
SSO users can now access the Volume Discovery page; the missing admin-panel session cookie that bounced them back to the login screen has been fixed.
[DEV-894]
SSO users can now reach the Swagger UI through their web session, resolving a login redirect loop for authenticated SSO and admin users.
[DEV-826]
Fixed the login redirect loop between the PHP login page and the React admin app that appeared after the Python auth migration, by relying on the server-side session cookie and same-origin credentials instead of client-side cookie checks.
[DEV-556]
The "Keep me logged in for 7 days" option now persists the session across browser restarts.
[DEV-882]
LDAP login now returns a clearer error when a user has no authorized groups, instead of a generic failure message.
Administration & Stability
[DEV-807]
Downloading multiple files no longer crashes Diskover Admin; the Download file action now packages files into a single archive and includes safeguards against overloading the service.
[DEV-722]
Punctuation is now preserved in configuration scope names — using a period in a config name (for example, Tagging2.0) no longer creates an unintended nested scope.
[DEV-797]
The /config/all endpoint now uses prefix matching for excluded scopes, eliminating recurring warning spam in the admin logs.
[DEV-903]
Routine Diskover log output no longer appears in /var/log/messages when running under systemd. The admin API logging handler was corrected and the service unit files were updated so application logs are written only to the configured Diskover log files.
A fresh-install startup error triggered during the initial admin password change was also fixed. (No associated Jira ticket.)
Windows
[DEV-867]
Windows task workers no longer fail with a permission error when rotating their log files.
Volume Discovery
[DEV-872]
Volume Discovery no longer rewrites existing FSTAB entries destructively. Mount, Remove, and Add operations are now additive and preserve existing whitespace, comments, and unrelated entries.
UI Polish
[DEV-844]
The File Tree loading spinner no longer flashes during background hover-prefetch; it now appears only for visible loads, and hover timeouts are scoped per node.
[DEV-889]
The sticky horizontal scrollbar is now placed directly under the results table, addressing the missing scrollbar when many columns are displayed (observed on macOS Chrome).
[DEV-635]
Array-valued extra fields now display correctly in search results and the file view (for example, Path Tokens fields), fixing a PHP fatal error.
[DEV-890]
Fixed a column-display off-by-one that occurred when many Extra Fields were configured and several were hidden, which shifted values into the wrong column.
Performance
[DEV-805]
Diskover Web Elasticsearch failover was hardened so the UI stays available when the first-listed cluster node goes down — previously this could boot users to the login screen — improving behavior during cluster rebalancing.
[DEV-820]
Task List and Task History rendering was improved for environments with very large numbers of tasks and large task logs.
[DEV-811]
Reduced lock acquisitions in the crawl hot path to recover additional NFS scan performance identified during follow-up profiling.
Platform, Build & Developer Infrastructure
[DEV-708]
Validated and ensured Python 3.13 compatibility across the Python-based Diskover components.
[DEV-771]
Switched the development environment default from SQLite to PostgreSQL so the team develops and tests against the target backend.
[DEV-853]
Moved all tests into a top-level tests/ directory (and added contributor guidance) so packaging cannot ship test code to customer installations.
Upgrade Notes
PHP API deprecated: The Diskover API now runs on Python, with PHP acting as a thin client. Integrations should target the Python API endpoints; the legacy PHP API layer will be fully deprecated.
Database backend: PostgreSQL is now supported to replace SQLite via
DISKOVER_DB_TYPE. Existing SQLite deployments can migrate using the provided migration utility.Schema migrations: Schema is now managed by Alembic and applied automatically at startup (
alembic upgrade head) for both PostgreSQL across all Diskover deployments.Authorization (RBAC) enforcement: Authorization is now enforced server-side on every data endpoint and is fail-closed by default. Scripts or integrations calling the admin API without valid credentials may receive authorization errors on write operations where they previously did not.
Multi-destination ingest: Elasticsearch is always-on as the primary ingest destination and
--altingesteris now additive and repeatable. Workflows that previously used--altingesteras a replacement for Elasticsearch should be reviewed, as scans now always write to Elasticsearch in addition to any alternate ingesters.Groups Excluded behavior change: The "Groups Excluded" setting in Web.Index Filters now affects both Group Membership and Unix Permission filtering. Deployments relying on the prior behavior (exclusion applying only to Group Membership filtering) should review their filter configuration.
AI Data Assistant (MCP): MCP features are gated behind the new
mcp_enabledlicense flag and are disabled unless licensed.Windows worker (
diskoverd): The Windows worker now installs as a native Windows service (the NSSM wrapper has been removed), and its program data and logs have moved toC:\ProgramData\diskoverd\, with a one-time automatic configuration migration on first start. Existing NSSM-based installations should be re-run through the new installer.
Comments
0 comments
Please sign in to leave a comment.