Skip to content

Releases

v0.4.1

Choose a tag to compare

@github-actions github-actions released this 01 Oct 01:47
  • Make LinuxAppBundleOptions.MinimumDisplayLength non-nullable and omit the AppStream display-length recommendation
    when its value is zero or negative
  • Stop generated install and uninstall script runs from printing help headers unless help is explicitly requested
  • Add PathUtilities.RedactUserPath to redact the user's home directory from a path string
  • Add Concurrency.cs helper class
  • Omit SingleMainWindow from .desktop file metadata to prevent AppImageHub CI error: file contains key
    "SingleMainWindow" in group "Desktop Entry", but keys extending the format should start with "X-"
  • Fix RootCollectionFile<T,TO>.Items never being persisted (read-only property ignored by the shared serializer
    options), which also lost CrashReportsFile reports on restart; files now store an Items property and legacy
    array files still load
  • Fix ApplicationKit.ApplicationArgs default value skipping --crash-report <id> parsing at startup
  • Fix UnhandledExceptions relaunching with the crash-report flag when the report was not persisted, and before panic
    saves completed; ignored terminating exceptions now still run panic saves and BeforeForcedExit
  • Fix one ignored inner exception causing a whole AggregateException to be ignored
  • Fix SupportBundleExporter including CrashReports.json through the logs folder when crash reports are excluded
  • Fix RootSettingsFile<T> races: changes made during serialization no longer get lost, stale debounce callbacks are
    discarded, DeleteFile cancels pending saves, Dispose waits for an active save, and a corrupt or
    unsupported-version file whose backup fails is no longer overwritten
  • Fix a malformed --crash-report consuming the following argument on relaunch, and
    ToTimeString(TimeSpan.MinValue) overflowing
  • Breaking: EscapeWindowsBatchValue now throws ArgumentException for ", !, CR/LF and NUL, which cannot be
    represented safely in set "NAME=value"; the previous ^" escaping allowed command injection
  • Breaking: On Windows, the argument-list ProcessHelper.CreateShellScriptProcessStartInfo overload rejects
    arguments containing ", %, CR/LF or NUL, which cmd.exe would re-parse; raw-string arguments are passed verbatim
  • Fix packaging detection (pkgutil, hdiutil, Linux package ownership) possibly deadlocking on undrained
    stderr; queries are now bounded
  • Fix AppImage, Flatpak and Snap detection being overridden by .NET single-file detection
  • Fix HostSystem.PreventSleep on Windows being thread-affine; a dedicated thread now owns the execution state and
    overlapping tokens combine correctly
  • Fix the Linux OpenInTerminal fallback, Windows disk status on mounted folders (queries the requested path), macOS
    LaunchNewInstance quoting of the bundle path, and PathUtilities.IsSamePath with trailing separators
  • Add an opt-in killOnCancellation parameter to ProcessHelper.StartProcessAsync that kills the process tree and
    awaits exit on cancellation or timeout
  • Fix Updatum generated update scripts being injectable through release tags, paths and relaunch arguments: Windows
    scripts now load values from sidecar data files (parse-safe, preserving !, &, " and %), and Bash scripts
    use ANSI-C quoting
  • Fix UpdatumManager.InstallUpdateAsync not re-verifying the downloaded asset's SHA-256 before installing
  • Fix InstallUpdateCompleted handlers possibly not running before a forced update exits the process
  • Fix cancelling or timing out a package installer leaving the installer process running while its package was deleted
  • Fix Windows .exe updates of a .NET single-file app being routed to the installer path
  • Fix a failed Windows installer being followed by relaunch and success cleanup; the script now exits non-zero and
    keeps its artifacts
  • Fix update checks assuming GitHub release order is version order; the highest eligible version is now selected
  • Fix truncated downloads being accepted when the response declared a shorter length than the release asset size
  • Enforce the 4 KiB .sha256 sidecar limit while streaming instead of after buffering the whole response
  • Add .tar and .tar.gz update archive installation; .tar.bz2 and .tar.xz assets are no longer selected for
    installation
  • Fix Flatpak and Snap relaunches dropping run arguments

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 14 Sep 01:05
  • Add HostSystem.IsDarkMode and HostSystem.IsHighContrast for detecting operating-system dark theme and accessibility
    high-contrast modes across Windows (registry and SystemParametersInfoW), macOS (defaults), and Linux (gsettings and
    desktop environments)
  • Add PathUtilities.DownloadsDirectoryPath, PathUtilities.GetDownloadsDirectory(), and
    PathUtilities.TryGetDownloadsDirectory(...) to resolve the current user's standard Downloads directory across Windows
    (native SHGetKnownFolderPath with FOLDERID_Downloads and user-shell-folder fallbacks), Linux (XDG_DOWNLOAD_DIR),
    and macOS/Unix
  • Add HostSystem.PreventSleep(bool keepDisplayOn = false) returning an IDisposable token to inhibit system sleep and
    optionally keep displays active across Windows (SetThreadExecutionState), macOS (caffeinate), and Linux (systemd-inhibit)
  • Add HostPowerStatus, HostSystem.IsOnBatteryPower, HostSystem.BatteryChargePercentage, HostSystem.GetPowerStatus(),
    and HostSystem.TryGetPowerStatus(...) for cross-platform battery level, AC/battery power state, and charging detection
  • Add HostSystem.OpenTerminal(...) and HostSystem.OpenInTerminal(...) (and asynchronous variants) to open interactive
    host terminal windows and run commands across Windows (preferring Windows Terminal wt.exe with cmd.exe fallback),
    macOS (Terminal.app via open and AppleScript), and Linux (x-terminal-emulator, gnome-terminal, konsole,
    xfce4-terminal, xterm)
  • Add HostDiskStatus, HostSystem.GetAvailableFreeSpace(...), HostSystem.TryGetAvailableFreeSpace(...),
    HostSystem.GetDiskStatus(...), and HostSystem.TryGetDiskStatus(...) to query drive capacity, free disk space,
    file system format, and drive type across Windows (GetDiskFreeSpaceExW and DriveInfo) and Unix mount points
  • Use strongly typed InstallerScope (PerMachineOrUser, PerUser, PerMachine) and PathRegistration (None,
    Register, UserDefaultNo, UserDefaultYes) enums on WindowsInstallerOptions instead of raw string configuration
  • Add HostSystem.OpenUrl URI overloads and generic synchronous/asynchronous and Open helpers for directories, files,
    URLs, and raw shell-execute fallback targets
  • Add cross-platform unified file associations via FileAssociation and FileAssociations on StageKitBuild,
    automatically configuring Windows Explorer context menu / Open With registration in WiX installers,
    CFBundleDocumentTypes in macOS Info.plist, and MimeType associations, Exec file arguments (%F), and
    AppStream mediatype metadata in Linux desktop application bundles
  • Add WindowsInstallerOptions to Fallout to configure Windows installer options (including
    ContextMenuOpenWithFileAssociations as a HashSet<FileAssociation>, SignToolPath, Authenticode signing,
    InstallerScope and PathRegistration enums, shortcut toggles DefaultDesktopShortcut and DefaultStartMenuShortcut, and
    single-file payload) alongside WiX installer context menu registration
  • Enforce a configurable macOS minimum runtime version in the generated installation script, defaulting to macOS 13.0
  • Emit current AppStream developer metadata, including a configurable developer ID, for Linux application bundles
  • Normalize AppStream summaries by removing trailing periods
  • Add option to stop configured running application instances before installation
  • Add InstallerPathRegistration modes for optional or enforced WiX PATH registration, with user/system scope handling,
    upgrade preference restoration, uninstall cleanup, and checked or unchecked user defaults
  • Isolate WiX intermediate outputs by installer name to prevent incremental builds from reusing another version's MSI
  • Keep WiX shortcut registry state in the selected user or machine installation scope
  • Stop the WiX installer from overriding a chosen installation directory with the remembered one, which silently
    redirected wizard and INSTALLFOLDER= command-line choices back to the previous directory
  • Restore the WiX shortcut preferences on silent and basic-UI installations, which never run the wizard and so recreated
    shortcuts the user had removed
  • Scope the WiX PATH entry and remembered directory by the installation context Windows Installer resolved (ALLUSERS)
    rather than by the wizard's INSTALLSCOPE, so a per-user installation writes the user PATH instead of failing with an
    access denied error while trying to write the system PATH
  • Delete the WiX installer registry key on uninstall so nothing is left behind
  • Keep the WiX "Start program after install" checkbox working after a major upgrade instead of showing it inert, and
    check it by default
  • Default silent per-user WiX installations to the user programs directory so unprivileged installs succeed without
    requiring elevation or failing against Program Files
  • Forward Company, Copyright, RepositoryUrl, and WindowsIconFile from the Windows publish pipeline to the WiX
    installer build
  • Disable the WiX installation scope selector during maintenance or while a previous installation is detected, since
    Windows Installer keeps a product in the context it was first installed in
  • Uninstall directly from the WiX start menu shortcut, which now carries the application icon, instead of opening
    maintenance mode that ARPNOMODIFY disables
  • Mark the WiX shortcut components transitive so their conditions are re-evaluated on reinstall
  • Record the description, keywords (from project package tags), and copyright in the WiX package summary information
  • Authenticode-sign every executable and library in the WiX payload instead of only the entry executable, through an
    InstallerPayloadToSign item that can be redefined to narrow the set
  • Honour a preset InstallerPathRegistration in the WiX installer project instead of always overwriting it
  • Add the StageKit demo icon to its window and taskbar entry
  • Add the PublishAot build parameter (--publish-aot), defaulting to false, to support Native AOT ahead-of-time
    compilation across publishing, single-file packaging, and runtime restore operations in Fallout
  • Add macOS Developer ID code signing and notarization support for application bundles (.app) and packages (.dmg,
    .pkg) via xcrun notarytool and stapler, supporting keychain profiles (--mac-keychain-profile), Apple ID
    credentials (--mac-apple-id, --mac-password, --mac-team-id), App Store Connect API keys (--mac-api-key-path,
    --mac-api-key-id, --mac-api-issuer-id), signing identities (--mac-signing-identity), and programmatic options on
    MacAppBundleOptions, while retaining ad-hoc code signing (codesign --sign -) as the fallback when notarization or
    identity is not configured

v0.3.8

Choose a tag to compare

@github-actions github-actions released this 11 Sep 18:14
  • Let users choose between per-user and per-machine WiX installation scopes
  • Let installer developers enforce perUser or perMachine through the WiX InstallerScope property while defaulting
    to user-selectable scope
  • Add optional SHA-256 Authenticode signing for the staged Windows executable and final MSI
  • Prevent x64 installers from running under ARM64 emulation when a native ARM64 installer is available
  • Allow older and same-version MSI packages to replace the installed version
  • Add a uninstall software shortcut to start menu in the Wix template
  • Let users choose the WiX installation directory and restore the last directory on later installs, upgrades, and
    reinstalls
  • Record the installed MSI product code, software version, architecture, and executable path alongside the remembered
    installation directory, while removing installed-product metadata during uninstall
  • Move the optional "Start program after install" checkbox to the completion page

v0.3.7

Choose a tag to compare

@github-actions github-actions released this 11 Sep 02:00
  • Remove <TargetFramework>net10.0</TargetFramework> from WixInstaller template
  • Add UnixSystem.SetUnixPermissions(...) to set the permissions of a file or directory
  • Add UnixSystem.ChangeUnixPermissions(...) to change the current permissions of a file or directory
  • Add StageKitBuild.UnixFilePermissions to apply configured chmod modes to validated files beneath each Unix-like
    runtime's publish directory after publishing
  • Improve the StageKitBuild.SoftwareName property to guess from more properties

v0.3.6

Choose a tag to compare

@github-actions github-actions released this 10 Sep 16:59
  • Add the EntryApplication.CurrentProcess cached property to expose the current process
  • Hardens Fallout main-project detection by ignoring missing or non-boolean FalloutMainProject values
  • Updates host GPU reporting so GraphicsCardName returns all detected adapter names
  • Reshapes the Linux package-manager command helper into the newer extension-property style.

v0.3.5

Choose a tag to compare

@github-actions github-actions released this 10 Sep 01:20
  • Add the GenerateWindowsWixInstaller Fallout target, which scaffolds builds/<SoftwareName>.WixInstaller with the
    WiX project, Package.wxs, Strings.en-us.wxl, a readme, a placeholder License.rtf, and generated placeholder
    banner and dialog artwork at the sizes WiX expects. Upgrade codes are generated once per platform, and the target
    fails instead of overwriting an existing installer project so those codes and any custom authoring survive
  • Replace existing same-version Windows installations when installing a rebuilt MSI instead of registering another
    product.
  • Allow custom Windows installer welcome artwork and header logos, including the installation-options page.
  • Add Windows installer checkboxes for Start menu and Desktop shortcuts (enabled by default and restored from the registry on rerun/upgrade) and starting the app after
    installation (disabled by default).
  • Prefer RPM assets on AlmaLinux in generated installers, and retain the application-name casing for installed AppImage
    and .NET single-file names
  • Stop Linux speaker-test tones at the requested duration and use macOS afplay for an audible system sound

v0.3.4

Choose a tag to compare

@github-actions github-actions released this 09 Sep 04:10
  • Allow set AppImage squashfs compression in Fallout to customize or override compression
  • Decouple primary directory publish from DotNetSingleFile packaging so that directory and portable archive publish retains all runtime assemblies and native dependencies
  • Add the PublishReadyToRun build parameter (--publish-ready-to-run), defaulting to false, to make ReadyToRun compilation opt-in
  • Add the PublishTrimmed build parameter (--publish-trimmed and Trimmed property alias), defaulting to false, to make assembly trimming opt-in across publish and restore operations
  • Let APT's _apt user read downloaded DEB files without falling back to an unsandboxed root download, and print the
    command that starts applications installed through native Linux packages

v0.3.3

Choose a tag to compare

@github-actions github-actions released this 08 Sep 23:42
  • Add ShellScriptFile, a TextWriter that builds and executes Windows batch or Unix shell scripts with optional
    elevation, cancellation, captured process output, argument lists, platform-conditional writes, comments, and
    environment variables. CreateTemporary(...) and the pathless constructor assign a unique temporary path and delete
    it on disposal by default, while an explicit path keeps the script; content is buffered and written atomically by
    Flush, by Execute, and on disposal.
    WriteLines, WriteLinesAsync, WriteLinesIf, WriteLinesIfWindows/MacOS/Linux/Unix, and WriteComments
    write several lines at once, taking params or an IEnumerable<string?>
  • Add raw and structured script-argument support to ProcessHelper.CreateShellScriptProcessStartInfo, plus
    StartShellScript and StartShellScriptAsync overloads matching the process-start helpers
  • Move process lifetime metadata from ApplicationKit.StartingTimestamp, RuntimeElapsed, and SessionId to
    EntryApplication.ProcessStartingTimestamp, ProcessUptime, and ProcessSessionId; the former APIs have been
    removed
  • Add structured process snapshots and configurable runtime reports to RuntimeDiagnostics, including process, GC,
    thread-pool, runtime-feature, culture, and time-zone details plus reusable custom report formatting
  • Add portable processor and multi-adapter graphics information to HostSystem, with native or structured detection,
    Windows filtering for indirect USB and software display drivers, bounded external queries, retry-after-failure
    behavior, and compatibility for the original GraphicCardName spelling
  • Add cached system manufacturer and model detection plus a portable HostSystem.SystemUptime measurement
  • Add HostSystem.IsNetworkAvailable() for a fast, cross-platform local network-availability check and
    IsInternetAvailableAsync() for an active, timeout-bound internet connectivity probe with captive-portal detection
  • Add cached HostSystem.OperatingSystemName and OperatingSystemNameWithArch display values, including Mac Catalyst,
    WASI, and correctly styled tvOS and watchOS names
  • Add immutable, platform-neutral host memory snapshots with native Windows/macOS queries, span-based Linux parsing,
    readable physical-memory properties, and explicit failure detection
  • Show live host memory totals, availability, usage, and load in the Avalonia demo with automatic two-second refreshes
  • Add StringExtensions.InsertCharBetweenCamelCase to StageKit.Primitives for splitting camelCase/PascalCase (and,
    optionally, digit) transitions with a configurable separator character
  • Add HostSystem.Beep and HostSystem.BeepAsync to StageKit.Primitives. Both report success as a bool instead of
    throwing, clamp the frequency to the 37 Hz floor Console.Beep requires, format the Linux sleep interval with the
    invariant culture, probe for speaker-test before using it, and fall back to the macOS system alert sound
  • Add a host beep section to the Avalonia demo with frequency and duration editors, single and looping playback through
    HostSystem.BeepAsync, and a stop button that cancels the loop
  • Add LinuxRpm and DotNetSingleFile to StageKit releases
  • Fix cross-architecture RPM publishing by passing the target architecture to rpmbuild, fail immediately when a
    packaging command exits unsuccessfully, and report successful AppImage progress as regular output
  • Run Linux and macOS release jobs on matching native x64 or ARM64 GitHub-hosted runners
  • Retry transient hdiutil create resource-busy failures when producing macOS DMG packages
  • Log shell tool output at information level regardless of its output stream, skip unnecessary Arch dependency checks,
    and include complete Snap store metadata; the StageKit demo Snap now stages its fontconfig runtime dependency
  • Set CreateNoWindow = true on ProcessHelper by default to avoid a console window on Linux
  • Add ProcessHelper.StartProcessWithShellExecute and StartProcessWithShellExecuteAsync overloads for targets that
    must be opened through the operating system shell

v0.3.2

Choose a tag to compare

@github-actions github-actions released this 05 Sep 19:34
  • Fix macOS ZIP, PKG, and DMG auto-updates leaving the application closed. ZIP updates now replace the extracted .app
    instead of its parent directory, and relaunch uses a new Launch Services instance with startup verification and a
    diagnostic log in the system temporary directory.
  • Fall back to wget in Bash build and generated installation scripts when curl is unavailable.
  • Fix arch installer warnings from an unnecessary awk regex escape and accept /help and /? aliases.
  • Add Bash --portable [PATH] extraction into an application-named directory and generate a package-aware Bash
    uninstaller that probes all supported Linux and macOS formats.
  • Generate a Windows PowerShell uninstaller that probes an exact configured WinGet package, exact registered installer
    display names, and the known per-user Portable/single-file directory and PATH entries.

v0.3.1

Choose a tag to compare

@github-actions github-actions released this 05 Sep 03:01
  • Add Fallout's GenerateInstallScript target, which creates GitHub Releases Bash and Windows PowerShell installers
    from the selected PackagingTypes, exposes command help and explicit downgrade/version selection, prioritizes native
    installers over generic bundles, keeps Portable last, lists all published release versions or their release-note
    changelogs (limited to 20 releases by default), reports clean PowerShell release-resolution errors, and falls back
    when an asset or package tool is unavailable. Windows scripts can optionally try an exact WinGet package ID first and
    fall back to GitHub release assets when WinGet is unavailable or installation fails.
  • Fix macOS PKG and DMG auto-updates leaving the application closed by deferring relaunch to a non-elevated helper that
    waits for the old process to exit. Set the StageKit demo's Avalonia application name so its macOS menu uses
    StageKit.
  • Fix macOS DMG creation being killed with exit code 137 on GitHub-hosted runners. The image is built from the
    application bundle alone again, without the /Applications drag-and-drop symlink, because hdiutil follows that
    symlink while scanning the source tree and walks the whole host /Applications directory. PKG installers continue to
    install their application directly in /Applications. Native packages are still created before the application ZIP.
  • Add opt-in LinuxAppBundleOptions.FlatpakAllowHostCommandExecution manifest configuration for applications that need
    the org.freedesktop.Flatpak host-command service.
  • Stage libicu74 in Snap packages by default so self-contained .NET applications have globalization support, with a
    configurable LinuxAppBundleOptions.SnapStagePackages list for other bases and runtime dependencies.
  • Add ProcessHelper host-process factories and start helpers that use flatpak-spawn --host inside Flatpak and normal
    process launching elsewhere. Updatum now installs and relaunches Flatpak updates through that bridge, using its
    host-visible application cache for downloaded bundles.
  • Add HostSystem.TryFindExecutable for subprocess-free executable lookup with Windows PATHEXT support and Unix
    execute-permission validation.
  • Add synchronous and asynchronous HostSystem helpers to open URLs, directories, and files with their default host
    applications, or reveal a file in Windows Explorer and macOS Finder (with containing-directory fallback on Linux).
  • Add lazy BuildRuntime.Instance manifest loading and BuildRuntime.TryLoad(...) to StageKit.Runtime, using
    source-generated JSON metadata and the generic enum converter for trimming and Native AOT compatibility.