Commit Graph
4773 Commits
Author SHA1 Message Date
Victor Lyuboslavsky 24da012f18 Fixed Android Enterprise page not refreshing (#45914)
<!-- Add the related story/sub-task/bug number, like Resolves #123, or
remove if NA -->
**Related issue:** Resolves #45862 

Speculative fixes since I wasn't able to repro issue locally.
Refresh AppContext and the React Query ["config"] cache directly after
the SSE/DELETE response so AndroidMdmCard and AndroidMdmPage flip
without a manual page reload, with a bounded retry to defeat the 1s
cached_mysql.AppConfig TTL. Also harden startSSE to detect the success
signal across chunk boundaries and reject (rather than hang) when the
stream ends without it.

# Checklist for submitter

If some of the following don't apply, delete the relevant line.

- [x] Changes file added for user-visible changes in `changes/`,
`orbit/changes/` or `ee/fleetd-chrome/changes`.
See [Changes
files](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/guides/committing-changes.md#changes-files)
for more information.

- [x] Timeouts are implemented and retries are limited to avoid infinite
loops

## Testing

- [x] QA'd all new/changed functionality manually

For unreleased bug fixes in a release candidate, one of:

- [x] Confirmed that the fix is not expected to adversely impact load
test results

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Bug Fixes**
* Fixed Android Enterprise page not refreshing after connecting or
disconnecting Android MDM. The Enterprise ID and card state now update
automatically without requiring a manual page reload.

<!-- review_stack_entry_start -->

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/fleetdm/fleet/pull/45914?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack)

<!-- review_stack_entry_end -->
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-05-20 17:13:42 -05:00
RachelElysia 6044fdc776 Fleet UI: Center align premium message, remove left align prop, dead CSS (#45879) 2026-05-20 10:23:51 -04:00
Allen Houchins c103085aec Add Duo Desktop as a Fleet-maintained app (#45883)
Add Duo Desktop to maintained apps: create Homebrew and Winget input
entries, add apps.json catalog entries, and add outputs for macOS and
Windows with installer metadata (version 7.17.x), installer URLs,
checksums, install/uninstall script refs, and upgrade code. Also add
frontend icon component and PNG asset, and register the icon in the
icons index so the app shows up in the Software page.
2026-05-20 09:02:27 -05:00
Lucas Manuel Rodriguez b4e907801f Add Android to the OS list (#45834)
Resolves #45711

- [X] Changes file added for user-visible changes in `changes/`,
`orbit/changes/` or `ee/fleetd-chrome/changes`.

## Testing

- [x] Added/updated automated tests
- [x] QA'd all new/changed functionality manually.

<img width="1216" height="527" alt="Screenshot 2026-05-19 at 5 30 48 PM"
src="https://github.com/user-attachments/assets/05a0a93f-3b5b-4ba9-80c5-b0a91b9de1f3"
/>
<img width="1216" height="527" alt="Screenshot 2026-05-19 at 5 30 37 PM"
src="https://github.com/user-attachments/assets/3e23e88e-6a95-46f6-a68f-12fb98f1aefe"
/>
<img width="1216" height="527" alt="Screenshot 2026-05-19 at 5 29 45 PM"
src="https://github.com/user-attachments/assets/417ca981-0781-4df5-811b-dafaabbd61a9"
/>
<img width="1216" height="527" alt="Screenshot 2026-05-19 at 5 29 30 PM"
src="https://github.com/user-attachments/assets/cf13985d-5cb3-414a-9135-5cf4c5ee0dd1"
/>
<img width="1216" height="527" alt="Screenshot 2026-05-19 at 5 31 33 PM"
src="https://github.com/user-attachments/assets/8500e7b2-cc7b-425d-b6b7-bbbf128faac4"
/>


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Bug Fixes**
* Fixed host listing so filtering by Android OS name and version returns
matching hosts.

* **New Features**
* Android hosts are now included in the operating systems aggregation
and UI, with a dedicated Android icon.
* Android OS version information is captured during device enrollment
and on status reports.

<!-- review_stack_entry_start -->

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/fleetdm/fleet/pull/45834?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack)

<!-- review_stack_entry_end -->
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-05-20 10:43:10 -03:00
Scott Gress 851ce172ef Fix CheckerboardViz relative scale to use cell value instead of percentage (#45791) 2026-05-20 08:00:35 -05:00
arya rizky 3db440a36a fix: correct typo 'explicity' to 'explicitly' in comment (#45820)
This is an independent contribution.

## Summary

Corrects a spelling error in a code comment in
`frontend/utilities/osquery_tables.ts`.

## Changes

- `frontend/utilities/osquery_tables.ts`: 1 character changed (`+1 -1`)

## Root Cause

The comment reads "Typecasting explicity here" — a misspelling of
"explicitly".

## Testing

- Comment-only change — no functional impact

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Documentation**
  * Corrected a spelling error in code comments for improved clarity.

<!-- review_stack_entry_start -->

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/fleetdm/fleet/pull/45820?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack)

<!-- review_stack_entry_end -->

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-05-20 11:54:14 +02:00
Harrison RavazzoloandAllen Houchins 61a2d11b84 macOS FMA: Secretive.app (#45858)
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Added Secretive macOS application (v3.0.4) to the supported
applications catalog
* Added automated install, update, and uninstall support for Secretive,
including app launch/relaunch handling
  * Added Secretive app metadata and detection entries for macOS
* Integrated Secretive application icon into the software catalog
interface

<!-- review_stack_entry_start -->

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/fleetdm/fleet/pull/45858?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack)

<!-- review_stack_entry_end -->
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Allen Houchins <32207388+allenhouchins@users.noreply.github.com>
2026-05-19 20:57:06 -05:00
RachelElysia 1c7f548b92 Fleet UI: post-QA empty state gap fixes (#45823) 2026-05-19 13:37:59 -04:00
3e10ad717c Add optional SES sender domain configuration (#43811)
**Related issue:** Resolves #42288

# Summary

This PR adds support for configuring an optional SES sender domain.

When the SES email backend is enabled, Fleet can now use a configured
sender domain for the `From` address instead of always deriving the
domain from `server.server_url`. If the setting is not provided, Fleet
keeps the existing behavior.

# Impact

This gives self-hosted operators a server-side SES configuration option
for email sending without changing UI-managed SMTP settings.

# Root cause

The SES sender path only generated `do-not-reply@<server host>` from the
Fleet server URL, so there was no way to override the sender domain
through server configuration.

# Checklist for submitter

- [x] Changes file added for user-visible changes in `changes/`,
`orbit/changes/` or `ee/fleetd-chrome/changes`.
- [x] Added/updated automated tests
- [x] Setting(s) is/are explicitly excluded from GitOps

## Testing

- [x] `go test -tags full,fts5,netgo ./server/mail -run
'Test_(getFromSES|sesSender_SendEmail)$'`
- [x] `go test -tags full,fts5,netgo ./server/config -run
'TestConfig(SESSenderDomain|Roundtrip)$'`
- [x] `go test -tags full,fts5,netgo ./server/service -run
'TestService_EmailConfig$'`
- [ ] QA'd all new/changed functionality manually


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Added optional SES sender domain configuration. Users can specify a
custom domain for the email "From" address via config or environment
variable; when unset it falls back to the server hostname.

* **Tests**
* Added and expanded tests to verify sender-domain precedence,
From-header generation, and related error cases.

<!-- review_stack_entry_start -->

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/fleetdm/fleet/pull/43811?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack)

<!-- review_stack_entry_end -->
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Lucas Manuel Rodriguez <lucas@fleetdm.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-05-19 11:21:46 -05:00
RachelElysia fdc101e306 Fleet UI: Add add variable button, update no results live empty state (#45808) 2026-05-19 12:18:53 -04:00
Allen Houchins 4ed988fc11 Remove Codex CLI app and assets (#45802)
Remove Codex CLI from maintained apps: delete winget input manifest and
install/uninstall scripts, remove the generated windows output
(versions/refs) and the apps.json entry. Also remove frontend icon
component and its image asset, and update the icons index to drop the
Codex CLI mapping.
2026-05-19 09:55:05 -05:00
Noah Talerman 6b129e811d Update link text from 'ABM' to 'Apple Business' (#45788)
For the following quick win:
- https://github.com/fleetdm/fleet/issues/44831
2026-05-19 10:33:18 -04:00
Noah Talerman e4e706bba1 Dashboard widgets: Update disable checkbox copy (#45144)
- Make them more explicit
2026-05-19 09:28:33 -04:00
George KarrandCopilot Autofix powered by AI 4d0534a48d Adding my device link on host details page with backend logic to generate it if needed (#45659)
<!-- Add the related story/sub-task/bug number, like Resolves #123, or
remove if NA -->
**Related issue:** Resolves #43895 

# Checklist for submitter

If some of the following don't apply, delete the relevant line.

- [x] Changes file added for user-visible changes in `changes/`,
`orbit/changes/` or `ee/fleetd-chrome/changes`.
See [Changes
files](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/guides/committing-changes.md#changes-files)
for more information.

- [x] Input data is properly validated, `SELECT *` is avoided, SQL
injection is prevented (using placeholders for values in statements), JS
inline code is prevented especially for url redirects, and untrusted
data interpolated into shell scripts/commands is validated against shell
metacharacters.
- [x] Timeouts are implemented and retries are limited to avoid infinite
loops
- [x] If paths of existing endpoints are modified without backwards
compatibility, checked the frontend/CLI for any necessary changes

## Testing

- [ ] Added/updated automated tests
- [ ] Where appropriate, [automated tests simulate multiple hosts and
test for host
isolation](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/reference/patterns-backend.md#unit-testing)
(updates to one hosts's records do not affect another)

- [ ] QA'd all new/changed functionality manually

For unreleased bug fixes in a release candidate, one of:

- [ ] Confirmed that the fix is not expected to adversely impact load
test results
- [ ] Alerted the release DRI if additional load testing is needed

## Database migrations

- [ ] Checked schema for all modified table for columns that will
auto-update timestamps during migration.
- [ ] Confirmed that updating the timestamps is acceptable, and will not
cause unwanted side effects.
- [ ] Ensured the correct collation is explicitly set for character
columns (`COLLATE utf8mb4_unicode_ci`).

## New Fleet configuration settings

- [ ] Setting(s) is/are explicitly excluded from GitOps

If you didn't check the box above, follow this checklist for
GitOps-enabled settings:

- [ ] Verified that the setting is exported via `fleetctl
generate-gitops`
- [ ] Verified the setting is documented in a separate PR to [the GitOps
documentation](https://github.com/fleetdm/fleet/blob/main/docs/Configuration/yaml-files.md#L485)
- [ ] Verified that the setting is cleared on the server if it is not
supplied in a YAML file (or that it is documented as being optional)
- [ ] Verified that any relevant UI is disabled when GitOps mode is
enabled

## fleetd/orbit/Fleet Desktop

- [ ] Verified compatibility with the latest released version of Fleet
(see [Must
rule](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/workflows/fleetd-development-and-release-strategy.md))
- [ ] If the change applies to only one platform, confirmed that
`runtime.GOOS` is used as needed to isolate changes
- [ ] Verified that fleetd runs on macOS, Linux and Windows
- [ ] Verified auto-update works from the released version of component
to the new version (see [tools/tuf/test](../tools/tuf/test/README.md))


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Self-service install/uninstall activities now render in passive voice,
omit an actor name, and include a “(self-service)” marker across feeds
* Global admins see a "My device" button on host user cards that opens
the end‑user device page in a new tab; the link is refreshed/generated
as needed
* Device page and browser tab header show the end‑user's name when
available (fallback: "My device")

* **Tests**
* Added/updated coverage for self‑service activity rendering and the "My
device" flow

<!-- review_stack_entry_start -->

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/fleetdm/fleet/pull/45659?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack)

<!-- review_stack_entry_end -->
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-05-18 16:05:44 -05:00
RachelElysia 1e27473b5a Fleet UI: Update report and policies empty states (#45064) 2026-05-18 16:32:03 -04:00
Sharon KatzandClaude Opus 4.6 15a4b16939 Fix disk encryption table horizontal scroll at narrow viewports (#45736)
Closes #43637

## Summary

- Adds `min-width: 0` to `.side-nav__card-container` so the flex child
can shrink below its content width, enabling horizontal scroll on data
tables inside the side-nav layout at narrow viewports.

## Root cause

`.side-nav__container` uses `display: flex`, and its child
`.side-nav__card-container` has `width: 100%` but no `min-width`
override. Flex children default to `min-width: auto`, which prevents
them from shrinking below their content width. This means `overflow-x:
auto` on `.data-table__wrapper` never activates because the parent chain
stretches to fit the table content instead of constraining it.

## Changes

**`frontend/pages/admin/components/SideNav/_styles.scss`** -- added
`min-width: 0` to `.side-nav__card-container`.

## Manual testing

- [x] Built and ran Fleet server locally (`make fleet && ./build/fleet
serve --dev --dev_license`)
- [x] Navigated to **Controls > Disk encryption**
(https://localhost:8080/controls/os-settings/disk-encryption?fleet_id=2)
- [x] Enabled disk encryption for the team and confirmed the table
rendered
- [x] Resized browser to smallest supported viewport width
- [x] **Before fix:** table columns were squished/truncated with no
horizontal scrollbar
- [x] **After fix:** horizontal scrollbar appeared and table content
scrolled correctly
- [x] Verified other pages using the SideNav component (e.g., Settings)
were not affected

## Unit tests

- [x] Ran all related frontend test suites (`SideNav`, `DiskEncryption`,
`TableContainer`) -- 39 tests, all passing

🤖 Generated with [Claude Code](https://claude.com/claude-code)

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Style**
* Fixed side navigation layout to properly handle content overflow and
enable horizontal scrolling when navigation items exceed available
space.
* **Documentation**
* Added note: Disk Encryption > Disk encryption table now supports
horizontal scrolling on narrow viewports.

<!-- review_stack_entry_start -->

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/fleetdm/fleet/pull/45736?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack)

<!-- review_stack_entry_end -->
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-18 16:26:08 -04:00
Lucas Manuel Rodriguez 9e7781a004 Update enrolling activities and preserve osquery display name (#45697)
Resolves #36417.

- [X] Changes file added for user-visible changes in `changes/`,
`orbit/changes/` or `ee/fleetd-chrome/changes`.

## Testing

- [X] Added/updated automated tests
- [X] QA'd all new/changed functionality manually

## Manual tests performed

 MDM enrollment first, then fleetd enrollment (checked both activities
match serial and display name is preserved).
 fleetd enrollment first, then MDM enrollment (checked both activities
match serial and display name is preserved).

<img width="520" height="383" alt="activities_mdm_macos_enrollment"
src="https://github.com/user-attachments/assets/35c74612-ad80-4245-bfd9-20a3dc5e78bb"
/>

 Enrolled ABM iPad.

<img width="599" height="65" alt="Screenshot 2026-05-18 at 10 57 23 AM"
src="https://github.com/user-attachments/assets/b7ad552b-82af-4606-a860-361eedb97483"
/>

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Enrollment activities now show device serial numbers alongside host
display names, avoid duplicating the serial if already included, and
fall back to serial/generic messaging when no display name is available.
* Fleet enrollment entries no longer show an actor prefix, matching
other enrollment activity items.

* **Bug Fixes**
* Display names set by prior fleetd enrollment are preserved and no
longer overwritten during MDM enrollment.

* **Tests**
* Added and relaxed activity-feed tests covering enrollment message
variants.

<!-- review_stack_entry_start -->

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/fleetdm/fleet/pull/45697?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack)

<!-- review_stack_entry_end -->
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-05-18 14:33:10 -03:00
RachelElysia ed14b49692 Fleet UI: Fix extra margin causing scroll (#45706) 2026-05-18 12:32:58 -04:00
Noah Talerman 8987129e61 Managed app configuration (#45614)
<img width="550" height="364" alt="Screenshot 2026-05-15 at 12 36 16 PM"
src="https://github.com/user-attachments/assets/75cf1547-483b-4ad2-89af-41914949b987"
/>
2026-05-15 15:34:16 -04:00
9afdb43567 Add Codex CLI as a Windows FMA (#42397)
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **New Features**
* Added comprehensive support for managing Codex CLI (OpenAI's coding
agent) on Windows systems, including automated installation,
uninstallation, and verification that installed binaries match expected
versions
* Integrated Codex CLI icon component into the software interface for
improved visual identification and enhanced user experience when
managing this application

<!-- review_stack_entry_start -->

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/fleetdm/fleet/pull/42397)

<!-- review_stack_entry_end -->

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-15 13:20:10 -05:00
Victor LyuboslavskyandLuke Heath 19de907416 Windows setup experience: UI and BYOD fixes (#45331)
<!-- Add the related story/sub-task/bug number, like Resolves #123, or
remove if NA -->
**Related issue:** Resolves #38785 

- UI changes per Figma and latest product guidelines
- Do not cancel setup experience during BYOD (when critical software
install fails)
- Allow a host to rerun setup experience even if it has been in Fleet
for over 24 hours
- This fixes a bug where a host is wiped but not deleted from Fleet, and
then it doesn't run setup experience.

# Checklist for submitter

## Testing

- [x] Added/updated automated tests
- [x] QA'd all new/changed functionality manually

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Improved Windows re-enrollment detection to better handle BYOD
scenarios, preventing unintended cancellation of pending setup steps for
recently re-enrolled devices.
* Added a fallback lookup for unlinked Windows enrollments to improve
enrollment matching.

* **Bug Fixes**
* Clarified cancellation activity messages to note when users are asked
to restart after install failures.
* Updated Windows install copy and tooltips based on enrollment status.

<!-- review_stack_entry_start -->

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/fleetdm/fleet/pull/45331)

<!-- review_stack_entry_end -->
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Luke Heath <luke@fleetdm.com>
2026-05-15 13:13:16 -05:00
George Karr 9416a81124 gkarr 44008 setup experience (#45202)
- **Adding vpp users table**
- **Adding ManagedAppleID to HostMDM tables to pull when installing vpp
apps to a BYOD user enrolled device**
- **Adding user create vpp apis**
- **Updating install application to support user enrolled devices**
- **Handling already installed gracefully**
- **Adding provision user logic**
- **Adding logic to associate assets on install**
- **Add license managemnt logic**
- **Adding self service ui**
- **Adding setup experience support**
- **Adding setup experience flow**
- **Fix issue with fleet's docker image in k8s environments (#44373)**
- **Changing how the appleid is captured to use idp mdm users**


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Account-based User Enrollment (iOS/iPadOS) supports VPP and in‑house
.ipa installs, including self‑service installs.
* Enrollment now applies the selected Setup experience automatically for
user‑enrolled hosts.
* Installs and license associations are scoped to account user
associations (user‑scoped installs).

* **Bug Fixes**
* Improved error messaging for license/association failures (including
per‑user device cap cases).
  * Mobile UI: self‑service now shows user‑enrolled iOS/iPadOS apps.
* “Already installed” install results are treated as acknowledged
successes.

<!-- review_stack_entry_start -->

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/fleetdm/fleet/pull/45202)

<!-- review_stack_entry_end -->
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-05-15 12:35:26 -05:00
Allen Houchins 8c9f56f2ec Add XCreds as a macOS FMA (#45404)
Register XCreds as a maintained app: add Homebrew cask (Casks/xcreds.rb)
and API/input JSON, add app metadata
(ee/maintained-apps/inputs/homebrew/xcreds.json), and include outputs
(apps.json and outputs/xcreds/darwin.json) with installer/uninstall
scripts and checks. Also add frontend icon component and asset
(XCreds.tsx, app-icon-xcreds-60x60@2x.png) and wire the icon into the
icons index mapping.
2026-05-15 10:34:13 -05:00
Noah Talerman 855caac093 Fleet-maintained app rollbacks: Fix tooltips (#45599)
For the following bug:
- https://github.com/fleetdm/fleet/issues/45597
2026-05-15 11:12:56 -04:00
Nico b6528db3ed Fix: Light mode logo gets applied in dark mode when the dark one is default + Logo backgrounds should be the same color as the navbar background (#45569)
<!-- Add the related story/sub-task/bug number, like Resolves #123, or
remove if NA -->
**Related issue:** Resolves #45554, Resolves #45555, Resolves #45557 

## Testing

- [x] QA'd all new/changed functionality manually

#### Before

- Uploaded logo is used as a default even though it was uploaded for the
other mode.
- Logo preview cards do not match navbar's background.
<img width="1207" height="825" alt="dark-mode"
src="https://github.com/user-attachments/assets/0526aa33-9f43-4e7b-9c19-e490991b085a"
/>

#### After
- Uploaded logo is used only for the mode it was uploaded for.
- Logo preview card backgrounds are static: they always match the
navbar's background. (See
[Figma](https://www.figma.com/design/3oQUXGnjMCqX4U2B9nQ9X8/-39016-Ability-to-upload-a-custom-logo-served-from-my-Fleet-ins?node-id=5305-2589&t=YAckLtIgJCzLuHg1-0)
wireframes.)
<img width="1213" height="827" alt="Screenshot 2026-05-15 at 9 26 27 AM"
src="https://github.com/user-attachments/assets/c16d3919-d98b-4c53-9797-4b820d4c6c4c"
/>
<img width="1215" height="821" alt="Screenshot 2026-05-15 at 9 26 43 AM"
src="https://github.com/user-attachments/assets/f6ff83dc-127c-417b-a6ad-a1c6ce3e488e"
/>


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Style**
  * Improved logo display consistency across light and dark modes.
* Updated background colors for logo preview sections to enhance visual
appearance in both themes.

<!-- review_stack_entry_start -->

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/fleetdm/fleet/pull/45569)

<!-- review_stack_entry_end -->

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-05-15 15:19:47 +02:00
Juan Fernandez ed2b41bd5a Add missing header on Fleet free for Conditional Access (#43643)
Fixes #43643

Fixed missing "Conditional access" section header on the Settings >
Integrations > Conditional access page on Fleet Free.
2026-05-15 08:03:40 -04:00
RachelElysia b6b6398294 Fleet UI: Fix table styling nits (#45495) 2026-05-15 07:31:35 -04:00
Juan Fernandez 2df64ae9d9 Fixed cursor style on timestamps shown on host Vitals (#43645)
**Related issue:** Fixes #43645

Updated timestamps w/ tooltips on host's Vitals component to always have
cursor: pointer.
2026-05-15 07:31:34 -04:00
RachelElysia 9959bcd192 Fleet UI: Update error messages for config variables (#45467) 2026-05-15 07:15:29 -04:00
Nico 854379c1de fix: close policy details modal when navigating back to host details (#45394)
<!-- Add the related story/sub-task/bug number, like Resolves #123, or
remove if NA -->
**Related issue:** Resolves #43647 

# Checklist for submitter

- [x] Changes file added for user-visible changes in `changes/`,
`orbit/changes/` or `ee/fleetd-chrome/changes`.
See [Changes
files](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/guides/committing-changes.md#changes-files)
for more information.

## Testing

- [x] QA'd all new/changed functionality manually



https://github.com/user-attachments/assets/c8370a7b-4dad-41b4-bf0c-8b8bdedd3f9b



<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Bug Fixes**
* Fixed an issue where the Policy details modal could remain open when
navigating back or switching host/detail views; the modal now reliably
closes and clears the selected policy when leaving the view or when the
related card unmounts.

* **Tests**
* Added a test to verify the policy details modal content is removed
from the DOM when the policies card is unmounted.

<!-- review_stack_entry_start -->

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/fleetdm/fleet/pull/45394)

<!-- review_stack_entry_end -->
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-05-15 08:39:26 +02:00
Wahaj AhmedandWahaj Ahmed b095d270e9 fix: sync Android host seen_time with detail_updated_at (#44628)
## Problem

Android hosts show different timestamps for **Last seen** and **Last
fetched** on the host details page. For Android devices (which don't use
osquery check-in), both values should match because they're updated by
the same MDM sync operation.

Fixes fleetdm/fleet#43195

## Root Cause

`host_seen_times` is the table that powers the `seen_time` (Last seen)
value. For regular hosts, this is updated by osquery check-in. Android
hosts never populated this table, so `seen_time` fell back to
`hosts.created_at`, causing a mismatch with `detail_updated_at` (Last
fetched).

## Changes

- **`NewAndroidHost`** — after inserting the host, also insert into
`host_seen_times` with the same `detail_updated_at` value.
- **`UpdateAndroidHost`** — after updating the host, upsert
`host_seen_times` with the new `detail_updated_at`.
- **New test `AndroidLastSeenMatchesLastFetched`** — verifies
`host_seen_times.seen_time` matches `detail_updated_at` for both
`NewAndroidHost` and `UpdateAndroidHost` paths.

## Testing

- Added `testAndroidLastSeenMatchesLastFetched` covering both paths.
- Existing Android datastore tests should continue to pass.

---

*This PR was created with AI assistance.*


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Bug Fixes**
* Host list now shows "Last seen" in a platform-aware way; mobile hosts
display "Last seen: Not supported" instead of unreliable timestamps.
* Hostname entries now include platform info so last-seen display is
accurate across device types.
  * Improved consistency in last-seen rendering across the hosts table.

<!-- review_stack_entry_start -->

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/fleetdm/fleet/pull/44628)

<!-- review_stack_entry_end -->
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Wahaj Ahmed <wahajahmed010@gmail.com>
2026-05-14 11:02:20 -05:00
Andrew Mellor 44732e2012 43984 setup experience psso UI updates (#45023)
<!-- Add the related story/sub-task/bug number, like Resolves #123, or
remove if NA -->
**Related issue:** Resolves #43984

# Checklist for submitter

If some of the following don't apply, delete the relevant line.

- [x] Changes file added for user-visible changes in `changes/`,
`orbit/changes/` or `ee/fleetd-chrome/changes`.
See [Changes
files](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/guides/committing-changes.md#changes-files)
for more information.

## Testing

- [x] QA'd all new/changed functionality manually


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Updated the setup experience "Users" card to explain automatic
creation of local accounts via identity provider credentials (PSSO),
improving clarity for admins.

* **Documentation**
* Added a learn-more link to PSSO local account documentation from the
Users card.

* **Style**
* Improved spacing and description layout within the Users card for
better readability.

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/fleetdm/fleet/pull/45023)
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-05-14 15:35:14 +01:00
Luke Heath eadfaff65d Fix dark-mode contrast: 'Undetermined' label and Dropdown control (#45420) 2026-05-13 18:35:30 -05:00
Scott Gress 2c13d05d79 Don't show vulns chart on free tier (#45440)
<!-- Add the related story/sub-task/bug number, like Resolves #123, or
remove if NA -->
**Related issue:** Resolves #45434

# Checklist for submitter

If some of the following don't apply, delete the relevant line.

- [ ] Changes file added for user-visible changes in `changes/`,
`orbit/changes/` or `ee/fleetd-chrome/changes`.
See [Changes
files](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/guides/committing-changes.md#changes-files)
for more information.
n/a, unreleased

## Testing

- [ ] Added/updated automated tests
- [X] QA'd all new/changed functionality manually
**Free tier**
<img width="796" height="500" alt="image"
src="https://github.com/user-attachments/assets/d03df638-529b-45b7-ae7d-c07a7f690a29"
/>

<img width="513" height="425" alt="image"
src="https://github.com/user-attachments/assets/ec3e9fc9-9183-41df-83ea-d89ac4bf7c39"
/>

<img width="507" height="419" alt="image"
src="https://github.com/user-attachments/assets/248ceed8-4032-4ca9-b6c5-80e69c2d5a24"
/>

**Premium tier**

<img width="690" height="534" alt="image"
src="https://github.com/user-attachments/assets/bea25fc7-a603-406c-936b-9d6743d042ce"
/>

<img width="501" height="433" alt="image"
src="https://github.com/user-attachments/assets/4a09bb9d-7662-438a-9538-2f6d215692ff"
/>

<img width="499" height="421" alt="image"
src="https://github.com/user-attachments/assets/00d8ceb4-4b9e-4432-add2-5e0770be851d"
/>


For unreleased bug fixes in a release candidate, one of:

- [X] Confirmed that the fix is not expected to adversely impact load
test results


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
- Chart datasets now adapt to subscription tier: standard accounts see a
simplified chart (uptime only); premium accounts see additional dataset
options.
- Vulnerabilities toggle in activity/data retention settings is shown
only for premium accounts.
* **Tests**
- Admin settings tests updated to run with premium-tier context and
verify related behaviors.

<!-- review_stack_entry_start -->

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/fleetdm/fleet/pull/45440)

<!-- review_stack_entry_end -->
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-05-13 18:28:18 -05:00
RachelElysia 226896076f Fleet UI: Update empty states in Controls (#44965) 2026-05-13 16:53:39 -04:00
RachelElysia 7c2ff58f6a Fleet UI: Edit configuration entry point for iOS/iPadOS and extend modal for XML (#44580) 2026-05-13 15:54:49 -04:00
RachelElysia ba9283fd44 Fleet UI: Update empty states in software pages (#44979) 2026-05-13 15:43:48 -04:00
RachelElysia 122bd7979c Fleet UI: Update settings empty state (#45363) 2026-05-13 14:33:27 -04:00
RachelElysia c64897c5d0 Github test fix: Fix SetupAssistant.tests.tsx failing in CI (#45378) 2026-05-13 12:06:48 -04:00
Noah Talerman 837620f4d4 New colors for success/fail notifications (#45302) 2026-05-13 10:32:51 -05:00
Nico 117a137ee1 fix Actions dropdown in Run script modal auto-closing (#45349)
<!-- Add the related story/sub-task/bug number, like Resolves #123, or
remove if NA -->
**Related issue:** Resolves #43640

# Checklist for submitter

- [x] Changes file added for user-visible changes in `changes/`,
`orbit/changes/` or `ee/fleetd-chrome/changes`.
See [Changes
files](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/guides/committing-changes.md#changes-files)
for more information.

## Testing

- [x] QA'd all new/changed functionality manually

I figured out that the RunScriptModal was being re-rendered without any
user events or network calls after the 2s mark.
At first I thought the parent (ScriptModalGroup.tsx) could have been the
culprit since there's a lot going on there (lots of callback functions
passed to multiple modals).
It turns out that RunScriptModal is wrapped in React.memo to avoid
re-rendering but since some of its props changed in the parent
component, this caused it to re-render and close the Actions dropdown
randomly.

To detect which where the problematic props changing, I threw this code
at the top of RunScriptModal.tsx:

```react
const prev = useRef<any>({});
  useEffect(() => {
    const current = {
      currentUser,
      hostTeamId,
      onClose,
      page,
      setPage,
      hostScriptResponse,
      isFetchingHostScripts,
      isLoadingHostScripts,
      isError,
      onClickViewScript,
      onClickRunDetails,
      onClickRun,
      isRunningScript,
      isHidden,
    };
    const changed = Object.entries(current).filter(
      ([k, v]) => prev.current[k] !== v
    );
    console.log(
      "RunScriptModal re-render. Changed props:",
      changed.map(([k]) => k)
    );
    prev.current = current;
  });
```

and the output was:

```
RunScriptModal re-render. Changed props:                                                  
  (2) ['onClickViewScript', 'onClickRunDetails']
```

So I just wrapped those two in useCallback and that fixed the issue.



https://github.com/user-attachments/assets/f6eae13e-2a60-4fda-9468-2952acdedd58




<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

## Bug Fixes
* Fixed the Actions dropdown in the Run script modal on the Host details
page auto-closing after 2-3 seconds.

<!-- review_stack_entry_start -->

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/fleetdm/fleet/pull/45349)

<!-- review_stack_entry_end -->

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-05-13 16:21:48 +02:00
Dante Catalfamo 683a66b4d1 Recovery Key can be viewed after team transfer if still present (#45280)
**Related issue:** Resolves #44459
## Summary

Fixed an issue where the recovery lock password for a macOS host could
become unretrievable via the UI and API after the host was transferred
to a team with recovery lock disabled, even though the password was
still stored in the database.

## Root causes

Three bugs combined to produce the symptom:

- **Frontend visibility**: `canShowRecoveryLockPassword` gated the "Show
Recovery Lock password" action on the current team's
`enable_recovery_lock_password` setting and ignored the
`recoveryLockPasswordAvailable`
signal, so the UI option vanished whenever the host's new team had the
feature off.
- **API 404 on view**: `MarkRecoveryLockPasswordViewed` returned a
`notFound` error when its UPDATE matched zero rows. This happened as
soon as the `ClaimHostsForRecoveryLockClear` cron flipped the password
row's
`operation_type` from `install` to `remove` — causing `GET
/hosts/:id/recovery_lock_password` to 404 even though the password had
already been successfully retrieved and decrypted moments earlier in the
same
request.
- **Stale rotation deadline**: `ClaimHostsForRecoveryLockClear` left the
row's `auto_rotate_at` untouched when flipping to `remove`, so
subsequent reads still surfaced the pre-transfer view-deadline and the
UI
rendered a rotation banner promising an auto-rotation that the cron
(filtered on `operation_type='install'`) would never honor.

## Fix

- **Frontend**: updated `canShowRecoveryLockPassword` to also show the
action when a password is available, regardless of the team setting.
- **API**: changed `MarkRecoveryLockPasswordViewed` to return a zero
`time.Time` with no error when no install-state row exists. The service
skips the `AutoRotateAt` assignment in that case and explicitly nulls
any stale value loaded from the DB, so the response's `auto_rotate_at`
is omitted.
- **Data hygiene**: updated `ClaimHostsForRecoveryLockClear` to also set
`auto_rotate_at = NULL` when flipping a row to `remove`, since the
rotation deadline is meaningful only for install-state rows.
- [x] Changes file added for user-visible changes in `changes/`,
`orbit/changes/` or `ee/fleetd-chrome/changes`.
See [Changes
files](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/guides/committing-changes.md#changes-files)
for more information.
- [x] Input data is properly validated, `SELECT *` is avoided, SQL
injection is prevented (using placeholders for values in statements), JS
inline code is prevented especially for url redirects, and untrusted
data interpolated into shell scripts/commands is validated against shell
metacharacters.
2026-05-13 09:20:37 -04:00
Luke Heath c5c2dd9d4d Fix more unreleased dark mode contrast bugs (#45295) 2026-05-12 22:47:52 -05:00
Scott Gress 7d88bd0937 Remove mobile platforms from chart filter list (#45310)
<!-- Add the related story/sub-task/bug number, like Resolves #123, or
remove if NA -->
**Related issue:** Resolves #45290

Just drops the mobile platforms from the platform list in the chart
filters modal.

You can still find mobile devices by searching for now, as filtering
them out is a bigger change requiring either backend work or
on-the-glass filtering + pagination which is bug-prone.

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Bug Fixes**
* Updated platform filter options in chart filters. iOS, iPadOS, and
Android are no longer available as filter options; macOS, Windows,
Linux, and ChromeOS remain supported.

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/fleetdm/fleet/pull/45310)

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-05-12 17:59:16 -05:00
Noah Talerman a0656ecfa3 Dashboard widget: Hosts online: For first pass, drop mobile support (#45292)
Tooltip copy update for this issue:
- https://github.com/fleetdm/fleet/issues/45290
2026-05-12 18:33:32 -04:00
Victor Lyuboslavsky ca648e9c04 EUA (no Apple MDM) UI fix (#45212)
<!-- Add the related story/sub-task/bug number, like Resolves #123, or
remove if NA -->
**Related issue:** Resolves #44801

Fixed remaining issue setting end user authentication in the UI.
The root cause was that the frontend was always sending
`enable_managed_local_account : false` even when macOS MDM was disabled.

Fix:
<img width="756" height="363" alt="image"
src="https://github.com/user-attachments/assets/5f88797d-c5c3-4c03-9048-c8ee2981c374"
/>

# Checklist for submitter

## Testing

- [x] Added/updated automated tests
- [x] QA'd all new/changed functionality manually

For unreleased bug fixes in a release candidate, one of:

- [x] Confirmed that the fix is not expected to adversely impact load
test results

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Bug Fixes**
* Automatic syncing of "Lock end user info" when toggling End User
Authentication now only runs when Apple MDM is enabled and configured
(with an exception when EUA is being disabled to preserve behavior).
  * Save payloads omit Apple-only fields unless Apple MDM is configured.

* **UI**
* "Lock end user info" checkbox shows an Apple MDM–gated tooltip and is
disabled when Apple MDM is not configured.

* **Tests**
* Added coverage for Apple MDM–gated behaviors and saved-payload
variations.

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/fleetdm/fleet/pull/45212)
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-05-12 16:59:22 -05:00
Noah Talerman af83df6f5a UI dropdowns: Selected option has purple highlight (#45254)
For the following bug:
- https://github.com/fleetdm/fleet/issues/45248
2026-05-12 17:58:23 -04:00
Mike Thomas 628f0dc78e Updated color levels for dashboard charts to match Figma (#45300) 2026-05-12 16:40:36 -05:00
Jonathan Katz f67e13a29d Show uninstall button even if software title is not found in inventory (#45273)
<!-- Add the related story/sub-task/bug number, like Resolves #123, or
remove if NA -->
**Related issue:** Resolves #42026

- Show "uninstall" button if the status is `installed` (or
`recently_installed`) which just reflects that the install script ran
successfully, not that the software title for the installer is in the
software inventory. For example, even with a no-op install script that
exits successfully the button will be available.
- Make the status clickable by removing the recentlyTakenAction check,
since that only represents the last install script that ran. This should
only really affect the `recently_installed` status (according to claude
at least).

This behaviour is already possible through the API, but it mostly
depends on the specific uninstall scripts if they will pass or fail when
the software doesn't even exist.

# Checklist for submitter

If some of the following don't apply, delete the relevant line.

- [x] Changes file added for user-visible changes in `changes/`,
`orbit/changes/` or `ee/fleetd-chrome/changes`.
See [Changes
files](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/guides/committing-changes.md#changes-files)
for more information.

## Testing

- [x] Added/updated automated tests
- [ ] Where appropriate, [automated tests simulate multiple hosts and
test for host
isolation](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/reference/patterns-backend.md#unit-testing)
(updates to one hosts's records do not affect another)

- [x] QA'd all new/changed functionality manually


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Bug Fixes**
* Uninstall option now appears for installers even when the host
inventory lacks a matching software entry, ensuring uninstall remains
accessible.

* **Tests**
* Added regression tests verifying the uninstall button is visible and
enabled for relevant installed states, including on personal device
pages.

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/fleetdm/fleet/pull/45273)
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-05-12 17:09:42 -04:00
Juan Fernandez 2391b9261e Fix Location and MDM status vitals looking clickable on My device page (#43279)
Fixes #43279 

On the My device page (DeviceUserPage), the Location and MDM status rows
in the Vitals card rendered as <Button variant="link"> even though no
modal was wired up, so clicking did nothing while the link styling
implied otherwise.
2026-05-12 14:09:40 -04:00