- Updated `OnboardingAdminPanel` and `OnboardingTestHarness` components to use the new `Button` component from `@unraid/ui` instead of the deprecated `UButton`.
- Adjusted button properties to align with the new component's API, including changes to color and variant attributes.
- This refactor enhances consistency across the onboarding UI components and improves maintainability.
- Added new `OnboardingState` and `OnboardingOverride` types to manage onboarding states and overrides.
- Implemented `OnboardingOverrideService` and `OnboardingStateService` for handling onboarding state logic.
- Updated GraphQL schema to include onboarding state queries and mutations, enhancing the onboarding process.
- Enhanced existing components to utilize the new onboarding state management features, improving user experience.
- Removed deprecated `Customization` type and refactored related components for better clarity and maintainability.
This update significantly improves the onboarding experience by providing robust state management and clearer component interactions.
- Added a new `resetUpgradeOnboarding` mutation to reset onboarding progress for the current OS version.
- Introduced an `OnboardingAdminPanel` component for managing onboarding states and resetting progress.
- Created a test harness for simulating onboarding flows with client-side overrides.
- Updated GraphQL schema to include the new `ThemeName` enum and onboarding reset mutation.
- Enhanced existing components to support the new onboarding features and improve user experience.
This update significantly enhances the onboarding process by providing tools for managing and resetting onboarding states, improving overall usability.
- Replaced instances of `setTheme` with `fetchTheme` in the `ActivationModal.test.ts` and `WelcomeModal.test.ts` files to align with recent changes in theme management.
- Updated test assertions and error messages to reflect the new method, enhancing clarity and consistency in theme loading tests.
This update ensures that the tests accurately reflect the current implementation of theme management across components.
- Replaced `setTheme` with `fetchTheme` in `ActivationModal.vue`, `WelcomeModal.standalone.vue`, and `themeInitializer.ts` to ensure consistent theme loading.
- Updated error logging messages for clarity when loading themes.
- Simplified the `fetchTheme` function in `theme.ts` for improved readability.
This update enhances the consistency and clarity of theme management across the application.
- Updated import statements in `index.ts` and `info.module.ts` to use consistent single quotes for string literals.
- Reordered the import of `CpuModule` in `info.module.ts` to maintain a logical structure.
- Ensured proper export syntax in `gql/index.ts` for consistency across the codebase.
This update enhances code readability and maintains uniformity in import styles.
- Enhanced the `ActivationPluginsStep` component to track and display the installation status of plugins, including states for pending, installing, success, and error.
- Updated the UI to provide real-time feedback during the installation process, including dynamic status messages and logs for each plugin.
- Improved unit tests to verify the new status handling and ensure accurate UI updates based on installation progress.
- Added new localization strings for installation status messages to enhance user experience.
This update significantly improves the clarity and responsiveness of the plugin installation process, providing users with better insights into the status of their selected plugins.
- Updated the `ActivationPluginsStep` component to improve the handling of plugin installations, including better state management for installation completion.
- Introduced a new primary action button that dynamically updates based on installation status and selected plugins.
- Enhanced unit tests to cover new checkbox interactions and verify the correct behavior of the installation process.
- Updated localization files to include new messages related to the installation process.
This update significantly improves user experience by providing clearer feedback during plugin installations and ensuring proper state management throughout the process.
- Introduced a new `UnraidPlugins` module to manage plugin installations, including tracking installation progress and status updates.
- Added GraphQL types and mutations for installing plugins, retrieving installation operations, and subscribing to installation updates.
- Enhanced the `ActivationPluginsStep` component to support real-time feedback during plugin installations, displaying logs and status messages.
- Updated localization files to include messages related to plugin installation processes.
- Implemented unit tests for the new plugin installation service and component interactions, ensuring reliability and correctness.
This update significantly enhances the user experience by providing a robust mechanism for managing plugin installations, improving the overall onboarding process.
- Enhanced the test cases for the `ActivationModal` component by adding titles, descriptions, and icons for the upgrade steps.
- This update improves the clarity and context of the upgrade steps in the tests, facilitating better understanding and maintenance of the onboarding process.
- Updated the `ActivationModal` component to include a new method for completing pending upgrade steps, improving the onboarding experience.
- Modified the `closeModal` function to ensure pending steps are marked as complete before closing the modal.
- Enhanced tests to verify the correct behavior of upgrade step completion and modal interactions.
- Updated documentation to reflect changes in upgrade onboarding behavior.
This update improves the user experience by ensuring that all pending upgrade steps are properly handled during the activation process.
- Removed the `onComplete` prop from the `ActivationModal` component to streamline its functionality.
- Deleted several unused pages including `apikeys.vue`, `changelog.vue`, `flashbackup.vue`, `index.vue`, `login.query.ts`, `login.vue`, `redirect.vue`, `welcome.vue`, `apikeyauthorize.vue`, and `test-update-modal.vue` to improve codebase maintainability.
- This update enhances the clarity and performance of the application by eliminating unnecessary files and simplifying the component structure.
- Eliminated the unused `useI18n` import from the `WelcomeModal.standalone.vue` file to clean up the code.
- This update enhances the clarity and maintainability of the component by removing unnecessary dependencies.
- Replaced direct state access with ConfigService in SystemTimeService to improve dependency management and testability.
- Updated unit tests to mock ConfigService for retrieving system time settings, enhancing test isolation.
- Removed unnecessary getters and store dispatch calls, streamlining the service logic.
This update enhances the maintainability and clarity of the SystemTimeService by leveraging NestJS's configuration management capabilities.
- Removed `title`, `description`, and `icon` fields from the `UpgradeStep` type in the GraphQL schema and related TypeScript definitions to simplify the onboarding process.
- Updated documentation to reflect changes in how onboarding steps are tracked and displayed.
- Adjusted related tests and components to ensure compatibility with the updated schema.
This update streamlines the onboarding experience by focusing on essential information for upgrade steps.
- Updated the `activationCodeModal.test.ts` file to integrate Vue app setup for testing the activation code modal store.
- Refactored test initialization to use a defined component and mount the app, improving the test structure and ensuring proper store usage.
- Added cleanup logic to unmount the app after each test, enhancing test isolation and reliability.
This update improves the testing framework for the activation code modal, ensuring better integration with Vue's reactivity system.
- Refactored activation-related components to utilize new translation keys for better localization support.
- Updated `ActivationModal`, `ActivationLicenseStep`, `ActivationPluginsStep`, and others to replace hardcoded strings with translation keys.
- Enhanced test cases to reflect changes in localization, ensuring consistency across the activation flow.
- Added new translation keys in `en.json` for various activation steps and messages.
This update improves the internationalization of the activation process, making it easier to manage translations and enhancing the user experience for non-English speakers.
- Introduced `OnboardingMutations` to manage the completion of upgrade onboarding steps.
- Added `completeUpgradeStep` mutation to mark specific onboarding steps as completed, returning relevant upgrade information.
- Enhanced `UpgradeInfo` type to include completed steps for better tracking of user progress during OS upgrades.
- Updated `OsVersionTracker` to persist completed onboarding steps alongside OS version tracking.
- Integrated new GraphQL queries and mutations in the frontend to support the onboarding process.
This update improves the user experience by providing a structured way to track and manage onboarding steps during OS upgrades, ensuring users receive appropriate guidance throughout the process.
- Added `ActivationPluginsStep` component to the activation process, allowing users to select and install essential plugins.
- Updated `ActivationModal` and related test files to incorporate the new plugins step, ensuring proper navigation and functionality.
- Improved state management for selected plugins in `ActivationPluginsStep.vue` to optimize performance.
- Mocked new upgrade onboarding store in tests to support the latest activation flow.
This update improves the activation experience by integrating plugin selection, streamlining the setup process for users.
- Added `UpgradeInfo` type to track OS version changes, including current and previous versions.
- Enhanced `InfoVersions` and GraphQL resolvers to expose upgrade information.
- Introduced `upgradeOnboarding` store to manage visibility and steps for users upgrading their OS.
- Updated `ActivationModal` to handle both fresh installs and upgrade onboarding, displaying relevant steps based on the user's upgrade path.
- Created configuration for defining upgrade steps and conditions in `releaseConfigs.ts`.
- Added new components and logic to facilitate the upgrade onboarding experience, improving user guidance during OS upgrades.
This update streamlines the upgrade process, ensuring users receive contextual onboarding steps when upgrading their Unraid OS, enhancing overall user experience.
- Introduced a new `ActivationPluginsStep` component for selecting and installing essential plugins during the activation process.
- Updated the `ActivationModal` to include the new plugins step, allowing users to navigate to it after the timezone selection.
- Enhanced the `ActivationSteps` component to reflect the new step in the activation flow.
- Added a button in the test pages to facilitate testing of the new plugins step functionality.
- Improved visibility logic and step handling in the activation modal to accommodate the new workflow.
This update enhances the user experience by allowing for plugin installation as part of the activation process, streamlining setup and configuration.
- Enhanced `ActivationModal.test.ts` to verify rendering of the new `ActivationTimezoneStep` when an activation code is present.
- Modified `ActivationSteps.test.ts` to reflect the addition of a fourth step and updated titles/descriptions accordingly.
- Adjusted visibility logic in `activationCodeModal.test.ts` to ensure the modal is visible during fresh installs when the activation code is missing, aligning with the new user flow.
These changes improve test coverage and ensure the activation process behaves as expected with the recent updates.
- Added a new `ActivationTimezoneStep` component for selecting time zones during the activation process.
- Integrated timezone selection with the `updateSystemTime` mutation to update the system's timezone settings.
- Updated the `ActivationModal` and `ActivationSteps` components to accommodate the new timezone step.
- Improved visibility logic for the activation modal based on the presence of an activation code.
- Introduced a new GraphQL mutation for updating system time, enhancing the API's capability to manage time settings.
This update streamlines the activation process by allowing users to set their timezone, ensuring accurate timestamps across the system.
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
## Release Notes v4.29.2
* **New Features**
* Added iframe mode support with UI adjustments for embedded deployments
* Introduced modal portal system with dark mode integration
* **Bug Fixes**
* Fixed log line deduplication sync issue in Docker log viewer to
prevent orphaned entries
* **Improvements**
* Enhanced table header rendering for consistent behavior and resizing
* Improved notification subscription handling for better stability
* Optimized log viewer initialization behavior
* Simplified organizer API parameter handling
<sub>✏️ Tip: You can customize this high-level summary in your review
settings.</sub>
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
---------
Co-authored-by: Pujit Mehrotra <pujit@lime-technology.com>
- Replaced BrandLoading with BrandButton in UpdateOs component for
better user interaction.
- Updated test cases to reflect changes in rendering logic, ensuring the
account button is displayed when no reboot is pending.
- Added functionality to navigate to account update when the button is
clicked.
- Introduced WEBGUI_REDIRECT URL for handling update installations in
the store logic.
Fixes#1848
## Background
The `build:dev` script is used for the `unraid:deploy` workflow, and it
implicitly triggered the `predev` script to build the `unraid-ui`
package as needed.
`web` builds depend on `unraid-ui`. In the past, `unraid-ui` was built
during `pnpm install` via a `prepare` step in its `package.json`.
However, this approach doesn't ensure that `web` builds correctly; stale
`unraid-ui` builds could cause false-positives.
So, instead of doing that, we call `predev` from `prebuild`, ensuring
that both local builds and the `unraid:deploy` workflow lazily get the
correct build of `unraid-ui`.
## Summary
Introduces a new Vue-based Docker container management interface
replacing the legacy webgui table.
### Container Management
- Start, stop, pause, resume, and remove containers via GraphQL
mutations
- Bulk actions for managing multiple containers at once
- Container update detection with one-click updates
- Real-time container statistics (CPU, memory, I/O)
### Organization & Navigation
- Folder-based container organization with drag-and-drop support
- Accessible reordering via keyboard controls
- Customizable column visibility with persistent preferences
- Column resizing and reordering
- Filtering and search across container properties
### Auto-start Configuration
- Dedicated autostart view with delay configuration
- Drag-and-drop reordering of start/stop sequences
### Logs & Console
- Integrated log viewer with filtering and download
- Persistent console sessions with shell selection
- Slideover panel for quick access
### Networking
- Port conflict detection and alerts
- Tailscale integration for container networking status
- LAN IP and port information display
### Additional Features
- Orphaned container detection and cleanup
- Template mapping management
- Critical notifications system
- WebUI visit links with Tailscale support
<sub>PR Summary by Claude Opus 4.5</sub>
On errors, a `console.error` message should be emitted from the browser
console, tagged `[ReplaceCheck.check]`.
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
* **New Features**
* Added retry capability for license eligibility checks with a
contextual "Retry" button that appears in error states.
* **Bug Fixes**
* Fixed license status initialization to correctly default to ready
state.
* Enhanced error messaging with specific messages for different failure
scenarios (missing credentials, access denied, server errors).
* Improved status display handling to prevent potential runtime errors.
* **Localization**
* Added "Retry" text translation.
* **Tests**
* Updated and added tests for reset functionality and error handling.
<sub>✏️ Tip: You can customize this high-level summary in your review
settings.</sub>
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
…on and pnpm-lock.yaml
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
* **New Features**
* Added a standalone redirect page that shows "Redirecting..." and
navigates automatically.
* **Improvements**
* Redirect preserves hash callback data, validates targets, and logs the
computed redirect.
* Purchase callback origin changed to a different account host.
* Date/time formatting now tolerates missing or empty server formats
with safe fallbacks.
* Redirect page included in backup/restore.
* **Tests**
* Added tests covering date/time formatting fallbacks.
* **Chores**
* Dependency @unraid/shared-callbacks upgraded.
* Removed multiple demo/debug pages and related test UIs.
<sub>✏️ Tip: You can customize this high-level summary in your review
settings.</sub>
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
- Added PHP logic to determine if the current theme is dark and set a
CSS variable accordingly.
- Introduced a new function to retrieve the dark mode state from the CSS
variable in JavaScript.
- Updated the theme store to initialize dark mode based on the CSS
variable, ensuring consistent theme application across the application.
This improves user experience by ensuring the correct theme is applied
based on user preferences.
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
* **New Features**
* Server-persisted theme mutation and client action to fetch/apply
themes
* **Improvements**
* Safer theme parsing and multi-source initialization (CSS var, storage,
cookie, server)
* Robust dark-mode detection and propagation across document, modals and
teleport containers
* Responsive banner/header gradient handling with tunable CSS variables
and fallbacks
* **Tests**
* Expanded tests for theme flows, dark-mode detection, banner gradients
and manifest robustness
<sub>✏️ Tip: You can customize this high-level summary in your review
settings.</sub>
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
## Summary
- ensure the API release build copies nodemon.json into the packaged
artifacts so nodemon-managed deployments have the config available
## Testing
- pnpm --filter @unraid/api lint:fix
------
[Codex
Task](https://chatgpt.com/codex/tasks/task_e_691e1f4bde3483238726478f6fb2d52a)
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
* **New Features**
* Switch to Nodemon for process management and updated CLI to use it.
* Added boot-time diagnostic logging and direct log-file writing.
* New per-package CPU telemetry and topology exposure.
* **Bug Fixes**
* More reliable process health detection and lifecycle handling.
* Improved log handling and startup robustness.
* **Chores**
* Removed PM2-related components and tests; migrated to Nodemon.
* Consolidated pub/sub channel usage and bumped internal version.
<sub>✏️ Tip: You can customize this high-level summary in your review
settings.</sub>
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
---------
Co-authored-by: Pujit Mehrotra <pujit@lime-technology.com>
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
* **Localization**
* Updated translations across 24 languages including Arabic, Bengali,
German, Spanish, French, Japanese, Korean, Portuguese, and Russian for
OS update eligibility messages, driver update status notifications, and
license/trial key expiration messaging to improve international user
experience.
<sub>✏️ Tip: You can customize this high-level summary in your review
settings.</sub>
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
- Removed translation function calls from the UI components for reboot
type text, replacing them with direct references to the computed
properties.
- Enhanced ineligible update messages by integrating localization for
various conditions, ensuring clearer user feedback regarding update
eligibility.
- Added new localization strings for ineligible update scenarios in the
English locale file.
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
* **New Features**
* Added new localization keys for OS update eligibility, reboot labels,
changelog link, and expanded uptime/trial expiry messages.
* **Bug Fixes**
* Restored translated strings and added locale-aware release date
formatting for update/ineligible messaging and badges.
* **Theme & UI**
* Streamlined theme initialization and server-driven theme application;
removed legacy CSS-variable persistence and adjusted dark/banner
behavior.
* **Tests**
* Added i18n and date/locale formatting tests and improved
local-storage-like test mocks.
* **Chores**
* Removed an auto-registered global component and strengthened
script/theme initialization and CSS-variable validation.
<sub>✏️ Tip: You can customize this high-level summary in your review
settings.</sub>
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
## Summary
- rely on the existing Pinia persisted state instead of manual
localStorage hydration
- reapply CSS variables after persisted hydration so custom header
colors show immediately
## Testing
- Not run (not requested)
------
[Codex
Task](https://chatgpt.com/codex/tasks/task_e_691e5a1d052c8323973847eb5833fbb9)
## Summary
- remove the REST API log download helper and associated service wiring
- drop the Download API Logs UI component and related registrations and
test references
- update tests and type declarations to reflect the removal
## Testing
- Not run (not requested)
------
[Codex
Task](https://chatgpt.com/codex/tasks/task_e_691ce360f8f88323888ad6ef49f32b45)
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
* **Removed Features**
* Removed the API logs download feature — the UI download component and
the corresponding public API endpoint are no longer available.
* **Chores**
* Cleaned up related tests, component registrations, and unused
integration/dependency wiring tied to the removed logs feature.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->