Skip to main content

Cross-platform builds

PreviewAvailable on: WindowsmacOSLinuxShips in the preview channel only. Not a stable release.

Why a Windows machine cannot produce macOS or Linux artifacts, and what the path to those builds actually is.

Harmony's source supports Windows, macOS, and Linux. Each published artifact still has to be produced and verified on an appropriate native runner; source support alone never creates a download.

Makers are guarded by host platform

The packaging configuration declares makers for every target, but each group is wrapped in a process.platform check:

HostProduces
win32Squirrel Setup.exe, portable ZIP
darwinZIP, DMG
linuxDEB, RPM, AppImage

Electron Forge only invokes makers matching the machine it runs on; the explicit guards make that visible in the config rather than implicit in the tool.

IMPORTANT

This is not a switch you can flip. macOS DMG creation and Apple code signing require macOS. Linux DEB and RPM packaging requires Linux packaging tools. Running the build on Windows produces Windows artifacts and nothing else.

Consequences for release

The release manifest omits platforms without a verified build, and the site renders only what the manifest contains. The current download page is therefore authoritative, and an unbuilt platform is never offered as a broken download.

See platform support for the current matrix.

The real path to macOS and Linux artifacts

Cross-platform CI workflows exist in the application repository (release-cross-platform-preview.yml, ci-cross-platform-baseline.yml). They are the intended mechanism: each platform's job runs on its own runner, so each maker gets the host it requires.

Before a platform can be published:

  1. Its runner produces the artifacts.
  2. Each artifact is installed and tested on a clean machine of that platform.
  3. Signing is wired where the platform requires it.
  4. The artifacts are published with exact byte size and SHA-256.

Declared Linux dependencies

Already specified in the packaging config, and worth knowing when testing:

Debian / Ubuntu: libgtk-3-0, libnotify4, libnss3, libxss1, libxtst6, xdg-utils; recommends libfuse2 for AppImage.

Fedora / RHEL: gtk3, libnotify, nss, libXScrnSaver, libXtst, xdg-utils.

Signing

PlatformRequirementState
WindowsAuthenticode plus trusted timestampNot implemented
macOSDeveloper ID, hardened runtime, notarization, staplingNot implemented end to end
LinuxSigned checksums, later repository signingNot implemented

Stable publication requires signing. An unsigned build can reach the preview channel only, behind an explicit publisher flag, and the product and website must report that status honestly.

Platform behaviour that differs

Do not assume parity when testing:

AreaDifference
mod shortcuts on macOS, Ctrl elsewhere
Ctrl+B prefixLiteral Ctrl on every platform, including macOS
Voice dictationRequires Python 3.10+ on PATH
System-wide dictationDepends on OS window management
Managed NodeCan install a private portable LTS under user data; SHA-256 required before download