Website: add "Security & control" page (#47377)

Changes:
- Added a new page: /security-and-control
- Added a link to the new page in the "Solutions" header dropdown menu


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

## Summary by CodeRabbit

## New Features
* Added a new "Security & control" page featuring security solutions
overview, product features including software inventory and autonomous
remediation capabilities, customer testimonials, and call-to-action
sections. The page is accessible via the updated website navigation
menu.

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

---------

Co-authored-by: Mike Thomas <78363703+mike-j-thomas@users.noreply.github.com>
This commit is contained in:
Eric
2026-06-16 17:20:07 +09:00
committed by GitHub
co-authored by Mike Thomas
parent 01de701560
commit 4e4fa9a649
32 changed files with 1272 additions and 23 deletions
+72
View File
@@ -0,0 +1,72 @@
module.exports = {
friendlyName: 'View security and control',
description: 'Display "Security and control" page.',
exits: {
success: {
viewTemplatePath: 'pages/security-and-control'
}
},
fn: async function () {
if (!_.isObject(sails.config.builtStaticContent) || !_.isArray(sails.config.builtStaticContent.testimonials)) {
throw {badConfig: 'builtStaticContent.testimonials'};
}
// Get testimonials for the <scrolalble-tweets> component.
let testimonialsForScrollableTweets = _.clone(sails.config.builtStaticContent.testimonials);
// Only filter and sort testimonials when static content has been built.
// If the build-static-content script was not run, we'll show a placeholder testimonial that is added by the custom hook.
if (sails.config.builtStaticContent.compiledPagePartialsAppPath) {
// Specify an order for the testimonials on this page using the last names of quote authors
// Note: this page uses the same testimonials as the /software-managment page.
let testimonialOrderForThisPage = [
'Luis Madrigal',
'Arsenio Figueroa',
'Bart Reardon',
'Andre Shields',
'Wes Whetstone',
'Nico Waisman',
'Chandra Majumdar',
'Kenny Botelho',
'Erik Gomez',
'Eric Tan',
'Adam Pippert',
'Justin LaBo',
'Brian LaShomb',
];
// Filter the testimonials by product category
testimonialsForScrollableTweets = _.filter(testimonialsForScrollableTweets, (testimonial)=>{
return _.contains(testimonial.productCategories, 'Software management') && _.contains(testimonialOrderForThisPage, testimonial.quoteAuthorName);
});
testimonialsForScrollableTweets.sort((a, b)=>{
if(testimonialOrderForThisPage.indexOf(a.quoteAuthorName) === -1){
return 1;
} else if(testimonialOrderForThisPage.indexOf(b.quoteAuthorName) === -1) {
return -1;
}
return testimonialOrderForThisPage.indexOf(a.quoteAuthorName) - testimonialOrderForThisPage.indexOf(b.quoteAuthorName);
});
}//fi
// Respond with view.
return {
testimonialsForScrollableTweets,
};
}
};
Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 290 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 498 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 493 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 443 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 389 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 506 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 447 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 514 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 502 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 401 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 594 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 404 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 429 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 345 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 437 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 194 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 562 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 440 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 177 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 KiB

+25
View File
@@ -0,0 +1,25 @@
parasails.registerPage('security-and-control', {
// ╦╔╗╔╦╔╦╗╦╔═╗╦ ╔═╗╔╦╗╔═╗╔╦╗╔═╗
// ║║║║║ ║ ║╠═╣║ ╚═╗ ║ ╠═╣ ║ ║╣
// ╩╝╚╝╩ ╩ ╩╩ ╩╩═╝ ╚═╝ ╩ ╩ ╩ ╩ ╚═╝
data: {
//…
},
// ╦ ╦╔═╗╔═╗╔═╗╦ ╦╔═╗╦ ╔═╗
// ║ ║╠╣ ║╣ ║ ╚╦╝║ ║ ║╣
// ╩═╝╩╚ ╚═╝╚═╝ ╩ ╚═╝╩═╝╚═╝
beforeMount: function() {
//…
},
mounted: async function() {
//…
},
// ╦╔╗╔╔╦╗╔═╗╦═╗╔═╗╔═╗╔╦╗╦╔═╗╔╗╔╔═╗
// ║║║║ ║ ║╣ ╠╦╝╠═╣║ ║ ║║ ║║║║╚═╗
// ╩╝╚╝ ╩ ╚═╝╩╚═╩ ╩╚═╝ ╩ ╩╚═╝╝╚╝╚═╝
methods: {
//…
}
});
+1
View File
@@ -115,4 +115,5 @@
@import 'pages/articles/basic-webinar.less';
@import 'pages/download.less';
@import 'pages/visibility-and-reporting.less';
@import 'pages/security-and-control.less';
+674
View File
@@ -0,0 +1,674 @@
#security-and-control {
@text-lineheight: 150%;
@heading-lineheight: 120%;
background: linear-gradient(180deg, #E8F1F6 0%, #FFF 2.51%);
h1 {
.page-heading();
margin-bottom: 0px;
}
h2 {
.section-heading();
margin-bottom: 0px;
}
h4 {
.kicker-title();
margin-bottom: 0px;
}
p {
.body-l();
margin-bottom: 0px;
}
[purpose='page-container'] {
.page-container();
}
[purpose='page-content'] {
.page-content();
display: flex;
flex-direction: column;
gap: 160px;
}
[purpose='page-hero'] {
max-width: 692px;
display: flex;
flex-direction: column;
gap: @section-gap;
}
[purpose='button-row'] {
display: flex;
flex-direction: row;
gap: 24px;
font-size: 14px;
}
[purpose='cta-button'] {
.cta-button();
padding: 8px 16px;
}
[purpose='page-section'] {
display: flex;
flex-direction: column;
justify-content: center;
gap: 120px;
}
[purpose='feature-with-image'] {
.feature-with-image();
gap: 64px;
[purpose='feature-text'] {
width: 50%;
}
[purpose='feature-image'] {
img {
flex: 1 0 0;
aspect-ratio: 4 / 3;
}
}
}
[purpose='feature-row'] {
display: flex;
align-items: flex-start;
align-content: flex-start;
gap: 64px;
align-self: stretch;
flex-wrap: wrap;
}
[purpose='feature-item'] {
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 16px;
flex: 1 0 43%;
h5 {
color: #192147;
font-size: 16px;
font-weight: 700;
line-height: 120%;
margin-bottom: 0px;
}
}
[purpose='feature-title'] {
display: flex;
flex-direction: row;
align-items: center;
gap: 12px;
h5 {
margin-bottom: 0px;
}
[purpose='feature-icon'] {
height: 20px;
}
}
[purpose='quote-and-logos'] {
display: flex;
flex-direction: row;
align-items: center;
gap: 64px;
padding: 64px 0px;
}
[purpose='section-quote'] {
display: flex;
flex-direction: row;
justify-content: center;
align-items: flex-start;
gap: 24px;
align-self: center;
max-width: 50%;
[purpose='quote-content'] {
display: flex;
flex-direction: column;
justify-content: flex-start;
gap: 16px;
}
[purpose='quote-text'] {
color: #515774;
text-align: left;
font-size: 18px;
font-style: italic;
font-weight: 400;
line-height: @text-lineheight;
}
[purpose='quote-attribution'] {
color: #515774;
font-size: 12px;
font-weight: 400;
line-height: @text-lineheight;
}
[purpose='quote-author-info'] {
width: 100%;
display: flex;
flex-direction: row;
justify-self: flex-start;
justify-content: flex-start;
align-items: flex-start;
gap: 16px;
align-self: center;
}
[purpose='quote-author-image'] {
img {
height: 48px;
width: 48px;
border-radius: 50%;
object-fit: cover;
}
}
[purpose='name-and-title'] {
display: flex;
flex-direction: column;
align-items: flex-start;
}
[purpose='author-name'] {
color: #192147;
font-size: 14px;
font-weight: 700;
line-height: @text-lineheight;
}
[purpose='author-title'] {
color: #515774;
font-size: 14px;
max-width: 365px;
font-weight: 400;
line-height: @text-lineheight;
}
}
[purpose='logo-grid'] {
display: flex;
flex-direction: column;
width: 50%;
[purpose='logo-row'] {
display: flex;
flex-direction: row;
width: 100%;
&:first-of-type {
border-bottom: 1px solid #E2E4EA;
}
[purpose='logo'] {
&:nth-of-type(2) {
border-right: 1px solid #E2E4EA;
border-left: 1px solid #E2E4EA;
}
height: 76px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
width: 33.33%;
img {
height: 20px;
width: auto;
}
&.fastly {
padding: 24.5px 49.119px 23.5px 49.119px;
img {
height: 28px;
}
}
&.easygo {
padding: 0 33px 0 35px;
img {
height: 20px;
}
}
&.conductor-one {
padding: 0 25px;
img {
height: 15px;
}
}
&.grafana {
padding: 26px 17px 27px 16px;
img {
height: 23px;
}
}
&.mozilla {
padding: 25px 31.451px 26px 32px;
img {
height: 25px;
}
}
&.calendly {
padding: 26px 34.551px 26px 34px;
img {
height: 25px;
}
}
}
}
}
[purpose='section-button'] {
.cta-button();
width: fit-content;
display: flex;
height: 36px;
min-width: 140px;
padding: 8px 16px;
justify-content: center;
align-items: center;
gap: 4px;
color: #FFF;
text-align: center;
font-family: Inter;
font-size: 14px;
font-style: normal;
font-weight: 700;
line-height: 21px;
}
[purpose='quote-section'] {
display: flex;
flex-direction: column;
align-items: center;
gap: 24px;
max-width: 696px;
margin-left: auto;
margin-right: auto;
[purpose='quote-image'] {
img {
width: 200px;
}
}
[purpose='quote-author-info'] {
width: 100%;
display: flex;
flex-direction: column;
// justify-content: center;
align-items: center;
gap: 4px;
align-self: center;
}
[purpose='quote-text'] {
color: var(--Fleet-Black-75, #515774);
text-align: center;
font-size: 22px;
font-style: italic;
font-weight: 400;
line-height: @text-lineheight;
}
[purpose='name-and-title'] {
display: flex;
flex-direction: column;
align-items: center;
gap: 4px;
}
[purpose='quote-author-image'] {
img {
height: 48px;
width: 48px;
border-radius: 50%;
object-fit: cover;
}
}
[purpose='author-name'] {
color: #192147;
font-size: 14px;
font-weight: 700;
line-height: @text-lineheight;
}
[purpose='author-title'] {
color: #515774;
font-size: 14px;
font-weight: 400;
line-height: @text-lineheight;
text-align: center;
}
}
[purpose='three-column-features'] {
.responsive-feature-row();
[purpose='feature-title'] {
margin-bottom: 16px;
}
[purpose='feature'] {
margin-bottom: 0;
h5 {
font-size: 16px;
line-height: 1.2;
font-weight: 700;
}
p {
font-size: 14px;
font-weight: 400;
line-height: 21px;
}
}
}
[parasails-component='scrollable-tweets'] {
// Break out of the constrained parent to span the full viewport width.
margin-left: calc(~'50% - 50vw');
margin-right: calc(~'50% - 50vw');
[purpose='tweets'] {
margin-top: 40px;
margin-bottom: 0px;
}
}
[purpose='bottom-cta'] {
display: flex;
flex-direction: column;
gap: 32px;
align-items: center;
text-align: center;
[purpose='button-row'] {
padding-top: 16px;
}
[purpose='page-heading'] {
h1 {
max-width: 796px;
}
}
}
@media (max-width: 991px) {
[purpose='page-container'] {
padding: 48px;
}
[purpose='page-content'] {
gap: 120px;
}
[purpose='page-section'] {
gap: 80px;
}
[purpose='quote-and-logos'] {
display: flex;
flex-direction: row;
gap: 48px;
padding: 0;
}
[purpose='feature-with-image'] {
gap: 48px;
}
[purpose='logo-grid'] {
display: flex;
flex-direction: column;
min-width: 50%;
[purpose='logo-row'] {
display: flex;
flex-direction: row;
width: 100%;
&:first-of-type {
border-bottom: 1px solid #E2E4EA;
}
[purpose='logo'] {
&:nth-of-type(2) {
border-right: 1px solid #E2E4EA;
border-left: 1px solid #E2E4EA;
}
height: 76px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
width: 33.33%;
img {
height: 20px;
width: auto;
}
&.conductor-one {
padding: 0 14px 0 14.333px;
img {
height: 14px;
}
}
&.easygo {
padding: 0 21.667px;
img {
height: 18px;
}
}
&.grafana {
padding: 0 8.138px 0 7.804px;
img {
height: 18px;
}
}
&.mozilla {
padding: 0 24.239px 0 25.455px;
img {
height: 20px;
}
}
&.calendly {
padding: 0 25.172px 0 25.287px;
img {
height: 20px;
}
}
}
}
}
}
@media (max-width: 767px) {
[purpose='page-headline'] {
width: 100%;
h2 {
font-size: 42px;
}
}
[purpose='page-container'] {
padding: 32px;
}
[purpose='page-content'] {
gap: 80px;
}
[purpose='feature-row'] {
gap: 48px;
}
[purpose='quote-and-logos'] {
display: flex;
flex-direction: column;
padding: 0;
gap: 48px;
[purpose='section-quote'] {
max-width: unset;
width: 100%;
flex-direction: column;
align-items: center;
[purpose='quote-text'] {
text-align: center;
}
[purpose='name-and-title'] {
align-items: center;
text-align: center;
}
[purpose='quote-author-info'] {
justify-content: center;
}
}
[purpose='logo-grid'] {
display: flex;
flex-direction: column;
width: 100%;
[purpose='logo-row'] {
display: flex;
flex-direction: row;
width: 100%;
&:first-of-type {
border-bottom: 1px solid #E2E4EA;
}
[purpose='logo'] {
&:nth-of-type(2) {
border-right: 1px solid #E2E4EA;
border-left: 1px solid #E2E4EA;
}
height: 76px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
width: 33.33%;
img {
height: 20px;
width: auto;
}
&.fastly {
padding: 26px 36.723px 26px 37px;
img {
height: 28px;
}
}
&.grafana {
padding: 26px 17px 27px 16px;
img {
height: 23px;
}
}
&.mozilla {
padding: 25px 31.451px 26px 32px;
img {
height: 25px;
}
}
&.calendly {
padding: 26px 34.551px 26px 34px;
img {
height: 25px;
}
}
}
}
}
}
[purpose='feature-with-image'] {
[purpose='feature-text'] {
width: 100%;
margin-left: auto;
margin-right: auto;
}
}
}
@media (max-width: 575px) {
h1 {
font-size: 32px;
}
h2 {
font-size: 24px;
}
[purpose='feature-with-image'] {
[purpose='feature-text'] {
width: 100%;
}
}
[purpose='button-row'] {
flex-direction: column;
align-items: center;
gap: 8px;
width: 100%;
[purpose='cta-button'] {
width: 100%;
margin-right: 0;
}
}
[purpose='feature-item'] {
flex: 1 0 100%;
}
[purpose='page-container'] {
padding: 32px 24px;
}
[parasails-component='scrollable-tweets'] {
[purpose='tweets'] {
padding-left: 24px;
}
}
[purpose='quote-and-logos'] {
[purpose='logo-grid'] {
width: 100%;
[purpose='logo-row'] {
display: flex;
flex-direction: row;
width: 100%;
border-bottom: 1px solid #E2E4EA;
&:last-of-type {
border-bottom: none;
}
[purpose='logo'] {
&:nth-of-type(2) {
border-right: none;
border-left: 1px solid #E2E4EA;
}
height: 76px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
width: 50%;
img {
height: 20px;
width: auto;
}
&.conductor-one {
padding: unset;
img {
height: 15px;
}
}
&.easygo {
padding: unset;
}
&.fastly {
padding: unset;
img {
height: 28px;
}
}
&.grafana {
padding: unset;
img {
height: 22px;
}
}
&.mozilla {
padding: unset;
img {
height: 25px;
}
}
&.calendly {
padding: unset;
img {
height: 25px;
}
}
}
}
}
}
[purpose='three-column-features'] {
[purpose='feature'] {
text-align: left;
img {
margin-left: unset;
margin-right: unset;
}
}
}
}
}
+1
View File
@@ -81,4 +81,5 @@ module.exports.policies = {
'deliver-webinar-access-request': true,
'view-download': true,
'view-visibility-and-reporting': true,
'view-security-and-control': true,
};
+8
View File
@@ -643,6 +643,14 @@ module.exports.routes = {
}
},
'GET /security-and-control': {
action: 'view-security-and-control',
locals: {
pageTitleForMeta: 'Security & control',
pageDescriptionForMeta: 'Control what belongs on your devices and detect vulnerabilities automatically.',
}
},
// ╦ ╔═╗╔╗╔╔╦╗╦╔╗╔╔═╗ ╔═╗╔═╗╔═╗╔═╗╔═╗
// ║ ╠═╣║║║ ║║║║║║║ ╦ ╠═╝╠═╣║ ╦║╣ ╚═╗
// ╩═╝╩ ╩╝╚╝═╩╝╩╝╚╝╚═╝ ╩ ╩ ╩╚═╝╚═╝╚═╝
+61 -23
View File
@@ -244,6 +244,21 @@
</div>
</div>
</a>
<a class="dropdown-item" purpose="dropdown-item" data-dropdown-option="Security & control" href="/security-and-control">
<div purpose="dropdown-item-link">
<div purpose="dropdown-item-icon">
<img src="/images/nav-icon-security-and-control-40x40@2x.png" alt="Security & control">
</div>
<div purpose="dropdown-item-text">
<p purpose="nav-item-heading">
Security & control
</p>
<p purpose="nav-item-body">
Control what belongs on your devices and detect vulnerabilities automatically.
</p>
</div>
</div>
</a>
<a class="dropdown-item" purpose="dropdown-item" data-dropdown-option="linux-management" href="/linux-management">
<div purpose="dropdown-item-link">
<div purpose="dropdown-item-icon">
@@ -468,21 +483,23 @@
</div>
</div>
</a>
<a class="dropdown-item" purpose="dropdown-item" data-dropdown-option="Fleet GitOps" href="/infrastructure-as-code">
<a class="dropdown-item" purpose="dropdown-item" data-dropdown-option="linux-management" href="/linux-management">
<div purpose="dropdown-item-link">
<div purpose="dropdown-item-icon">
<img src="/images/nav-icon-gitops-40x40@2x.png" alt="GitOps">
<img src="/images/nav-icon-linux-management-40x40@2x.png" alt="Linux management">
</div>
<div purpose="dropdown-item-text">
<p purpose="nav-item-heading">
Infrastructure as code
Linux device management
</p>
<p purpose="nav-item-body">
See every change, undo any error, repeat every success.
Manage Linux devices with full visibility and control.
</p>
</div>
</div>
</a>
<a class="dropdown-item" purpose="dropdown-item" data-dropdown-option="Visibility & reporting" href="/visibility-and-reporting">
<div purpose="dropdown-item-link">
<div purpose="dropdown-item-icon">
@@ -498,21 +515,23 @@
</div>
</div>
</a>
<a class="dropdown-item" purpose="dropdown-item" data-dropdown-option="Deployment" href="/deployment">
<a class="dropdown-item" purpose="dropdown-item" data-dropdown-option="Infrastructure as code" href="/infrastructure-as-code">
<div purpose="dropdown-item-link">
<div purpose="dropdown-item-icon">
<img src="/images/nav-icon-deployment-40x40@2x.png" alt="Deployment">
<img src="/images/nav-icon-gitops-40x40@2x.png" alt="GitOps">
</div>
<div purpose="dropdown-item-text">
<p purpose="nav-item-heading">
Deployment
Infrastructure as code
</p>
<p purpose="nav-item-body">
Run Fleet the way that fits your team.
See every change, undo any error, repeat every success.
</p>
</div>
</div>
</a>
<a class="dropdown-item" purpose="dropdown-item" data-dropdown-option="software-management" href="/software-management">
<div purpose="dropdown-item-link">
<div purpose="dropdown-item-icon">
@@ -528,6 +547,39 @@
</div>
</div>
</a>
<a class="dropdown-item" purpose="dropdown-item" data-dropdown-option="Deployment" href="/deployment">
<div purpose="dropdown-item-link">
<div purpose="dropdown-item-icon">
<img src="/images/nav-icon-deployment-40x40@2x.png" alt="Deployment">
</div>
<div purpose="dropdown-item-text">
<p purpose="nav-item-heading">
Deployment
</p>
<p purpose="nav-item-body">
Run Fleet the way that fits your team.
</p>
</div>
</div>
</a>
<a class="dropdown-item" purpose="dropdown-item" data-dropdown-option="Security & control" href="/security-and-control">
<div purpose="dropdown-item-link">
<div purpose="dropdown-item-icon">
<img src="/images/nav-icon-security-and-control-40x40@2x.png" alt="Security & control">
</div>
<div purpose="dropdown-item-text">
<p purpose="nav-item-heading">
Security & control
</p>
<p purpose="nav-item-body">
Control what belongs on your devices and detect vulnerabilities automatically.
</p>
</div>
</div>
</a>
<a class="dropdown-item" purpose="dropdown-item" data-dropdown-option="integrations" href="/integrations">
<div purpose="dropdown-item-link">
<div purpose="dropdown-item-icon">
@@ -543,21 +595,6 @@
</div>
</div>
</a>
<a class="dropdown-item" purpose="dropdown-item" data-dropdown-option="linux-management" href="/linux-management">
<div purpose="dropdown-item-link">
<div purpose="dropdown-item-icon">
<img src="/images/nav-icon-linux-management-40x40@2x.png" alt="Linux management">
</div>
<div purpose="dropdown-item-text">
<p purpose="nav-item-heading">
Linux device management
</p>
<p purpose="nav-item-body">
Manage Linux devices with full visibility and control.
</p>
</div>
</div>
</a>
@@ -962,6 +999,7 @@
<script src="/js/pages/press-kit.page.js"></script>
<script src="/js/pages/pricing.page.js"></script>
<script src="/js/pages/reports/state-of-device-management.page.js"></script>
<script src="/js/pages/security-and-control.page.js"></script>
<script src="/js/pages/software-management.page.js"></script>
<script src="/js/pages/start.page.js"></script>
<script src="/js/pages/support.page.js"></script>
+430
View File
@@ -0,0 +1,430 @@
<div id="security-and-control" v-cloak>
<div purpose="page-container">
<div purpose="page-content">
<div purpose="page-hero">
<div purpose="page-heading">
<h4>Security & control</h4>
<h1>See what's on every device, control what belongs.</h1>
</div>
<div purpose="hero-text">
<p>Fleet gives you visibility into every app, extension, plugin, and package across your fleet. Set policies for what's allowed, and let Fleet enforce them automatically, from detection to remediation.</p>
</div>
<div purpose="button-row">
<a purpose="cta-button" href="/contact">Talk to an engineer</a>
<animated-arrow-button href="/try">Try it yourself</animated-arrow-button>
</div>
</div>
<%/* */%>
<div purpose="page-section">
<div purpose="feature-with-image" class="reverse">
<div purpose="feature-image">
<img alt="The software inventory in Fleet" src="/images/know-exactly-whats-installed-800x600@2x.png">
</div>
<div purpose="feature-text">
<h2>Know exactly what's installed</h2>
<p>Fleet inventories more than just applications. See every browser extension, IDE plugin, AI tool, package manager install, and Python library across your fleet, on every OS.</p>
</div>
</div>
<div purpose="feature-row">
<div purpose="feature-item">
<div purpose="feature-title">
<img alt="Browser extensions" purpose="feature-icon" src="/images/icon-browser-extensions-20x20@2x.png">
<h5>
Browser extensions
</h5>
</div>
<div purpose="feature-text">
<p>
See every extension installed across Chrome, Firefox, Safari, and Edge. Identify extensions that haven't been vetted or approved.
</p>
</div>
</div>
<div purpose="feature-item">
<div purpose="feature-title">
<img alt="AI tools and connectors" purpose="feature-icon" src="/images/icon-ai-tools-20x20@2x.png">
<h5>
AI tools and connectors
</h5>
</div>
<div purpose="feature-text">
<p>
Report on which AI tools, MCP connectors, and IDE extensions are in use across your organization. Track adoption and identify unsanctioned tools.
</p>
</div>
</div>
<div purpose="feature-item">
<div purpose="feature-title">
<img alt="Package managers" purpose="feature-icon" src="/images/icon-package-manager-20x20@2x.png">
<h5>
Package managers
</h5>
</div>
<div purpose="feature-text">
<p>
See Homebrew, NPM, and other package manager installs across your fleet. Track versions and identify packages that should be updated.
</p>
</div>
</div>
<div purpose="feature-item">
<div purpose="feature-title">
<img alt="BYOD security baseline" purpose="feature-icon" src="/images/icon-byod-security-20x20@2x.png">
<h5>
BYOD security baseline
</h5>
</div>
<div purpose="feature-text">
<p>
Ensure personal devices meet your security requirements before accessing company data. Verify that company-managed software and configurations are in place.
</p>
</div>
</div>
</div>
</div>
<%/* Quote with logo grid */%>
<div purpose="page-section">
<div purpose="quote-and-logos">
<div purpose="section-quote">
<div purpose="quote-author-image">
<img alt="Andre Shields" src="/images/testimonial-author-andre-shields-48x48@2x.png">
</div>
<div purpose="quote-content">
<p purpose="quote-text">“Fleet lets us be more actionable with fewer people. It helps us to filter out the noise better than we could with the other big name products we replaced.”</p>
<div purpose="quote-author-info">
<div purpose="name-and-title">
<p purpose="author-name">Andre Shields</p>
<p purpose="author-title">Cybersecurity Security Engineer, Vulnerability Management, Rivian</p>
</div>
</div>
</div>
</div>
<div purpose="logo-grid" class="d-none d-sm-flex">
<div purpose="logo-row">
<div purpose="logo" class="fastly">
<img alt="Fastly logo" src="/images/logos/logo-fastly-color-70x28@2x.png">
</div>
<div purpose="logo" class="easygo">
<img alt="Easygo logo" src="/images/logos/logo-easygo-color-100x20@2x.png">
</div>
<div purpose="logo" class="conductor-one">
<img alt="Conductorone logo" src="/images/logos/logo-conductorone-color-118x16@2x.png">
</div>
</div>
<div purpose="logo-row">
<div purpose="logo" class="grafana">
<img alt="Grafana Labs logo" src="/images/logos/logo-grafana-labs-color-117x20@2x.png">
</div>
<div purpose="logo" class="calendly">
<img alt="Calendly logo" src="/images/logos/logo-calendly-color-83x20@2x.png">
</div>
<div purpose="logo" class="mozilla">
<img alt="Mozilla logo" src="/images/logos/logo-mozilla-color-84x20@2x.png">
</div>
</div>
</div>
<div purpose="logo-grid" class="d-flex d-sm-none">
<div purpose="logo-row">
<div purpose="logo" class="fastly">
<img alt="Fastly logo" src="/images/logos/logo-fastly-color-70x28@2x.png">
</div>
<div purpose="logo" class="easygo">
<img alt="Easygo logo" src="/images/logos/logo-easygo-color-100x20@2x.png">
</div>
</div>
<div purpose="logo-row">
<div purpose="logo" class="grafana">
<img alt="Grafana Labs logo" src="/images/logos/logo-grafana-labs-color-117x20@2x.png">
</div>
<div purpose="logo" class="conductor-one">
<img alt="Conductorone logo" src="/images/logos/logo-conductorone-color-118x16@2x.png">
</div>
</div>
<div purpose="logo-row">
<div purpose="logo" class="calendly">
<img alt="Calendly logo" src="/images/logos/logo-calendly-color-83x20@2x.png">
</div>
<div purpose="logo" class="mozilla">
<img alt="Mozilla logo" src="/images/logos/logo-mozilla-color-84x20@2x.png">
</div>
</div>
</div>
</div>
</div>
<div purpose="page-section">
<div purpose="feature-with-image">
<div purpose="feature-image">
<img alt="Decide what stays and what goes" src="/images/what-stays-what-goes-800x600@2x.png">
</div>
<div purpose="feature-text">
<h2>Decide what stays and what goes</h2>
<p>Fleet lets you set policies for what software is approved across your fleet. Block, remove, or allowlist software automatically. When something unauthorized is detected, Fleet can remove it or notify the user, depending on how your team prefers to work.</p>
<a purpose="section-button" href="/software-management">Software management</a>
</div>
</div>
</div>
<%/* */%>
<div purpose="page-section">
<div purpose="feature-with-image" class="reverse">
<div purpose="feature-image">
<img alt="From detection to remediation" src="/images/from-remediation-to-detection-800x600@2x.png">
</div>
<div purpose="feature-text">
<h2>From detection to remediation</h2>
<p>Fleet continuously monitors every device for known vulnerabilities. When something is found, Fleet helps you prioritize by actual exploit likelihood and gives you the tools to remediate automatically, without a ticket being created. We call this autonomous endpoint management.</p>
</div>
</div>
<div purpose="feature-row">
<div purpose="feature-item">
<div purpose="feature-title">
<img alt="Detect" purpose="feature-icon" src="/images/icon-detect-20x20@2x.png">
<h5>
Detect
</h5>
</div>
<div purpose="feature-text">
<p>
Fleet matches installed software, OS versions, browser plugins, and Python libraries against known vulnerability databases, including CISA Known Exploited Vulnerabilities.
</p>
</div>
</div>
<div purpose="feature-item">
<div purpose="feature-title">
<img alt="Prioritize" purpose="feature-icon" src="/images/icon-ai-tools-20x20@2x.png">
<h5>
Prioritize
</h5>
</div>
<div purpose="feature-text">
<p>
Not every CVE is equal. Fleet uses CISA KEV and EPSS data so your team focuses on vulnerabilities actually being exploited, not just those with high CVSS scores.
</p>
</div>
</div>
<div purpose="feature-item">
<div purpose="feature-title">
<img alt="Remediate" purpose="feature-icon" src="/images/icon-remediate-20x20@2x.png">
<h5>
Remediate
</h5>
</div>
<div purpose="feature-text">
<p>
When a device has vulnerable software, Fleet can install the correct version automatically, or apply a deeper fix. No ticket, no manual intervention.
</p>
</div>
</div>
<div purpose="feature-item">
<div purpose="feature-title">
<img alt="Track" purpose="feature-icon" src="/images/icon-remediation-tracking-20x20@2x.png">
<h5>
Track
</h5>
</div>
<div purpose="feature-text">
<p>
See which vulnerabilities were resolved, how quickly, and which devices are still exposed. Report on mean time to patch and exposure windows.
</p>
</div>
</div>
</div>
</div>
<div purpose="page-section">
<div purpose="quote-section">
<p purpose="quote-text">“Auto-patching at scale is inevitable and therefore auditability, rollback, and exception handling are even more important when you're managing tens of thousands of devices. The human in the loop is what makes it safe.”</p>
<div purpose="quote-author-info">
<div purpose="quote-author-image">
<img alt="Mike McNeil" src="/images/testimonial-author-mike-mcneil-48x48@2x.png">
</div>
<div purpose="name-and-title">
<p purpose="author-name">Mike McNeil</p>
<p purpose="author-title">Cofounder and CEO, Fleet</p>
</div>
</div>
</div>
</div>
<%/* */%>
<div purpose="page-section">
<div purpose="feature-with-image">
<div purpose="feature-image">
<img alt="Autonomous, with humans in the loop" src="/images/mdm-modern-change-management-600x435@2x.png">
</div>
<div purpose="feature-text">
<h2>Autonomous, with humans in the loop</h2>
<p>As automated remediation scales, the controls around it matter more, not less. Fleet's GitOps workflow means every automated action is reviewable, reversible, and auditable.</p>
<a purpose="section-button" href="/infrastructure-as-code">Manage devices as code</a>
</div>
</div>
<div purpose="feature-row">
<div purpose="feature-item">
<div purpose="feature-title">
<img alt="AI-assisted policies" purpose="feature-icon" src="/images/icon-ai-assisted-polices-20x20@2x.png">
<h5>
AI-assisted policies
</h5>
</div>
<div purpose="feature-text">
<p>
Describe what you want in plain language. Fleet drafts the policy as a pull request. A human reviews and approves.
</p>
</div>
</div>
<div purpose="feature-item">
<div purpose="feature-title">
<img alt="Peer review and rollback" purpose="feature-icon" src="/images/icon-branch-20x20@2x.png">
<h5>
Peer review and rollback
</h5>
</div>
<div purpose="feature-text">
<p>
Every change goes through a pull request. Roll back any change with a single revert. The audit trail scales with the automation.
</p>
</div>
</div>
<div purpose="feature-item">
<div purpose="feature-title">
<img alt="Scoped automation" purpose="feature-icon" src="/images/icon-scoped-automation-20x20@2x.png">
<h5>
Scoped automation
</h5>
</div>
<div purpose="feature-text">
<p>
Configure ring deployments, exclusions, and variations by role, team, or geography. Automate aggressively where you can, carefully where you must.
</p>
</div>
</div>
<div purpose="feature-item">
<div purpose="feature-title">
<img alt="Exposure reporting" purpose="feature-icon" src="/images/icon-exposure-reporting-20x20@2x.png">
<h5>
Exposure reporting
</h5>
</div>
<div purpose="feature-text">
<p>
See which CVEs were resolved in hours vs. weeks. Report on mean time to patch and exposure windows.
</p>
</div>
</div>
</div>
</div>
<div purpose="page-section">
<div purpose="feature-with-image" class="reverse">
<div purpose="feature-image">
<img alt="Vulnerability response, built in" src="/images/vulnerability-response-800x600@2x.png">
</div>
<div purpose="feature-text">
<h2>Vulnerability response, built in</h2>
<p>Fleet's vulnerability response is part of the same platform you use to manage devices. No separate tool, no separate workflow.</p>
<animated-arrow-button href="/contact">Talk to an engineer</animated-arrow-button>
</div>
</div>
<div purpose="three-column-features">
<div purpose="feature">
<div purpose="feature-title">
<img alt="Advanced mitigations" purpose="feature-icon" src="/images/icon-advanced-mitigations-20x20@2x.png">
<h5>
Advanced mitigations
</h5>
</div>
<p>
When an update isn't available, Fleet can uninstall old versions, denylist vulnerable binaries, or remove stale apps.
</p>
</div>
<div purpose="feature">
<div purpose="feature-title">
<img alt="Patches that respect users" purpose="feature-icon" src="/images/icon-patch-notifications-20x20@2x.png">
<h5>
Patches that respect users
</h5>
</div>
<p>
Install updates when apps are idle. Notify users before a reboot. Exempt specific devices or people when needed.
</p>
</div>
<div purpose="feature">
<div purpose="feature-title">
<img alt="No network scans" purpose="feature-icon" src="/images/icon-no-network-scans-20x20@2x.png">
<h5>
No network scans
</h5>
</div>
<p>
Fleet uses a lightweight agent instead of network vulnerability scans. Get up-to-date data without clogging your network or missing off-premises devices.
</p>
</div>
<div purpose="feature">
<div purpose="feature-title">
<img alt="Zero-day tracking" purpose="feature-icon" src="/images/icon-zero-day-20x20@2x.png">
<h5>
Zero-day tracking
</h5>
</div>
<p>
Track newly disclosed vulnerabilities across your fleet as soon as they're published. See which devices are affected before a patch is available.
</p>
</div>
<div purpose="feature">
<div purpose="feature-title">
<img alt="Cross-platform normalization" purpose="feature-icon" src="/images/icon-cross-platform-20x20@2x.png">
<h5>
Cross-platform normalization
</h5>
</div>
<p>
Normalize vulnerability and asset data across macOS, Windows, Linux, and more. One view, regardless of OS.
</p>
</div>
<div purpose="feature">
<div purpose="feature-title">
<img alt="Automated ticketing" purpose="feature-icon" src="/images/icon-automated-ticketing-20x20@2x.png">
<h5>
Automated ticketing
</h5>
</div>
<p>
Create Jira or ServiceNow tickets automatically when vulnerabilities are detected.
</p>
</div>
</div>
</div>
<div purpose="page-section">
<div>
<div purpose="section-heading" class="text-center">
<h2>What people are saying</h2>
</div>
<scrollable-tweets :testimonials="testimonialsForScrollableTweets"></scrollable-tweets>
</div>
</div>
<div purpose="page-section">
<div purpose="bottom-cta">
<div purpose="page-heading">
<h4>security & control</h4>
<h1>See what's on every device, control what belongs.</h1>
</div>
<div purpose="button-row">
<a purpose="cta-button" href="/contact">Talk to an engineer</a>
<animated-arrow-button href="/try">Try it yourself</animated-arrow-button>
</div>
</div>
</div>
</div>
</div>
<parallax-city no-background="true"></parallax-city>
</div>
<%- /* Expose server-rendered data as window.SAILS_LOCALS :: */ exposeLocalsToBrowser() %>