Skip to content

Cut the Windows install from 541 MB to 212 MB (stop shipping unused VLC builds and symbols) - #211

Merged
demortes merged 2 commits into
mainfrom
fix/installer-size
Oct 10, 2026
Merged

demortes merged 2 commits into
mainfrom
fix/installer-size

Conversation

@demortes

@demortes demortes commented Oct 10, 2026 •

Copy link
Copy Markdown
Contributor

The installed Windows app was 541 MB. About 320 MB of that was packaging waste, not the app.

What was in the install

Size
libvlc/win-x86 + libvlc/win-arm64 (VLC builds for CPUs the x64 installer never runs on) ~182 MB
libSkiaSharp.pdb + libHarfBuzzSharp.pdb (native debug symbols) ~100 MB
libvlc.dylib (a macOS library in a Windows install) ~40 MB
VLC x64 + .NET runtime + Avalonia + the app ~220 MB

Causes: VideoLAN.LibVLC.Windows copies the x64, x86 and arm64 engines unless told otherwise (its targets file exposes VlcWindowsX86Enabled / VlcWindowsArm64Enabled, which were never set), VideoLAN.LibVLC.Mac adds libvlc.dylib to every build, and SkiaSharp/HarfBuzzSharp ship their native .pdb files in the same runtimes/ folder as the DLLs. The csproj comment claimed these were "filtered by target RID at publish time"; they are not. The Linux publish carried the Windows and macOS VLC builds as well, which is why its tarball was 185 MB.

Change (EDNexus.App.csproj only)

  • Reference and enable only the LibVLC runtime the target needs, from RuntimeIdentifier (a plain dev build with no RID uses the machine it is built on): Windows package only for win-*, Mac package only for osx-*, and only the matching architecture of the Windows engine.
  • Drop the third-party native .pdb files (libSkiaSharp, libHarfBuzzSharp) from the publish list. EDNexus's own .pdb files stay.

Measured (local dotnet publish -c Release --self-contained)

Target Before After
win-x64 541 MB (installed) 212 MB
linux-x64 tarball 185 MB 108 MB uncompressed (system libvlc is used there, so none is bundled)

After: only libvlc/win-x64, no .dylib, no native symbol files. Full dotnet test green. The Windows installer and Flatpak bundle should shrink accordingly in the next release.

Safe because

  • The installer publishes win-x64 only, so the x86/arm64 VLC builds were never loaded. On Windows on ARM an x64 process runs under emulation and LibVLCSharp loads the x64 engine; Elite Dangerous itself is x64-only.
  • Linux uses the system libvlc, never the bundled Windows/macOS files.

Not verified

I could not run the installed app or play audio here (a locally built app auto-installs the latest release). Please smoke-test the radio from a build of this (start a station) before relying on it; the removed files are architectures and symbols the x64 build does not use, so this is expected to be a no-op for playback.

Possible next steps (not in this PR)

  • Prune VLC's x64 plugins down to what internet radio needs (video outputs/codecs, GUI, Lua, visualisation): another ~50 MB, but needs a real playback test per station format, so it is its own change.
  • PublishTrimmed/ReadyToRun for the .NET part: riskier with Avalonia, separate effort.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Chores
    • Platform builds now include LibVLC components for Windows and macOS, with Windows assets selected for the target architecture.
    • Published packages no longer include SkiaSharp and HarfBuzzSharp debug symbol files.

Only reference and enable the LibVLC runtime the target needs (the Windows package copied the x64, x86 and
arm64 engines regardless, and the Mac package added libvlc.dylib to every build), and drop SkiaSharp's and
HarfBuzzSharp's native .pdb files (100 MB) from the publish. win-x64: 541 -> 212 MB; linux-x64 no longer
bundles the Windows/macOS VLC builds (185 MB tarball -> 108 MB uncompressed).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Oct 10, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 54 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

Learn how review limits work.

Review configuration:

⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: ac730dc9-1779-4667-8940-8fe0596e839c

📥 Commits

Reviewing files that changed from the base of the PR and between 7e0b369 and f21909a.


📒 Files selected for processing (1)
  • src/EDNexus.App/EDNexus.App.csproj

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: c2f5fb9c-5970-4a1d-87c8-471440d000f3


📥 Commits

Reviewing files that changed from the base of the PR and between 2ce5caf and 7e0b369.



📒 Files selected for processing (1)
  • src/EDNexus.App/EDNexus.App.csproj


Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review.




📝 Walkthrough
📝 Walkthrough

Walkthrough

The application project now selects LibVLC native packages based on the target platform and Windows architecture. During publishing, it removes resolved PDB files named libSkiaSharp or libHarfBuzzSharp.

Changes

Application build and publish

Layer / File(s) Summary
Platform detection and native packages
src/EDNexus.App/EDNexus.App.csproj
Build properties detect the target platform from the runtime identifier or, without one, the build host. Windows architecture assets are selected by runtime identifier or process architecture. LibVLC package references are conditional on the detected platform.
Publish symbol filtering
src/EDNexus.App/EDNexus.App.csproj
A publish target removes resolved libSkiaSharp and libHarfBuzzSharp PDB files. Other symbols are not removed.

Priority: ⬇️ Low

Estimated code review effort: 2 (Simple) | ~10 minutes

Change: Bug fix



Merge Risk: ⚪ Minimal · up to 7e0b3

This change shrinks the install size by shipping only the LibVLC runtime for the target platform and dropping third-party native symbol files. No concrete merge-blocking risk was found. The author asks for a radio playback smoke test from a built artifact, which is a reasonable follow-up check.

Pre-merge checks | Passed 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check Passed The title clearly summarizes the main change: reducing the Windows installation size by removing unused LibVLC builds and native symbol files.
Docstring Coverage Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0…
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.



✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR



  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Elite Dangerous is an x64-only game and the installer publishes win-x64; on Windows on ARM an x64 process runs
emulated and loads the x64 engine. So only the x64 VLC engine is ever wanted: enable it for Windows targets and
explicitly disable x86 and arm64 (the package enables them by default). Verified: win-x64 publish still 212 MB
with only libvlc/win-x64.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@demortes
demortes merged commit 923df51 into main Oct 10, 2026
2 checks passed
@demortes
demortes deleted the fix/installer-size branch October 10, 2026 23:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant