Releases: dianlight/srat
Release list
Release 2026.7.0-rc11
Changelog
🔧 Chore
- Migrate to TypeScript 7.0 RC (Go-based
tsgocompiler):- Updated peer dependency to
typescript: ^7.0.1-rc - Updated
@typescript/native-previewto7.0.0-dev.20260701.1 - Updated
tsconfig.json, migration docs, and instruction files - Patches
esModuleInteropdefault and other TS 7.0 defaults
- Updated peer dependency to
✨ Features
- HDIdle per-disk model (Lab Mode feature): Replaced the global HDIdle
enable/disable toggle with a fully per-disk configuration model gated behind
Lab Mode (experimental_lab_mode=true). Key changes:- Per-disk enable/disable: each physical disk has its own HDIdle record
(enabled: yes|custom|no); the service runs automatically when ≥1 disk is
enabled. The five globalSettings.hdidle_*fields have been removed. - Dashboard suggestion badge: HDDs that have not yet been configured show
an inline "Enable HDIdle?" badge in the disk I/O table (visible only in Lab
Mode). The badge provides Ignore (persistssuggestion_ignored=true)
and Enable (navigates to the per-disk card in the Volumes page). - Non-rotational guard: enabling HDIdle on an SSD/NVMe or a device with
unknown rotational type opens a confirm dialog; accepting persists
force_enabled=trueso the warning does not repeat. The backend returns
HTTP 409 if the flag is missing, preventing accidental spindowns of SSDs. - Rotational detection:
Disk.is_rotationaltri-state (HDD/SSD/unknown)
is now derived from/sys/block/<dev>/queue/rotational(sysfs primary) with
SMARTrotation_rateas fallback. Unknown (e.g. USB enclosures) returns
nil— treated as non-rotational for safety. - Ignore-suggestion endpoint:
POST /api/disk/{id}/hdidle/ignore-suggestion
persists the badge dismissal per disk. - Adaptive polling: the monitor goroutine polls every 60s when ≥1 disk is
spun-up and slows to 5min when all monitored disks are already spun-down.
The goroutine is never started when zero disks are enabled. - readOnly threading: the per-disk settings card now correctly propagates
thereadOnlyflag fromVolumeDetailsPanel.
- Per-disk enable/disable: each physical disk has its own HDIdle record
- mDNS Registration: Added optional mDNS registration of the SRAT service for local network discovery. When enabled, the backend registers a
_srat._tcpservice with the system mDNS responder, advertising the service name, port, and metadata. This allows compatible clients to discover the SRAT service on the local network without manual configuration. The feature is controlled by a newMDNSRegistrationboolean setting in the advanced settings section.
🐛 Bug Fixes
- HDIdle service permanently broken after first Stop():
Stop()no longer
leavesstopChannon-nil after close. SubsequentStart()calls now succeed
(idempotent). Fixes a latent bug where the service refused to restart after
any config PUT. - Nested mutex deadlock in
GetDeviceStatus,GetProcessStatus, and
observeDiskActivity: calls toIsRunning()under an existing lock now read
stopChandirectly to avoid the deadlock inherent in re-acquiring an
RWMutexthat is not guaranteed reentrant. GetDeviceConfigreturned HTTP 500 when service disabled: the guard
!s.config.Enabled → ErrorHDIdleNotSupportedhas been removed. The config
endpoint is now always available for inspection/configuration regardless of
whether the monitor goroutine is running.disk_idinjected unsanitised into file path:hdidle_handler.gowas
naïvely prefixing everydisk_idwith/dev/disk/by-id/without validation.
Replaced byHDIdleServiceInterface.ResolveDevicePath()which probes three
candidate paths (absolute/dev/…, by-id, kernel name) and rejects inputs
containing path-traversal characters.
🔄 Breaking Changes
Settings.hdidle_enabled,hdidle_default_idle_time,hdidle_default_command_type,
hdidle_default_power_condition, andhdidle_ignore_spin_down_detectionhave
been removed from the API and the DB (migration 00017 drops the
corresponding rows from thepropertiestable).POST /api/hdidle/startandPOST /api/hdidle/stophave been removed.
The service lifecycle is now fully automatic (driven by the per-disk records).PATCH /api/disk/{id}/hdidle/confighas been removed (it was a dead spec
entry with no handler).
🏗 Chore
- DB migration
00017(drop_global_hdidle_properties): deletes the five
obsolete global HDIdle property rows. Down migration re-seeds them with their
original defaults for dev/test rollback. events.PowerEventnow carries aKind PowerEventKinddiscriminant field
(configorstatus) so subscribers can branch without comparing zero-values.- Two new
dto.HDIdleDevicefields (SuggestionIgnored,ForceEnabled) and
matching GORM/generated-layer/converter updates. Schema columns are added by
GORMAutoMigrateon the next startup — no manual migration needed. openapi.jsonis not regenerated in this branch — it requires a working
Go toolchain andgo run ./cmd/srat-openapi. CI must run
go run ./cmd/srat-openapi -dir=backend/docsand
cd frontend && bun run gen:apibefore merging to keep generated artifacts in
sync. Three hand-edited generated files (config_to_dto_conv_gen.go,
dto_to_dbom_conv_gen.go,g/hdidle_device_config.go) are aligned with their
source directives — ago generate ./...run will produce the same output.
🔧 Maintenance
- Multi-variant server release: Release archives now ship three
srat-servervariants —srat-server-static(fully static, zero shared-library dependencies),srat-server-musl(dynamic linked against musl libc, built via Zig), andsrat-server-glib(dynamic linked against glibc, built via CGO). Thesrat-serverentry in the archive is a symlink that defaults tosrat-server-static; the upgrade process automatically updates it to the best available variant for the running system (musl → glibc → static).srat-openapiis no longer included in release archives.srat-cliis always statically linked.
What's Changed
- 📚 docs: auto-fix documentation formatting and TOC by @github-actions[bot] in #670
- ⬆️ Update @biomejs/biome to v2.4.16 by @renovate[bot] in #673
- ⬆️ Update dependency npm:@typescript/native-preview to v7.0.0-dev.20260527.2 by @renovate[bot] in #675
- ⬆️ Update dependency hk to v1.46.0 by @renovate[bot] in #678
- ⬆️ Update dependency ruff to v0.15.15 by @renovate[bot] in #676
- ⬆️ Update dependency act to v0.2.89 by @renovate[bot] in #674
- ⬆️ Update dependency npm:@typescript/native-preview to v7.0.0-dev.20260607.1 by @renovate[bot] in #685
- ⬆️ Update BackEnd by @renovate[bot] in #683
- ⬆️ Update dependency go to v1.26.4 by @renovate[bot] in #684
- ⬆️ Update dependency ruff to v0.15.16 by @renovate[bot] in #686
- ⬆️ Update FrontEnd by @renovate[bot] in #687
- ⬆️ Update CI/CD to v7 by @renovate[bot] in #688
- feat(release): multi-variant server builds (static, musl, glibc) by @dianlight in #672
- ⬆️ Update ghcr.io/devcontainers/features/copilot-cli Docker tag to v1.1.3 by @renovate[bot] in #677
- ⬆️ Update CI/CD by @renovate[bot] in #663
- ⬆️ Update dependency npm:@typescript/native-preview to v7.0.0-dev.20260609.1 by @renovate[bot] in #692
- fix(hdidle): per-disk rework + review bug fixes by @dianlight in #690
- ⬆️ Update BackEnd by @renovate[bot] in #693
- 📚 docs: auto-fix documentation formatting and TOC by @github-actions[bot] in #691
- ⬆️ Update dependency prettier to v3.8.4 by @renovate[bot] in #697
- ⬆️ Update BackEnd by @renovate[bot] in #695
- ⬆️ Update dependency ruff to v0.15.17 by @renovate[bot] in #699
- ⬆️ Update mcr.microsoft.com/devcontainers/go:2-1.26-bookworm Docker digest to 85fff53 by @renovate[bot] in #694
- ⬆️ Update dependency npm:@typescript/native-preview to v7.0.0-dev.20260615.1 by @renovate[bot] in #696
- ⬆️ Update dependency python to v3.14.6 by @renovate[bot] in #698
- ⬆️ Update dependency hk to v1.48.0 by @renovate[bot] in #700
- ⬆️ Update dependency npm:doctoc to v2.5.0 by @renovate[bot] in #701
- ⬆️ Update FrontEnd by @renovate[bot] in #703
- ⬆️ Update dependency vale to v3.15.1 by @renovate[bot] in #702
- ⬆️ Update FrontEnd to v20.10.5 by @renovate[bot] in #706
- ⬆️ Update BackEnd by @renovate[bot] in #707
- feat: implement server mDNS registration over WebSocket with HA reconnect hardening by @dianlight in #679
- 📚 docs: auto-fix documentation formatting and TOC by @github-actions[bot] in #708
- ⬆️ Update CI/CD (major) by @renovate[bot] in #704
- ⬆️ Update dependency jq to v1.8.2 by @renovate[bot] in #710
- ⬆️ Update BackEnd by...
Release 2026.5.0-rc9
Changelog
✨ Features
- Lab Mode: Added a new "Lab Mode" section in Settings → Advanced with experimental features that can be enabled for testing and feedback.
- SMART Integration Mode: Replaced the
disable_smartboolean toggle with a 3-optionsmart_modeenum (none,legacy,direct).none: SMART integration disabled.legacy: Uses thesmartctlexecutable (previous default behavior).direct: Uses thelibsmartmon_go.solibrary back end (lab feature, requires lib availability at startup).- The
directoption is only shown in the UI when experimental lab mode is enabled andlibsmartmon_go.sois detected at runtime. - Backend detects
libsmartmon_go.soavailability at startup and exposeslib_smart_availablein the settings API response. - DB migration 00016 converts existing
DisableSmartboolean properties to the newsmart_modestring value.
🐛 Bug Fixes
🏗 Chore
- Static binary portability: Default production builds (
CGO_ENABLED=0) are now fully statically linked with zero shared-library dependencies, running unchanged on GNU/Linux systems using either glibc (Debian, Ubuntu) or musl (Alpine). Thelibsmartmon_go.solib integration is now gated behind a newsmartlibbuild tag so it no longer forceslibdl.so.2dynamic linking in release binaries. Build with--cgo(which adds-tags smartlib) to opt in to the lib mode.
What's Changed
- ⬆️ Update dependency ruff to v0.15.13 by @renovate[bot] in #642
- refactor: migrate Rollbar to Sentry for error tracking and telemetry by @dianlight in #649
- fix(be): auto-create HA internal shares on startup by @dianlight in #651
- ⬆️ Lock file maintenance by @renovate[bot] in #648
- ⬆️ Update mcr.microsoft.com/devcontainers/go:2-1.26-bookworm Docker digest to de99286 by @renovate[bot] in #654
- ⬆️ Update dependency npm:@typescript/native-preview to v7.0.0-dev.20260517.1 by @renovate[bot] in #655
- ⬆️ Update actions/checkout to v6 by @renovate[bot] in #656
- ⬆️ Update CI/CD by @renovate[bot] in #652
- ⬆️ Update dependency npm:@typescript/native-preview to v7.0.0-dev.20260518.1 by @renovate[bot] in #658
- ⬆️ Update FrontEnd by @renovate[bot] in #662
- ⬆️ Update dependency npm:@typescript/native-preview to v7.0.0-dev.20260519.1 by @renovate[bot] in #664
- ⬆️ Update github.com/oapi-codegen/runtime to v1.4.1 by @renovate[bot] in #661
- ⬆️ Update dependency ruff to v0.15.14 by @renovate[bot] in #659
- ⬆️ Update dependency npm:@typescript/native-preview to v7.0.0-dev.20260521.1 by @renovate[bot] in #665
- ⬆️ Update golang.org/x/sys to v0.45.0 by @renovate[bot] in #666
- ⬆️ Update dependency npm:@typescript/native-preview to v7.0.0-dev.20260522.1 by @renovate[bot] in #668
- ⬆️ Update github.com/dianlight/smartmontools-go to v0.4.0 by @renovate[bot] in #669
Full Changelog: 2026.5.0-rc7...2026.5.0-rc9
Release 2026.5.0-rc7
Changelog
What's Changed
- ⬆️ Update BackEnd by @renovate[bot] in #616
- ⬆️ Update FrontEnd by @renovate[bot] in #619
- ⬆️ Update dependency golangci-lint to v2.12.1 by @renovate[bot] in #621
- ⬆️ Update dependency npm:@typescript/native-preview to v7.0.0-dev.20260505.1 by @renovate[bot] in #618
- 📚 docs: auto-fix documentation formatting and TOC by @github-actions[bot] in #613
- ⬆️ Update dependency golangci-lint to v2.12.2 by @renovate[bot] in #622
- ⬆️ Update dependency npm:@typescript/native-preview to v7.0.0-dev.20260506.1 by @renovate[bot] in #623
- ⬆️ Update ghcr.io/hassio-addons/base Docker tag to v20.1.1 by @renovate[bot] in #620
- ⬆️ Update dependency go to v1.26.3 by @renovate[bot] in #617
- ♻️ refactor(test): migrate frontend test runner from bun:test to Vitest (Task 038) by @dianlight in #615
- ⬆️ Update golang.org/x/exp to 74f9aab by @renovate[bot] in #627
- ⬆️ Update dependency npm:@typescript/native-preview to v7.0.0-dev.20260509.2 by @renovate[bot] in #628
- ⬆️ Update FrontEnd by @renovate[bot] in #630
- ⬆️ Update dependency hk to v1.45.0 by @renovate[bot] in #631
- ⬆️ Update mcr.microsoft.com/devcontainers/go Docker tag to v2 by @renovate[bot] in #632
- ⬆️ Update dependency python to v3.14.5 by @renovate[bot] in #629
- feat(fe): Dashboard Actions - Mount & Share Wizard by @dianlight in #634
- ⬆️ Update dependency npm:@typescript/native-preview to v7.0.0-dev.20260510.1 by @renovate[bot] in #635
- ⬆️ Pin mcr.microsoft.com/devcontainers/go Docker tag to fe5d30e by @renovate[bot] in #626
- ⬆️ Lock file maintenance by @renovate[bot] in #610
- refactor(be): optimize disk access patterns + fix SMART DiskId bugs by @dianlight in #637
- ⬆️ Update bun to v1.3.14 by @renovate[bot] in #638
- ⬆️ Update dependency npm:@typescript/native-preview to v7.0.0-dev.20260513.1 by @renovate[bot] in #641
- ⬆️ Update dependency bun to v1.3.14 by @renovate[bot] in #639
- ⬆️ Update dependency vale to v3.14.2 by @renovate[bot] in #643
Full Changelog: 2026.5.0-rc6...2026.5.0-rc7
Release 2026.5.0-rc6
What's Changed
What's Changed
- ⬆️ Update dependency act to v0.2.88 by @renovate[bot] in #611
- ⬆️ Update dependency npm:@typescript/native-preview to v7.0.0-dev.20260501.1 by @renovate[bot] in #612
Full Changelog: 2026.5.0-rc5...2026.5.0-rc6
Release 2026.5.0-rc5
What's Changed
What's Changed
- 📚 docs: auto-fix documentation formatting and TOC by @github-actions[bot] in #608
- doc(tooling): corporate proxy SSL fix for hk/PKL/bun + Vitest migration prep by @dianlight in #609
Full Changelog: 2026.04.0-rc4...2026.5.0-rc5
2026.04.0-rc4
What's Changed
- chore: update CHANGELOG for 2026.4.0-rc3 by @dianlight-relase-bot[bot] in #604
- ⬆️ Update dependency npm:@typescript/native-preview to v7.0.0-dev.20260426.1 by @renovate[bot] in #606
- ⬆️ Update dependency ruff to v0.15.12 by @renovate[bot] in #607
New Contributors
- @dianlight-relase-bot[bot] made their first contribution in #604
Full Changelog: 2026.4.0-rc3...2026.4.0-dev.0
Release 2026.4.0-rc3
What's Changed
Note: This section tracks development progress and changes planned for the first Release Candidate (RC). The final release notes will be organized and consolidated once the RC is ready for public testing.
🙏 Thanks
We would like to thank all supporters for their contributions and donations.
With your donations, we are able to continue developing and improving this project. Your support is greatly appreciated.
🔧 Maintenance
- Backend Code Quality Refactor: We are undertaking a comprehensive refactor to eliminate recurring Go anti-patterns across the codebase. This includes replacing
interface{}withany, updating error handling to useerrors.AsType[T], modernizing goroutine management withwg.Go, extracting common helper functions, and improving context-aware logging. This refactor will enhance code readability, maintainability, and performance while adhering to modern Go best practices. - TypeScript 6.0 Migration: The frontend codebase is being updated for compatibility with TypeScript 6.0 final, including removal of deprecated compiler flags, updating ECMAScript target, enabling new strict flags, and optimizing code for improved type inference. A comprehensive migration guide is being created to document the changes and prepare for the upcoming TypeScript 7.0 Go-based compiler.
What's Changed
- ⬆️ Update @biomejs/biome to v2.4.12 by @renovate[bot] in #584
- ⬆️ Update dependency npm:@typescript/native-preview to v7.0.0-dev.20260416.2 by @renovate[bot] in #585
- ⬆️ Update softprops/action-gh-release to v3 by @renovate[bot] in #569
- ⬆️ Update dependency ruff to v0.15.11 by @renovate[bot] in #587
- ⬆️ Update dependency npm:@typescript/native-preview to v7.0.0-dev.20260417.1 by @renovate[bot] in #586
- 📚 docs: auto-fix documentation formatting and TOC by @github-actions[bot] in #588
- [REFACTOR] Upgrade MUI to v9 and optimize frontend dependencies by @dianlight in #591
- ⬆️ Update dependency npm:@typescript/native-preview to v7.0.0-dev.20260420.1 by @renovate[bot] in #590
- ⬆️ Pin fastify-plugin to 5.1.0 by @renovate[bot] in #593
- ⬆️ Update ghcr.io/hassio-addons/base Docker tag to v20.1.0 by @renovate[bot] in #577
- ⬆️ Update dependency npm:@typescript/native-preview to v7.0.0-dev.20260421.1 by @renovate[bot] in #595
- ⬆️ Update dependency pipx:mypy to v1.20.2 by @renovate[bot] in #596
- build(deps): bump go.opentelemetry.io/otel from 1.40.0 to 1.41.0 in /backend/src in the go_modules group across 1 directory by @dependabot[bot] in #598
- ⬆️ Update dependency markdownlint-cli2 to v0.22.1 by @renovate[bot] in #594
- ⬆️ Lock file maintenance by @renovate[bot] in #571
- ⬆️ Update FrontEnd by @renovate[bot] in #597
- 📚 docs: auto-fix documentation formatting and TOC by @github-actions[bot] in #599
- [REFACTOR] Backend code quality anti-patterns by @dianlight in #600
- 📚 docs: auto-fix documentation formatting and TOC by @github-actions[bot] in #601
- refactor(fe/test): short-term stability fixes + Vitest migration task by @dianlight in #602
- 📚 docs: auto-fix documentation formatting and TOC by @github-actions[bot] in #603
Full Changelog: 2026.4.0-rc2...2026.4.0-rc3
Release 2026.4.0-rc2
What's Changed
Note: This section tracks development progress and changes planned for the first Release Candidate (RC). The final release notes will be organized and consolidated once the RC is ready for public testing.
🙏 Thanks
We would like to thank all supporters for their contributions and donations.
With your donations, we are able to continue developing and improving this project. Your support is greatly appreciated.
📅 Roadmap
- Release Candidate (RC) Planned for March: The first release candidate version is scheduled for March. This RC will stabilize the codebase, finalize the API, and provide a feature-complete version for community testing and feedback before the official stable release.
✨ Features
- Interface IP Resolution: Samba configuration now resolves network interface names to IP addresses at generation time, ensuring IPv4 preference is honored. The
--ipv4-onlyCLI flag allows disabling IPv6 addresses in theinterfacesdirective. This prevents issues where interface names could resolve to IPv6 addresses, causing connectivity problems when IPv4 is preferred. - HACS Custom Component: Added a Home Assistant custom component (
custom_components/srat/) compatible with HACS for direct integration with Home Assistant. Supports UI configuration wizard, Supervisor add-on autodiscovery via slug whitelist, WebSocket-based real-time updates, and exposes sensors compatible with the existing SRAT HA integration (samba status, process status, volume status, disk health, per-disk I/O, and per-partition health). Includes full test suite usingpytest-homeassistant-custom-componentand Python code quality tooling (ruff, mypy) integrated into CI. Early internal implementation serving as the foundation for upcoming releases. - Report Issue on GitHub: Added new "Report Issue" functionality allowing users to easily create GitHub issues with automated diagnostic data collection:
- Button in top navigation bar to open issue reporting dialog
- Problem type selector (Frontend UI, HA Integration, Addon, or Samba problems)
- Markdown-compatible description field
- Optional data collection: contextual data (URL, navigation history, browser info, console errors), addon logs, and sanitized SRAT configuration
- Automatic routing to appropriate repository (dianlight/srat or dianlight/hassos-addon) based on problem type
- Pre-populated GitHub issue URL with diagnostic information
- Downloads diagnostic files for attachment to the issue
- Autoupdate with Signature Verification (#358): Implemented a new autoupdate mechanism using minio/selfupdate with cryptographic signature verification:
- Added
--auto-updateflag to automatically download and apply updates without user acceptance - Updates are signed with minisign (Ed25519) signatures for security
- Automatic restart when running under s6 supervision
- Public key is embedded in the binary for signature verification
- Build workflow automatically signs all release binaries
- Added
- Allow Guest Setting: Added new
Allow Guestboolean setting in Settings → General section to enable anonymous guest access to Samba shares. When enabled, configures Samba withguest account = nobodyandmap to guest = Bad Userfor secure guest authentication. - Enhanced SMART Service #234: Implemented comprehensive SMART disk monitoring and control features including health assessment, temperature monitoring, and attribute tracking.
- SMB over QUIC Support #227: Added comprehensive support for SMB over QUIC transport protocol with intelligent system detection and automatic fallback to TCP when QUIC is unavailable.
- Autoupdate Service: Implemented a back-end service for automatic updates from GitHub releases, with support for multiple channels (stable, beta, dev) and local development builds.
- Telemetry Configuration: Added UI in Settings to configure telemetry modes (Rollbar error tracking), dependent on internet connectivity and user consent.
- Volume Mount Intelligence: Enriched volume mount structs with partition and filesystem metadata to enable informed NFS vs CIFS export decisions and implemented proper volume-event handling for cache retry and invalidation. (#500)
- Bidirectional Home Assistant WebSocket: Introduced client-to-server WebSocket messaging, starting with a
helohandshake that allows the custom component to announce its identity and version to the backend. (#508) - Disable SMART Integration Setting: Added a new setting to disable SMART integration, helping mitigate excessive disk wake-ups in sleeping-disk scenarios. (#499)
- Home Assistant Repairs Proxy Service: Implemented a backend service to manage Home Assistant repairs via the custom component, with queued commands and lifecycle synchronization over WebSocket. (#518)
- Overlay Helper System Improvements: Refactored the TourEvents system for better accuracy and type safety, added comprehensive tests, and established frontend maintenance guidelines. (#515)
- Add repair service and proxy for Home Assistant integration
🐛 Bug Fixes
- HA Config Flow Discovery Import: Fixed Supervisor discovery flow import errors by using the new
HassioServiceInfomodule path with a compatibility fallback for older Home Assistant versions. - Udev Event Parsing Error Handling: Improved handling of malformed udev events to prevent spurious error reports to Rollbar. Malformed events with invalid environment data are now logged at debug level instead of error level, reducing noise in error tracking while maintaining visibility for legitimate errors.
- Issue Report Gist Offloading: Fixed oversized issue report URLs by replacing large addon log and console error parameters with Gist links, preventing runaway URL growth when diagnostics are large.
- Mount Point Type Defaulting: Default missing mount point types on events to avoid NOT NULL constraint failures when persisting mount points.
- Mount Conversion Type Derivation: Ensure mount conversions derive mount point type from the mount path to prevent missing type values.
- WebSocket Loading State: Report WebSocket SSE loading as active until the socket is connected, and re-enable loading after disconnects.
- Deterministic Mount Flag Metadata: Ensure mount-flag metadata for shared options (for example, uid/gid) is derived from a consistent preferred adapter source to avoid nondeterministic descriptions and regex values.
- Volumes TreeView ID Collisions: Namespace volume tree item IDs by disk to prevent duplicate partition identifiers from crashing the Volumes tab.
- Disk FSCK Status Population: Populate fsck supported/needed fields in disk stats using filesystem service capability and state information.
🔄 Breaking Changes
- Update Engine Replacement: Replaced jpillora/overseer with minio/selfupdate for binary updates. The new implementation provides more reliable updates with cryptographic signature verification using minisign. Updates will now properly restart the service when running under s6 supervision.
- SMB over QUIC Default Behavior Change: The SMB over QUIC feature is now disabled by default. Users must explicitly enable it in the settings to use this functionality. This change aims to enhance security and stability by preventing unintended use of the experimental protocol.
- Telemetry Service Update: The telemetry service has been updated to use Rollbar for error tracking and monitoring. This change may require users to review their privacy settings and consent to data collection, as Rollbar collects different types of data compared to the previous telemetry solution.
- Autoupdate Service Modification: The autoupdate service has been modified to support multiple update channels (stable, beta, dev) and local development builds. Users may need to reconfigure their update preferences to align with the new channel system.
- Disk Health Payload Update: Per-partition disk health now reports
filesystem_stateand no longer includes the redundantfsck_neededfield. - Partition Filesystem Support: Per-partition disk health no longer includes
fsck_supported; filesystem support is now reported on partitions asfilesystem_support.
🔧 Maintenance
- Custom Component Build Tooling: Added ruff (lint + format) and mypy (type checking) tooling for the HA custom component with
pyproject.tomlconfiguration,Makefiletargets (make check,make lint,make format,make typecheck), and CI integration invalidate-hacs.yaml. Fixed all lint and type issues in existing code. - Go 1.26 Migration: Upgraded Go version from 1.25.7 to 1.26.0, adopting new language features:
- Replaced all
pointer.Bool/String/Int/Uint64/Of/Any()calls with Go 1.26's built-innew(expr)syntax (~268 occurrences) and removed thexorcare/pointerdependency - Replaced all
interface{}withanyalias (147 occurrences) following Go modernizer patterns - Replaced
sync.WaitGroupAdd(1)/Done()patterns withWaitGroup.Go()method in production code
- Replaced all
- TypeScript 6.0 Final Migration: Updated frontend TypeScript configuration for compatibility with TypeScript 6.0 final (March 23, 2026) and preparation for TypeScript 7.0 (Go-based):
- Removed all deprecated compiler flags (
experimentalDecorators,useDefineForClassFields,baseUrl,outFile) - Updated ECMAScript target from ES2021 to ES2022 for better modern feature alignment
- Enabled
noImplicitOverridestrict flag (code already compliant) - Code optimizations leveraging TS 6.0 improved type inference (removed 11 ...
- Removed all deprecated compiler flags (
Release 2026.3.0-dev.3
What's Changed
Note: This section tracks development progress and changes planned for the first Release Candidate (RC). The final release notes will be organized and consolidated once the RC is ready for public testing.
🙏 Thanks
We would like to thank all supporters for their contributions and donations.
With your donations, we are able to continue developing and improving this project. Your support is greatly appreciated.
📅 Roadmap
- Release Candidate (RC) Planned for March: The first release candidate version is scheduled for March. This RC will stabilize the codebase, finalize the API, and provide a feature-complete version for community testing and feedback before the official stable release.
✨ Features
- HACS Custom Component: Added a Home Assistant custom component (
custom_components/srat/) compatible with HACS for direct integration with Home Assistant. Supports UI configuration wizard, Supervisor add-on autodiscovery via slug whitelist, WebSocket-based real-time updates, and exposes sensors compatible with the existing SRAT HA integration (samba status, process status, volume status, disk health, per-disk I/O, and per-partition health). Includes full test suite usingpytest-homeassistant-custom-componentand Python code quality tooling (ruff, mypy) integrated into CI. Early internal implementation serving as the foundation for upcoming releases.
🧑🏫 Documentation
🐛 Bug Fixes
- HA Config Flow Discovery Import: Fixed Supervisor discovery flow import errors by using the new
HassioServiceInfomodule path with a compatibility fallback for older Home Assistant versions. - Udev Event Parsing Error Handling: Improved handling of malformed udev events to prevent spurious error reports to Rollbar. Malformed events with invalid environment data are now logged at debug level instead of error level, reducing noise in error tracking while maintaining visibility for legitimate errors.
- Issue Report Gist Offloading: Fixed oversized issue report URLs by replacing large addon log and console error parameters with Gist links, preventing runaway URL growth when diagnostics are large.
- Mount Point Type Defaulting: Default missing mount point types on events to avoid NOT NULL constraint failures when persisting mount points.
- Mount Conversion Type Derivation: Ensure mount conversions derive mount point type from the mount path to prevent missing type values.
- WebSocket Loading State: Report WebSocket SSE loading as active until the socket is connected, and re-enable loading after disconnects.
- Deterministic Mount Flag Metadata: Ensure mount-flag metadata for shared options (for example, uid/gid) is derived from a consistent preferred adapter source to avoid nondeterministic descriptions and regex values.
- Volumes TreeView ID Collisions: Namespace volume tree item IDs by disk to prevent duplicate partition identifiers from crashing the Volumes tab.
- Disk FSCK Status Population: Populate fsck supported/needed fields in disk stats using filesystem service capability and state information.
🔄 Breaking Changes
- Update Engine Replacement: Replaced jpillora/overseer with minio/selfupdate for binary updates. The new implementation provides more reliable updates with cryptographic signature verification using minisign. Updates will now properly restart the service when running under s6 supervision.
- SMB over QUIC Default Behavior Change: The SMB over QUIC feature is now disabled by default. Users must explicitly enable it in the settings to use this functionality. This change aims to enhance security and stability by preventing unintended use of the experimental protocol.
- Telemetry Service Update: The telemetry service has been updated to use Rollbar for error tracking and monitoring. This change may require users to review their privacy settings and consent to data collection, as Rollbar collects different types of data compared to the previous telemetry solution.
- Autoupdate Service Modification: The autoupdate service has been modified to support multiple update channels (stable, beta, dev) and local development builds. Users may need to reconfigure their update preferences to align with the new channel system.
- Disk Health Payload Update: Per-partition disk health now reports
filesystem_stateand no longer includes the redundantfsck_neededfield. - Partition Filesystem Support: Per-partition disk health no longer includes
fsck_supported; filesystem support is now reported on partitions asfilesystem_support.
🔧 Maintenance
- Custom Component Build Tooling: Added ruff (lint + format) and mypy (type checking) tooling for the HA custom component with
pyproject.tomlconfiguration,Makefiletargets (make check,make lint,make format,make typecheck), and CI integration invalidate-hacs.yaml. Fixed all lint and type issues in existing code. - Go 1.26 Migration: Upgraded Go version from 1.25.7 to 1.26.0, adopting new language features:
- Replaced all
pointer.Bool/String/Int/Uint64/Of/Any()calls with Go 1.26's built-innew(expr)syntax (~268 occurrences) and removed thexorcare/pointerdependency - Replaced all
interface{}withanyalias (147 occurrences) following Go modernizer patterns - Replaced
sync.WaitGroupAdd(1)/Done()patterns withWaitGroup.Go()method in production code
- Replaced all
- Updated dependencies to latest versions to ensure security and compatibility.
✨ Features
- Report Issue on GitHub: Added new "Report Issue" functionality allowing users to easily create GitHub issues with automated diagnostic data collection:
- Button in top navigation bar to open issue reporting dialog
- Problem type selector (Frontend UI, HA Integration, Addon, or Samba problems)
- Markdown-compatible description field
- Optional data collection: contextual data (URL, navigation history, browser info, console errors), addon logs, and sanitized SRAT configuration
- Automatic routing to appropriate repository (dianlight/srat or dianlight/hassos-addon) based on problem type
- Pre-populated GitHub issue URL with diagnostic information
- Downloads diagnostic files for attachment to the issue
- Autoupdate with Signature Verification (#358): Implemented a new autoupdate mechanism using minio/selfupdate with cryptographic signature verification
- Added
--auto-updateflag to automatically download and apply updates without user acceptance - Updates are signed with minisign (Ed25519) signatures for security
- Automatic restart when running under s6 supervision
- Public key is embedded in the binary for signature verification
- Build workflow automatically signs all release binaries
- Added
- Allow Guest Setting: Added new
Allow Guestboolean setting in Settings → General section to enable anonymous guest access to Samba shares. When enabled, configures Samba withguest account = nobodyandmap to guest = Bad Userfor secure guest authentication. - Enhanced SMART Service #234: Implemented comprehensive SMART disk monitoring and control features:
- SMB over QUIC Support #227: Added comprehensive support for SMB over QUIC transport protocol with intelligent system detection
- Autoupdate Service: Implemented a back-end service for automatic updates from GitHub releases, with support for multiple channels and local development builds.
- Telemetry Configuration: Added UI in Settings to configure telemetry modes, dependent on internet connectivity.
- Manage
local masteroption (?) - Add Rollbar telemetry service for error tracking and monitoring
- Help screen or overlay help/tour #82
- Smart Control #100
- HDD Spin down #101
🏗 Chore
- Replace snapd osutil dependency with internal mount utilities based on moby/sys/mountinfo
- Align UI elements to HA #81
- Create the base documentation #80
- Display version from ADDON
What's Changed
- ⬆️ Update oven-sh/setup-bun to 0c5077e by @renovate[bot] in #497
- ⬆️ Update softprops/action-gh-release to 153bb8e by @renovate[bot] in #503
- ⬆️ Update FrontEnd by @renovate[bot] in #504
- 📚 docs: auto-fix documentation formatting and TOC by @github-actions[bot] in #502
- ⬆️ Update @typescript/native-preview to v7.0.0-dev.20260316.1 by @renovate[bot] in #506
- ⬆️ Update gitlab.com/tozd/go/errors to v0.11.1 by @renovate[bot] in #507
New Contributors
- @github-actions[bot] made their first contribution in #502
Full Changelog: 2026.3.0-dev.2...2026.3.0-dev.3
Release 2026.1.0-dev.3
What's Changed
- ⬆️ Update oven-sh/setup-bun digest to b7a1c7c by @renovate[bot] in #368
- ⬆️ Update BackEnd by @renovate[bot] in #369
- ⬆️ Update FrontEnd by @renovate[bot] in #370
- Refactor frontend tests to follow Testing Library best practices - 100% Complete by @Copilot in #367
- ⬆️ Update @typescript/native-preview to v7.0.0-dev.20260108.1 by @renovate[bot] in #372
- Implement MSW v2 hybrid mocking infrastructure with WebSocket support and complete test migration (100%) for frontend testing by @Copilot in #373
- ⬆️ Update golang.org/x/sys to v0.40.0 by @renovate[bot] in #374
- ⬆️ Pin dependencies by @renovate[bot] in #375
- ⬆️ Update mlugg/setup-zig digest to e7d1537 by @renovate[bot] in #377
- ⬆️ Update FrontEnd by @renovate[bot] in #376
- ⬆️ Update FrontEnd by @renovate[bot] in #380
- ⬆️ Update BackEnd by @renovate[bot] in #379
- Fix HDIdle service error logging and add startup performance instrumentation by @Copilot in #378
- ⬆️ Update FrontEnd by @renovate[bot] in #382
- ⬆️ Update BackEnd by @renovate[bot] in #383
- ⬆️ Update actions/setup-go action to v6.2.0 by @renovate[bot] in #386
- ⬆️ Update FrontEnd by @renovate[bot] in #385
- Read bun version dynamically from package.json in updateContentCommand.sh by @Copilot in #388
- ⬆️ Update FrontEnd by @renovate[bot] in #398
- Add emoticon censoring and copy functionality with maskify-ts and comprehensive regex support by @Copilot in #384
- ⬆️ Update actions/setup-node digest to 6044e13 by @renovate[bot] in #401
- ⬆️ Update FrontEnd by @renovate[bot] in #402
- Replace markdown-link-check with Lychee and add Vale prose linter with GFM support by @Copilot in #381
- ⬆️ Update lycheeverse/lychee-action action to v2.7.0 by @renovate[bot] in #409
- ⬆️ Pin dependencies by @renovate[bot] in #405
- ⬆️ Update oven-sh/setup-bun digest to 3d26778 by @renovate[bot] in #412
- Add donation button to NavBar with dynamic funding platform support via RTK Query by @Copilot in #404
Full Changelog: 2026.1.0-dev.2...2026.1.0-dev.3
What's Changed
- ⬆️ Update oven-sh/setup-bun digest to b7a1c7c by @renovate[bot] in #368
- ⬆️ Update BackEnd by @renovate[bot] in #369
- ⬆️ Update FrontEnd by @renovate[bot] in #370
- Refactor frontend tests to follow Testing Library best practices - 100% Complete by @Copilot in #367
- ⬆️ Update @typescript/native-preview to v7.0.0-dev.20260108.1 by @renovate[bot] in #372
- Implement MSW v2 hybrid mocking infrastructure with WebSocket support and complete test migration (100%) for frontend testing by @Copilot in #373
- ⬆️ Update golang.org/x/sys to v0.40.0 by @renovate[bot] in #374
- ⬆️ Pin dependencies by @renovate[bot] in #375
- ⬆️ Update mlugg/setup-zig digest to e7d1537 by @renovate[bot] in #377
- ⬆️ Update FrontEnd by @renovate[bot] in #376
- ⬆️ Update FrontEnd by @renovate[bot] in #380
- ⬆️ Update BackEnd by @renovate[bot] in #379
- Fix HDIdle service error logging and add startup performance instrumentation by @Copilot in #378
- ⬆️ Update FrontEnd by @renovate[bot] in #382
- ⬆️ Update BackEnd by @renovate[bot] in #383
- ⬆️ Update actions/setup-go action to v6.2.0 by @renovate[bot] in #386
- ⬆️ Update FrontEnd by @renovate[bot] in #385
- Read bun version dynamically from package.json in updateContentCommand.sh by @Copilot in #388
- ⬆️ Update FrontEnd by @renovate[bot] in #398
- Add emoticon censoring and copy functionality with maskify-ts and comprehensive regex support by @Copilot in #384
- ⬆️ Update actions/setup-node digest to 6044e13 by @renovate[bot] in #401
- ⬆️ Update FrontEnd by @renovate[bot] in #402
- Replace markdown-link-check with Lychee and add Vale prose linter with GFM support by @Copilot in #381
- ⬆️ Update lycheeverse/lychee-action action to v2.7.0 by @renovate[bot] in #409
- ⬆️ Pin dependencies by @renovate[bot] in #405
- ⬆️ Update oven-sh/setup-bun digest to 3d26778 by @renovate[bot] in #412
- Add donation button to NavBar with dynamic funding platform support via RTK Query by @Copilot in #404
Full Changelog: 2026.1.0-dev.2...2026.1.0-dev.3