✨ New Features
- Read-only REST API (v1) - Optional, off-by-default REST API under
/api/v1for programmatic access to the archive (reporting, e-discovery, monitoring, AI agents) without exposing mailbox credentials or talking to the mail provider. See documentation here. Thanks to @kipp-ing for the PR!
⚙️ Improvements
- Search Loading Indicator - Search submit button shows a spinner and is disabled while the search request is in flight
- Dashboard Storage Label - Renamed the dashboard storage tile label to "Database size" to clarify it shows the database size, not mailbox storage
🐛 Bug Fixes
- Dark Mode Flash on Page Navigation - Theme is now applied synchronously via a blocking inline script in the
<head>before stylesheets load, eliminating the brief light-mode flash during page transitions - Zero-Grant Access Control - Closed cross-account bypass for users with no mailbox grants in EmailsController and EmailCoreService - M365 Graph Raw Headers - Populate RawHeaders for M365/Graph-synced mail via internetMessageHeaders,
- Dashboard Chart Dark Mode - Charts (monthly bar + top senders doughnut) now adapt text, grid, legend and tooltip colors to the active theme and update live when toggling dark mode
- Dashboard & Export Timezone - Fixed recent-emails timestamps on the dashboard being shifted by the configured display timezone offset (shown as UTC by the JS converter) and single-EML export emitting a wrong
Date:header; both now use the stored display-timezone value consistently with the emails index/details pages