---
title: "Windows"
url: "https://control.actana.ai/docs/install/windows"
description: "Windows runs the CLI natively and nothing else; the mapping for where the Core and Panel run instead."
updated: 2026-09-01T09:03:01+00:00
---

Windows runs **the CLI only**. `actana` on Windows is a client: it pairs to Cores running somewhere else and drives them — projects, sessions, harnesses. It never turns the Windows machine into a Core, and the Panel has no native Windows install either.

| Component | Native on Windows |
| --- | --- |
| `actana` CLI, as a client of remote Cores | Yes |
| Core (the daemon that runs harnesses) | No — Linux, macOS on Apple silicon, or WSL2 |
| Panel | No — Linux, or the Compose stack's containers |

The rest of these docs assume Linux or macOS; this page is the Windows mapping.

## Install the CLI

Requires Node and npm, as on every machine where the CLI is only a client:

```powershell
npm install -g @actana/cli
```

Then confirm it answers:

```powershell
actana --version
```

## Pair it to a Core

The same command as on every other OS. The code comes from whoever administers the Core (`actana pair new` on that machine), together with its CA fingerprint:

```powershell
actana core pair prod core.example:8443 XXXX-XXXX --session <id> --fingerprint AA:BB:…
```

The dial address must be a name on that Core's certificate. Full reference: [Pair from the CLI](/docs/pairing/cli-pairing). If pairing fails with `getaddrinfo ENOTFOUND` or a TLS name mismatch, the address you dialled is not one the Core certifies — see [Pairing troubleshooting](/docs/pairing/troubleshooting).

## Where the Core runs instead

- **Another machine** — the common case. The CLI dials it over the network; the address must be on that Core's certificate (a LAN IP or DNS name — since 0.4.2, one of the entries of its comma-separated `ACTANA_PUBLIC_HOST`).
- **WSL2 on this machine** — the [one-liner](/docs/install/install-core) runs unchanged inside WSL with systemd enabled. The CLI on the Windows side then dials it like any remote Core.
- **Docker Desktop on this machine** — the [Compose quickstart](/docs/get-started/docker-compose) runs as-is: its Docker commands are identical in PowerShell, `host.docker.internal` resolves inside the containers the same way, and only its folder-creation step differs.

## Core lifecycle verbs are not for Windows

`actana setup`, `actana install`, `actana start` / `stop` / `update` belong to the machine that hosts a Core — Linux, macOS, or WSL2. A Windows machine never hosts one; running them there is not a supported path to a local Core. Use WSL2 for that.

## Paths and environment

The CLI honours `ACTANA_HOME`, `ACTANA_CONFIG_DIR` and `ACTANA_DATA_DIR` — see [Environment variables](/docs/reference/environment-variables). In PowerShell, set them per session:

```powershell
$env:ACTANA_HOME = "D:\actana"
```

Unset, locations follow the platform's data and config directories.

## See also

- [Install in one command](/docs/install/install-core)
- [Compose quickstart](/docs/get-started/docker-compose)
- [Pair from the CLI](/docs/pairing/cli-pairing)
- [Environment variables](/docs/reference/environment-variables)
