diff --git a/addons/api/mirage/scenarios/ipc.js b/addons/api/mirage/scenarios/ipc.js
index 5b34bc5b7..0339764c8 100644
--- a/addons/api/mirage/scenarios/ipc.js
+++ b/addons/api/mirage/scenarios/ipc.js
@@ -248,6 +248,20 @@ export default function initializeMockIPC(server, config) {
resumeClientAgent() {}
hasRunningSessions() {}
stopAll() {}
+ getRdpClients() {
+ return ['windows-app', 'none', 'mstsc'];
+ }
+ getPreferredRdpClient() {
+ return 'windows-app';
+ }
+ getRecommendedRdpClient() {
+ return {
+ name: 'windows-app',
+ link: 'https://apps.apple.com/us/app/windows-app/id1295203466',
+ };
+ }
+ setPreferredRdpClient() {}
+ launchRdpClient() {}
}
/**
diff --git a/addons/core/translations/en-us.yaml b/addons/core/translations/en-us.yaml
index a60074f45..a0c2a5a10 100644
--- a/addons/core/translations/en-us.yaml
+++ b/addons/core/translations/en-us.yaml
@@ -142,6 +142,21 @@ settings:
alerts:
cache-daemon: There may be a problem with the cache daemon
client-agent: There may be a problem with the client agent
+ preferred-clients:
+ title: Preferred Clients
+ description: Select the applications for Boundary to use when opening these target types.
+ table:
+ header:
+ protocol: Protocol
+ client: Client
+ data:
+ protocols:
+ windows-rdp: Windows RDP
+ clients:
+ none: None
+ mstsc: Remote Desktop Connection (mstsc)
+ windows-app: Windows App
+ none-detected: 'None detected. We recommend {rdpClientName}.'
worker-filter-generator:
title: Filter generator
description: Choose what you want to format into a filter.
diff --git a/ui/desktop/app/components/settings-card/preferred-clients/index.hbs b/ui/desktop/app/components/settings-card/preferred-clients/index.hbs
new file mode 100644
index 000000000..a9c6a7afa
--- /dev/null
+++ b/ui/desktop/app/components/settings-card/preferred-clients/index.hbs
@@ -0,0 +1,78 @@
+{{!
+ Copyright (c) HashiCorp, Inc.
+ SPDX-License-Identifier: BUSL-1.1
+}}
+
+
+ <:body>
+
+ <:body as |B|>
+
+ {{t
+ (concat
+ 'settings.preferred-clients.table.data.protocols.'
+ B.data.protocolType
+ )
+ }}
+
+
+ {{#if this.showRecommendedRdpClient}}
+
+ {{t
+ 'settings.preferred-clients.table.data.clients.none-detected'
+ rdpClientLink=this.rdp.recommendedRdpClient.link
+ rdpClientName=(t
+ (concat
+ 'settings.preferred-clients.table.data.clients.'
+ this.rdp.recommendedRdpClient.name
+ )
+ )
+ htmlSafe=true
+ }}
+
+ {{else}}
+
+
+ {{#each B.data.clients as |client|}}
+
+ {{/each}}
+
+
+ {{/if}}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ui/desktop/app/components/settings-card/preferred-clients/index.js b/ui/desktop/app/components/settings-card/preferred-clients/index.js
new file mode 100644
index 000000000..bf42849f9
--- /dev/null
+++ b/ui/desktop/app/components/settings-card/preferred-clients/index.js
@@ -0,0 +1,50 @@
+/**
+ * Copyright (c) HashiCorp, Inc.
+ * SPDX-License-Identifier: BUSL-1.1
+ */
+
+import Component from '@glimmer/component';
+import { action } from '@ember/object';
+import { service } from '@ember/service';
+
+const PROTOCOL_WINDOWS_RDP = 'windows-rdp';
+
+export default class SettingsCardPreferredClientsComponent extends Component {
+ // =services
+ @service rdp;
+
+ // =getters
+
+ /**
+ * Returns the list of protocols and their available clients
+ * @returns {Array