Skip to content

Commit 5de0f6c

Browse files
committed
Release 0.3.1 installer flavors
1 parent 75d0dc6 commit 5de0f6c

31 files changed

Lines changed: 1414 additions & 304 deletions

File tree

.github/ISSUE_TEMPLATE/bug_report.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ body:
1414
id: version
1515
attributes:
1616
label: DSCC version
17-
description: Example: 0.3.0
17+
description: Example: 0.3.1
1818
validations:
1919
required: true
2020
- type: dropdown

.github/ISSUE_TEMPLATE/feedback.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ body:
1414
id: version
1515
attributes:
1616
label: DSCC version
17-
description: Example: 0.3.0
17+
description: Example: 0.3.1
1818
- type: dropdown
1919
id: area
2020
attributes:

.github/workflows/README.md

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,21 @@ Linux runners install `libudev-dev` so `hidapi` can compile.
2222

2323
It builds:
2424

25-
- Unsigned Windows MSI.
25+
- Unsigned Windows Standard MSI.
26+
- Unsigned Windows Bridge MSI.
27+
- Unsigned Windows Bridge framework-dependent MSI.
2628
- Windows raw binary zip.
2729
- Linux beta archive with bundled web UI.
2830
- SHA256 checksum files.
2931

32+
Windows installer intent is deliberately explicit:
33+
34+
| Artifact | Default audience |
35+
| --- | --- |
36+
| `standard` | Most users. Controller tuning, profiles, haptics, telemetry, diagnostics, and Steam Input support without the non-Steam bridge broker payload. |
37+
| `bridge` | Users testing DSCC Input Bridge for non-Steam games. Bundles the self-contained HIDMaestro broker. |
38+
| `bridge-framework-dependent` | Advanced bridge users with the matching x64 .NET runtime already installed. |
39+
3040
The release workflow publishes the GitHub Release and uploads artifacts. Windows
3141
artifacts are unsigned unless signing is added later.
3242

.github/workflows/release.yml

Lines changed: 97 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ permissions:
1111
env:
1212
CARGO_TERM_COLOR: always
1313
WINDOWS_TARGET: x86_64-pc-windows-gnu
14+
HIDMAESTRO_RELEASE_URL: https://github.com/hifihedgehog/HIDMaestro/releases/download/v1.3.13/HIDMaestro-v1.3.13.zip
15+
HIDMAESTRO_RELEASE_SHA256: 4948B815E65AFDD72BED8C1E29E8108ED8388B58F805FECA2C452E06CF499227
1416

