build: Bump VS minimum supported version to 18.3
What changed, and why it matters
This commit is a routine build-system maintenance change. It updates Bitcoin Core's Windows build instructions and automated CI scripts to require a newer version of Microsoft Visual Studio (VS 2026 instead of VS 2022). There is no change to the actual Bitcoin node code, wallet logic, networking, or consensus rules, and nothing in the commit suggests a security fix or vulnerability.
No security action required. Treat as normal build-infrastructure update; verify CI passes on the new Visual Studio version before merging.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The diff renames CMake presets from vs2022/vs2022-static to vs2026/vs2026-static, switches the CMake generator string from ‘Visual Studio 17 2022’ to ‘Visual Studio 18 2026’, updates the GitHub Actions runner label to windows-2025-vs2026, and updates documentation references and minimum-version requirements accordingly. It also fixes a minor typo (‘speedup’ -> ‘speed up’). No source code, cryptography, or protocol changes are present.
Changed components
Windows MSVC build configuration (CMakePresets.json)GitHub Actions CI Windows job (.github/workflows/ci.yml, .github/ci-windows.py)Documentation (doc/build-windows-msvc.md)Inspect captured patch +20 / −20
diff --git a/.github/ci-windows.py b/.github/ci-windows.py
index cbb5b27f..ee3000ed 100755
--- a/.github/ci-windows.py
+++ b/.github/ci-windows.py
@@ -45,7 +45,7 @@ def generate(ci_type):
"build",
"-Werror=dev",
"--preset",
- "vs2022",
+ "vs2026",
] + GENERATE_OPTIONS[ci_type]
run(command)
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 7f5299cf..e59c64b9 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -204,7 +204,7 @@ jobs:
windows-native-dll:
name: ${{ matrix.job-name }}
- runs-on: windows-2022
+ runs-on: windows-2025-vs2026
if: ${{ vars.SKIP_BRANCH_PUSH != 'true' || github.event_name == 'pull_request' }}
@@ -218,9 +218,9 @@ jobs:
job-type: [standard, fuzz]
include:
- job-type: standard
- job-name: 'Windows native, VS 2022'
+ job-name: 'Windows native, VS'
- job-type: fuzz
- job-name: 'Windows native, fuzz, VS 2022'
+ job-name: 'Windows native, fuzz, VS'
steps:
- *ANNOTATION_PR_NUMBER
diff --git a/CMakePresets.json b/CMakePresets.json
index ae9d06da..a7103e29 100644
--- a/CMakePresets.json
+++ b/CMakePresets.json
@@ -2,14 +2,14 @@
"version": 3,
"configurePresets": [
{
- "name": "vs2022",
- "displayName": "Build using 'Visual Studio 17 2022' generator and 'x64-windows' triplet",
+ "name": "vs2026",
+ "displayName": "Build using 'Visual Studio 18 2026' generator and 'x64-windows' triplet",
"condition": {
"type": "equals",
"lhs": "${hostSystemName}",
"rhs": "Windows"
},
- "generator": "Visual Studio 17 2022",
+ "generator": "Visual Studio 18 2026",
"architecture": "x64",
"toolchainFile": "$env{VCPKG_ROOT}\\scripts\\buildsystems\\vcpkg.cmake",
"cacheVariables": {
@@ -19,14 +19,14 @@
}
},
{
- "name": "vs2022-static",
- "displayName": "Build using 'Visual Studio 17 2022' generator and 'x64-windows-static' triplet",
+ "name": "vs2026-static",
+ "displayName": "Build using 'Visual Studio 18 2026' generator and 'x64-windows-static' triplet",
"condition": {
"type": "equals",
"lhs": "${hostSystemName}",
"rhs": "Windows"
},
- "generator": "Visual Studio 17 2022",
+ "generator": "Visual Studio 18 2026",
"architecture": "x64",
"toolchainFile": "$env{VCPKG_ROOT}\\scripts\\buildsystems\\vcpkg.cmake",
"cacheVariables": {
diff --git a/doc/build-windows-msvc.md b/doc/build-windows-msvc.md
index 5b75a62f..17adb779 100644
--- a/doc/build-windows-msvc.md
+++ b/doc/build-windows-msvc.md
@@ -10,11 +10,11 @@ For cross-compiling options, please see [`build-windows.md`](./build-windows.md)
This guide relies on using CMake and vcpkg package manager provided with the Visual Studio installation.
Here are requirements for the Visual Studio installation:
-1. Minimum required version: Visual Studio 2022 version 17.13.
+1. Minimum required version: Visual Studio 2026 version 18.3.
2. Installed components:
- The "Desktop development with C++" workload.
-The commands in this guide should be executed in "Developer PowerShell for VS 2022" or "Developer Command Prompt for VS 2022".
+The commands in this guide should be executed in "Developer PowerShell for VS" or "Developer Command Prompt for VS".
The former is assumed hereinafter.
### 2. Git
@@ -54,8 +54,8 @@ Run `cmake -B build -LH` to see the full list of available options.
### 4. Building with Static Linking with GUI
-```
-cmake -B build --preset vs2022-static # It might take a while if the vcpkg binary cache is unpopulated or invalidated.
+```powershell
+cmake -B build --preset vs2026-static # It might take a while if the vcpkg binary cache is unpopulated or invalidated.
cmake --build build --config Release # Append "-j N" for N parallel jobs.
ctest --test-dir build --build-config Release # Append "-j N" for N parallel tests.
cmake --install build --config Release # Optional.
@@ -63,8 +63,8 @@ cmake --install build --config Release # Optional.
### 5. Building with Dynamic Linking without GUI
-```
-cmake -B build --preset vs2022 -DBUILD_GUI=OFF # It might take a while if the vcpkg binary cache is unpopulated or invalidated.
+```powershell
+cmake -B build --preset vs2026 -DBUILD_GUI=OFF # It might take a while if the vcpkg binary cache is unpopulated or invalidated.
cmake --build build --config Release # Append "-j N" for N parallel jobs.
ctest --test-dir build --build-config Release # Append "-j N" for N parallel tests.
```
@@ -79,7 +79,7 @@ specify a shorter path to store intermediate build files by using
the [`--x-buildtrees-root`](https://learn.microsoft.com/en-us/vcpkg/commands/common-options#buildtrees-root) option:
```powershell
-cmake -B build --preset vs2022-static -DVCPKG_INSTALL_OPTIONS="--x-buildtrees-root=C:\vcpkg"
+cmake -B build --preset vs2026-static -DVCPKG_INSTALL_OPTIONS="--x-buildtrees-root=C:\vcpkg"
```
If vcpkg installation fails with the message "Paths with embedded space may be handled incorrectly", which
@@ -87,17 +87,17 @@ can occur if your local Bitcoin Core repository path contains spaces, you can ov
by setting the [`VCPKG_INSTALLED_DIR`](https://github.com/microsoft/vcpkg-docs/blob/main/vcpkg/users/buildsystems/cmake-integration.md#vcpkg_installed_dir) variable:
```powershell
-cmake -B build --preset vs2022-static -DVCPKG_INSTALLED_DIR="C:\path_without_spaces"
+cmake -B build --preset vs2026-static -DVCPKG_INSTALLED_DIR="C:\path_without_spaces"
```
## Performance Notes
### 7. vcpkg Manifest Default Features
-One can skip vcpkg manifest default features to speedup the configuration step.
+One can skip vcpkg manifest default features to speed up the configuration step.
For example, the following invocation will skip all features except for "wallet" and "tests" and their dependencies:
```
-cmake -B build --preset vs2022 -DVCPKG_MANIFEST_NO_DEFAULT_FEATURES=ON -DVCPKG_MANIFEST_FEATURES="wallet;tests" -DBUILD_GUI=OFF -DWITH_ZMQ=OFF
+cmake -B build --preset vs2026 -DVCPKG_MANIFEST_NO_DEFAULT_FEATURES=ON -DVCPKG_MANIFEST_FEATURES="wallet;tests" -DBUILD_GUI=OFF -DWITH_ZMQ=OFF
```
Available features are listed in the [`vcpkg.json`](/vcpkg.json) file.
Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.