diff --git a/docs-mslearn/toolkit/changelog.md b/docs-mslearn/toolkit/changelog.md
index 157184b0a..7b5351821 100644
--- a/docs-mslearn/toolkit/changelog.md
+++ b/docs-mslearn/toolkit/changelog.md
@@ -33,6 +33,19 @@ The following section lists features and enhancements that are currently in deve
+## v14
+
+_Released March 2026_
+
+
+> [!div class="nextstepaction"]
+> [Download](https://github.com/microsoft/finops-toolkit/releases/tag/v14)
+> [!div class="nextstepaction"]
+> [Full changelog](https://github.com/microsoft/finops-toolkit/compare/v13...v14)
+
+
+
+
## v13 Update 1
_Released February 11, 2026_
diff --git a/docs/_includes/ftktag.txt b/docs/_includes/ftktag.txt
index 817ba4bff..69888f86e 100644
--- a/docs/_includes/ftktag.txt
+++ b/docs/_includes/ftktag.txt
@@ -1 +1 @@
-v13
\ No newline at end of file
+v14.0-dev
\ No newline at end of file
diff --git a/docs/_includes/ftkver.txt b/docs/_includes/ftkver.txt
index 7f27d6b1d..56250dad0 100644
--- a/docs/_includes/ftkver.txt
+++ b/docs/_includes/ftkver.txt
@@ -1 +1 @@
-13.0
\ No newline at end of file
+14.0-dev
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 7278824e4..b3ff098a0 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "ftk",
- "version": "13.0.0",
+ "version": "14.0.0-dev",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "ftk",
- "version": "13.0.0",
+ "version": "14.0.0-dev",
"license": "MIT",
"devDependencies": {
"all-contributors-cli": "^6.26.1"
diff --git a/package.json b/package.json
index ee8ca6348..d11ddf82a 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "ftk",
- "version": "13.0.0",
+ "version": "14.0.0-dev",
"description": "Starter kits, scripts, and advanced solutions to accelerate your FinOps journey in the Microsoft Cloud.",
"main": "index.js",
"directories": {
diff --git a/src/optimization-engine/ftkver.txt b/src/optimization-engine/ftkver.txt
index 7f27d6b1d..56250dad0 100644
--- a/src/optimization-engine/ftkver.txt
+++ b/src/optimization-engine/ftkver.txt
@@ -1 +1 @@
-13.0
\ No newline at end of file
+14.0-dev
\ No newline at end of file
diff --git a/src/powershell/Private/Get-VersionNumber.ps1 b/src/powershell/Private/Get-VersionNumber.ps1
index 95daac0d7..14e6ecee5 100644
--- a/src/powershell/Private/Get-VersionNumber.ps1
+++ b/src/powershell/Private/Get-VersionNumber.ps1
@@ -4,5 +4,5 @@
function Get-VersionNumber
{
param()
- return '13.0'
+ return '14.0-dev'
}
diff --git a/src/powershell/Tests/Integration/Toolkit.Tests.ps1 b/src/powershell/Tests/Integration/Toolkit.Tests.ps1
index 2d1b7ad51..86401243c 100644
--- a/src/powershell/Tests/Integration/Toolkit.Tests.ps1
+++ b/src/powershell/Tests/Integration/Toolkit.Tests.ps1
@@ -6,12 +6,13 @@
Describe 'Get-FinOpsToolkitVersion' {
It 'Should return all known releases' {
# Arrange
- $plannedRelease = '13'
- $expected = @('12', '0.11', '0.10', '0.9', '0.8', '0.7', '0.6', '0.5', '0.4', '0.3', '0.2', '0.1.1', '0.1', '0.0.1')
+ $plannedRelease = '14'
+ $expected = @('13', '12', '0.11', '0.10', '0.9', '0.8', '0.7', '0.6', '0.5', '0.4', '0.3', '0.2', '0.1.1', '0.1', '0.0.1')
# Helper function to normalize version strings for [version] parsing
# Single-part versions like "12" need to become "12.0" for [version] to parse them
- function NormalizeVersion($ver) {
+ function NormalizeVersion($ver)
+ {
if ($ver -notmatch '\.') { return "$ver.0" }
return $ver
}
@@ -54,7 +55,7 @@ Describe 'Get-FinOpsToolkitVersion' {
CheckFile "optimization-workbook-v$verStr.zip" $null '0.5'
# Power BI
- CheckFile "FinOpsToolkitData.pbix" '12.0' $null
+ CheckFile "FinOpsToolkitData.pbix" '12.0' '12.0' # Accidentally added in v12
CheckFile "PowerBI-demo.zip" '0.7' $null
CheckFile "PowerBI-kql.zip" '0.7' $null
CheckFile "PowerBI-storage.zip" '0.7' $null
@@ -80,6 +81,10 @@ Describe 'Get-FinOpsToolkitVersion' {
CheckFile "ResourceTypes.json" '0.2' $null
CheckFile "Services.csv" '0.1' $null
+ # Meeting invites
+ CheckFile "contributor-sync.ics" '13.0' $null
+ CheckFile "office-hours.ics" '13.0' $null
+
# Deprecated / renamed
CheckFile "CommitmentDiscounts.pbit" '0.2' '0.3'
CheckFile "CommitmentDiscounts.pbix" $null '0.3'
diff --git a/src/scripts/Update-Version.ps1 b/src/scripts/Update-Version.ps1
index 0f4bf0d21..88450667e 100644
--- a/src/scripts/Update-Version.ps1
+++ b/src/scripts/Update-Version.ps1
@@ -125,6 +125,93 @@ if ($update -or $Version)
Write-Output " return '$ver'"
Write-Output "}"
} | Out-File "$PSScriptRoot/../PowerShell/Private/Get-VersionNumber.ps1" -Encoding ascii -Append:$false
+
+ # Release tag strips prerelease labels and trailing .0 (e.g., "14.0-dev" -> "v14")
+ $releaseTag = 'v' + (($ver -replace '-.*$', '') -replace '\.0$', '')
+
+ # Update changelog with new version section
+ Write-Verbose "Updating changelog..."
+ $changelogPath = Join-Path $repoRoot 'docs-mslearn/toolkit/changelog.md'
+ if (Test-Path $changelogPath)
+ {
+ $changelogLines = Get-Content $changelogPath
+ $anchorIndex = $changelogLines.IndexOf('
')
+ if ($anchorIndex -ge 0)
+ {
+ # Find the first ## v heading after the anchor
+ $prevTag = $null
+ for ($i = $anchorIndex + 1; $i -lt $changelogLines.Count; $i++)
+ {
+ if ($changelogLines[$i] -match '^## v(.+)$')
+ {
+ $prevTag = $Matches[1] -replace '\s.*$', ''
+ break
+ }
+ }
+
+ $releaseTagName = $releaseTag.TrimStart('v')
+
+ # Skip if this version section already exists
+ if ($prevTag -eq $releaseTagName)
+ {
+ Write-Verbose "- Changelog already has v$releaseTagName section"
+ }
+ else
+ {
+ $releaseDate = (Get-Date).AddMonths(1).ToString('MMMM yyyy')
+ $newSection = @(
+ ''
+ "## v$releaseTagName"
+ ''
+ "_Released ${releaseDate}_"
+ ''
+ ''
+ '> [!div class="nextstepaction"]'
+ "> [Download](https://github.com/microsoft/finops-toolkit/releases/tag/$releaseTag)"
+ '> [!div class="nextstepaction"]'
+ "> [Full changelog](https://github.com/microsoft/finops-toolkit/compare/v$prevTag...$releaseTag)"
+ ''
+ ''
+ '
'
+ )
+
+ $changelogLines = $changelogLines[0..$anchorIndex] + $newSection + $changelogLines[($anchorIndex + 1)..($changelogLines.Count - 1)]
+ $changelogLines | Out-File $changelogPath -Encoding utf8
+ Write-Verbose "- Added v$releaseTagName section to changelog"
+ }
+ }
+ }
+
+ # Update integration test version variables
+ Write-Verbose "Updating integration test versions..."
+ $testPath = Join-Path $repoRoot 'src/powershell/Tests/Integration/Toolkit.Tests.ps1'
+ if (Test-Path $testPath)
+ {
+ $testContent = Get-Content $testPath -Raw
+ $releaseTagName = $releaseTag.TrimStart('v')
+
+ # Extract current planned release and skip if already up to date
+ if ($testContent -match '\$plannedRelease = ''([^'']+)''')
+ {
+ $oldPlanned = $Matches[1]
+
+ if ($oldPlanned -eq $releaseTagName)
+ {
+ Write-Verbose "- Integration test already has planned release '$releaseTagName'"
+ }
+ else
+ {
+ # Update $plannedRelease to the new version
+ $testContent = $testContent -replace '\$plannedRelease = ''[^'']+''', ('$plannedRelease = ''{0}''' -f $releaseTagName)
+
+ # Prepend old planned release to $expected array
+ $testContent = $testContent -replace '\$expected = @\(', ('$expected = @(''{0}'', ' -f $oldPlanned)
+
+ $testContent | Out-File $testPath -NoNewline -Encoding utf8
+ Write-Verbose "- Updated planned release from '$oldPlanned' to '$releaseTagName'"
+ }
+ }
+ }
}
return $ver
diff --git a/src/templates/finops-alerts/modules/ftkver.txt b/src/templates/finops-alerts/modules/ftkver.txt
index 7f27d6b1d..56250dad0 100644
--- a/src/templates/finops-alerts/modules/ftkver.txt
+++ b/src/templates/finops-alerts/modules/ftkver.txt
@@ -1 +1 @@
-13.0
\ No newline at end of file
+14.0-dev
\ No newline at end of file
diff --git a/src/templates/finops-hub/modules/fx/ftktag.txt b/src/templates/finops-hub/modules/fx/ftktag.txt
index 817ba4bff..69888f86e 100644
--- a/src/templates/finops-hub/modules/fx/ftktag.txt
+++ b/src/templates/finops-hub/modules/fx/ftktag.txt
@@ -1 +1 @@
-v13
\ No newline at end of file
+v14.0-dev
\ No newline at end of file
diff --git a/src/templates/finops-hub/modules/fx/ftkver.txt b/src/templates/finops-hub/modules/fx/ftkver.txt
index 7f27d6b1d..56250dad0 100644
--- a/src/templates/finops-hub/modules/fx/ftkver.txt
+++ b/src/templates/finops-hub/modules/fx/ftkver.txt
@@ -1 +1 @@
-13.0
\ No newline at end of file
+14.0-dev
\ No newline at end of file
diff --git a/src/templates/finops-workbooks/ftkver.txt b/src/templates/finops-workbooks/ftkver.txt
index 7f27d6b1d..56250dad0 100644
--- a/src/templates/finops-workbooks/ftkver.txt
+++ b/src/templates/finops-workbooks/ftkver.txt
@@ -1 +1 @@
-13.0
\ No newline at end of file
+14.0-dev
\ No newline at end of file
diff --git a/src/workbooks/.scaffold/ftkver.txt b/src/workbooks/.scaffold/ftkver.txt
index 7f27d6b1d..56250dad0 100644
--- a/src/workbooks/.scaffold/ftkver.txt
+++ b/src/workbooks/.scaffold/ftkver.txt
@@ -1 +1 @@
-13.0
\ No newline at end of file
+14.0-dev
\ No newline at end of file