Desktop packages
Desktop packaging takes the shared Fission app and gives it the operating-system metadata users expect: name, icon, bundle identity, installer shape, signing references, and a predictable artifact manifest.
1. Check the desktop target
Start with readiness. It catches missing target setup and packaging tools before the release build starts.
fission readiness package --project-dir . --target macos --format app
fission readiness package --project-dir . --target windows --format msix
fission readiness package --project-dir . --target linux --format run
Readiness should confirm the target exists in fission.toml, the app has usable icons, the package identity is present, and the platform tools needed for the selected format are available.
| | |
|---|
| | Local app-bundle validation and direct distribution. |
| | Installer-based distribution and managed deployment. |
| | Signed executable, or a project-defined offline installer flow. |
| | Enterprise or managed Windows installer flow. |
| | Microsoft Store and modern Windows package identity workflows. |
| | Self-contained Linux installer artifact. |
Use the smallest format that proves the next step. For example, use .app while validating icon, dock, and permission behavior on macOS; move to .pkg when installer behavior matters.
3. Build the package
fission package --project-dir . --target macos --format app --release
The package command writes the platform artifact and an artifact-manifest.json under target/fission/release/<target>/<format>/. Use that manifest for release commands instead of passing a raw file path.
For macOS apps with native extensions, declare the Xcode project and products
under [[native.modules]] in fission.toml. Fission builds the native schemes,
embeds app extensions and system extensions in their platform-defined bundle
locations, signs those nested products, and signs the containing app last. The
same declaration is used by fission build, fission test, fission run, and
fission package; app-specific build scripts should not duplicate that work.
Linux Cargo-native products use [native.modules.linux]. Fission builds and
tests the declared package, stages runtime files and privileged helpers into
development and package roots, and embeds a digest-bearing native-products
manifest in Linux .run payloads. privileged-helper is packaging metadata;
Fission never silently adds setuid bits, capabilities, or an elevation policy.
The application installer remains responsible for an explicit, auditable
privilege transaction.
Windows MSBuild/WDK products use [native.modules.windows]. Runtime products
are staged beside the app for local runs and are exposed to package scripts in a
structured native-products manifest. Products marked driver-package are
installer inputs and are deliberately excluded from MSIX manifests. Configure
package.windows.exe_installer_script when windows/exe must produce a setup
program rather than stage the application executable itself. Set
nuget_packages_config and nuget_packages_directory when the native project
pins the supported WDK NuGet packages; Fission restores them non-interactively
before every MSBuild invocation.
4. Verify the result
Open or install the produced package on the target operating system. Check the app name, icon, dock or taskbar behavior, permission prompts, window title, and any capability the app needs. Packaging is not complete until the installed app behaves like an app, not like an unnamed development binary.
Next steps
Read Release and distribute when the desktop artifact is ready to upload. For exact manifest fields, use the fission.toml reference.