> For the complete documentation index, see [llms.txt](https://docs.roboflow.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.roboflow.com/deployment/self-hosted/inference-server/install/windows.md).

# Install on Windows

## Windows installer (x86)

You can run the Roboflow Inference Server on your Windows machine with the native desktop app. Download the latest Windows installer from the latest GitHub release: [View the latest release and download installers on GitHub](https://github.com/roboflow/inference/releases).

1. [Download the latest installer](https://github.com/roboflow/inference/releases) and run it to install Roboflow Inference.
2. When the install finishes, it offers to launch the Inference Server.
3. To stop the server, close the terminal window it opens.
4. To start it again later, find **Roboflow Inference** in your Start Menu.

{% hint style="info" %}
**`inference-models` backend.** When used with the `inference-models` backend, the Inference Server must run with elevated admin rights because of cache management with symlinks. The alternative is to enable [Developer Mode](https://learn.microsoft.com/en-us/windows/advanced-settings/developer-mode).

The `inference-models` backend is opt-in via an environment flag: `$env:USE_INFERENCE_MODELS = "True"`.
{% endhint %}

## Using Docker

First, [install Docker Desktop](https://docs.docker.com/desktop/setup/install/windows-install/). Then use the CLI to start the container.

{% tabs %}
{% tab title="CPU" %}

```bash
pip install inference-cli
inference server start
```

{% endtab %}

{% tab title="GPU" %}
To access the GPU, make sure you have installed up-to-date NVIDIA drivers and the latest version of WSL 2, and that the WSL 2 backend is configured in Docker. [Follow the setup instructions from Docker](https://docs.docker.com/desktop/features/gpu/).

Then use the CLI to start the container:

```bash
pip install inference-cli
inference server start
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
If the `pip install` command fails, you may need to [install Python](https://www.python.org/downloads/) first. Once you have Python 3.12, 3.11, or 3.10 on your machine, retry the command.
{% endhint %}

## Manually starting the container

If you want more control over the container settings, start it yourself.

{% tabs %}
{% tab title="CPU" %}
The core CPU Docker image includes support for OpenVINO acceleration on x64 CPUs via onnxruntime. Heavy models like SAM2 may run too slowly (dozens of seconds per image) to be practical; if you need them, use a CUDA-capable GPU.

The primary use cases for CPU inference are processing still images (for example NSFW classification of uploads or document verification) or infrequent sampling of frames from a video (for example occupancy tracking of a parking lot).

To get started with CPU inference, use the `roboflow/roboflow-inference-server-cpu:latest` container.

```bash
docker run -d ^
    --name inference-server ^
    --read-only ^
    -p 9001:9001 ^
    --volume "%USERPROFILE%\.inference\cache:/tmp:rw" ^
    --security-opt="no-new-privileges" ^
    --cap-drop="ALL" ^
    --cap-add="NET_BIND_SERVICE" ^
    roboflow/roboflow-inference-server-cpu:latest
```

{% endtab %}

{% tab title="GPU" %}
The GPU container adds hardware acceleration on cards that support CUDA via NVIDIA-Docker. Make sure you have [set up Docker to access the GPU](https://docs.docker.com/desktop/features/gpu/), then add `--gpus all` to the `docker run` command:

```bash
docker run -d ^
    --name inference-server ^
    --gpus all ^
    --read-only ^
    -p 9001:9001 ^
    --volume "%USERPROFILE%\.inference\cache:/tmp:rw" ^
    --security-opt="no-new-privileges" ^
    --cap-drop="ALL" ^
    --cap-add="NET_BIND_SERVICE" ^
    roboflow/roboflow-inference-server-gpu:latest
```

{% endtab %}

{% tab title="TensorRT" %}
With the GPU container you can optionally enable [TensorRT](https://developer.nvidia.com/tensorrt), NVIDIA's model optimization runtime. It greatly increases your models' speed at the expense of a heavy compilation and optimization step (sometimes 15+ minutes) the first time you load each model.

Enable TensorRT by adding `TensorrtExecutionProvider` to the `ONNXRUNTIME_EXECUTION_PROVIDERS` environment variable.

```bash
docker run -d ^
    --name inference-server ^
    --gpus all ^
    --read-only ^
    -p 9001:9001 ^
    --volume "%USERPROFILE%\.inference\cache:/tmp:rw" ^
    --security-opt="no-new-privileges" ^
    --cap-drop="ALL" ^
    --cap-add="NET_BIND_SERVICE" ^
    -e ONNXRUNTIME_EXECUTION_PROVIDERS="[TensorrtExecutionProvider,CUDAExecutionProvider,OpenVINOExecutionProvider,CPUExecutionProvider]" ^
    roboflow/roboflow-inference-server-gpu:latest
```

{% endtab %}
{% endtabs %}

## Docker Compose

If you use Docker Compose for your application, the equivalent YAML is:

{% tabs %}
{% tab title="CPU" %}

```yaml
version: "3.9"

services:
  inference-server:
    container_name: inference-server
    image: roboflow/roboflow-inference-server-cpu:latest

    read_only: true
    ports:
      - "9001:9001"

    volumes:
      - "${USERPROFILE}/.inference/cache:/tmp:rw"

    security_opt:
      - no-new-privileges
    cap_drop:
      - ALL
    cap_add:
      - NET_BIND_SERVICE
```

{% endtab %}

{% tab title="GPU" %}

```yaml
version: "3.9"

services:
  inference-server:
    container_name: inference-server
    image: roboflow/roboflow-inference-server-gpu:latest

    read_only: true
    ports:
      - "9001:9001"

    volumes:
      - "${USERPROFILE}/.inference/cache:/tmp:rw"

    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]

    security_opt:
      - no-new-privileges
    cap_drop:
      - ALL
    cap_add:
      - NET_BIND_SERVICE
```

{% endtab %}

{% tab title="TensorRT" %}

```yaml
version: "3.9"

services:
  inference-server:
    container_name: inference-server
    image: roboflow/roboflow-inference-server-gpu:latest

    read_only: true
    ports:
      - "9001:9001"

    volumes:
      - "${USERPROFILE}/.inference/cache:/tmp:rw"

    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]

    environment:
      ONNXRUNTIME_EXECUTION_PROVIDERS: "[TensorrtExecutionProvider,CUDAExecutionProvider,OpenVINOExecutionProvider,CPUExecutionProvider]"

    security_opt:
      - no-new-privileges
    cap_drop:
      - ALL
    cap_add:
      - NET_BIND_SERVICE
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
Roboflow Enterprise plans add [a Helm chart](https://github.com/roboflow/inference/tree/main/inference/enterprise/helm-chart) for Kubernetes deployments, networking solutions for OT networks, and customized support and installation packages. [Contact the sales team](https://roboflow.com/sales) to learn more.
{% endhint %}

## Next steps

* [Run a model](/deployment/self-hosted/self-hosted.md#run-a-model) against your new server.
* [Install `inference-gpu` bare metal on Windows](/deployment/self-hosted/inference-library/bare-metal-gpu-windows.md) if you cannot use Docker.
* [Securing a self-hosted server](/deployment/self-hosted/inference-server/configuration/security.md) before you expose it beyond localhost.
