Skip to content

Packaging Guide

ecamacho edited this page Jul 10, 2026 · 2 revisions

Packaging Guide

How Jellyx artifacts are built per platform. See Building from Source for prerequisites and Release Process for the release flow.

Artifact matrix

Platform Artifact Builder Notes
Linux .deb cargo tauri build / scripts/build.sh linux-deb Recommended
Linux .rpm scripts/build.sh Recommended
Linux AppImage scripts/build.sh linux-appimage NO_STRIP=1 required (RELR relocation)
Linux .tar.gz scripts/build.sh Archive
macOS DMG macos-dmg.yml Apple Silicon/aarch64 only; Intel DMG deferred/not produced
Windows NSIS setup.exe release.yml Recommended
Windows .msi release.yml Also shipped
Windows portable .exe release.yml No installer

Build commands

# All packages the host OS supports
./scripts/build.sh

# One target
./scripts/build.sh linux-appimage
./scripts/build.sh linux-deb
./scripts/build.sh macos
./scripts/build.sh windows

AppImage: NO_STRIP=1 (required)

AppImage builds must run with NO_STRIP=1 because of the RELR relocation behavior. The linux-appimage path in scripts/build.sh sets this. If you build AppImage manually:

NO_STRIP=1 cargo tauri build --target x86_64-unknown-linux-gnu

Without NO_STRIP=1, the AppImage may fail to launch.

macOS

  • Built via macos-dmg.yml (separate from release.yml).
  • Apple Silicon (aarch64) DMG is the recommended artifact and the only one the current CI/release workflow produces.
  • Intel DMG is deferred and not currently produced.
  • Alpha is unsigned; Gatekeeper bypass on first launch.

Windows

  • NSIS setup.exe is the recommended installer.
  • .msi and portable .exe are also produced.
  • Alpha is unsigned → SmartScreen warning on first run.

Version sync across artifacts

All artifacts must report the same version from three files (see Release Process):

  • jellyx-desktop/Cargo.toml
  • jellyx-desktop/tauri.conf.json
  • ui/package.json

Known (v0.3.2): These files reported 0.3.1 at the v0.3.2 tag, so the v0.3.2 build's About page may show 0.3.1.

Validation

After CI uploads assets, run scripts/validate-release.sh with the required arguments — release tag, release title, and the expected asset filenames:

./scripts/validate-release.sh vX.Y.Z "Jellyx X.Y.Z" Jellyx_X.Y.Z_amd64.deb Jellyx_X.Y.Z_amd64.rpm Jellyx-X.Y.Z.AppImage Jellyx-X.Y.Z.tar.gz JellyxSetup_X.Y.Z_x64.exe Jellyx-X.Y.Z.msi Jellyx-X.Y.Z_portable.exe Jellyx_aarch64.dmg

The CI job (release.yml / macos-dmg.yml) supplies the expected asset list; pass the assets the release actually uploaded. This validates the release title and that the expected assets are present.

Next step

Clone this wiki locally