Application Packaging and Distribution
A source-grounded survey of how a tagged native application becomes installable, identifiable, trusted, published, upgraded, and eventually promoted across Linux, Windows, and macOS. The catalog separates artifact formats, distribution channels, platform-native tools, and cross-platform release orchestrators; that distinction is essential because no single tool owns the whole path from compiler output to a user's machine.
Last reviewed: July 12, 2026
This survey answers ten questions:
- What do stage, package, bundle, sign, notarize, staple, and publish mean, and which operation changes bytes? → Concepts
- How do archives, native packages, self-mounting images, sandboxed bundles, and Apple containers differ? → Artifact formats
- What is the complete release dataflow from source tag to promoted package indexes? → Release pipeline
- What does Sparkles actually build and publish today? → Sparkles baseline
- Which tool owns which part of the process, and what ten dimensions make unlike tools comparable? → Comparison
- Which platform rules cannot be abstracted away safely? → Platform gotchas
- How do Linux native repositories differ from AppImage, Flatpak, and Snap? → Linux native packages, repositories, AppImage, Flatpak, Snap
- How do Windows portable archives, MSI, MSIX, installer EXEs, and community catalogs differ? → Windows portable, WiX/MSI, MSIX, Inno Setup/NSIS, winget, Chocolatey, Scoop
- How do
.app, DMG/PKG/XIP, Developer ID signing, notarization, stapling, and Homebrew compose? → macOS bundles, containers, signing/notarization, Homebrew - What staged, evidence-backed path fits Sparkles without pretending one universal packager exists? → Recommendations
NOTE
This directory is the shared synthesis layer. The linked sibling deep-dives are the evidence owners for tool-specific behavior. A recommendation is labelled as such; otherwise prose describes current formats, upstream contracts, or the audited Sparkles baseline.
The ten-dimension analysis spine
Every subject deep-dive follows the same spine: (1) input and staging, (2) outputs and target matrix, (3) metadata and dependencies, (4) installation, upgrade, and uninstall, (5) signing and platform trust, (6) publication and discovery, (7) updates and release channels, (8) automation and CI, (9) supply-chain evidence and reproducibility, and (10) extensibility and UX. Role, host requirements, identity, and rollback remain mandatory findings inside those sections and are re-cut as compact columns in comparison; they are not a second subject-page spine.
Master catalog
| Subject | Category / primary role | Principal outputs or channel | Link |
|---|---|---|---|
| Linux native packages | format family | .deb, .rpm, Arch package | deep-dive |
| Linux repositories | distribution channel | APT, RPM-family, pacman indexes | deep-dive |
| AppImage | portable artifact | self-mounting .AppImage | deep-dive |
| Flatpak | sandbox + repository | OSTree objects / .flatpak | deep-dive |
| Snap | sandbox + store | .snap / Snap Store | deep-dive |
| linuxdeploy + appimagetool | Linux bundler / image builder | AppDir → .AppImage | deep-dive |
| Windows portable | portable artifact | .zip/directory | deep-dive |
| WiX / MSI | native installer toolchain | .msi, bundle .exe | deep-dive |
| MSIX | signed package format | .msix, .msixbundle | deep-dive |
| Inno Setup / NSIS | installer compilers | setup .exe | deep-dive |
| winget | catalog + client | manifests pointing to installers | deep-dive |
| Chocolatey | package repository + client | .nupkg + PowerShell install | deep-dive |
| Scoop | manifest catalog + client | JSON manifests → portable installs | deep-dive |
| macOS app bundles | native bundle model | .app directory | deep-dive |
| macOS DMG / PKG / XIP | transport / installer containers | .dmg, .pkg, .xip | deep-dive |
| macOS signing / notarization | trust pipeline | signed ticketed/stapled artifacts | deep-dive |
| Homebrew | formula/cask channel | bottles, formulae, casks | deep-dive |
| cargo-dist | release orchestrator | archives, installers, checksums, CI | deep-dive |
| cargo-packager | desktop packager | platform-native packages | deep-dive |
| GoReleaser | release orchestrator | archives, Linux packages, publishers | deep-dive |
| JReleaser | release orchestrator | assemblers, packagers, publishers | deep-dive |
| dotnet-releaser | ecosystem orchestrator | NuGet, archives, installers/releases | deep-dive |
| Velopack | installer + updater framework | installers, release feeds, delta updates | deep-dive |
| Conveyor | fetching installer / repository system | signed native installers/repos | deep-dive |
| Briefcase | Python app bundler | native app projects/packages | deep-dive |
| cx_Freeze | Python freezer + packager | frozen app, MSI/DMG/AppImage etc. | deep-dive |
| electron-builder | Electron packager/publisher | broad desktop artifact matrix | deep-dive |
| Electron Forge | Electron lifecycle facade | packages, makers, publishers | deep-dive |
| CPack | build-system packager | generator-selected native packages | deep-dive |
| fpm / nfpm | native-package converters/builders | .deb, .rpm, Arch and peers | deep-dive |
| jpackage | JDK application packager | app images + native installers | deep-dive |
| swift-bundler | Swift application bundler | .app and platform bundles | deep-dive |
Taxonomies
By tool role
| Role | Subjects |
|---|---|
| Format / platform contract | Linux native packages, Windows portable, MSIX, macOS bundles, macOS containers, macOS trust |
| Package / bundle constructor | linuxdeploy/appimagetool, WiX, Inno/NSIS, cargo-packager, Briefcase, cx_Freeze, CPack, fpm/nfpm, jpackage, swift-bundler |
| Release orchestrator | cargo-dist, GoReleaser, JReleaser, dotnet-releaser |
| Application packager/publisher | electron-builder, Electron Forge |
| Installer + updater system | Velopack, Conveyor |
| Distribution channel / client | Linux repositories, Flatpak, Snap, winget, Chocolatey, Scoop, Homebrew |
By artifact / install model
| Model | Meaning | Subjects |
|---|---|---|
| Portable | unpack/run; no privileged registration required | Windows portable, archive outputs from cargo-dist / GoReleaser |
| Bundling | producer ships runtime/dependencies beside the app | AppImage, macOS bundles, Briefcase, cx_Freeze, jpackage, electron-builder |
| Native package | OS installer database owns files, identity, uninstall, upgrade | Linux native, WiX/MSI, MSIX, macOS PKG, CPack, fpm/nfpm |
| Fetching installer | small/bootstrap artifact resolves payload during install | Conveyor; some maker-specific flows in Electron Forge |
| Sandboxed/repository-native | package and channel jointly define permissions and updates | Flatpak, Snap, MSIX |
By host requirement
| Requirement | Typical cases | Relevant deep-dives |
|---|---|---|
| Target OS required for final packaging/signing | MSI/MSIX, Apple signing/notarization, many desktop makers | WiX, MSIX, macOS signing, cargo-packager, electron-builder, jpackage |
| Cross-host construction possible but final trust step remains native/service-bound | archive, some Linux packages, some app images | cargo-dist, GoReleaser, CPack, fpm/nfpm, AppImage |
| Hosted repository builds are part of the trust model | Flatpak remotes, Snap Store, Homebrew bottles/casks, community catalogs | Flatpak, Snap, Homebrew, winget, Chocolatey, Scoop |
By distribution channel
| Channel | Subjects |
|---|---|
| Immutable release-host asset | cargo-dist, GoReleaser, JReleaser, dotnet-releaser, electron-builder |
| Vendor-maintained package repository/feed | Linux repositories, Velopack, Conveyor |
| Platform/operator store | Flatpak, Snap, MSIX |
| Community index referencing upstream assets | winget, Scoop, Homebrew casks/formulae, Chocolatey |
| Direct download / portable | AppImage, Windows portable, macOS DMG |
Milestones
| Date | Packaging milestone |
|---|---|
| 1988 | Apple System 6 introduces application bundles as directories; modern bundle metadata later consolidates around Info.plist (macOS bundles). |
| 1993–1996 | Debian's dpkg/.deb and Red Hat's RPM establish database-managed native packages (Linux native). |
| 1999 | Windows Installer 1.0 establishes MSI product/component identity and transactional installation (WiX/MSI). |
| 2002 | Inno Setup and NSIS popularize script-compiled setup executables (Inno/NSIS). |
| 2009 | Homebrew starts the formula/cellar model on macOS (Homebrew). |
| 2013–2016 | AppImage's portable lineage, Docker-era bundling, Flatpak, and Snap make self-contained/sandboxed Linux delivery mainstream (AppImage, Flatpak, Snap). |
| 2015–2018 | Windows 10's AppX/MSIX line and Apple's Developer ID notarization pipeline make cryptographic identity a normal desktop-release concern (MSIX, macOS signing). |
| 2019–2021 | jpackage, winget, and modern release automation normalize matrix-produced native installers plus catalog publication (jpackage, winget, GoReleaser). |
| 2022–2026 | Release orchestrators increasingly emit checksums, SBOMs, attestations, updater feeds, and CI definitions rather than only archives (cargo-dist, JReleaser, Velopack, Conveyor). |
Dates identify broad public milestones; exact version-by-version histories belong to the linked deep-dives.
Quick navigation
- Designing Sparkles delivery: Sparkles baseline → concepts → release pipeline → comparison → platform gotchas → recommendations.
- Choosing user-facing artifacts: artifact formats → the relevant Linux, Windows, or macOS format deep-dives → comparison.
- Choosing an orchestrator: comparison → cargo-dist, GoReleaser, JReleaser, CPack, and the language/runtime-specific candidates.
- Trust and update design: concepts § identity → macOS signing / MSIX / Linux repositories → release pipeline.
Sources
Format definitions are grounded in the platform specifications linked from concepts and artifact formats. Tool behavior belongs to each sibling deep-dive and is read from locally cloned repositories pinned there by commit. The synthesis also uses the in-repository evidence audited in Sparkles baseline. No artifact matrix in this shared layer is presented as locally tested behavior.