MSIX Bundle
The Windows assets on the Releases page include a .msixbundle package in addition to the setup .exe. MSIX is Microsoft's current application deployment format, intended to replace .msi/.exe installers. A bundle contains builds for x86, x64 and arm64; Windows selects the matching architecture at install time.
Requirements
- Windows 10 (1809+) or Windows Server 2025+
- Optional: App Installer for double-click installation
Installation
Download the latest vfox_<version>_windows.msixbundle from the Releases page and install it by double-click, or from PowerShell:
Add-AppxPackage -Path .\vfox_<version>_windows.msixbundleThe package registers an app execution alias for vfox.exe, so the vfox command is available on PATH after installation without further configuration.
⚠️ Release bundles are currently unsigned
Windows refuses to install unsigned packages. Re-sign the bundle with your own certificate before installing (see below).
Signing an unsigned bundle
Windows must trust the signing certificate on the target machine. Keep the package publisher unchanged across upgrades, and reuse a long-lived certificate to avoid importing a new certificate for each release. Trusting that certificate is a one-time operation; each unsigned bundle you download must still be signed before installation. Include a trusted timestamp so the signed bundle remains installable after the signing certificate expires.
First create a self-signed code-signing certificate whose subject matches the package publisher (CN=VersionFox) and import it into the trusted store. Importing into Cert:\LocalMachine\TrustedPeople requires an elevated (administrator) PowerShell session:
$cert = New-SelfSignedCertificate -Type Custom -Subject "CN=VersionFox" `
-KeyUsage DigitalSignature -CertStoreLocation "Cert:\CurrentUser\My" `
-TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.3", "2.5.29.19={text}")
$password = ConvertTo-SecureString -String "pick-a-password" -Force -AsPlainText
Export-PfxCertificate -Cert $cert -FilePath vfox.pfx -Password $password | Out-Null
Import-PfxCertificate -FilePath vfox.pfx -CertStoreLocation Cert:\LocalMachine\TrustedPeople -Password $passwordThen sign the bundle and install it (signtool comes with the Windows SDK):
signtool sign /fd SHA256 /tr http://timestamp.digicert.com /td SHA256 /f vfox.pfx /p pick-a-password .\vfox_<version>_windows.msixbundle
Add-AppxPackage -Path .\vfox_<version>_windows.msixbundleUninstallation
Get-AppxPackage *vfox* | Remove-AppxPackageAlternatively open Settings > Apps > Installed apps, select vfox and click Uninstall. Uninstalling removes the execution alias together with the package; the ~/.vfox data directory is kept.
Notes for maintainers
Release bundles are built by the compile-msix workflow on every release. Signing is optional; two options:
- Self-signed certificate (no external account needed). Generate one PFX and keep it stable across releases, then configure the repository secrets
MSIX_PFX_BASE64(Base64-encoded certificate) andMSIX_PFX_PASSWORD; the subject must match the manifest publisher (CN=VersionFox). Releases are signed automatically from then on. Publish the public.cerfile alongside the releases so users only need to import it once. Keep the publisher identity stable when renewing the certificate, and distribute the new public certificate if it also needs to be trusted. - Publicly trusted certificate. Packages signed by a CA-issued code-signing certificate or through Azure Trusted Signing install without any user-side trust configuration. Obtaining one involves identity verification, and OV/EV certificates mandate hardware-protected private keys, which cannot be placed in CI secrets.
Signed builds use an RFC 3161 timestamp from http://timestamp.digicert.com; set MSIX_TIMESTAMP_URL to use another timestamp service. The build fails if signing or timestamping fails. Both the architecture packages and the outer bundle use the source release version.
All packaging files reside in the packaging/msix/ directory:
| File | Purpose |
|---|---|
AppxManifest.xml | Manifest template; @@VERSION@@, @@ARCHITECTURE@@ and @@PUBLISHER@@ are substituted at build time. |
gen-assets.ps1 | Generates the tile icons from the repository logo (logo.png) via System.Drawing: transparent margins are cropped and the artwork is scaled onto a transparent canvas. PNG is required by AppX deployment (SVG is rejected), so these binaries are generated at build time instead of being committed. |
make-msix.ps1 | Builds vfox from source with Go, renders the manifest for each architecture, packs them with MakeAppx.exe, combines the packages into a .msixbundle and optionally signs it with SignTool.exe. |
Local packaging requires Windows, the Windows SDK (provides MakeAppx.exe / SignTool.exe) and Go. The script takes no parameters: it reads the version from internal/version.go, so a locally built bundle always matches the source tree:
./packaging/msix/make-msix.ps1Artifacts are written to packaging/msix/Output/; assets/, staging/ and build/ are scratch directories and gitignored. Only stable versions without prerelease or build metadata are supported; they are normalized to four-part versions (1.2.3 → 1.2.3.0).
