Skip to content

Releases: jbangdev/jbang

early-access

early-access Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 27 Aug 20:32
ea1c3dd

WARNING: This is an early-access release directly from main branch, not intended for production use.

To enable experimental native-image jbang set JBANG_USE_NATIVE to true, i.e. export JBANG_USE_NATIVE=true

If you want to try the latest and greatest, please give it a spin and report any issues you find.

Here is how to install it:

Linux / macOS / WSL (bash):

curl -Ls https://sh.jbang.dev | JBANG_DOWNLOAD_VERSION=early-access bash -s - app setup

Windows PowerShell:

$env:JBANG_DOWNLOAD_VERSION='early-access'; iex "& { $(iwr -useb https://ps.jbang.dev) } app setup"

Changelog

🚀 Features

  • e9c5191 feat: suggest closest subcommand for mistyped commands (#2628)
  • 471fd3a feat: add Roq website teaser

🐛 Fixes

  • ea1c3dd fix: allow {basename} sidecar files with different extensions (#2648)
  • 50f1727 fix: select default init template by extension
  • 57aceef fix: migrate remaining deprecated BaseCommand.EXIT_* usages
  • a808377 fix: migrate from deprecated BaseCommand.EXIT_* to ExitException.EXIT_*
  • 5fe1717 fix: migrate remaining EXIT_EXECUTE references to ExitException
  • 755e959 fix: PR build install command downloads and runs directly
  • 7fb3088 fix: PR build install command uses temp JBANG_DIR
  • af5deea fix: publish-pr-build artifact download and PR lookup
  • 4e55954 fix: avoid replacing active Windows command launcher (#2617)

🛠 Build

  • f4e7d6d build: upgrade aesh to 3.16.6 (#2627)
  • 351b42b ci: pin upload-pages-artifact to v4 (transitive SHA)
  • 90562e0 ci: pin website workflow actions
  • 8c4fad6 ci: deploy website from main

  • ab1c0da update .all-contributorsrc [skip ci]
  • 0e15729 update CONTRIBUTORS.md [skip ci]

Contributors

We'd like to thank the following people for their contributions:
Arnab Nandy, GitHub, Max Rydahl Andersen, Ståle Pedersen, allcontributors[bot]

v0.141.0

Choose a tag to compare

@maxandersen maxandersen released this 14 Jul 05:07

A quick release to mainly fix two regressions in the Aesh move + various fixes/cleanups.

  • --runtime-option with space separator works again--runtime-option -Dfoo=bar was broken since 0.139.3, now fixed via aesh 3.16.5 (#2607)
  • Comma-delimited deps in config restoredrun.deps=a,b in jbang.properties was passed as a single GAV instead of being split; fixed upstream in aesh 3.16.5 (#2607)
  • Markdown scripts with main methods now build correctly (#2592)
  • Local artifacts loaded asynchronously — faster startup when local deps are present (#2595)
  • DomTrip-based POM parsing — more robust and round-trip-safe POM handling (#2526)
  • Quarkus version upgraded to resolve JBoss Threads library warning (#2591)
  • CVE-2025-67030 resolved (#2476)

Refactoring

  • ExitException moved out of cli package — now lives in dev.jbang with factory methods (ExitException.invalidInput(...), etc.) and exit code constants. Old constants in BaseCommand remain as deprecated delegates. This clears the path for a future jbang-core library split (#2602)

Dependency Updates

  • aesh → 3.16.5
  • SLF4J → 2.x
  • JUnit BOM → 5.14.4
  • Hamcrest → 3.0
  • Gradle → 8.14.5
  • Java toolchain → 21.0.11-tem
  • Maven/Gradle export wrappers updated

Changelog

🐛 Fixes

🔄️ Changes

  • b3d1b30 refactor: move ExitException and exit codes out of cli package (#2602)

🧰 Tasks

  • 0e06dcc chore(deps): update Java to 21.0.11-tem (#2604)
  • c90471d chore(deps): update Maven and Gradle wrappers used by jbang export {maven,gradle} (#2605)
  • e387b36 chore(deps): update plugin org.gradle.toolchains.foojay-resolver-convention to v1 (#2495)
  • e037c41 chore(deps): update hamcrest to version 3.0 (#2424)
  • 00c7476 chore(deps): update Gradle to 8.14.5 (#2470)
  • e56cbac chore(deps): update docker/login-action digest to c94ce9f (#2487)
  • 438550c chore(deps): update github/codeql-action digest to 99df26d (#2488)

🛠 Build


Contributors

We'd like to thank the following people for their contributions:
Arnab Nandy, GitHub, Max Rydahl Andersen, Mend Renovate, Tamas Cservenak, Werner Fouché

v0.140.1

Choose a tag to compare

@maxandersen maxandersen released this 11 Jul 16:24

JBang Enterprise Edition release

🔐 Authenticated Repositories Just Work

JBang now supports .netrc credentials and environment tokens (GITHUB_TOKEN, GITLAB_TOKEN) everywhere — both for HTTP downloads and for Maven dependency resolution.

That means fetching dependencies from GitHub Packages, GitLab registries, or any private Maven repository now can be done without needing a settings.xml; and lets you reuse git, github and gitlab cli auth mechanisms.

Example .netrc to enable auth for github maven repositories and https locations:

machine maven.pkg.github.com
    jbang-auth gh-auth
    jbang-auth-host github.com

machine raw.github.company.com
    jbang-auth gh-auth
    jbang-auth-host github.ibm.com

machine gitlab.company.com
    jbang-auth glab-auth

Please try and see if it works on your protected sites - let us know if works or not; we might be able to add support for it :)

☕ Install Any JDK From a URL or Local Archive

You can now point jbang jdk install at a URL or a local .tar.gz/.zip archive to install any JDK distribution, not just the ones JBang knows about. Got a custom build, an EA release, or a vendor-specific JDK? Just hand JBang the link.

Linking a local JDK is also smoother: jbang jdk install 21 /path/to/jdk now (again) works directly instead of requiring a non-numeric ID.

🐚 Tab Completion Gets Smarter

jbang completion now auto-detects your shell — no need to remember whether to pass bash, zsh, or fish. Just run jbang completion and it figures it out. PowerShell (pwsh) completion is now supported too. The output includes setup instructions so you know exactly what to add to your shell config.

🪟 Windows Fixes

  • jbang deps search no longer hangs on Windows.
  • jbang app install now correctly handles special characters and -D properties in PowerShell.

Other Improvements

  • Better error messages when catalog downloads fail — no more cryptic stack traces.
  • Clearer app setup messages — when JBang is already on PATH, it tells you so and suggests jbang version --update
    instead of leaving you guessing.
  • Native image fixes — resolved a plugin discovery collision and improved reflection registration for Maven model classes.

What's Changed

New Contributors

Full Changelog: v0.139.3...v0.140.1

v0.139.3

Choose a tag to compare

@maxandersen maxandersen released this 20 Jun 17:18

Fixes to how publishing is done so it shows up in sdkman etc.

Changelog

🐛 Fixes

  • 7cbaeb7 fix: use shared-build-setup in publish-packages workflow
  • cf2dc03 fix: add completion and deps search demo

v0.139.2

Choose a tag to compare

@maxandersen maxandersen released this 20 Jun 15:36

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.

v0.138.0

Choose a tag to compare

@maxandersen maxandersen released this 13 Apr 21:26

Lots of fixes/clean up but also a few notable fixes/features:

Thanks to @wfouche jbang now also supports running self-bootable .war's
and thanks to @ayagmar we now honor more MANIFEST.MF entries similar to how java -jar works - meaning flags like enable-native-access is now honored so Java don't complain.

Changelog

🚀 Features

  • fb47430 feat: add WAR file support with full JAR parity (#2431)

🐛 Fixes

🧰 Tasks

  • df24b35 chore: ignore .worktrees directory for git worktrees
  • 74f9cf8 chore(deps): upgrade default Groovy version to 4.0.30 (#2398)
  • a9c9126 chore(deps): upgrade gson to 2.13.2 (#2395)
  • 49e4bce chore(deps): upgrade default Kotlin version to 2.3.10 (#2399)

📝 Documentation

Contributors

We'd like to thank the following people for their contributions:
Abdeslam Yassine Agmar, Claude Sonnet 4.5, Cursor Agent, GitHub, Max Rydahl Andersen, Werner Fouché

v0.137.0

Choose a tag to compare

@maxandersen maxandersen released this 13 Feb 23:31

bugfixes - should probably been a patch version :)

@wfouche fixed bugs nd added more documentation around how to build executables.

Changelog

🐛 Fixes

  • 03cdf04 fix: upgrade Gradle to 8.14.4 (#2384)
  • d7cedb7 fix(deps): upgrade Java to 21.0.10-tem (#2386)
  • 821679a fix: fixes ImplicitCatalogRef to generate proper urls
  • c85f3e9 fix: do not overwrite the main method parameters (#2379)

📝 Documentation

  • 0440de3 docs: document how to create native images using jbundle (#2382)
  • f396b53 docs: missing --name flag in alias add (#2385)

Contributors

We'd like to thank the following people for their contributions:
GitHub, Greg Chabala, Max Rydahl Andersen, Werner Fouché, allcontributors[bot]

v0.136.0

Choose a tag to compare

@maxandersen maxandersen released this 03 Feb 18:22

First release of 2026 - biggest fix is that a concurrency issue found when building or running lots of projects concurrently - so now you can build and run without risk of it failing.

Also added -x option to always get stacktrace on errror so you don’t need full —verbose.

Add central-portal-snapshots for easy testing of upcoming dependencies from maven central.

And ability to use relative paths, like ./build/repo that’s useful when wanting to use Gradle dependencies but prefer not to publish to local maven repo.

Enjoy!

Changelog

🚀 Features

  • 2814a22 feat: relative repos. --repos=local=./build/repo (#2376)
  • 17ff08e feat: dont fail on concurrent build cache access (#2378)
  • 190ceb0 feat: add central-portal-snapshots maven repo shorthand/alias (#2371)
  • fb5874c feat: -m supports pattern matching (#2364)

Contributors

We'd like to thank the following people for their contributions:
GitHub, Max Rydahl Andersen

v0.135.1

Choose a tag to compare

@maxandersen maxandersen released this 13 Dec 19:47

A fix for proper downloading of Java on Alpine Linux's that requires musl rather than libc;
and documentation on how to work with Windows terminals and their UTF-8/emojii (lacking) support.

Changelog

🐛 Fixes

  • c72aa02 fix: use 17 as minium for alpine (#2354)
  • 0ae202a fix: describe how to configure UTF-8 support for Windows (#2356)

Contributors

We'd like to thank the following people for their contributions:
Copilot, GitHub, Max Rydahl Andersen, Werner Fouché

v0.135.0

Choose a tag to compare

@maxandersen maxandersen released this 30 Nov 15:49

Release fixing a six old bug/mistake - thanks @wfouche ! :)

JBANG_JAVA_OPTIONS was mistakenly being applied to both jbang itself
and the applications launched by JBang. Now its clearly separated which is less confusing and
more controllable.

Thus if you for some reason used JBANG_JAVA_OPTIONS to configure global flags for JBang and JBang launched apps you now should set JBANG_APP_JAVA_OPTIONS to have them applied to the apps.

Changelog

🐛 Fixes

  • 85562e3 fix: use JBANG_APP_* rather than JBANG_* for env config (#2344)

📝 Documentation

  • 1d3a606 docs: new JBANG_APP_JAVA_OPTIONS environment variable (#2345)

Contributors

We'd like to thank the following people for their contributions:
GitHub, Max Rydahl Andersen, Werner Fouché