> ## Documentation Index
> Fetch the complete documentation index at: https://docs.devin.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Windows support

> Run Devin on Windows VMs: configure the runs-on and shell blueprint fields, Git Bash or PowerShell steps, Chocolatey installs, and app testing.

Devin supports Windows as a build and session platform. By default, Windows environments use the same bash shell (Git Bash) as Linux, so most blueprint commands work across both platforms without modification. Blueprints can also run their Windows setup steps in [PowerShell](#the-shell-field).

<Warning>
  Windows support is currently available on a limited basis. If you're interested in trying out Windows with Devin, please [contact us](https://cognition.com/contact) to learn more and get access.
</Warning>

## How it works

Windows support is built on the same [declarative configuration](/onboard-devin/environment/blueprints) system as Linux. The key difference is the `runs-on` field in your blueprint, which tells Devin which platform to build and run on. The optional `shell` field lets a Windows block run its `run` steps in Windows PowerShell instead of Git Bash.

Since both platforms use bash by default, you can write the same shell commands on Linux and Windows. The main differences are the file system layout and available package managers:

| Aspect | Linux (default) | Windows |
| - | - | - |
| Home directory | `/home/ubuntu` | `/c/Users/Administrator` |
| Repo directory | `~/repos/<repo-name>` | `/c/Users/Administrator/repos/<repo-name>` |
| Package manager | `apt-get` | `choco` or direct installers |

## Writing Windows blueprints

### Single-platform blueprint

If your repository only targets Windows, use `runs-on: windows` at the top level:

```yaml theme={null}
runs-on: windows

initialize:
  - name: "Install Node.js"
    uses: github.com/actions/setup-node@v4
    with:
      node-version: "20"

  - name: "Install build tools"
    run: |
      choco install visualstudio2022buildtools -y
      choco install python --version=3.12 -y

maintenance: |
  npm install

knowledge:
  - name: lint
    contents: npm run lint
  - name: test
    contents: npm test
  - name: build
    contents: npm run build
```

### Multi-platform blueprint

To build the same repository for both Linux and Windows, write each platform as a separate YAML document separated by `---`. Each document declares its own `runs-on` label. See the [Multi-document YAML](/onboard-devin/environment/blueprints#blueprint-sections) callout in the blueprint guide for background on this format.

```yaml theme={null}
runs-on: default
initialize: |
  curl -LsSf https://astral.sh/uv/install.sh | sh
  apt-get update && apt-get install -y build-essential

maintenance: |
  uv sync

knowledge:
  - name: test
    contents: uv run pytest

---
runs-on: windows
initialize: |
  choco install python --version=3.12 -y

maintenance: |
  uv sync

knowledge:
  - name: test
    contents: uv run pytest
```

Each document produces a separate snapshot build for its platform. Sessions boot from the platform-specific snapshot.

<Warning>
  The top-level YAML must be a mapping, not a sequence. Writing the example above as a single list (`- runs-on: default` / `- runs-on: windows`) is rejected by the backend with `Invalid YAML: each YAML document must be a mapping, not a sequence; use '---' to separate multiple blocks`. Use the `---` separator shown above.
</Warning>

## The `runs-on` field

The `runs-on` field maps to a registered machine config on your account:

| Value | Platform |
| - | - |
| `default` or `linux` | Linux (default platform) |
| `macos` | [macOS](/onboard-devin/environment/macos-support) |
| `windows` | Windows |

You can specify `runs-on` as a string or a list:

```yaml theme={null}
# Single platform
runs-on: windows

# Multiple platforms in one block (same commands run on each)
runs-on: [default, windows]
```

When a block lists multiple platforms, the build system creates one snapshot per platform using the same commands.

<Warning>
  The list syntax runs identical commands on every platform in the list. Only use it when commands are truly cross-platform (e.g., `npm install`, `uv sync`). For platform-specific commands (like `apt-get` on Linux or `choco` on Windows), use the [multi-document format](#multi-platform-blueprint) instead — one document per platform, separated by `---`.
</Warning>

## The `shell` field

By default, a block's `run` steps execute in Git Bash on Windows. Set the optional top-level `shell` field to `powershell` to write setup steps with native PowerShell cmdlets, syntax, and Windows paths instead:

```yaml theme={null}
runs-on: windows
shell: powershell

initialize:
  - name: "Install build tools"
    run: |
      choco install visualstudio2022buildtools -y
      New-Item -ItemType Directory -Force -Path "$env:USERPROFILE\tools" | Out-Null

maintenance:
  - name: "Restore packages"
    run: |
      Write-Host "Restoring packages"
      dotnet restore
```

The setting is per block. In a [multi-platform blueprint](#multi-platform-blueprint), set `shell: powershell` only in the `runs-on: windows` document so the Linux document keeps using bash. It only affects build steps; Windows sessions still use Git Bash as the default shell. For the accepted values, how secrets and environment variables reach PowerShell steps, and error handling, see [`shell`](/onboard-devin/environment/blueprint-reference#shell) in the blueprint reference.

## Usage and cost

Windows sessions consume approximately **9% more** usage (ACUs or quota) compared to equivalent Linux sessions. For details on how usage is metered, see [Usage](/admin/billing/usage#windows-sessions).

## Windows session behavior

### Shell

Windows sessions use **Git Bash** as the default shell — the same bash shell used on Linux. Unless a block sets [`shell: powershell`](#the-shell-field), blueprint `run` steps also execute in Git Bash, so standard bash syntax works on both platforms:

```yaml theme={null}
- run: |
    export MY_VAR="hello"
    echo $MY_VAR
```

### Paths

Git Bash uses POSIX-style paths (`/c/...` instead of `C:\...`):

```yaml theme={null}
# Linux paths
- run: cp config.json ~/.config/myapp/config.json

# Windows paths (Git Bash format)
- run: cp config.json /c/Users/Administrator/.config/myapp/config.json
```

Steps in a [`shell: powershell`](#the-shell-field) block use native Windows paths instead:

```yaml theme={null}
- run: Copy-Item config.json "$env:USERPROFILE\.config\myapp\config.json"
```

### Secrets

Secrets are available as environment variables during sessions using standard bash syntax (`$SECRET_NAME`):

```yaml theme={null}
maintenance:
  - name: "Configure registry"
    run: |
      npm config set //registry.npmjs.org/:_authToken $NPM_TOKEN
```

### File attachments

On Windows, uploaded files are written to `/c/Users/Administrator/.files/` instead of `/home/ubuntu/.files/`.

### Computer Use

[Computer Use](/work-with-devin/computer-use) is fully supported on Windows sessions. Devin gets a Windows desktop environment with Chrome, mouse, and keyboard access, so it can test web apps as well as Windows-native desktop applications (e.g. WPF and WinForms apps) and record its testing sessions.

## Blueprint tips for Windows

### Installing tools

Use `choco` (Chocolatey) or direct download scripts:

```yaml theme={null}
initialize:
  - name: "Install Chocolatey packages"
    run: |
      choco install git -y
      choco install nodejs-lts -y
      choco install python --version=3.12 -y
      choco install dotnet-sdk -y
```

### Common patterns

**.NET project:**

```yaml theme={null}
runs-on: windows

initialize:
  - name: "Install .NET SDK"
    run: |
      choco install dotnet-sdk -y

maintenance: |
  dotnet restore

knowledge:
  - name: build
    contents: dotnet build
  - name: test
    contents: dotnet test
  - name: lint
    contents: dotnet format --verify-no-changes
```

**Visual Studio / C++ project:**

```yaml theme={null}
runs-on: windows

initialize:
  - name: "Install Visual Studio Build Tools"
    run: |
      choco install visualstudio2022buildtools -y
      choco install visualstudio2022-workload-vctools -y

maintenance: |
  msbuild /t:Restore MySolution.sln

knowledge:
  - name: build
    contents: msbuild MySolution.sln /p:Configuration=Release
  - name: test
    contents: vstest.console.exe bin/Release/Tests.dll
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.