1517
jobs:
1618
rust-checks:
@@ -83,6 +85,9 @@ jobs:
8385
- uses: actions/checkout@v6
8486
- uses: dtolnay/rust-toolchain@stable
8587
- uses: Swatinem/rust-cache@v2
88+
- uses: actions/setup-dotnet@v5
89+
with:
90+
dotnet-version: "10.0.x"
8691
- uses: actions/download-artifact@v6
8792
with:
8893
name: release-web-dist
@@ -99,31 +104,106 @@ jobs:
99104
run: |
100105
$tag = '${{ github.ref_name }}'
101106
if ($tag -notmatch '^v?([0-9]+\.[0-9]+)(?:\.([0-9]+))?(?:[-+].*)?$') {
102-
throw "Release tag '$tag' must look like v0.3, v0.3.0, or v0.3.0-beta.1."
107+
throw "Release tag '$tag' must look like v0.3, v0.3.1, or v0.3.1-beta.1."
103108
}
104109
$patch = if ([string]::IsNullOrWhiteSpace($Matches[2])) { '0' } else { $Matches[2] }
105110
"msi_version=$($Matches[1]).$patch" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append
106111
"artifact_suffix=$tag" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append
107112
- name: Build Windows GNU binaries
108113
shell: pwsh
109114
run: cargo build -p dscc-agent -p dscc-tray -p dscc-cli --release --target $env:WINDOWS_TARGET
110-
- name: Build unsigned MSI
115+
- name: Resolve HIDMaestro broker dependency
116+
id: hidmaestro
117+
shell: pwsh
118+
run: |
119+
$root = Join-Path $PWD 'target\hidmaestro'
120+
$zipPath = Join-Path $root 'HIDMaestro-v1.3.13.zip'
121+
$extractPath = Join-Path $root 'release'
122+
New-Item -ItemType Directory -Path $root -Force | Out-Null
123+
Invoke-WebRequest -Uri $env:HIDMAESTRO_RELEASE_URL -OutFile $zipPath
124+
$hash = (Get-FileHash -LiteralPath $zipPath -Algorithm SHA256).Hash.ToUpperInvariant()
125+
if ($hash -ne $env:HIDMAESTRO_RELEASE_SHA256.ToUpperInvariant()) {
126+
throw "HIDMaestro release hash mismatch. Expected $env:HIDMAESTRO_RELEASE_SHA256 but found $hash."
127+
}
128+
if (Test-Path -LiteralPath $extractPath) {
129+
Remove-Item -LiteralPath $extractPath -Recurse -Force
130+
}
131+
Expand-Archive -LiteralPath $zipPath -DestinationPath $extractPath -Force
132+
$coreDll = Join-Path $extractPath 'HIDMaestro.Core.dll'
133+
if (-not (Test-Path -LiteralPath $coreDll)) {
134+
throw "HIDMaestro.Core.dll was not found in the approved release archive."
135+
}
136+
"core_dll=$coreDll" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append
137+
- name: Build HIDMaestro broker package flavors
138+
shell: pwsh
139+
run: |
140+
$coreDll = '${{ steps.hidmaestro.outputs.core_dll }}'
141+
$publishRoot = Join-Path $PWD 'target\hidmaestro-broker'
142+
$selfContained = Join-Path $publishRoot 'self-contained'
143+
$frameworkDependent = Join-Path $publishRoot 'framework-dependent'
144+
foreach ($dir in @($selfContained, $frameworkDependent)) {
145+
if (Test-Path -LiteralPath $dir) {
146+
Remove-Item -LiteralPath $dir -Recurse -Force
147+
}
148+
}
149+
dotnet publish tools/dscc-hidmaestro-broker `
150+
-c Release `
151+
-r win-x64 `
152+
-o $selfContained `
153+
--self-contained true `
154+
-p:PublishSingleFile=true `
155+
-p:EnableCompressionInSingleFile=true `
156+
-p:DebugType=None `
157+
-p:DebugSymbols=false `
158+
-p:HidMaestroCoreDll="$coreDll"
159+
dotnet publish tools/dscc-hidmaestro-broker `
160+
-c Release `
161+
-r win-x64 `
162+
-o $frameworkDependent `
163+
--self-contained false `
164+
-p:PublishSingleFile=false `
165+
-p:DebugType=None `
166+
-p:DebugSymbols=false `
167+
-p:HidMaestroCoreDll="$coreDll"
168+
- name: Build unsigned MSIs
111169
shell: pwsh
112170
run: |
171+
$selfContainedBroker = Join-Path $PWD 'target\hidmaestro-broker\self-contained'
172+
$frameworkDependentBroker = Join-Path $PWD 'target\hidmaestro-broker\framework-dependent'
113173
powershell -NoProfile -ExecutionPolicy Bypass -File packaging\package-msi.ps1 `
114174
-Version '${{ steps.version.outputs.msi_version }}' `
115175
-TargetTriple $env:WINDOWS_TARGET `
116-
-SkipWebBuild
176+
-SkipWebBuild `
177+
-InstallerFlavor Standard
178+
powershell -NoProfile -ExecutionPolicy Bypass -File packaging\package-msi.ps1 `
179+
-Version '${{ steps.version.outputs.msi_version }}' `
180+
-TargetTriple $env:WINDOWS_TARGET `
181+
-SkipWebBuild `
182+
-InstallerFlavor Bridge `
183+
-BrokerPublishPath $selfContainedBroker
184+
powershell -NoProfile -ExecutionPolicy Bypass -File packaging\package-msi.ps1 `
185+
-Version '${{ steps.version.outputs.msi_version }}' `
186+
-TargetTriple $env:WINDOWS_TARGET `
187+
-SkipWebBuild `
188+
-InstallerFlavor BridgeFrameworkDependent `
189+
-BrokerPublishPath $frameworkDependentBroker
117190
- name: Stage Windows artifacts and checksums
118191
shell: pwsh
119192
run: |
120193
$suffix = '${{ steps.version.outputs.artifact_suffix }}'
121194
$artifactRoot = Join-Path $PWD 'target\release-artifacts\windows'
122195
New-Item -ItemType Directory -Path $artifactRoot -Force | Out-Null
123196
124-
$msiSource = Join-Path $PWD "target\installer\DualSenseCommandCenter-${{ steps.version.outputs.msi_version }}.msi"
125-
$msiDest = Join-Path $artifactRoot "DualSenseCommandCenter-$suffix-windows-x86_64-unsigned.msi"
126-
Copy-Item -LiteralPath $msiSource -Destination $msiDest -Force
197+
$msiArtifacts = @(
198+
@{ Flavor = 'standard'; Name = 'standard' },
199+
@{ Flavor = 'bridge'; Name = 'bridge' },
200+
@{ Flavor = 'bridge-framework-dependent'; Name = 'bridge-framework-dependent' }
201+
)
202+
foreach ($artifact in $msiArtifacts) {
203+
$msiSource = Join-Path $PWD "target\installer\DualSenseCommandCenter-${{ steps.version.outputs.msi_version }}-$($artifact.Flavor).msi"
204+
$msiDest = Join-Path $artifactRoot "DualSenseCommandCenter-$suffix-windows-x86_64-$($artifact.Name)-unsigned.msi"
205+
Copy-Item -LiteralPath $msiSource -Destination $msiDest -Force
206+
}
127207
128208
$binaryStage = Join-Path $PWD 'target\release-artifacts\windows-bin'
129209
if (Test-Path -LiteralPath $binaryStage) {
@@ -288,6 +368,17 @@ jobs:
288368
289369
Verify downloaded files against the published SHA256 checksum files.
290370
371+
Windows users should choose one installer:
372+
373+
- `standard`: recommended for most users. Includes controller tuning,
374+
profiles, haptics, diagnostics, telemetry, and Steam Input support.
375+
It does not bundle the optional non-Steam Input Bridge broker.
376+
- `bridge`: includes the self-contained HIDMaestro broker for DSCC
377+
Input Bridge testing with local non-Steam apps. Larger download.
378+
- `bridge-framework-dependent`: advanced bridge build for machines
379+
that already have the matching x64 .NET runtime installed. Smaller
380+
than `bridge`, less plug-and-play than `standard`.
381+
291382
The Linux archive includes the bundled production web UI, so
292383
`./dscc-cli serve --addr 127.0.0.1:43473` can serve the app without
293384
running Vite. Linux HID permissions and hardware validation remain

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,8 @@ pnpm-debug.log*
8080
/release/
8181
/releases/
8282
/artifacts/
83+
/tools/dscc-hidmaestro-broker/bin/
84+
/tools/dscc-hidmaestro-broker/obj/
8385
/*.zip
8486
*.msi
8587
*.exe

CHANGELOG.md

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,63 @@
1+
# DualSense Command Center 0.3.1
2+
3+
Latest release notes are listed first. For install steps, start with the
4+
[README](README.md).
5+
6+
Release date: 2026-05-26
7+
8+
0.3.1 splits Windows installers into clear, named choices so the normal user
9+
path stays slim while non-Steam bridge testing remains available.
10+
11+
## Windows Installers
12+
13+
Pick one installer. Do not install Bridge unless you need non-Steam DSCC Input
14+
Bridge testing.
15+
16+
| Installer | Intended user | Why it exists |
17+
| --- | --- | --- |
18+
| **DSCC Standard** | Most users | Smallest normal install. Includes profiles, haptics, telemetry, diagnostics, controller tuning, and Steam Input support. Does not bundle the HIDMaestro broker. |
19+
| **DSCC Bridge** | Non-Steam bridge testers | Bundles the self-contained HIDMaestro broker so DSCC Input Bridge can create a virtual Xbox 360 controller for local non-Steam app profiles. |
20+
| **DSCC Bridge Framework-Dependent** | Advanced bridge testers | Bundles the smaller framework-dependent broker and requires the matching x64 .NET runtime to already be installed. |
21+
22+
## Packaging
23+
24+
- Added explicit `Standard`, `Bridge`, and `BridgeFrameworkDependent` MSI
25+
flavors to `packaging/package-msi.ps1`.
26+
- Standard packaging no longer requires or stages any `hidmaestro` broker
27+
payload.
28+
- Bridge packaging still validates that the broker output shape matches the
29+
selected flavor, so a framework-dependent build cannot accidentally package a
30+
self-contained runtime shape.
31+
- The tag release workflow now builds and uploads all three Windows MSI
32+
variants with flavor names in the artifact filenames.
33+
- Release notes now tell users to choose Standard first and use Bridge only for
34+
compatibility beyond Steam.
35+
36+
## UI
37+
38+
- Moved the Controllers page tuning bar to the top of the page so Controllers,
39+
Adaptive Triggers & Haptics, and Button Mapping use the same command layout.
40+
- Kept Profiles focused on game/profile scope selection, with controller
41+
targeting in the expanded tuning ribbon.
42+
43+
## Validation Gate
44+
45+
This release was cut after a clean run of:
46+
47+
```powershell
48+
npm.cmd --prefix web run typecheck
49+
npm.cmd --prefix web run build
50+
npm.cmd --prefix web run test:button-map
51+
npm.cmd --prefix web run test:release-size
52+
cargo +stable-x86_64-pc-windows-gnu build -p dscc-agent -p dscc-tray -p dscc-cli --release --target x86_64-pc-windows-gnu
53+
```
54+
55+
## Install
56+
57+
Download the `standard` Windows x86_64 MSI unless you specifically need
58+
non-Steam DSCC Input Bridge testing. Verify downloads with the included SHA256
59+
checksum file.
60+
161
# DualSense Command Center 0.3.0
262

363
Latest release notes are listed first. For install steps, start with the

Cargo.lock

Lines changed: 8 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

README.md

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,32 @@ lightbar controls, and racing telemetry without Python setup or scripts.
1010

1111
Get the latest Windows installer from [GitHub Releases](https://github.com/shiftedx/dualsense-command/releases/latest).
1212

13-
- Current release: `0.3.0`
14-
- Recommended download: Windows x86_64 MSI
13+
- Current release: `0.3.1`
14+
- Recommended download: **DSCC Standard** Windows x86_64 MSI
1515
- Linux builds: beta archive with bundled web UI
1616

1717
The MSI is unsigned, so Windows SmartScreen may warn you. DSCC stores profiles
1818
and settings in your user folder and preserves them during upgrades. Continue
1919
past SmartScreen only if you downloaded the MSI from the official release page
2020
and checked it against the published checksum when needed.
2121

22+
## Which Windows Installer Should I Use?
23+
24+
Pick one. Most people should not install the larger bridge build.
25+
26+
| Installer | Use this when | Includes non-Steam DSCC Input Bridge broker? | Notes |
27+
| --- | --- | --- | --- |
28+
| **DSCC Standard** | You want controller tuning, profiles, haptics, telemetry, diagnostics, Steam Input support, and the smallest normal install. | No | **Recommended for most users.** Non-Steam bridge screens stay available but show the provider as not installed. |
29+
| **DSCC Bridge** | You want to test DSCC Input Bridge with local non-Steam games and you do not want to install a separate .NET runtime. | Yes, self-contained | Larger installer. Best plug-and-play bridge option. |
30+
| **DSCC Bridge Framework-Dependent** | You want bridge support and already have the matching x64 .NET runtime installed. | Yes, framework-dependent | Smaller than Bridge, but it has a prerequisite. Advanced users only. |
31+
32+
Steam games and normal controller tuning do not need the Bridge installers.
33+
Use Bridge only to expand compatibility beyond Steam.
34+
2235
## Quick Start
2336

24-
1. Download and run the Windows MSI.
37+
1. Download and run the **DSCC Standard** Windows MSI unless you specifically
38+
need non-Steam DSCC Input Bridge testing.
2539
2. Launch **DualSense Command Center** from the Start menu.
2640
3. Connect a DualSense or DualSense Edge controller over USB or Bluetooth.
2741
4. Open DSCC from the tray icon, or visit `http://127.0.0.1:43473/`.

crates/dscc-adapters/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "dscc-adapters"
3-
version = "0.3.0"
3+
version = "0.3.1"
44
edition.workspace = true
55
license.workspace = true
66
rust-version.workspace = true

crates/dscc-agent/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "dscc-agent"
3-
version = "0.3.0"
3+
version = "0.3.1"
44
edition.workspace = true
55
license.workspace = true
66
rust-version.workspace = true

0 commit comments

Comments
 (0)