Thanks for your interest in improving Windows Lossless Switcher. Bug reports, device reports, and pull requests are all welcome.
- Search existing issues first.
- Open a new issue using the bug report template.
- Include your Windows version, audio device (DAC/AVR/interface model), Apple Music for Windows version, and what you were playing when the problem occurred.
- Attach a diagnostics export — available from the app window — after checking it for anything you consider personal. It contains the per-operation log the app writes locally and is usually the fastest path to a diagnosis.
For suspected security problems, do not open a public issue — see SECURITY.md.
Open an issue with the feature request template. Keep in mind the app is deliberately tray-first and minimal: features that add background reliability or device compatibility tend to fit better than UI surface area.
If the app works with your setup, add a row to the "Devices tested" table in README.md and open a pull request. Include your CPU architecture, Windows version, and audio device model.
- Install the .NET 8 SDK on Windows.
- Clone the repository.
- Build and test from the repository root:
dotnet build .\WindowsLosslessSwitcher.sln
dotnet test .\WindowsLosslessSwitcher.slnRun the app from Visual Studio or with:
dotnet run --project .\src\WindowsLosslessSwitcher.csprojDEVELOPMENT.md covers the architecture, the switching flow, the resolver pipeline, and how to implement a new format resolver.
- Keep changes focused and small when possible.
- Preserve the tray-first UX and the existing settings model unless the change intentionally expands it.
- Add or update tests for behavior changes; the suite runs without audio hardware.
- Prefer targeted comments that explain constraints over inline commentary that restates the code.
- Do not check build output (
bin/,obj/,artifacts/,.tmp/,.tools/) into the repository.
- Explain the user-visible behavior change.
- Mention any Apple Music, media session (GSMTC), or Core Audio assumptions your change relies on.
- Include test coverage notes and any manual verification steps you ran.
- The updater and the GitHub Actions workflows target
jordanmgibson/WindowsLosslessSwitcher. KeepWlsGitHubOwnerandWlsGitHubRepositoryinsrc/WindowsLosslessSwitcher.csprojaligned withsrc/Services/ReleaseRepositoryOptions.cs. - For local testing against a fork, override the update target with the
WLS_GITHUB_OWNERandWLS_GITHUB_REPOSITORYenvironment variables. - Releases are built by the tag-triggered workflow (
v*tags) as self-contained builds forwin-x64andwin-arm64, packaged into per-architecture Velopack channels. Keep channel names, asset names, and the updater's asset selection in sync when changing packaging. - Do not hand-edit or delete runtime files from publish output; size reductions should come from publish-mode changes.
- Trimming stays disabled for this WPF/NAudio app unless a full validation pass proves it safe.