Repository navigation
ADR-003: Split installed and portable distribution packages #247
SteveTheKiller
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Status: Accepted
Date: 2026-08-25
Decider: Steve the Killer
Context
KillerPDF 1.8 moves the Windows application to .NET 10. The current public executable contains the complete self-contained Windows Desktop runtime so it can install or run portably on a clean Windows computer without prerequisites.
The self-contained payload is approximately 161 MB before compression and produces an approximately 69 MB executable. A framework-dependent build of the same application contains 21 files, occupies approximately 23 MB before compression, and compresses to approximately 10 MB. Most of the difference is the private .NET and WPF runtime rather than KillerPDF application code.
One package cannot simultaneously provide the smallest routine download and complete offline portability. Unsupported WPF trimming reduced the compressed payload, but it introduces reflection and XAML compatibility risks that are not acceptable for the primary release package.
Decision
Publish two official Windows packages:
Both packages are built from the same source revision, carry the same KillerPDF version, install or launch the same application features, and pass the same application and engine test gates. The package type changes deployment only, not the document engine or user feature set.
The website and package managers should present the installer as the normal choice. Release pages should retain the portable package and label it clearly as the larger offline option.
Options considered
Continue shipping one self-contained executable
This preserves the simplest release matrix and guarantees zero prerequisites, but every user downloads the private runtime even when the machine already has it. The approximately 69 MB download is disproportionate to the application payload.
Replace the current package with a framework-dependent build
This produces the smallest download, but removes the no-install and offline guarantees that portable users, technicians, and restricted environments depend on.
Trim the self-contained WPF application
Experimental partial trimming produced a compressed payload of approximately 48 MB and passed a basic launch check. The .NET SDK does not support trimming WPF applications because XAML, reflection, resources, and dynamically discovered types can be removed incorrectly. The reduction does not justify an unbounded release risk.
Publish installed and portable packages
This gives most users an approximately 10 MB application download while retaining a complete offline artifact for users who need it. It adds packaging and release-matrix work but does not require unsupported runtime behavior. This is the selected option.
Consequences
Implementation requirements
All reactions