# MSIX packaging for EvilFox (Microsoft Store) EvilFox ships as a **full-trust Win32 + WebView2** app. Prefer **MSIX** over a PWA: system proxy and protocol cores cannot be delivered as a Store PWA alone. ## Multi-arch (x64 + Arm64) - Device family: `Windows.Desktop` (Win10 19041+ / Win11; `MaxVersionTested` 10.0.26100.0). - Architectures: **x64** and **arm64** only (no x86 / AArch32). - Pack script writes final artifacts to **`dist\microsoft-store\`**: - `EvilFox__x64.msix` - `EvilFox__arm64.msix` - `EvilFox_.msixbundle` (when MakeAppx can bundle both) - `README.txt` (Partner Center upload notes, RU+EN) - `listing\` (store.csv + screenshots) — filled by the submission prep step If MakeAppx is missing, the script still stages under `packaging/msix/_staging_` and prints exact `makeappx` commands in `README.txt`. ## Prerequisites 1. Build Windows x64: `build.bat` → `dist\navis-release\windows\EvilFox.exe` 2. Cross-build Arm64 (`CGO_ENABLED=0`). **Important:** `goversioninfo -64` produces an **amd64** `cmd/vpnapp/resource.syso` — temporarily rename it aside for the arm64 link, then restore: ```bat set GOOS=windows set GOARCH=arm64 set CGO_ENABLED=0 move cmd\vpnapp\resource.syso cmd\vpnapp\resource.syso.amd64.bak go build -ldflags="-H windowsgui -s -w" -trimpath -o dist\navis-release\windows\arm64\EvilFox.exe ./cmd/vpnapp move cmd\vpnapp\resource.syso.amd64.bak cmd\vpnapp\resource.syso ``` 3. [Windows SDK](https://developer.microsoft.com/windows/downloads/windows-sdk/) with `MakeAppx.exe` (and `SignTool.exe` for sideload signing) 4. Optional: code-signing certificate whose **Subject CN** matches `Identity/@Publisher` ## Pack From the repo root (PowerShell): ```powershell .\scripts\pack-msix.ps1 .\scripts\pack-msix.ps1 -Arch x64 -Version 4.2.8.1 .\scripts\pack-msix.ps1 -Arch arm64 -ExePath dist\navis-release\windows\arm64\EvilFox.exe .\scripts\pack-msix.ps1 -Arch all -OutDir dist\microsoft-store .\scripts\pack-msix.ps1 -Publisher "CN=Your Store Publisher" -Name "EvilFox.EvilFox" .\scripts\pack-msix.ps1 -CertPath ".\certs\evilfox-msix.pfx" -CertPassword "..." ``` Parameters: `-Arch x64|arm64|all`, `-OutDir`, `-Version`, `-Name`, `-Publisher`. ## Store submission 1. Create the app in [Partner Center](https://partner.microsoft.com/dashboard). 2. Copy **Package/Identity Name** and **Publisher** into `AppxManifest.xml` (or pass `-Name` / `-Publisher`). 3. Upload **`.msixbundle`** if available, else both **`.msix`** files. Partner Center can re-sign with the Store cert. 4. Device family: **Windows 10/11 Desktop** only. Arm64 covers Windows on ARM. 5. Declare **runFullTrust** and network capabilities; answer Store questions about VPN/proxy use. 6. Privacy policy URL on [evilfox.win](https://evilfox.win) required. 7. Sign in to Visual Studio / Partner Center with the **same Store developer account** if using VS packaging / Store association. 8. **Do not enable in-app self-update** for Store builds — EvilFox detects MSIX package identity and hides the updater (Store updates only). Optional: place arch-specific `wintun.dll` under `assets/wintun//`. Without it, packaging still succeeds; TUN/VPN mode needs the dll next to the exe (proxy mode works without it). ## Sideload test ```powershell Add-AppxPackage -Path .\dist\microsoft-store\EvilFox_4.2.8.1_x64.msix ``` Unsigned packages need a trusted cert or developer mode / sideloading enabled. ## Remnawave notes EvilFox can pull configs from a Remnawave panel: 1. Public subscription: paste `https:///api/sub/` (or use panel URL + short UUID in the Remnawave block). 2. Optional API token (panel → API Tokens) enables authenticated lookups: - `GET /api/subscriptions/by-short-uuid/{short}` / `…/raw` - `GET /api/users/by-short-uuid/{short}` → `subscriptionUrl` 3. Optional Caddy `X-Api-Key` if the panel sits behind Caddy token auth. Tokens are stored only in local `configs/config.json` (mode 0600) — never commit them.