What is jDeploy?
jDeploy is a tool for Java developers to more easily distribute their desktop apps as native bundles. It uses npm to publish your application to the cloud, and it provides a download page with links to download native bundles for Mac, Windows, and Linux. For more information about jDeploy and its features see the jDeploy website.
Can I deploy Command-line Apps using jDeploy?
jDeploy allows you to distribute both GUI application and command-line apps. When distributing a GUI app, you can direct your users to download a native installer from your app’s download page on jdeploy.com. See the SwingSet download page for an example. When deploying a command-line app, users can install it using the
npm command-line tool. See Getting Started with jDeploy CLI edition for more information about this distribution method.
How much does jDeploy cost?
jDeploy is free and open source (Apache v2). Currently the hosting of the download page for apps is also free. If hosting/bandwidth costs get onerous, it is possible that the pricing model for the download page may change. In such a case, you can still deploy apps using jDeploy without using the download page, by generating your installers locally, and hosting them yourself.
How Big Are the Native Installer Bundles?
The installer bundle for apps deployed using jDeploy are around 3 megabytes. This is constant for all apps, since the installer bundle simply contains an installer app. Your app, and appropriate JRE/JDK is downloaded from NPM at installation time.
What versions of Java are Supported?
Java versions 8, 11, and 17 are currently supported. Currently (at time of writing), jDeploy uses Azul’s Zulu distribution of OpenJDK, so version availability will follow what its availablility.
Currently the default version used is "11".
What if my app requires the full JDK, not just the JRE?
If your app requires a JDK, and not just a JRE, you can specify this in the package.json file, by adding
"jdk" : true in the jdeploy settings. Then the launcher will automatically download the full JDK instead of just a JRE.
Are JavaFX apps supported?
Yes. If your application requires JavaFX, you can add
"javafx" : true to your package.json file to specify this. Then your app will automaticlly download a JRE/JDK with JavaFX at launch time, if required.
Which platforms are supported?
Mac, Windows, and Linux are supported.
What is the difference between jDeploy and jpackage/graal native image?
jDeploy is similar to tools like jpackage and graal native image in that it produces native bundles, but it differs in several important ways:
With jpackage, each format (e.g. .dmg, .exe, etc..) must be built on the platform that it runs on. I.e., you need a Windows machine to build a Windows app, a Mac to build a Mac app, etc…. jDeploy, in contrast, can produce bundles for all platforms from any platform. You don’t need a Windows or a Mac.
- Mac Code-Signing and Notarization
jDeploy apps don’t need to be signed or notarized for deployment on Mac. The installer produced by jDeploy is signed and notarized by jDeploy so you don’t need to futz with your own certificates and notarization steps. You don’t even need to have a Mac developer account - which you would need to distribute apps built by jpackage.
- Smart JVM Downloading
jpackage bundles the entire Java Virtual machine inside the app bundle. App installers produced by jDeploy, by contrast, only include a slim native app (3mb compressed). A compatible Java Virtual Machine is downloaded automatically at run-time, but only if a compatible JVM can’t be found yet. This results in major savings for updates, and when you have multiple apps installed that use jDeploy, since the JVM only needs to be downloaded once.
jDeploy apps include a custom native launcher, written in Go and C, which downloads any available app updates before launching your app. This way you can be sure that your users are always working with the latest version of your app.
- Download Page
jDeploy provides a turn-key download page for users to download your app as soon as you’ve published it. If you don’t want to use this download page, you don’t have to. You can just generate your bundles locally, and distribute them in your own way.
- File-type and URL Associations
jDeploy apps can be associated with custom mimetypes, file extensions, and URL schemes easily - without having to delve into any platform-specific configuration. This feature is supported on Mac, Windows, and Linux.
- Not for the Appstore
Because jDeploy includes its own auto-update and JVM management features, the apps produced aren’t appropriate for distribution in the Mac App store. If you are looking to distribute your app in the Mac Appstore, you should use a solution like jpackage.
Can I self-host my app instead of using npm?
Currently jDeploy uses npm for its content delivery and versioning. Many developers have expressed interest in being able to, instead, publish and host their app updates themselves, or on alternate services like GitHub. If there is demand, then it is very likely that I will add this feature in the future. In fact, earlier iterations of jDeploy did use self-hosting. I switched to using npm because it simplified the process dramatically, but adding back the self-hosting option shouldn’t be too difficult.
Do I need a Mac to deploy a native Mac App?
No. You can deploy for all platforms (Mac, Windows, and Linux) from any of jDeploy’s supported platforms (Mac, Windows, and Linux).
Do I need an Apple Developer Account to Distribute My App on Mac OS?
No. You don’t require an Apple Developer account to distribute your app on Mac OS?
Do I need to Sign or Notarize My App for Mac OS?
No. The jDeploy installer is signed and notarized so that users will be able to download and install your app without the dreaded "This app appears to have been tampered with warnings". You don’t need to worry about signing or notarizing your app. Just publish it via
jdeploy publish and your users can download and install your app via your app’s download page on jdeploy.com.
What versions of Mac are Supported?
Mac 10.14 (Mojave) and higher are supported. At time of writing it supports versions up to and including the latest version, Monterey.
Will My App Be Accepted by the Mac App Store
No. Apps submitted to the Mac appstore must bundle all components (e.g. JRE) as part of the app bundle, and be able to run inside the Mac sandbox. jDeploy apps bundle only the bare minimum required to launch your app, and required components such as a JRE and app updates are downloaded at runtime. This would not be possible in the Mac app store.
One of the benefits of the jDeploy approach is that your apps are only a couple of megabytes (multiple applications can share the same JRE), vs a full app-store bundle that may tip 150MB.
If you want to build native Mac apps for the purpose of distributing in the Mac app store you should use an alternative solution such as jpackage.
If you think of other questions, please post them in the Support forum.