diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index d1ec89a..392fd5b 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -52,14 +52,14 @@ jobs:
with:
dotnet-version: 10.x
- # Pin vpk to the prerelease that has --msi / --instLocation flags.
- # Stable vpk 0.0.1298 (the default with no --version) does NOT have
- # those flags — they were added in the 0.0.1500+ prerelease line.
- # Match the NuGet `Velopack` package version pinned in
- # ControlMenu.csproj + ControlMenuLauncher.csproj to keep client/server
- # serialization in sync. Mirrors ws-scrcpy-web's release.yml pin.
+ # Pin vpk to match the NuGet `Velopack` package version in
+ # ControlMenu.csproj + ControlMenuLauncher.csproj — the CLI and the
+ # runtime library share a release/serialization line and must stay in
+ # lockstep. 1.1.1 is the first stable line we ship on; `--msi` /
+ # `--instLocation` are standard post-1.0 (the earlier 0.0.1589 prerelease
+ # pin predated their stable availability). Mirrors ws-scrcpy-web's pin.
- name: Install vpk CLI
- run: dotnet tool install -g vpk --version 0.0.1589-ga2c5a97
+ run: dotnet tool install -g vpk --version 1.1.1
# No .sln in this repo — restore + build per project directly.
# Mirrors the local-pack.ps1 approach (3x dotnet publish below).
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1e0fc12..3f0d15b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed
- **Module `SortOrder` values renumbered to eliminate a collision.** `JellyfinModule` and `AndroidPowerToolsModule` both declared `SortOrder = 2`, so the sidebar order held only by the `DisplayName` alphabetical tiebreak. Renumbered Jellyfin `2 → 3`, Utilities `3 → 4`, and Cameras `4 → 5` so every module has a distinct ordering key (Android Devices `1` and Android Power Tools `2` unchanged). The rendered sidebar / module-tile order is unchanged — this only removes the fragile tie. `CamerasModuleTests.SortOrder_Is4` renamed to `SortOrder_Is5`.
+- **Velopack `0.0.1589-ga2c5a97` (prerelease) → `1.1.1` (stable).** Bumped in both production csprojs (`ControlMenu`, `ControlMenuLauncher`) and the `vpk` CLI pin (`release.yml`, `scripts/local-pack.ps1`) — the CLI and runtime library share a release line and must stay in lockstep. The earlier prerelease pin predated stable `--msi` / `--instLocation`, now standard post-1.0. The consumed .NET surface (`UpdateManager` / `GithubSource` / `CheckForUpdatesAsync` / `DownloadUpdatesAsync` / `VelopackApp.Build().SetAutoApplyOnStartup(false).Run()`) is source-compatible — verified by a clean Release build, the full 445-test suite, and a local `vpk 1.1.1` `--msi --instLocation PerMachine` pack producing a working `ControlMenu-stable.msi`. Supersedes Dependabot #34.
### Removed
diff --git a/scripts/local-pack.ps1 b/scripts/local-pack.ps1
index d9fe550..2bc6cfd 100644
--- a/scripts/local-pack.ps1
+++ b/scripts/local-pack.ps1
@@ -59,10 +59,10 @@ function Resolve-VendoredDotnet {
# Resolve vpk (global tool, mirrors ws-scrcpy-web release.yml)
# ---------------------------------------------------------------------------
function Resolve-Vpk {
- $vpkVersion = '0.0.1589-ga2c5a97'
+ $vpkVersion = '1.1.1'
$listed = dotnet tool list -g | Select-String -Pattern "^vpk\s+$([regex]::Escape($vpkVersion))\s"
if (-not $listed) {
- Write-Host "Installing vpk $vpkVersion globally (matches ws-scrcpy-web)..."
+ Write-Host "Installing vpk $vpkVersion globally (matches the Velopack NuGet pin)..."
# Uninstall any older vpk first to avoid version conflict
dotnet tool uninstall -g vpk 2>$null | Out-Null
dotnet tool install -g vpk --version $vpkVersion
diff --git a/src/ControlMenu/ControlMenu.csproj b/src/ControlMenu/ControlMenu.csproj
index 2b27804..393c243 100644
--- a/src/ControlMenu/ControlMenu.csproj
+++ b/src/ControlMenu/ControlMenu.csproj
@@ -16,7 +16,7 @@
-
+
diff --git a/src/ControlMenu/Services/Update/VelopackUpdateService.cs b/src/ControlMenu/Services/Update/VelopackUpdateService.cs
index bc15582..7803c7e 100644
--- a/src/ControlMenu/Services/Update/VelopackUpdateService.cs
+++ b/src/ControlMenu/Services/Update/VelopackUpdateService.cs
@@ -8,7 +8,7 @@ namespace ControlMenu.Services.Update;
///
/// Provides update-check, download, and apply-signaling for Control Menu via Velopack.
///
-/// API surface verified against Velopack 0.0.1298 (Context7, 2026-05-10):
+/// API surface verified against Velopack 1.1.1 (clean build + 445 tests, 2026-06-03):
/// - UpdateManager.IsInstalled: bool property (not a method)
/// - UpdateManager.CurrentVersion: SemanticVersion? property (null when not installed)
/// - UpdateManager.CheckForUpdatesAsync(): Task<UpdateInfo?> — null means no update
diff --git a/src/ControlMenuLauncher/ControlMenuLauncher.csproj b/src/ControlMenuLauncher/ControlMenuLauncher.csproj
index af461b2..a3a543b 100644
--- a/src/ControlMenuLauncher/ControlMenuLauncher.csproj
+++ b/src/ControlMenuLauncher/ControlMenuLauncher.csproj
@@ -13,7 +13,7 @@
-
+