Skip to content

Repository files navigation

AppBundler.jl

Docs codecov

AppBundler.jl is a Julia package for building native installers β€” Snap, MSIX, and DMG β€” using open-source tools available across all UNIX platforms (Linux, macOS, FreeBSD), while also being able to build MSIX on Windows itself. It replaces host system packaging utilities with cross-compiled tools distributed through Julia's Yggdrasil registry, resulting in a consistent and reproducible pipeline with no per-platform build environments required.

The package provides a clean API for bundling any Julia application exposing @main, with support for icons, configuration files, and native customization. GitHub Actions workflows allow multi-platform installer builds to be triggered with a single click, making continuous delivery of native installers practical for open-source Julia projects. AppBundler can also bundle applications written in other build systems (see docs).

πŸ“– Read the full documentation

Showcase

The following videos demonstrate the DMG and MSIX installers produced via AppBundler.

DMG demo MSIX demo
DMG MSIX

Note: The bundling API has evolved and since MSIX video were recorded, but the pipeline structure and the resulting installer looks just the same.

Quickstart

If your Julia application exposes @main and can be launched with julia --project=. -m MyApp, it's ready to bundle. Here's how to get from source to a native installer in a few steps.

1. Install AppBundler

]app add AppBundler

Make sure ~/.julia/bin is on your PATH after installation.

2. Build your installer

From your project directory, run:

appbundler build . --build-dir=build --selfsign

This detects your current platform and builds the appropriate installer β€” no extra configuration needed to get started.

3. Find your installer

Your installer will be in the build/ directory, ready to distribute. AppBundler detects your current platform and produces the corresponding installer:

  • build/MyApp.msix on Windows
  • build/MyApp.snap on Linux
  • build/MyApp.dmg on macOS

To build for all three platforms at once, check out the included GitHub Actions workflow templates β€” they run each platform's build in parallel with a single push.

Compilation & Customization

AppBundler offers a lot of room to grow as your project matures:

  • Package images β€” faster startup via precompiled pkgimages
  • Sysimage β€” even faster startup with a bundled system image
  • JuliaC β€” native compilation (including the new --trim feature) for smaller installers
  • Sandboxing, terminal visibility, icons, and more β€” full control over how your app looks and behaves on each platform

AppBundler can also bundle applications written in other build systems, and can build full Julia distributions β€” as demonstrated by Jumbo Julia.

➑️ See the full documentation for all options and platform-specific configuration.

Supported GUI Frameworks

These frameworks have been tested with AppBundler. Minimal example applications for each are available in the examples folder β€” copy them straight from pkgdir(AppBundler) once installed.

Framework Platform Support Notes Examples
QML βœ“ All platforms Fully supported PeaceFounderClient
GLFW βœ“ All platforms Fully supported β€”
Electron βœ“ All platforms Fully supported BonitoBook
Gtk/Mousetrap ⚠ macOS, Linux Does not launch on Windows β€”
Makie ⚠ All platforms GLMakie may not work on Windows ImageColorThresholderApp
Blink ⚠ All platforms Requires heavy patching for relocatability KomaMRI

Installing Built Applications

Sharing your app with end users? Here's what they need to know.

  • MSIX (Windows): For self-signed builds, open the MSIX properties and add the certificate to Trusted Root Certification Authorities first (step-by-step guide). Then double-click the installer.
  • Snap (Linux): Install from the terminal: snap install --classic --dangerous MyApp.snap
  • DMG (macOS): For self-signed builds, click the app, then go to Settings β†’ Privacy & Security to approve the launch request. Drag it to Applications, launch it, and approve once more in Privacy & Security if prompted.

These extra steps are only needed for self-signed builds. Purchasing Windows and macOS code signing certificates eliminates them entirely. For Snap, submitting to the Snap Store enables one-click GUI installation.

AI Policy

AI-assisted development is welcome in this project. Several modules were written largely with AI assistance, for example src/DMG/HFSTools.jl, src/DMG/HFSImg.jl, src/ArgTools.jl and src/MSIX/WinSubsystem.jl. What they have in common is that their functionality sits behind a narrow module boundary exposing only a few functions, so it can be verified thoroughly with automated tests. This is the kind of AI use we encourage.

AI use is discouraged for code that affects how bundles install, launch or integrate with the host system, since its correctness can only be established by manual testing. Such code mostly arrives with new bundling recipes and other scope-expanding changes, which the maintainer decides on deliberately. Each new user-facing feature adds a long-term burden of making sure bundles keep working on end-user systems. Please open an issue to discuss such changes before writing code.

Acknowledgments

This work is supported by the European Union through the Next Generation Internet initiative (NGI0 Entrust), via the NLnet Julia-AppBundler project.

About

Bundle your Julia application

Topics

Resources

Stars

113 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages