---
id: "virtual-desktop"
type: "kind"
category: "compute"
url: "https://localhost:3000/catalogue/kinds/virtual-desktop"
---

# Virtual desktop pool

A brokered pool of session hosts serving remote desktops to users.

| | |
|---|---|
| Category | Compute |
| Properties | 7 |
| Components | 20 |
| Rules | 1 |

## Properties

| property | type | values | required | default |
|---|---|---|---|---|
| `hostCount` | integer | — | no | — |
| `loadBalancing` | enum | `breadth-first`, `depth-first` | no | — |
| `managed` | boolean | — | no | false |
| `maxSessionsPerHost` | integer | — | no | — |
| `mfaRequired` | boolean | — | no | — |
| `persistentProfiles` | boolean | — | no | — |
| `sessionMode` | enum | `pooled`, `personal` | no | — |

## Rules for this kind · 1

### Stateful node without zone redundancy `stateful-node-without-zone-redundancy` (error)

- Page: https://localhost:3000/catalogue/rules/stateful-node-without-zone-redundancy.md
- Why: A stateful compute node pinned to exactly one availability zone disappears with that zone, and its state goes with it. Nodes inside a cell are exempt, because there the cell is deliberately single-zone and redundancy comes from the other cells.
- Applies to: every node in category compute
- Message: Stateful node '{{node.id}}' lives in exactly one availability zone. A zone outage takes its state with it.

It fires when:

- all of these hold:
  - the node's `stateless` is false
  - the node sits inside exactly 1 availability-zone group
  - this does not hold:
    - the node sits inside at least one cell group

## Components · 20

### vendor-neutral

- [Generic virtual desktop pool](https://localhost:3000/catalogue/components/virtual-desktop.md) `virtual-desktop` — the kind itself

### alibabacloud

- [Elastic Cloud Phone](https://localhost:3000/catalogue/components/alibaba-elastic-cloud-phone.md) `alibaba-elastic-cloud-phone` — 2 defaults
- [WUYING Workspace](https://localhost:3000/catalogue/components/alibaba-wuying-workspace.md) `alibaba-wuying-workspace` — 1 defaults

### aws

- [Amazon WorkSpaces Applications](https://localhost:3000/catalogue/components/aws-appstream.md) `aws-appstream` — 4 defaults
- [AWS Cloud9](https://localhost:3000/catalogue/components/aws-cloud9.md) `aws-cloud9` — 3 defaults
- [Amazon GameLift Streams](https://localhost:3000/catalogue/components/aws-gamelift-streams.md) `aws-gamelift-streams` — 2 defaults
- [Amazon WorkSpaces](https://localhost:3000/catalogue/components/aws-workspaces.md) `aws-workspaces` — 4 defaults
- [Amazon WorkSpaces Pools](https://localhost:3000/catalogue/components/aws-workspaces-pools.md) `aws-workspaces-pools` — 4 defaults
- [Amazon WorkSpaces Secure Browser](https://localhost:3000/catalogue/components/aws-workspaces-secure-browser.md) `aws-workspaces-secure-browser` — 4 defaults

### azure

- [Microsoft Dev Box](https://localhost:3000/catalogue/components/azure-dev-box.md) `azure-dev-box` — 3 defaults
- [Azure DevTest Labs](https://localhost:3000/catalogue/components/azure-devtest-labs.md) `azure-devtest-labs` — 3 defaults
- [Azure Lab Services](https://localhost:3000/catalogue/components/azure-lab-services.md) `azure-lab-services` — 3 defaults
- [Azure Virtual Desktop](https://localhost:3000/catalogue/components/azure-virtual-desktop.md) `azure-virtual-desktop` — 4 defaults

### cloudflare

- [Cloudflare Browser Isolation](https://localhost:3000/catalogue/components/cloudflare-browser-isolation.md) `cloudflare-browser-isolation` — 2 defaults

### default

- [Citrix Virtual Apps and Desktops](https://localhost:3000/catalogue/components/citrix-virtual-apps.md) `citrix-virtual-apps` — 3 defaults
- [Apache Guacamole](https://localhost:3000/catalogue/components/guacamole.md) `guacamole` — 3 defaults
- [Kasm Workspaces](https://localhost:3000/catalogue/components/kasm.md) `kasm` — 2 defaults
- [Omnissa Horizon](https://localhost:3000/catalogue/components/omnissa-horizon.md) `omnissa-horizon` — 2 defaults

### gcp

- [Cloud Workstations](https://localhost:3000/catalogue/components/google-cloud-workstations.md) `google-cloud-workstations` — 4 defaults

### oci

- [OCI Secure Desktops](https://localhost:3000/catalogue/components/oci-secure-desktops.md) `oci-secure-desktops` — 2 defaults

## Source (`kind` YAML, verbatim)

```yaml
# yaml-language-server: $schema=../schema/kind.schema.json
# A broker over many hosts, where virtual-machine describes one machine. sessionMode, maxSessionsPerHost and mfaRequired have no default so capacity and access rules can catch an unsized or unprotected pool.
schemaVersion: "1"
type: "kind"
id: "virtual-desktop"
category: "compute"
properties:
  sessionMode:
    type: "enum"
    values: ["pooled", "personal"]
  hostCount:
    type: "integer"
  maxSessionsPerHost:
    type: "integer"
  loadBalancing:
    type: "enum"
    values: ["breadth-first", "depth-first"]
  persistentProfiles:
    type: "boolean"
  mfaRequired:
    type: "boolean"
  managed:
    type: "boolean"
    default: false
```

Human page: https://localhost:3000/catalogue/kinds/virtual-desktop
