malliina / appbundler

JVM app to OSX installer


Build Status Maven Central


A port of Oracle's appbundler for OSX.

For SBT integration, see sbt-packager.


  • Does not rely on Ant
  • Supports Oracle Java 7 and later
  • Can include a suitable JRE in the .app package
  • Can optionally run the app as a service (using launchd)


"com.malliina" %% "appbundler" % "1.1.3"


First, create an InfoPlistConf instance representing your app:

import java.nio.file.{Path, Paths}
import com.malliina.appbundler.{InfoPlistConf, Installer}

val plist = InfoPlistConf(
  displayName = "My App",
  name = "myapp",
  identifier = "com.malliina.myapp",
  version = "0.0.1",
  mainClass = "com.malliina.myapp.Start",
  jars = Seq("myapp.jar", "lib.jar", "other_lib.jar") map (jar => Paths.get(jar))

To create an installer of your app with the above config, use:

Installer(rootOutput = ???, infoPlistConf = plist).macPackage()

To create an installer that also starts the app automatically when the machine boots (using launchd), use:

val launchd = LaunchdConf.defaultSettings(plist.displayName, plist.identifier)
Installer(rootOutput = ???, infoPlistConf = plist, launchdConf = Some(launchd)).macPackage()

To further customize the installer and app packaging, check the various parameters to InfoPlistConf, Installer and LaunchdConf, then eventually run Installer.macPackage().