- Linux Power Management: Native kernel interface support (AMD P-State EPP, cpufreq) replaces RyzenAdj on Linux. Exposes energy preference (EPP), governor selection, and frequency limit controls where available.
- Power API:
/api/powerresponse restructured withpower_controlobject containingcapabilitiesandcurrent_state. Backend uses a unified interface across Windows (RyzenAdj) and Linux (native), with platform-specific power profiles in config. - Breaking Change:
PowerResponseAPI structure changed — clients must update to usepower_controlinstead of flatryzenadj/ryzenadj_installedfields. - Power task refactored: extracted a generic drift-aware
Reconcilerutility (service/src/utils/reconciler.rs) that handles quiet-window, cooldown, and immediate-apply logic. Replaces inline TDP/thermal reapply state tracking. - Backend modules (
ryzen_adj,ryzen_adj_parser) are now conditionally compiled for Windows only; newlinux_powermodule compiled for Linux only.AppStatecarries platform-specific power backend behind#[cfg]gates. - RyzenAdj install/uninstall endpoints now return an "unsupported_platform" error on Linux instead of attempting Windows-only operations.
- UI:
UiSliderreplaced byUiControlCardcomponent supporting both range sliders and select dropdowns (used for governor/EPP selection). - UI: PowerControl panel is now fully capability-driven — controls appear based on
PowerCapabilitiesreported by the backend rather than OS/CPU detection heuristics. - UI: Frequency-limit mismatch warning shown when one power profile (AC or Battery) has frequency limits enabled but the other does not.
- Tooling: Added
.editorconfig,rustfmt.toml, Prettier config (.prettierrc.cjs,.prettierignore); unifiedlintscript runs ESLint + Prettier +cargo fmt --check; addedformatscript. - Service: Web server now starts immediately without waiting for
framework_toolvalidation; CLI resolution/installation happens asynchronously in background, eliminating 60-second startup delay when tool is unavailable. - Documentation: Removed hardcoded port references (8090) throughout documentation and scripts; install script now auto-detects the configured port from service logs and displays the actual URL.
- UI: Linux users now see a copy-able install command with one-click copy button instead of download link; manual install instructions and GitHub link provided as secondary actions.
- Linux: Added automated install script (
install-linux.sh) that downloads latest release, installs binary to/usr/local/bin, sets up systemd service, and verifies installation with health check. - Linux: Auto-update support with tar.gz extraction and in-place binary replacement (requires sudo/root permissions); service attempts automatic restart after update.
- UI: Update error messages now show specific backend error details (e.g., "installer asset not found") instead of generic text.
- Linux: Store config at
/etc/framework-control/config.jsoninstead of the WindowsProgramDatapath. - Linux: Desktop entry support creates .desktop file in applications menu (~/.local/share/applications) using xdg-open. Detects actual user when service runs as root via SUDO_USER or active sessions.
- Linux: CI releases now build statically-linked binaries using musl target for compatibility with all Linux distributions; local builds remain dynamic for faster iteration.
- Build: Release artifacts now use stable naming (
framework-control-service-x86_64.msiandframework-control-service-x86_64.tar.gz) for easier update system parsing. - Build: Windows workflow now uses single runner calling
build-msi.mjsfor all steps (build web, build service, create MSI), reducing build time from ~8min to ~3min by avoiding redundant compilation across separate steps. - Refactor: Renamed
zip_extract.rstoextract.rsand added tar.gz extraction support;download_to_pathnow automatically extracts both zip and tar.gz archives using system tools. - Removed macOS-specific code since Framework laptops don't support macOS (update system, UI icons, CLI helpers, comments).