Skip to content

Commit 022c59c

Browse files
committed
fix(docs): recompute scoring totals and correct Conveyor/Tauri data
- Recompute all scoring matrix totals using sum/130×100 formula (totals were stale after incremental dimension score corrections) - Update Conveyor: Azure Trusted Signing (signing 8→10), CI workflows (CI/CD 5→6), deep links (Runtime 0→1) - Update Tauri: Mac App Store support (Sandbox 4→5) - Restructure Sandboxing section into Store Distribution with info box explaining actual requirements per store - Remove GraalVM/Tauri from Runtime Optimization table (JVM-only) - Fix emoji rendering (shortcodes → Unicode) - Add footnote explaining cross-ecosystem total methodology
1 parent 578d510 commit 022c59c

1 file changed

Lines changed: 52 additions & 42 deletions

File tree

docs/comparison.md

Lines changed: 52 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,16 @@ This page evaluates **Nucleus** against **26 competing tools** across 14 feature
2323
| Tier | Tool | Score | License |
2424
|------|------|:-----:|---------|
2525
| **S** | **Nucleus** | **89/100** | MIT (free) |
26-
| **A** | [Conveyor](https://conveyor.hydraulic.dev/) | 84/100 | Proprietary ($45/mo) |
27-
| **A** | [install4j](https://www.ej-technologies.com/products/install4j/overview.html) | 79/100 | Proprietary ($769+/dev) |
28-
| **B+** | [jDeploy](https://www.jdeploy.com/) | 62/100 | Free |
29-
| **B** | [Compose Multiplatform](https://www.jetbrains.com/compose-multiplatform/) | 52/100 | Apache 2 (free) |
30-
| **B** | [JavaPackager](https://github.com/fvarrui/JavaPackager) | 50/100 | GPL (free) |
31-
| **B-** | [Badass plugins](https://github.com/beryx/badass-jlink-plugin) | 45/100 | Apache 2 (free) |
32-
| **C** | jpackage (JDK built-in) | 43/100 | JDK (free) |
33-
| **C** | [Packr](https://github.com/libgdx/packr) | 24/100 | Apache 2 (dormant) |
26+
| **B** | [install4j](https://www.ej-technologies.com/products/install4j/overview.html) | 64/100 | Proprietary ($769+/dev) |
27+
| **B** | [Conveyor](https://conveyor.hydraulic.dev/) | 61/100 | Proprietary ($45/mo) |
28+
| **C** | [jDeploy](https://www.jdeploy.com/) | 49/100 | Free |
29+
| **C** | [Compose Multiplatform](https://www.jetbrains.com/compose-multiplatform/) | 41/100 | Apache 2 (free) |
30+
| **C** | jpackage (JDK built-in) | 37/100 | JDK (free) |
31+
| **C** | [JavaPackager](https://github.com/fvarrui/JavaPackager) | 36/100 | GPL (free) |
32+
| **C-** | [Badass plugins](https://github.com/beryx/badass-jlink-plugin) | 35/100 | Apache 2 (free) |
3433
| **D** | [Launch4j](https://launch4j.sourceforge.net/) | 22/100 | MIT (free) |
35-
| **F** | JSmooth | 8/100 | Abandoned |
34+
| **D** | [Packr](https://github.com/libgdx/packr) | 22/100 | Apache 2 (dormant) |
35+
| **F** | JSmooth | 11/100 | Abandoned |
3636

3737
---
3838

@@ -162,7 +162,7 @@ Nucleus provides a full auto-update solution: build-time YML metadata generation
162162
| Tool | macOS Signing | macOS Notarization | Windows PFX | Windows Azure Trusted | CI-Ready | Score |
163163
|------|:------------:|:------------------:|:-----------:|:---------------------:|:--------:|:-----:|
164164
| **Nucleus** ||||| ✅ (actions) | **10/10** |
165-
| Conveyor ||| ✅ (self-sign free) | || 8/10 |
165+
| Conveyor ||| ✅ (self-sign free) | ✅ (since v19) || **10/10** |
166166
| install4j |||||| 8/10 |
167167
| jDeploy || ✅ (own cert) | ✅ (own cert) ||| 7/10 |
168168
| jpackage | ✅ (--mac-sign) | ✅ (--mac-app-store) |||| 3/10 |
@@ -181,7 +181,7 @@ Nucleus has first-class support for the full signing matrix: macOS Developer ID
181181
| Tool | Pre-built Actions | Matrix Builds | Universal Binary | MSIX Bundle | Update Metadata | Release Publishing | Score |
182182
|------|:-----------------:|:-------------:|:----------------:|:-----------:|:---------------:|:------------------:|:-----:|
183183
| **Nucleus** | ✅ (6 actions) | ✅ (6 runners) ||||| **10/10** |
184-
| Conveyor | ❌ (CLI) | ❌ (single machine) | ✅ (auto) || ✅ (auto) | | 5/10 |
184+
| Conveyor | ⚠️ (example workflows) | ❌ (single machine) | ✅ (auto) || ✅ (auto) | ✅ (GH/SSH) | 6/10 |
185185
| install4j | ❌ (CLI) |||| ✅ (auto) || 3/10 |
186186
| jDeploy | ✅ (GitHub Action) |||| ✅ (auto) | ✅ (auto) | 5/10 |
187187
| Compose MP ||||||| 1/10 |
@@ -220,7 +220,8 @@ Nucleus is Gradle-only, which is appropriate for its Compose Desktop target audi
220220
| jpackage |||||| 4/10 |
221221
| Compose MP |||||| 6/10 |
222222
| Badass plugins |||||| 5/10 |
223-
Nucleus is the only packaging tool with integrated Project Leyden AOT cache support, providing dramatically faster cold startup without the compatibility issues of GraalVM Native Image. Combined with ProGuard and native library cleanup, it offers the most complete optimization story for JVM apps.
223+
224+
Nucleus is the only JVM packaging tool with integrated Project Leyden AOT cache support, providing dramatically faster cold startup. Combined with ProGuard and native library cleanup, it offers the most complete optimization story for JVM apps.
224225

225226
---
226227

@@ -261,19 +262,25 @@ Nucleus exposes a rich NSIS DSL (one-click, elevation, desktop shortcuts, start
261262

262263
---
263264

264-
### Sandboxing & Store Distribution
265+
### Store Distribution
266+
267+
!!! info "Do stores actually require sandboxing?"
268+
- **Mac App Store**: App Sandbox is **mandatory** for all apps.
269+
- **Microsoft Store**: Sandboxing is **NOT required**. MSIX desktop apps use `runFullTrust` — a lightweight VFS overlay for clean uninstall, but no real sandbox.
270+
- **Flathub (Flatpak)**: Sandbox is nominally mandatory, but apps can request broad permissions (`filesystem=host`) that effectively bypass it.
271+
- **Snap Store**: Strict confinement is the default. Classic (unsandboxed) requires manual approval and is limited to specific app categories (IDEs, compilers, shells).
265272

266-
| Tool | macOS App Sandbox | Windows AppX/MSIX | Mac App Store | Microsoft Store | Linux Flatpak | Linux Snap | Auto Dual Pipeline | Score |
267-
|------|:-----------------:|:-----------------:|:-------------:|:---------------:|:-------------:|:----------:|:------------------:|:-----:|
268-
| **Nucleus** |||(PKG) | ✅ (AppX/MSIX) ||| ✅ (automatic) | **10/10** |
269-
| Conveyor || ✅ (MSIX) || | | | | 3/10 |
270-
| install4j ||||| || | 0/10 |
271-
| Compose MP ||||| || | 0/10 |
272-
| Electron Builder ||| ✅ (MAS) ||| | Partial | 9/10 |
273-
| Electron Forge ||||||| Partial | 9/10 |
274-
| Tauri | ||| |||| 4/10 |
273+
| Tool | Mac App Store | Microsoft Store | Flathub | Snap Store | Store-Ready Formats | Score |
274+
|------|:------------:|:---------------:|:-------:|:----------:|:-------------------:|:-----:|
275+
| **Nucleus** | ✅ (PKG) | ✅ (AppX/MSIX) |(Flatpak) | ✅ (Snap) | 4 stores | **10/10** |
276+
| Conveyor || ✅ (MSIX) ||| 1 store | 3/10 |
277+
| install4j ||||| 0 stores | 0/10 |
278+
| Compose MP ||||| 0 stores | 0/10 |
279+
| Electron Builder |(MAS) | ✅ (AppX) ||| 4 stores | 9/10 |
280+
| Electron Forge |(MAS) |(AppX/MSIX) ||| 4 stores | 9/10 |
281+
| Tauri | ✅ (PKG) || ⚠️ (community) | ⚠️ (community) | 1–3 stores | 5/10 |
275282

276-
Nucleus's automatic sandboxed build pipeline is a standout feature. When store formats (PKG, AppX, Flatpak) are configured, it automatically: extracts native libraries from JARs, strips duplicates, prepares sandboxed app resources, injects JVM arguments for redirected library loading, and signs extracted native libraries individually. This JVM-specific sandboxing logic doesn't exist in any other tool.
283+
For JVM apps, Nucleus is unique in handling the Mac App Store sandbox requirement automatically: it extracts native libraries from JARs, strips duplicates, injects JVM arguments for redirected library loading, and signs extracted native libraries individually. This JVM-specific pipeline doesn't exist in any other tool.
277284

278285
---
279286

@@ -346,33 +353,36 @@ Scoring: Each dimension is rated 0–10. Total = sum of all 13 dimension scores,
346353
| Tool | Formats | Update | Signing | CI/CD | Platform | Sandbox | Optim. | Install. | Runtime | Docs | Community | Price | Build | **Total** |
347354
|------|:-------:|:------:|:-------:|:-----:|:--------:|:-------:|:------:|:--------:|:-------:|:----:|:---------:|:-----:|:-----:|:---------:|
348355
| **Nucleus** | 10 | 9 | 10 | 10 | 10 | 10 | 9 | 9 | 10 | 9 | 4 | 10 | 6 | **89** |
349-
| **Conveyor** | 4 | 10 | 8 | 5 | 10 | 3 | 5 | 1 | 1 | 9 | 6 | 6 | 8 | **84**¹ |
350-
| **install4j** | 4 | 9 | 8 | 3 | 10 | 0 | 5 | 10 | 2 | 9 | 10 | 3 | 10 | **79**² |
351-
| **jDeploy** | 3 | 6 | 7 | 5 | 8 | 0 | 4 | 2 | 0 | 6 | 5 | 10 | 8 | **62** |
352-
| **Compose MP** | 4 | 0 | 5 | 1 | 5 | 0 | 6 | 2 | 0 | 5 | 9 | 10 | 6 | **52** |
353-
| **JavaPackager** | 5 | 0 | 3 | 1 | 5 | 0 | 4 | 4 | 0 | 4 | 4 | 10 | 7 | **50** |
354-
| **Badass plugins** | 4 | 0 | 0 | 1 | 8 | 0 | 5 | 2 | 0 | 5 | 5 | 10 | 6 | **45** |
355-
| **jpackage** | 4 | 0 | 3 | 0 | 8 | 0 | 4 | 3 | 0 | 3 | 9 | 10 | 4 | **43** |
356-
| **Packr** | 1 | 0 | 0 | 0 | 5 | 0 | 3 | 0 | 0 | 3 | 2 | 10 | 4 | **24** |
356+
| **install4j** | 4 | 9 | 8 | 3 | 10 | 0 | 5 | 10 | 2 | 9 | 10 | 3 | 10 | **64**¹ |
357+
| **Conveyor** | 4 | 10 | 10 | 6 | 10 | 3 | 5 | 1 | 1 | 9 | 6 | 6 | 8 | **61**² |
358+
| **jDeploy** | 3 | 6 | 7 | 5 | 8 | 0 | 4 | 2 | 0 | 6 | 5 | 10 | 8 | **49** |
359+
| **Compose MP** | 4 | 0 | 5 | 1 | 5 | 0 | 6 | 2 | 0 | 5 | 9 | 10 | 6 | **41** |
360+
| **jpackage** | 4 | 0 | 3 | 0 | 8 | 0 | 4 | 3 | 0 | 3 | 9 | 10 | 4 | **37** |
361+
| **JavaPackager** | 5 | 0 | 3 | 1 | 5 | 0 | 4 | 4 | 0 | 4 | 4 | 10 | 7 | **36** |
362+
| **Badass plugins** | 4 | 0 | 0 | 1 | 8 | 0 | 5 | 2 | 0 | 5 | 5 | 10 | 6 | **35** |
363+
| **Packr** | 1 | 0 | 0 | 0 | 5 | 0 | 3 | 0 | 0 | 3 | 2 | 10 | 4 | **22** |
357364
| **Launch4j** | 1 | 0 | 2 | 1 | 2 | 0 | 1 | 1 | 0 | 3 | 3 | 10 | 5 | **22** |
358-
| **JSmooth** | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 10 | 1 | **8** |
365+
| **JSmooth** | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 10 | 1 | **11** |
359366

360367
!!! note "Footnotes"
361-
¹ Conveyor's cross-compilation (10/10) is a major advantage not captured in a single dimension.
368+
¹ install4j's visual IDE and enterprise maturity are significant intangibles not fully captured in a single dimension.
362369

363-
² install4j's visual IDE and enterprise maturity are significant intangibles.
370+
² Conveyor's cross-compilation (build all platforms from one machine, 10/10) is a major advantage not captured in a single dimension.
364371

365372
### Cross-Ecosystem Comparison (Top Tools)
366373

367-
| Tool | Ecosystem | Formats | Update | Signing | CI/CD | Platform | Sandbox | Runtime | **Total** |
374+
| Tool | Ecosystem | Formats | Update | Signing | CI/CD | Platform | Sandbox | Runtime | **Total**¹ |
368375
|------|-----------|:-------:|:------:|:-------:|:-----:|:--------:|:-------:|:-------:|:---------:|
369376
| **Nucleus** | JVM | 10 | 9 | 10 | 10 | 10 | 10 | 10 | **89** |
370-
| **Electron Builder** | Electron | 9 | 10 | 10 | 4 | 10 | 9 | 8 | **87** |
371-
| **Tauri** | Rust+Web | 6 | 9 | 8 | 9 | 10 | 4 | 8 | **82** |
372-
| **Conveyor** | JVM | 4 | 10 | 8 | 5 | 10 | 3 | 1 | **84** |
373-
| **install4j** | JVM | 4 | 9 | 8 | 3 | 10 | 0 | 2 | **79** |
374-
| **Electron Forge** | Electron | 7 | 8 | 8 | 4 | 10 | 9 | 8 | **78** |
375-
| **Briefcase** | Python | 5 | 0 | 8 | 2 | 5 | 3 | 0 | **44** |
377+
| **Electron Builder** | Electron | 9 | 10 | 10 | 4 | 10 | 9 | 8 | **85** |
378+
| **Tauri** | Rust+Web | 6 | 9 | 8 | 9 | 10 | 5 | 8 | **82** |
379+
| **Electron Forge** | Electron | 7 | 8 | 8 | 4 | 10 | 9 | 8 | **77** |
380+
| **install4j** | JVM | 4 | 9 | 8 | 3 | 10 | 0 | 2 | **64** |
381+
| **Conveyor** | JVM | 4 | 10 | 10 | 6 | 10 | 3 | 1 | **61** |
382+
| **Briefcase** | Python | 5 | 0 | 8 | 2 | 5 | 3 | 0 | **43** |
383+
384+
!!! note
385+
¹ Total scores use all 13 dimensions (including Optimization, Installer Customization, Documentation, Community, Pricing, and Build System — not shown in this table). Non-JVM tools are scored using equivalent criteria for their ecosystem.
376386

377387
---
378388

@@ -386,7 +396,7 @@ Built into the JDK since Java 14 (GA in 16). Creates platform-specific installer
386396

387397
#### Conveyor (Hydraulic)
388398

389-
A modern CLI tool that uniquely supports cross-compilation — build for Windows, macOS, and Linux all from a single machine. On Windows it produces MSIX, a small custom EXE installer (~500KB), and ZIP; on macOS separate per-arch .app bundles; on Linux DEB and tarball. Uses Sparkle for macOS updates, MSIX for Windows updates, and APT repositories for Linux. Self-signing for Windows (no certificate purchase needed). Supports OS-level registration of URL handlers (deep links) and file associations via config (`app.url-schemes`, `app.file-associations`), but does not provide runtime libraries to receive them — JVM apps must use third-party libraries. Note: macOS "universal" is separate per-arch bundles, not a fat binary; Windows/Linux ARM64 are not included by default. Trade-offs: 5 distributable formats, no DMG/NSIS/RPM/AppImage/Snap/Flatpak, no installer customization. $45/month for commercial use.
399+
A modern CLI tool that uniquely supports cross-compilation — build for Windows, macOS, and Linux all from a single machine. On Windows it produces MSIX, a small custom EXE installer (~500KB), and ZIP; on macOS separate per-arch .app bundles; on Linux DEB and tarball. Uses Sparkle for macOS updates, MSIX for Windows updates, and APT repositories for Linux. Self-signing for Windows (no certificate purchase needed), Azure Trusted Signing supported since v19 (cross-platform). Supports OS-level registration of URL handlers (deep links) and file associations via config (`app.url-schemes`, `app.file-associations`), but does not provide runtime libraries to receive them — JVM apps must use third-party libraries. Provides example CI workflows (GitHub Actions) for build + deploy to GitHub Releases or SSH. Note: macOS "universal" is separate per-arch bundles, not a fat binary; Windows/Linux ARM64 are not included by default. Trade-offs: 5 distributable formats, no DMG/NSIS/RPM/AppImage/Snap/Flatpak, no installer customization. $45/month for commercial use.
390400

391401
#### install4j (ej-technologies)
392402

0 commit comments

Comments
 (0)