Skip to content

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:

  1. What do stage, package, bundle, sign, notarize, staple, and publish mean, and which operation changes bytes? → Concepts
  2. How do archives, native packages, self-mounting images, sandboxed bundles, and Apple containers differ? → Artifact formats
  3. What is the complete release dataflow from source tag to promoted package indexes? → Release pipeline
  4. What does Sparkles actually build and publish today? → Sparkles baseline
  5. Which tool owns which part of the process, and what ten dimensions make unlike tools comparable? → Comparison
  6. Which platform rules cannot be abstracted away safely? → Platform gotchas
  7. How do Linux native repositories differ from AppImage, Flatpak, and Snap? → Linux native packages, repositories, AppImage, Flatpak, Snap
  8. How do Windows portable archives, MSI, MSIX, installer EXEs, and community catalogs differ? → Windows portable, WiX/MSI, MSIX, Inno Setup/NSIS, winget, Chocolatey, Scoop
  9. How do .app, DMG/PKG/XIP, Developer ID signing, notarization, stapling, and Homebrew compose? → macOS bundles, containers, signing/notarization, Homebrew
  10. 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

SubjectCategory / primary rolePrincipal outputs or channelLink
Linux native packagesformat family.deb, .rpm, Arch packagedeep-dive
Linux repositoriesdistribution channelAPT, RPM-family, pacman indexesdeep-dive
AppImageportable artifactself-mounting .AppImagedeep-dive
Flatpaksandbox + repositoryOSTree objects / .flatpakdeep-dive
Snapsandbox + store.snap / Snap Storedeep-dive
linuxdeploy + appimagetoolLinux bundler / image builderAppDir.AppImagedeep-dive
Windows portableportable artifact.zip/directorydeep-dive
WiX / MSInative installer toolchain.msi, bundle .exedeep-dive
MSIXsigned package format.msix, .msixbundledeep-dive
Inno Setup / NSISinstaller compilerssetup .exedeep-dive
wingetcatalog + clientmanifests pointing to installersdeep-dive
Chocolateypackage repository + client.nupkg + PowerShell installdeep-dive
Scoopmanifest catalog + clientJSON manifests → portable installsdeep-dive
macOS app bundlesnative bundle model.app directorydeep-dive
macOS DMG / PKG / XIPtransport / installer containers.dmg, .pkg, .xipdeep-dive
macOS signing / notarizationtrust pipelinesigned ticketed/stapled artifactsdeep-dive
Homebrewformula/cask channelbottles, formulae, casksdeep-dive
cargo-distrelease orchestratorarchives, installers, checksums, CIdeep-dive
cargo-packagerdesktop packagerplatform-native packagesdeep-dive
GoReleaserrelease orchestratorarchives, Linux packages, publishersdeep-dive
JReleaserrelease orchestratorassemblers, packagers, publishersdeep-dive
dotnet-releaserecosystem orchestratorNuGet, archives, installers/releasesdeep-dive
Velopackinstaller + updater frameworkinstallers, release feeds, delta updatesdeep-dive
Conveyorfetching installer / repository systemsigned native installers/reposdeep-dive
BriefcasePython app bundlernative app projects/packagesdeep-dive
cx_FreezePython freezer + packagerfrozen app, MSI/DMG/AppImage etc.deep-dive
electron-builderElectron packager/publisherbroad desktop artifact matrixdeep-dive
Electron ForgeElectron lifecycle facadepackages, makers, publishersdeep-dive
CPackbuild-system packagergenerator-selected native packagesdeep-dive
fpm / nfpmnative-package converters/builders.deb, .rpm, Arch and peersdeep-dive
jpackageJDK application packagerapp images + native installersdeep-dive
swift-bundlerSwift application bundler.app and platform bundlesdeep-dive

Taxonomies

By tool role

RoleSubjects
Format / platform contractLinux native packages, Windows portable, MSIX, macOS bundles, macOS containers, macOS trust
Package / bundle constructorlinuxdeploy/appimagetool, WiX, Inno/NSIS, cargo-packager, Briefcase, cx_Freeze, CPack, fpm/nfpm, jpackage, swift-bundler
Release orchestratorcargo-dist, GoReleaser, JReleaser, dotnet-releaser
Application packager/publisherelectron-builder, Electron Forge
Installer + updater systemVelopack, Conveyor
Distribution channel / clientLinux repositories, Flatpak, Snap, winget, Chocolatey, Scoop, Homebrew

By artifact / install model

ModelMeaningSubjects
Portableunpack/run; no privileged registration requiredWindows portable, archive outputs from cargo-dist / GoReleaser
Bundlingproducer ships runtime/dependencies beside the appAppImage, macOS bundles, Briefcase, cx_Freeze, jpackage, electron-builder
Native packageOS installer database owns files, identity, uninstall, upgradeLinux native, WiX/MSI, MSIX, macOS PKG, CPack, fpm/nfpm
Fetching installersmall/bootstrap artifact resolves payload during installConveyor; some maker-specific flows in Electron Forge
Sandboxed/repository-nativepackage and channel jointly define permissions and updatesFlatpak, Snap, MSIX

By host requirement

RequirementTypical casesRelevant deep-dives
Target OS required for final packaging/signingMSI/MSIX, Apple signing/notarization, many desktop makersWiX, MSIX, macOS signing, cargo-packager, electron-builder, jpackage
Cross-host construction possible but final trust step remains native/service-boundarchive, some Linux packages, some app imagescargo-dist, GoReleaser, CPack, fpm/nfpm, AppImage
Hosted repository builds are part of the trust modelFlatpak remotes, Snap Store, Homebrew bottles/casks, community catalogsFlatpak, Snap, Homebrew, winget, Chocolatey, Scoop

By distribution channel

ChannelSubjects
Immutable release-host assetcargo-dist, GoReleaser, JReleaser, dotnet-releaser, electron-builder
Vendor-maintained package repository/feedLinux repositories, Velopack, Conveyor
Platform/operator storeFlatpak, Snap, MSIX
Community index referencing upstream assetswinget, Scoop, Homebrew casks/formulae, Chocolatey
Direct download / portableAppImage, Windows portable, macOS DMG

Milestones

DatePackaging milestone
1988Apple System 6 introduces application bundles as directories; modern bundle metadata later consolidates around Info.plist (macOS bundles).
1993–1996Debian's dpkg/.deb and Red Hat's RPM establish database-managed native packages (Linux native).
1999Windows Installer 1.0 establishes MSI product/component identity and transactional installation (WiX/MSI).
2002Inno Setup and NSIS popularize script-compiled setup executables (Inno/NSIS).
2009Homebrew starts the formula/cellar model on macOS (Homebrew).
2013–2016AppImage's portable lineage, Docker-era bundling, Flatpak, and Snap make self-contained/sandboxed Linux delivery mainstream (AppImage, Flatpak, Snap).
2015–2018Windows 10's AppX/MSIX line and Apple's Developer ID notarization pipeline make cryptographic identity a normal desktop-release concern (MSIX, macOS signing).
2019–2021jpackage, winget, and modern release automation normalize matrix-produced native installers plus catalog publication (jpackage, winget, GoReleaser).
2022–2026Release 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

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.