Desktop App Status

Componentapps/desktop — Electron shell

Packaging targets

PlatformFormatScriptCI job
macOS.dmg (+ .zip)pnpm --filter @anoobot/desktop package:macdesktop-package.yml → macOS
WindowsPortable .exe (+ NSIS installer)pnpm --filter @anoobot/desktop package:windesktop-package.yml → Windows
Ubuntu / Debian.deb (+ AppImage)pnpm --filter @anoobot/desktop package:linuxdesktop-package.yml → Linux

Customer download (cloud)

On tag desktop-v* (e.g. desktop-v0.0.1):

  1. CI builds all three platforms
  2. Manifest points to Cloudflare R2 at https://download.anoobot.com/desktop/
  3. upload-r2 syncs installers + desktop/latest/desktop-manifest.json
  4. GitHub Release created with same artifacts (fallback)
  5. Optional AWS S3 if AWS_DESKTOP_BUCKET is set (legacy)

GitHub secrets (R2 — primary)

NamePurpose
R2_ACCOUNT_IDCloudflare account ID
R2_ACCESS_KEY_IDR2 API token access key
R2_SECRET_ACCESS_KEYR2 API token secret
R2_DESKTOP_BUCKETe.g. anoobot-desktop

GitHub variable

NameDefault
DESKTOP_CDN_BASEhttps://download.anoobot.com/desktop

Setup guide: infrastructure/cloudflare/r2-desktop-downloads/README.md

Optional AWS S3 (legacy)

SecretPurpose
AWS_DESKTOP_BUCKETS3 bucket
AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEYUpload creds

Website

  • Manifest URL: https://download.anoobot.com/desktop/latest/desktop-manifest.json
  • desktop-download.js — fetch manifest → R2 CDN fallback → GitHub Releases fallback

CI

Desktop packaging workflows exist under .github/workflows/ but require an approved GitHub remote. Do not push tags or enable CI until repository hosting is re-approved (see docs/developer-guide.md#repository-hosting).

Local

bash tools/scripts/upload-desktop-release.sh prepare artifacts/desktop
R2_ACCOUNT_ID=... R2_DESKTOP_BUCKET=... bash tools/scripts/upload-desktop-release.sh upload-r2 artifacts/desktop

Notes

  • Desktop client loads ANOOBOT_FRONTEND_URL — not the full mail server stack.
  • R2: zero egress fees on downloads vs AWS S3.
  • Builds unsigned until Apple/Windows code signing is configured.