github jbangdev/jbang v0.139.2

latest release: early-access
5 hours ago

JBang 0.139.2 Changelog

Big release — the biggest change is replacing picocli with Aesh for CLI parsing, plus native binary builds are now available as early-access.

⭐ Highlights

Picocli → Aesh Migration

JBang's CLI framework has been migrated from picocli to Aesh (#2453).

This is a big change, but luckily JBang has a large integration test suite that let us test and verify majority of all jbang commands thus we feel quite confident the CLI behavior should be the same as before.

If you spot differences, things breaking or not working as before please do open issues.

Why ?

By moving to Aesh we are able to get JBang to startup 2-3x faster in JVM mode 5x time faster in native.

That is the difference between "meh - ok enough" to "I didn't notice - is this really Java?".

This enables us to do much more interesting completion support and finally seriously offer jbang native binaries.

Native Binaries (Early Access) 🚀

We've had native-image builds of JBang for a while, but not integrated into the install and automatic download and updates JBang supports.

We now publishes GraalVM native image builds as part of this release and the early-access release channel. Native binaries are available for Linux, macOS, and Windows — giving you near-instant startup with no JVM required.

To enable use native binaries set the environment variable JBANG_USE_NATIVE to true.

export JBANG_USE_NATIVE=true
curl -Ls https://sh.jbang.dev | bash -s - ...

This work on Windows, Linux and OSX using the curl install mechanism - it should also work for package installers but not fully
tested so please do try use it with other install mechanisms and let us know if it works or not :)

Note: a key design choice is that pure JVM mode is always available thus if you run on a platform where native image does not work; the JVM mode still works!

Smart Tab Completion

With the new found speed boost we can offer many interesting shell completions features, starting of with completion of the application or script you can pass to run, build, etc.

  • Local files filtered to JBang extensions (.java, .jsh, .kt, .groovy, .md)
  • Alias names from catalogs — type @<TAB> to browse catalogs
  • Maven GAV completion from local ~/.m2/repository
  • GitHub URL navigation — complete files/directories in GitHub repos via API
completion-demo.mp4

This will work in bash, zsh and fish - expect update in future that enables it in PowerShell too.

TamboUI Dependency Search

The jbang deps search TUI has been rewritten from JLine to TamboUI (#2465) + aesh, with a dock-based layout, fuzzy match highlighting, async search with debounce, intent classification (paste a Java import or compiler error and it auto-searches Central), and a version picker side pane.

deps-search-demo.mp4

Download retry support

With GitHub having more and more interesting outages we've gone and improved the resilience of JBang download and added retry support.

If download fails of JBang; we will retry with exponential backoff. See documentation for various settings you can do for setting retry count and timeout behaviour.

Install multiple JDKs

JBang's jdk discovery and install options now allow installing multiple JDKs for a given Java version.


🚀 Features

  • feat: Replace picocli with aesh for CLI parsing (#2453)
  • feat: Add smart tab-completion for scriptOrFile argument (#2466)
  • feat: Replace JLine with TamboUI for dependency search TUI (#2465)
  • feat: Install multiple JDKs with same major version (#2271)
  • feat: Add download retry support to startup scripts (#2461)
  • feat: Support release tag names in JBANG_DOWNLOAD_VERSION e.g. early-access (#2480)

🐛 Fixes

  • fix: Multi-JDK regression from Aesh migration (#2515)
  • fix: Support --option=false syntax for boolean flags (#2504, #2505)
  • fix: Generate correct module-info requires for JavaFX //MODULE scripts (#2525)
  • fix: JDK 26 — put modules required by JavaFX modules on the module-path (#2511)
  • fix: Use daemon thread for version check to prevent JVM hang (#2524)
  • fix: Close DirectoryStream in ExternalCommandsProvider.listFiles (#2507)
  • fix: Use stream copy instead of transferFrom for service file merging
  • fix: Prevent duplicate PATH entries on Windows setup (#2455)
  • fix: Native bundle archives now have a root folder (#2535)
  • fix: Mark early-access releases as pre-release instead of draft (#2536)
  • fix: Use proper versioned download URL for native builds
  • fix: Update GraalVM native image metadata (#2540, #2541, #2543)
  • fix: Use manual retry loop in bash download() with user feedback (#2472)
  • fix: Temporarily disable maven deploy (failing) — will be restored

🏗️ Build & CI

  • Build with Java 25 toolchain (#2448)
  • Upgrade to Aesh 3.11 → 3.12.1 → 3.13 (#2509, #2516, #2519)
  • Update CI and release pipeline for native bundles with latest JReleaser (#2473)
  • Use nisse-gradle-plugin for build metadata (#2464)
  • Pin GitHub Actions to full-length commit SHAs (#2469)
  • Update GitHub Actions to Node.js 24 versions (#2474)
  • Auto-cancel superseded CI build runs via concurrency group
  • Optimize test suite performance: 2m42s → ~50s (#2527)
  • Show all OS test results in merged Allure report (#2486)
  • Spotless plugin updated to v8 (#2492)

📝 Documentation

  • Add description to --manifest option (#2506)
  • Document native image option on early access
  • Update AGENTS.md with script testing and env var guidelines (#2462)

⚠️ Known Issues

  • Maven deploy is temporarily disabled — the publish step is failing and has been bypassed for this release. JBang JARs are not published to Maven Central for 0.139.x. This will be fixed in an upcoming release.

Don't miss a new jbang release

NewReleases is sending notifications on new releases.