Releases: jbangdev/jbang
Release list
early-access
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
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
A quick release to mainly fix two regressions in the Aesh move + various fixes/cleanups.
--runtime-optionwith space separator works again —--runtime-option -Dfoo=barwas broken since 0.139.3, now fixed via aesh 3.16.5 (#2607)- Comma-delimited deps in config restored —
run.deps=a,binjbang.propertieswas 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
ExitExceptionmoved out ofclipackage — now lives indev.jbangwith factory methods (ExitException.invalidInput(...), etc.) and exit code constants. Old constants inBaseCommandremain as deprecated delegates. This clears the path for a futurejbang-corelibrary 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
- 57ebb47 fix: update aesh to 3.16.5 to fix --runtime-option space separator and comma-delimited deps from config (#2607)
- d68dc18 fix: resolves mutation warning (#2545)
- b92da09 fix(deps): update slf4j monorepo to v2 (#2500)
- 14c4b29 fix: resolves CVE-2025-67030 (#2476)
- c90c8a9 fix(deps): update dependency org.junit:junit-bom to v5.14.4 (#2489)
- 7c80171 fix: upgrade Quarkus version to resolve JBoss Threads library warning… (#2591)
- 1964736 fix: Use DomTrip for POM parsing (#2526)
- 0bda4a3 fix: build markdown scripts with main methods (#2592)
- 4d4158a fix: load local artifacts asynchronously (#2595)
🔄️ Changes
🧰 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
- d56044d [minor] release
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
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
- fix: register all Maven model classes for native image reflection by @maxandersen in #2551
- build: publish PR builds to jbang-pr-builds repo for easy testing by @maxandersen in #2562
- For JSON resources fetched over HTTP(S), explicitly set the
Acceptheader by @0x6675636b796f75676974687562 in #2563 - fix: clarify app setup messages and hint about jbang version --update by @maxandersen in #2558
- fix: resolve jbang deps search hang on Windows #2549 by @arnabnandy7 in #2568
- fix: add tests for -R and -C attached value syntax regression (#2555) by @maxandersen in #2556
- feat: add .netrc support and GITLAB_TOKEN for authenticated HTTP access by @maxandersen in #2565
- fix: improve error messages for catalog download failures by @maxandersen in #2561
- feat: improve completion command with shell auto-detection, pwsh support, and usage hints by @maxandersen in #2552
- fix: auto-generate non-numeric id when linking JDK with numeric version by @maxandersen in #2567
- fix: close shell configuration file stream by @sinhasebur in #2547
- test: add tests for jdk list by @quintesse in #2538
- feat: added ability to install JDKs from a URL or archive + fix by @quintesse in #2578
- fix: rename native binaries to avoid plugin discovery collision by @maxandersen in #2579
- docs: Removed Duplicate Sentences from Document by @DivyanshuBist in #2582
- fix: make testBuildTwiceWithCliDeps resilient to error message format by @maxandersen in #2586
- fix: PowerShell quoting for special chars and -D property spacing in app install by @maxandersen in #2585
- feat: apply netrc/env credentials to Maven repository authentication by @maxandersen in #2583
- build: update aesh by @maxandersen in #2590
New Contributors
- @0x6675636b796f75676974687562 made their first contribution in #2563
- @arnabnandy7 made their first contribution in #2568
- @sinhasebur made their first contribution in #2547
- @DivyanshuBist made their first contribution in #2582
Full Changelog: v0.139.3...v0.140.1
v0.139.3
v0.139.2
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_VERSIONe.g.early-access(#2480)
🐛 Fixes
- fix: Multi-JDK regression from Aesh migration (#2515)
- fix: Support
--option=falsesyntax for boolean flags (#2504, #2505) - fix: Generate correct
module-inforequires for JavaFX//MODULEscripts (#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
--manifestoption (#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
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
🐛 Fixes
- 27a54eb fix: mutated fields cannot be final (#2430)
- 26c35a3 fix: include native image results in the merged report
- fc13cad fix: only show test summaries on failure to reduce noise (#2435)
- 32568d1 fix(run): honor manifest launcher flags (#2439)
- 5e70414 fix: only post summary on failure. have .ci and direct links in summary
- 8a98864 fix: add must relevant reports on top of action runs
- ffae7d4 fix: resolves CVE-2026-24400 (#2405)
- ab96e0d fix(deps): upgrade to gradle plugin com.gradleup.shadow (#2394)
- afc2015 fix: resolves CVE-2025-48924 (#2393)
- 74df5cc fix: replaced plugin gradle.enterprise with gradle.develocity (#2402)
🧰 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
- 71ac87d docs: link to JBang documentation in DeepWiki (#2390)
- e31b98c docs: set compact_banner to true (#2411)
- ee03f78 docs: upgrade to Javalin 7.1.0 (#2412)
- 0d7b295 docs: list more alternatives (#2353)
- 4853d6b docs: fix jbundle.toml formatting (#2391)
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
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
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)
- 4bcb119 [minor] release
Contributors
We'd like to thank the following people for their contributions:
GitHub, Max Rydahl Andersen
v0.135.1
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)
- ac71400 [patch] release
Contributors
We'd like to thank the following people for their contributions:
Copilot, GitHub, Max Rydahl Andersen, Werner Fouché
v0.135.0
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
📝 Documentation
- f3c68b2 [minor] release
Contributors
We'd like to thank the following people for their contributions:
GitHub, Max Rydahl Andersen, Werner Fouché