---
title: "Hello world on Windows"
description: "Get started with continuous integration on the Windows execution environment by setting up your first Windows project with an example application."
platform: "Cloud, Server"
doc_version: "Server"
last_updated: "2026-10-26"
---

> For current CircleCI product defaults, deprecated patterns, and Cloud/Server differences, see [AGENTS.md](https://circleci.com/docs/AGENTS.md).
>
> For the complete documentation index and site structure, see [llms.txt](https://circleci.com/docs/llms.txt).

# Hello world on Windows

This document describes how to get started with continuous integration on **Windows execution environments** on CircleCI.

Windows execution environments are available on CircleCI Server only if your system administrator has set them up. Contact your system administrator to check that Windows is available.

## Prerequisites

To follow along with this document you will need:

*   An account on your CircleCI Server installation.
    

## Example application

Let us consider a more advanced (but still introductory) "hello world" application using the Windows executor. This [example application](https://github.com/CircleCI-Public/circleci-demo-windows) still prints "Hello World" to the console, but does so using .NET core to create an executable, uses dependency caching, and creates an artifact on every build.

You can view the [entire configuration file](https://github.com/CircleCI-Public/circleci-demo-windows/blob/master/.circleci/config.yml). It also includes browser and UI testing, but we will focus on the `hello-world` workflow for now.

```yaml
version: 2.1
```

Above, we start by declaring that we will use version `2.1` of CircleCI.

```yaml
workflows:
  hello-world:
    jobs:
      - build
```

We define a `hello-world` workflow, in which we run a single job named `build`.

```yaml
jobs:
  build:
    machine:
      image: windows-default
```

Under the `jobs` key, we define the `build` job, and set the executor to the `windows-default` machine image.

```yaml
    steps:
      - checkout
```

In our first step, we run the [`checkout`](https://circleci.com/docs/reference/configuration-reference/#checkout) command to pull our source code from our version control system.

```yaml
      - restore_cache:
          keys:
      - run:
          name: "Install project dependencies"
          command: dotnet.exe restore
      - save_cache:
          paths:
            - C:\Users\circleci\.nuget\packages
```

Next in the config, we make use of caching to restore cached dependencies from previous builds. The command `dotnet restore` will fetch any dependencies that are not already installed/restored from the cache. Learn more about caching in our [Caching Document](https://circleci.com/docs/guides/server/optimize/caching/).

```yaml
      - run:
          name: "Run Build step"
          command: dotnet.exe publish -c Release -r win10-x64
      - run:
          name: "Test the executable"
          command: .\bin\Release\netcoreapp2.1\win10-x64\publish\circleci-demo-windows.exe
```

Next, we run two steps: one to build the executable for Windows 10, and another to test the executable (expecting to see `Hello World` printed to the console).

```yaml
      - store_artifacts:
          path: .\bin\Release\netcoreapp2.1\win10-x64\publish\circleci-demo-windows.exe
```

In our last step, we store the build executable as an artifact, making it accessible with the CircleCI web application or API.

## Next steps

Consider reading documentation on some of CircleCI’s features:

*   See the [Concepts](https://circleci.com/docs/reference/concepts/) document for a summary of configuration and the hierarchy of top-level keys in a `.circleci/config.yml` file.
    
*   Refer to the [Workflows](https://circleci.com/docs/guides/server/orchestrate/workflows/) document for examples of orchestrating job runs with concurrent, sequential, scheduled, and manual approval workflows.
    
*   Find complete reference information for all keys and pre-built Docker images in the [Configuring CircleCI](https://circleci.com/docs/reference/configuration-reference/) and [CircleCI Images](https://circleci.com/docs/guides/server/execute/circleci-images/) documentation, respectively.