Digi On-Prem Manager v26.04.1
Version 26.04.1 of Digi On-Prem Manager was released 2026-04-17. This is a major feature update.
The updated version is available in our APT repository.
55fecc75c07b7b527348fa438dfcf05ffd20bf36736e498eb88e13f4f59255a9 dom-server_26.04.1_amd64.deb
Changes from v25.12.2 to v26.04.1
- Update DX DAL client to v6.15
- Add fallback data counter source for devices that lack certain runt keys (34f15d942)
- Add fileset delivery for DAL devices (f0cf05260, 43b401db8)
- Check available disk space before firmware downloads (981dbfb72)
- Consolidate device-side logging to /var/log/dx (09ac5e15c)
- Experimental support for Advantech devices (#2281)
- Fix CLI commands hanging on DAL devices (f66838cc0)
- Fix data usage counters dropping to 0 on 32-bit devices (LR54, WR series) after >2 GB of cellular traffic (34f15d942)
- Fix firmware download timeout on slow links (fdcfd8941)
- Improve Python-to-Go upgrade resilience on devices with limited storage (#2263)
- Improve terminal output handling for large bursts (28a4815d5, 67b52529c)
- Improve update error reporting and firmware download robustness (be37feed6, d2cd1db05)
- Use server-provided firmware size for space checks (e1ef91aa9)
- Update DX SarOS client to v3.4
- Fix SarOS enrollment placing new devices in the root group instead of the group set in the bootstrap script (DAL devices unaffected) (d78c662b4)
- Security:
- api: Stop storing raw API bearer tokens in the access log. Existing plaintext entries are scrubbed on upgrade (391b26ee3, 6fa1de1f5)
- build: Bump the bundled Go toolchain to 1.26.2, picking up upstream security fixes (1c531eea3)
- bundle: Update the shipped Mozilla CA bundle (curl.se cacert extract) to the 2026-03-19 snapshot, refreshing WebPKI trust anchors
- dxserver: Rate-limit the auth fallback path per IP subnet and per (IP, serial) to bound brute-force attempts (d6f4f42b2)
- dxserver: Reject malformed WebSocket payloads from connected devices that could temporarily disrupt the dxserver process (28b223d61)
- dxserver: Validate the ref field in device WebSocket messages before using it as a Redis key component (defense-in-depth) (7993dac16)
- http: Enforce CSRF validation on five state-changing POST routes where the server-side check was missing (forms were already sending the token) (d111e6a79, e72c72d7b)
- http: Fix open redirect in the rtask postback parameter (d111e6a79)
- http: Include session and user context in parameter-validation failure security log entries (98ea441df)
- http: Validate request parameters and return 400 for invalid input instead of 500 (01abcdcc9)
- sandboxing: Harden the runtime layout with per-service AppArmor profiles and tighter systemd restrictions on all services (defense-in-depth) (717f6b1c0, 20f31ba9c, 8eb5e31aa)
- security: Validate IP and user-id filter parameters on the security log viewer (defense-in-depth) (421a1b612)
- session: Invalidate the local session when the SSO session expires (previously the local session could outlive SSO expiry) (d48810d64)
- shellinabox: Tighten terminal session authorization with short-lived, session-bound VT tickets (323658cec)
- tooltip: Escape HTML attribute values in tooltip helpers as defense-in-depth (e6bdbef49)
- Features:
- dashboard: Replace the legacy React dashboard with Svelte (9af32e855)
- dxserver: Replace the Node.js DX server with the Go implementation (477f7a822)
- template: Introduce Dynamic Templates for DAL devices, with Dynamic Values, Custom Values on devices and groups, and Secret Values on devices (#2061)
- Improvements:
- config/compare: Hide “Compare Revisions” for JSON configs (#2349)
- config/status: Show calculating and stale states, fix syntax error count (#2313, 88f5070eb)
- config/view + config/diff: Fix sorting array indices numerically so ‘[10]’ appears after ‘[9]’ instead of after ‘[1]’ (#2368)
- config: Automatically prune old config revisions, default limit 100 per type per device (#2286)
- csv: Add Custom Values to device CSV upload and download (b2cccff13)
- dashboard: Improve responsiveness by reducing redundant queries (fb3e5e393, 429852f94)
- labels: Improve text contrast (#2390)
- firmware: Improve firmware pages with minimum version support for update tasks (#2228)
- group/create: Stop reloading the page when selecting a different parent group (#2102)
- maintenance: Rename “Maintenance Mode” to “Maintenance Flag” (#2328)
- map: Add dark-mode tiles and attribution (#2299)
- map: Improve map GUI on the router index and full-screen views (#2307, #2362)
- map: Move map controls from User Profile to the Dashboard (#2308)
- nav: Rename “Config Template Status” to “Template Status” (#2360)
- nav: Replace the hard-coded sidebar menu with a data-driven JSON menu (#2307)
- report: Add direct navigation between Dashboard and RTask list (#2006)
- rtask: Improve config and file resolution reliability (dbce651fe)
- rtask: Link “Created by” user to their profile when the viewer has permission (#2269)
- rtask: Skip ineligible routers when creating bulk tasks (5eb7dce26)
- sample_processor: Improve throughput by about 68% (56a0a90ad)
- template: Add live DAL schema validation while editing and compiling (#2061)
- template: Recalculate compliance immediately on input changes instead of waiting for the next profile loop (8052fe704, fdb90cbc8)
- timeline: Add annotations endpoint (268eee3e6)
- ui: Add dedicated 400/403/404/500 error pages (#1625)
- Bugfixes:
- audit-log: Return 404 for non-existent audit log entries instead of a 500 (68780abb0)
- config/view: Fix empty SarOS config views (#2330)
- config/view: Hide “Create Config Template” button when viewing config as JSON (#2380)
- firmware: Fix DAL download URLs becoming stale after hostname changes (e8b98b904)
- firmware: Fix download failures on large files (e1ef91aa9)
- maintenance: Prevent a false security log entry from being created when opening the “Activate Maintenance Flag” page (#2366)
- rtask: Fix firmware and DX update reporting showing success on partial failures (e4753c248, 582d45618)
- rtask: Fix Redo/Retry for Run Commands tasks not copying commands (#2270)
- session: Fix crash when a “become” session references a deleted user (5d6707ddc)
- session: Fix the session time-left banner to fail closed on refresh failures and session expiry instead of showing stale time remaining (a8a39053e)
- system/edit: Fix blank syslog port on page load (#2384)
- template: Fix config schema validation incorrectly removing default values when a dependency condition is inactive (#2240)
- template: Fix stale compliance state after template deletion (#2327)
- template: Use group as compile target when creating a new template without copying from a device (#2380)
- terminal: Redirect to device page instead of 500 when opening Terminal for an offline device (1c1afeca5)
- tooltip: Fix duplicate data-line1 attribute and a variable-masking bug in the date-period tooltip helper (387f4fb91, 201f886f0)
- ui: Fix malformed HTML in device CSV download and router update limits pages (#2305, #2329)
- user: Fix password change confirmation email not being sent due to stale debug code (d111e6a79)
- user: Fix password reset to show the generated password correctly to the operator (#2283)
- System:
- apparmor: Add packaged AppArmor profiles for the hardened service layout (717f6b1c0)
- bootstrap: Add optional plaintext HTTP bootstrap support for legacy SarOS devices via
dx.legacy_plaintext_bootstrap_enabledanddx.legacy_plaintext_bootstrap_port(cf2e3d523) - bootstrap: Add the optional nginx
server-plaintext.confinclude for port 80 DX bootstrap routes - bootstrap: Cap legacy bootstrap/download reads to the expected payload length
- db: Advance schema from 42 to 52, including Dynamic Template fields, performance indexes, and the firmware blob-to-disk migration
- dxserver: Add Redis-backed auth cache with startup prewarm service, reducing auth latency and internal API load (04b861856)
- firmware: Move firmware storage from the database to disk, improving download performance and reducing memory usage during firmware delivery (eaec82afa, 8c9e3d3e4)
- nginx: Serve firmware downloads directly from disk for improved performance (eaec82afa)
- redis: Add kernel-level network restrictions to the Redis service unit as defense-in-depth (965d92907)
- redis: Fix Redis connection recovery so transient failures no longer require a service restart (a77f9cfc7)
- redis: Move the bundled Redis instance to a dedicated service with local socket communication (865455b13)
- redis: Regenerate Redis access controls at startup with compatibility for Redis 6, 7 and 8 (8052fe704)
- Removed:
- dashboard/share: Remove group dashboard sharing (
/rg/<token>and related UI). Per-device sharing (/r/<token>) is unchanged (5743389c5)
- dashboard/share: Remove group dashboard sharing (