Releases: jruby/jruby
Release list
JRuby 10.1.2.0
The JRuby community is pleased to announce the release of JRuby 10.1.2.0.
- Homepage: https://www.jruby.org/
- Download: https://www.jruby.org/download
JRuby 10.1.x targets Ruby 4.0 compatibility.
Thank you to our contributors this release, you help keep JRuby moving forward! [@aminmansuri], [@drzaiusx11], [@evaniainbrooks], [@gillesbergerp], [@jcharaoui], [@jwils], [@kares], [@lloeki], [@makenowjust], [@nobu], [@sampokuokkanen], [@shugo]
Notable Changes
Compatibility
- Multiple fixes for fibers and fiber scheduler support. #9604, #9607, #9622, [#9645], [#9649], [#9656], [#9660]
Performance
- Fixed a regression in startup time on MacOS by properly loading native JNR subsystem. [#9690]
- Improve performance of Ruby subclasses of Java classes. #9619, #9557
- Improve performance of autoloads overridden by an actual require. [#9677]
Standard Library
- Update to jar-dependencies 0.6.1 using mima for dependency resolution instead of the ruby-maven gem. #9515, [#9720]
- Update default and bundled standard library gems. [#9705]
Default gems
- erb 6.0.7
- error_highligh 0.7.2
- ffi 1.17.4
- io-console 0.9.4
- ipaddr 1.2.9
- json 2.21.2
- net-protocol 0.4.0
- pp 0.6.4
- psych 5.5.0
- resolv 0.8.0
- strscan 3.1.8
- syntax_suggest 3.0.0
- timeout 0.6.1
- win32-registry 0.1.2
Bundled gems
- bigdecimal 4.1.2 (ruby parts only)
- csv 3.3.6
- minitest 5.27.0
- net-imap 0.6.7
- nkf 0.3.0
- pstore 0.2.1
- rdoc 7.2.0
- reline 0.7.0
- resolv-replace 0.2.0
- rss 0.3.3
- test-unit 3.7.8
76 Issues and PRs resolved for 10.1.2.0
- #287 Class does not inherit singleton_class's class methods
- #6119 shopify-api gem reporting NoMethodError: undefined method `threadsafe_attribute'
- #8743 IO#wait updates for Ruby 3.2-3.4
- #9026
JRuby --helpfails if PAGER has an option - #9301 Find an alternative to shipping ruby-maven
- #9403 add keyword arg support to callMethod directly
- #9441 Fix original_name when two methods share a wrapper (like is_a? kind_of?)
- #9446 Fix metaclass dispatch missing meta-metaclass methods
- #9448 Use implementation class for protected check
- #9460 Check argument definedness in defined?(receiver.method(arg))
- #9507 IO::Buffer#read and #write treat length=0 as zero bytes instead of remaining buffer capacity
- #9515 Switch to jar-deps based on mima
- #9551
circular causeswhen re-raising an exception originally raised with the two-argumentraise Class, argform (regression in 10.1.1.0) - #9554 Raise fixes and additional spec permutations
- #9556 Implement Proc#hash consistently with Proc#eql?
- #9557 refactor and improve reification of java subclasses
- #9559 dup of frozen class can't be extended
- #9560 raise should re-populate exception trace set to nil
- #9565 Socket address APIs return uncompressed IPv6 where Addrinfo#ip_address compresses, breaking Resolv::DNS with 2+ nameservers
- #9568
Kernel#sprintfcallsHash#default_procwith incorrect args - #9570 fix dup for frozen class
- #9579 JRuby can't pass
STDOUTto child process when a differentIOis given asout: - #9582 Data.define subclass fields are nil when module is included in define block
- #9585 Marshaling incompatibility with cyclic objects?
- #9587
IO::Buffer#copyand#set_stringreject the documented source_offset fourth argument - #9588 Accept
source_offsetinIO::Buffer#copyand#set_string - #9593 Compiler gives a constant-folded ASCII String the code range CR_VALID, which breaks the
eql?/hashcontract - #9595
IO#tty?silently returnstruefor redirected stdio in embedded runtimes when--add-opensare missing - #9599 Kernel#require redefined inside a required file isn't seen by autoload dispatch after Kernel.prepend (CRuby 4.0 OK / JRuby 10 fails)
- #9600 TracePoint does not support
fiber_switch(Ruby 2.3+ compatibility) - #9602 FFI warning on when running jruby on OpenBSD/arm64, possible $$ issue as well
- #9603 Implement :fiber_switch trace event
- #9604 Fix Fiber.schedule inside a non-blocking Fiber
- #9607 Fix Thread blocking count drifting across Fiber switches
- #9609 No validation of unsetenv_others for Process.exec causes specs to execve() abruptly
- #9614 Unreliable net-http tests
- #9618 Resolve jar path if it's a symlink
- #9619 refactor and improve reification of java subclasses (refactor only)
- #9622 Defer Kernel#sleep to the Fiber scheduler
- #9626 Handle nil-or-boolean arguments in popen kwargs
- #9627 Use CRuby logic for exec
- #9628 Fix IO::Buffer#read and #write, treat length=0 as remaining buffer capacity
- #9630 Pass -1 for max arity when there's rest args
- #9631 Eliminate all uses of unused "name" for arity errors
- #9634 Report the errno that native exec actually returned
- #9638 Bump bundled
resolvdefault gem to 0.7.2 - #9640 [AppCDS usage causing sealing violations][#9640]
- #9645 [Fix the Fiber scheduler IO path: negated errno, zero length, buffer size][#9645]
- #9648 [Run pager commands through the platform shell][#9648]
- #9649 [Mutex Deadlock fix: Track the fiber that owns a Mutex][#9649]
- #9650 [Don't raise EBADF closing an IO whose channel NIO already closed][#9650]
- #9653 [[Java 26 Leyden] AOT Cache breaks dynamic Ruby proxies for classes loaded from external JARs][#9653]
- #9654 [Time.new(String) raises java.lang.ArrayIndexOutOfBoundsException when the string ends where a ':' is expected][#9654]
- #9655 [NoSuchMethodError when a Ruby subclass of a Java class includes a module][#9655]
- #9656 [Fix IO#wait arguments and return values, and defer it to Fiber.scheduler][#9656]
- #9659 [[ji] resolve Java super <init> through included modules][#9659]
- #9660 [Fix where Fiber#transfer hands control back][#9660]
- #9662 [Fix custom respond_to? handling: include_all, defined? lookup, deprecated signature][#9662]
- #9665 [Data subclasses in net-imap are losing fields][#9665]
- #9669 [jruby/vm integer messages fail on JRuby 10 due to Fixnum reference][#9669]
- #9670 [Update tagged Data specs][#9670]
- #9677 [Constant declared with
autoloadand then defined by a directrequirekeeps its UNDEF table slot; every later lookup re-enters LoadService (very slow inside a WAR)][#9677] - #9679 [Don't wrap an alias in another alias][#9679]
- #9683 [Fix bin/* patterns in .gitignore][#9683]
- #9685 [Fix setup sequence for cgi/escape][#9685]
- #9690 [JFFI bad library load is a huge startup hit on MacOS][#9690]
- #9691 [Support zero-size IO::Buffers][#9691]
- #9695 [require "json" warns about redefined to_hash with -w in JRuby 10.1.1.0][#9695]
- #9696 [Set the aliased flag on the real method, not the wrapper][#9696]
- #9697 [ObjectSpace::WeakMap is double-weak in CRuby][#9697]
- #9701 [Allow specifying AppCDS cache location and use safer default][#9701]
- #9703 [
Redis::ConnectionErrorwith JRuby 10][#9703] - #9705 [Update stdlib][#9705]
- #9709 [Additional stdlib updates][#9709]
- #9719 [IO#accept raises NullPointerException instead of IOError when the socket is closed concurrently][#9719]
- #9720 [Update jar-dependencies to 0.6.1][#9720]
JRuby 10.0.7.0
The JRuby community is pleased to announce the release of JRuby 10.0.7.0.
- Homepage: https://www.jruby.org/
- Download: https://www.jruby.org/download
JRuby 10.0.x targets Ruby 3.4 compatibility.
Thank you to our contributors this release, you help keep JRuby moving forward! @aminmansuri, @evaniainbrooks, @gillesbergerp, @jwils, @kares, @lloeki
Notable Changes
Performance
- Fixed a regression in startup time on MacOS by properly loading native JNR subsystem. #9688, #9689
- Improve performance of autoloads overridden by an actual require. [#9677], #9675
Java Integration
- The location of the AppCDS JSA file can now be specified with JRUBY_JSA_HOME. #9667
Standard Library
Default gems
53 Issues and PRs resolved for 10.0.7.0
- #8456 ObjectSpace::WeakMap is double-weak in CRuby
- #8786
Redis::ConnectionErrorwith JRuby 10 - #9319 [Java 26 Leyden] AOT Cache breaks dynamic Ruby proxies for classes loaded from external JARs
- #9327 Data.define subclass fields are nil when module is included in define block
- #9491 defined?(...) in eval'd for loop fails with TypeError
- #9498 jruby/vm integer messages fail on JRuby 10 due to Fixnum reference
- #9499 Use Integer for JRuby VM messages
- #9519 Also set up the current module when in a for body
- #9525 Marshaling incompatibility with cyclic objects?
- #9528 raise should re-populate exception trace set to nil
- #9529 starttls test in net-imap hangs the suite
- #9530 Data subclasses in net-imap are losing fields
- #9531 Time.new(string, in: ...) raises TypeError on the third call at a call site (JIT only)
- #9537 NoMatchingPatternError#=== doesn't match instance of NoMatchingPatternKeyError
- #9538 Update jruby-openssl to 0.16.2
- #9542 Fix inheritance of NoMatchingPatternKeyError
- #9544 Ensure uniform keywords flags in native method annotations
- #9548 [fix] re-raising exception with nil backtrace
- #9550 Socket address APIs return uncompressed IPv6 where Addrinfo#ip_address compresses, breaking Resolv::DNS with 2+ nameservers
- #9553 FFI warning on when running jruby on OpenBSD/arm64, possible $$ issue as well
- #9558
Kernel#sprintfcallsHash#default_procwith incorrect args - #9561 JRuby-openssl 0.16.2 not included in
10.0series - #9562 fix Data.define subclass fields are nil when module is included in define block
- #9564 Use SocketUtilsV6.getIPV6Address to normalize IPv6 here
- #9567 Pass correct args for Hash#default_proc
- #9577 JRuby can't pass
STDOUTto child process when a differentIOis given asout: - #9578 Fix spawn dup ordering
- #9586 Register the "Hash" symbol when writing identity hash
- #9589 Kernel#require redefined inside a required file isn't seen by autoload dispatch after Kernel.prepend (CRuby 4.0 OK / JRuby 10 fails)
- #9590
IO#tty?silently returnstruefor redirected stdio in embedded runtimes when--add-opensare missing - #9591 Compiler gives a constant-folded ASCII String the code range CR_VALID, which breaks the
eql?/hashcontract - #9592 Scan the code range when folding a compound string
- #9594 More accurate TTY checking for IO
- #9598 Invalidate prepended origin module as well as subclasses
- #9601 Update JNR dependencies for jnr-release 1.2
- #9608 AppCDS usage causing sealing violations
- #9623 Time.new(String) raises java.lang.ArrayIndexOutOfBoundsException when the string ends where a ':' is expected
- #9624 Fix out-of-bounds read building Time.new parse errors
- #9625 Read unnamed modules of the loaders JRuby loads Java classes from
- #9637 Bump bundled
resolvdefault gem to 0.7.2 - #9639 Resolve jar path if it's a symlink
- #9641 Update resolv to 0.7.2
- #9661 Report a failed non-blocking connect through select and SO_ERROR (#8786)
- #9663 Set up Data subclass metaclass correctly
- #9667 Allow specifying AppCDS cache location and use safer default
- #9674 Constant declared with
autoloadand then defined by a directrequirekeeps its UNDEF table slot; every later lookup re-enters LoadService (very slow inside a WAR) - #9675 Release the autoload claim when Autoload#load has nothing to load
- #9687 Hold ObjectSpace::WeakMap keys weakly, by identity
- #9688 JFFI bad library load is a huge startup hit on MacOS
- #9689 Update JFFI to get the startup library fix
- #9698 Allow configuring the home location for JSA files
- #9714 IO#accept raises NullPointerException instead of IOError when the socket is closed concurrently
- #9716 Raise IOError, not NullPointerException, when an IO is closed during accept
JRuby 10.1.1.0
The JRuby community is pleased to announce the release of JRuby 10.1.1.0.
- Homepage: https://www.jruby.org/
- Download: https://www.jruby.org/download
JRuby 10.1.1.x targets Ruby 4.0 compatibility.
Thank you to our contributors this release, you help keep JRuby moving forward! @chadlwilson, @kares, @katafrakt, @sampokuokkanen, @segiddins, @shugo
Notable Changes
Performance
- Use FastDoubleParser to improve performance of all string-to-double parsing. #9150
- Only pack fixnum values for 16-bit signed by default, with optional 8-bit and 32-bit configs. #9379
Standard Library
- jruby-openssl updated to 0.16.2 with several CVE fixes from BouncyCastle. #9386, #9504, #9539
- erb updated to 6.0.1.1 to address CVE-2026-41316. #9388
Native Integration
- Updated JRuby's native library backend with support for OpenBSD. #9439
Java Integration
- Optimized automatic interface implementation when calling Java with a block. #5023
Packaging
- Begin deprecating
jruby-completeandjruby-coreMaven artifacts. Prefer thejrubyandjruby-baseartifacts. #9512
57 Issues and PRs resolved for 10.1.1.0
- #5023 excessive loading of same InterfaceImpl
- #8184 remove deprecated (internal) Java code
- #9034 unused variable warning for blocks
- #9061 Ruby 4.0 support
- #9150 Use FastDoubleParser where appropriate
- #9219 True keyword arguments
- #9320 Cannot run code that has large Integer in
whenclause - #9375
instance_execblock argument destructuring when default value passed - #9376 Fix destructuring of block argument with default value
- #9379 Make fixnum packing configurable and disable ints
- #9381 Shrink RubyHashLinkedBuckets
- #9386 [deps] bump jruby-openssl to 0.16.0
- #9388 deps(stdlib): bump erb from 6.0.1 to 6.0.1.1 to resolve CVE-2026-41316
- #9393 [10.1.0.0] Java::JavaLang::IllegalArgumentException: argument type mismatch
- #9395 Difference in what
callerreturns in JRuby 10.1 and Ruby 4.0 - #9396 Remove Class#new from backtrace
- #9398 JRuby 10.1
circular causesfailures within nested rescue (e.g rspec's tests) - #9400 Don't warn about unused destructured block/method parameters (GH-9034)
- #9404 Warn on class/const assign in condition
- #9405 Marshal.load corrupts repeated object reference after Set appears earlier in payload
- #9407 Refactor Kernel#raise and fix remaining specs
- #9408 Fix last send_spec with correct message
- #9409 Ensure core exceptions get raised with $! as cause
- #9410 Fix Hash#inspect of Symbol keys with non-ASCII encoding
- #9417 Checking out aws-sdk-ruby creates a file with binary data.
- #9418 Fix recursive set marshal dump and load
- #9420 Fix Method/UnboundMethod#original_name deep alias chains
- #9425 ivarSet missing return after megamorphic fallback
- #9427 regression for activerecord-jdbcsqlite3-adapter: java.lang.NoSuchMethodError: 'void org.jruby.RubyHash.(org.jruby.Ruby, int)'
- #9435 Fall back to standard case/when for out-of-int-range Fixnum literals (#9320)
- #9437 Pathname provides differing error message from MRI in JRuby 10.1.0.0
- #9439 Update jffi for aarch64 OpenBSD
- #9442 Use proper error text for nulls in path name
- #9445 Reject invalid $0-prefixed global variable names like $01, $0abc
- #9447 Improve alias redefinition warnings
- #9450 Reverse aliasing warns when it should not
- #9456 Restore RubyHash(Ruby, int) for older ARJDBC versions
- #9459 [fix] rename RubyHash#set(get) to avoid collision
- #9462 Regression in JRuby 10.1 with Prawn
- #9470 Clean up more divergent keyword logic
- #9473 Shade redline to avoid conflicting with external versions
- #9488 Support backtrace_locations with Java exceptions
- #9495 No need to check for virtual thread API availability
- #9501 Fix CALL_KEYWORD_EMPTY leaking from (...) forwards to native methods
- #9503 avoid setting $! from RaiseException
- #9504 [deps] bump jruby-openssl to 0.16.1
- #9511 Update jnr:* and asm to latest
- #9512 Begin deprecating jruby-complete and jruby-core
- #9520 defined?(...) in eval'd for loop fails with TypeError
- #9523 Don't copy the singleton class in Proc#dup
- #9539 Update jruby-openssl to 0.16.2
- #9540 Merge 10.0
- #9541 NoMatchingPatternError#=== doesn't match instance of NoMatchingPatternKeyError
- #9543 Time.new(string, in: ...) raises TypeError on the third call at a call site (JIT only)
- #9545 Add a warning for nonuniform keywords annotations
- #9546 Prism backend raises wrong error for pattern key mismatch
- #9547 Merge jruby-prism fix for NoPatternKeyError
JRuby 10.0.6.0
The JRuby community is pleased to announce the release of JRuby 10.0.6.0.
- Homepage: https://www.jruby.org/
- Download: https://www.jruby.org/download
JRuby 10.0.6.x targets Ruby 3.4 compatibility.
Thank you to our contributors this release, you help keep JRuby moving forward! @chadlwilson, @kares, @sampokuokkanen
Notable Changes:
Standard Library
- erb has been updated to 4.0.4.1 to address CVE-2026-41316. (#9389)
- jruby-openssl has been updated to 0.16.0, fixing many long-standing issues with SSLSocket. (#6455, #8935, #9390)
Java Integration
- Performance and consistency improvements for passing a block or proc as the implementation of a Java interface. (#1401, #9401, #9424)
23 Issues and PRs resolved for 10.0.6.0
- #1401 Java interface using closure implementaion is slower than mixin implementation
- #6455 Unhandled IOError --> SSLSocket.java:893:in `sysread_nonblock'
- #8935 Error during
gem pushusing jruby - #9367 review (wrong) asserts
- #9368 [refactor] remove duplicate fallback in CallableSelector
- #9372 Crash when AOT compiling rubocop-ast sources
- #9373 Ensure the initial string has correct size
- #9389 [10.0] deps(stdlib): bump erb from 4.0.4 to 4.0.4.1 to resolve CVE-2026-41316
- #9390 [10.0] [deps] bump jruby-openssl to 0.16.0
- #9401 improve performance for Java "block-to-interface" conversion
- #9416 Checking out aws-sdk-ruby creates a file with binary data.
- #9421 Fix missing frozen check in 1 and 2-element Array sort!/reverse!
- #9424 proc to interface inconsistency with multiple args
- #9451 [fix] escape shell metachars in chdir: to prevent injection
- #9457 Deprecate and replace all RubyHash, RubyString, and RubyArray constructors
- #9458 Support backtrace_locations with Java exceptions
- #9461 [ji] support java.lang.Throwable#backtrace_locations
- #9474 Deprecate RubyHash constructors for 10.1 abstraction
- #9476 Backport extended dist verification to 10.0
- #9478 [fix] @JRubyMethod error with required>=1 and var-args
- #9484 Make JVM bytecode version detection more robust
- #9489 Deprecate all public String constructors
- #9490 Deprecate public RubyArray constructors
JRuby 9.4.15.0
The JRuby community is pleased to announce the release of JRuby 9.4.15.0.
- Homepage: https://www.jruby.org/
- Download: https://www.jruby.org/download
JRuby 9.4.15.x targets Ruby 3.1 compatibility.
Thank you to our contributors this release, you help keep JRuby moving forward!
With this release, JRuby 9.4 moves into end-of-life ("EOL"). This means that future releases of 9.4.x will only be provided as needed by commercial JRuby users.
Get in touch with us if you require long-term support options for the JRuby 9.4.x series.
38 Issues and PRs resolved for 9.4.15.0
- #8801 ruby/logger gem broken after version 1.6.3 using JRuby on Windows
- #8924 const_defined? returns false for External Constants in JRuby 10.0.1.0 and 9.4.14.0
- #8974 Use RuboCop to clean up poms (9.4)
- #8990 Launcher defensive fixes 9.4
- #9000 JRuby 9.4.14.0 "wrong number of arguments" when jit.threshold=0
- #9001 Backport indy ruby2_keywords ArgumentError fix
- #9002 Backport ArgumentError message update from 2010
- #9012 Rexml security updateUpdate rexml gem to solve CVE-2025-58767 (9.4)
- #9030 Official JDK 25 support for JRuby 9.4
- #9031 Don't restrict object search to modules
- #9032 Different arguments for each.map vs each and map alone
- #9033 Backport jruby.sh and .jruby.release changes from 10
- #9037 fix: clear code-range when re-using a string buffer (#9035)
- #9044 Difference in Float() hex parsing between JRuby and CRuby
- #9045 Fixes basic float hex value strings for Kernel#Float
- #9054 Migrate .java-version contents to .jruby.release (9.4)
- #9104 [9.4] Update jruby-openssl to v0.15.5 to resolve BouncyCastle 1.79 vulnerability (sonatype-2025-001911).
- #9105 [9.4] Update jruby-openssl to 0.15.5
- #9128 [9.4] fix(launcher): correct parsing of java release files under Bash/msys2 etc on Windows
- #9160 Update strscan to 3.1.7
- #9186 9032 Fix Different arguments for each.map vs each and map alone
- #9201 Extract float formatting into a static method (9.4)
- #9295 Issue with calling IO.popen(env, cmd, opts) on Windows
- #9308
Process.detachraises ArrayIndexOutOfBoundsException if called from a thread that is not the main thread - #9311 Push a frame for thread toplevel
- #9347 Use JDK for File#flock on Windows
- #9351 Fix non-native IO.popen env + kwargs handling
- #9353 Update JNR dependencies
- #9377 Checking out aws-sdk-ruby creates a file with binary data.
- #9387 [9.4] deps(stdlib): bump erb from 2.2.3 to 4.0.4.1 to resolve CVE-2026-41316
- #9391 [9.4] [deps] bump jruby-openssl to 0.16.0
- #9415 Don't read or write anything once length is zero
- #9443 JRuby 9.4 does not generate bytecode for newer JDK versions
- #9444 Allow bytecode version to be open-ended
- #9464 [fix] escape shell metachars in chdir: to prevent injection
- #9467 [9.4] backport [ji] support java.lang.Throwable#backtrace_locations (#9461)
- #9477 Dist verification 9.4
- #9480 [fix] @JRubyMethod error with required>=1 and var-args
JRuby 10.1.0.0
The JRuby community is pleased to announce the release of JRuby 10.1.0.0.
- Homepage: https://www.jruby.org/
- Download: https://www.jruby.org/download
JRuby 10.1.0.x targets Ruby 4.0 compatibility.
Thank you to our contributors this release, you help keep JRuby moving forward!
JRuby 10.1: Experimenting and Evolving
JRuby 10.1.0.0 is our first major release since catching up with Ruby compatibility. We have used this opportunity to explore many experimental optimizations and improvements we have been chasing for many years. Ruby 4.0 compatibility is largely complete, but there will be additional features added in update releases. We also plan to continue with large scale experiments in subsequent updates, and recommend production users continue to use JRuby 10.0 while we work toward stabilization of the 10.1 series.
Here's an overview of the major enhancments already in JRuby 10.1.0.0 and others planned for update releases in the coming months.
Reduced Object Size
In JRuby 10.1 all objects have been reduced in size by 8 bytes, bringing the base object size down from 32 bytes to 24 bytes. This translates into smaller objects across the system, reduced GC load, higher allocation throughput, and better cache locality.
On JVM versions that support Compact Object Headers (JEP 450: "Project Lilliput") the base object size can be further reduced to 16 bytes, 40% smaller than objects in the standard Ruby implememtation.
Evolving Strings, Arrays, and Hashes
During the upcoming JRuby 10.1 update releases, we plan to introduce new versions of String, Array, and Hash that are optimized for memory compactness, concurrency, or integration with other JVM languages. To support these features, we have made the internal implementations RubyArray and RubyHash into abstract classes and deprecated the direct constructors for RubyString. Please test your JRuby extension code and make sure it does not call abstract or deprecated constructors.
Smaller Numeric Representations
JRuby's internal class for representing 64-bit signed Integer values, RubyFixnum, has been split into two versions: LongFixnum and ShortFixnum. Combined with the reduced size of objects overall, this reduces the size of these long and short-ranged Integer objects from 40 bytes to 32 bytes or 24 bytes (24 bytes or 16 bytes if using Compact Object Headers). The size of Float objects have similarly been reduced from 40 bytes to 32 bytes. These size reductions help improve the performance of numeric algorithms and reduce impact to the heap and GC of boxing numeric values.
Cross-platform Prism Parser
JRuby 10.1 ships with support for the Prism Ruby parser, packaged as a set of pre-optimized native builds (for Windows, Linux, and MacOS on x86_64 or arm64) or as a WASM build on other platforms. We're still working out a few remaining features, but we encourage experimenters to enable it by passing -Xparser.prism to JRuby. We plan to make this the default parser once the remaining issues are solved.
Direct Argument Passing
We have also laid the groundwork to start passing all forms of method arguments on the call stack, avoiding boxed collections for most optional and keyword arguments. In upcoming JRuby 10.1 releases, we will begin to connect these call paths up for both pure-Ruby and native (Java) method targets, eliminating box allocation and drastically improving the peformance of such forms. Watch this space for rapid improvements.
New Policy for EOL and LTS Releases
With the release of JRuby 10.1, we are moving JRuby 9.4 into a "soft" EOL status. This means we will no longer be doing regular OSS release updates of JRuby 9.4, but users may get in contact with us to sponsor continued support. JRuby 10.0 will be our stable LTS release until April 2028 and we recommend all users upgrade or get in contact with us for assistance. JRuby 10.1 will be our "tip" release line, with many exciting optimizations and enhancements due to land over the next several months.
Going forward, we will provide a new LTS baseline release every two years, starting in spring of 2027, and alternating years will be considered as edge or development versions without LTS guarantees. This will allow us a free hand to keep bringing you more experimental features while still providing a stable baseline for more conservative users.
Try JRuby Today!
Users can install JRuby 10.1 through the usual means, and we encourage you to give it a try and let us know how it handles your applications and libraries. We have much more planned for the 10.1 updates and hope to move fast and push the edges of what's possible with Ruby on the JVM.
59 Issues and PRs resolved for 10.1.0.0
- #8716 dup a lot
- #8747 Launcher script chokes on GraalVM release file
- #9055 Array experiments
- #9066 Move Set to a core class [Ruby 4.0]
- #9069 Implement Ruby 4.0 support
- #9074 Avoid array allocation for *nil, by not calling nil.to_a
- #9075 Selective inspect of instance variables
- #9077 No numbered parameters in Binding#local_variables
- #9078 Add Math.{expm1,log1p}
- #9079 Align IO.select timeout logic with CRuby
- #9083 Implement missing raise features
- #9085 Specialize Fixnum
- #9090 Reduce the size of the varTableStamp
- #9091 Shrink varTableStamp
- #9095 Eliminate global flags
- #9096 Cache object ID and hash in low-count immediate values
- #9102 Add a fast path for hashing numerics and immediates
- #9113 Performance regression in RubyHash for large hashes (~8-10x slower than JRuby 1.7)
- #9119 Implement fast-path builtin method flags
- #9123 Fast builtin validation experiment
- #9124 Reduce load factor for Hash from 5 to 2
- #9136 Marshal.load 2.9x regression vs JRuby 1.7
- #9143 Cache both hash forms for FString
- #9148 Allow logical ops to begin on beginning of next line
- #9154 Mask internal Ruby backtrace elements like native masking
- #9156 Small marshal fixes
- #9174 Add complete thread-local builtin tracking system (Issues #9116, #9119)
- #9180 [Implement implicit param logic for Binding][#9180]
- #9181 [Fix Data subclasses with ivars][#9181]
- #9202 [A Data object should be frozen even if it has no members][#9202]
- #9209 [Add ruby_bug for spec of Data with no members being frozen][#9209]
- #9210 [Remove Process::Status#& and Process::Status#>>][#9210]
- #9233 [Load boot scripts from classloader URI][#9233]
- #9235 [Use capitalized Class and Module for frozen errors][#9235]
- #9236 [Properly handle keywords in {Kernel|Thread|Fiber}#raise][#9236]
- #9238 [Cloned class's singleton class has too many classes in hierarchy][#9238]
- #9239 [Fix for cloned class singleton class has too many ancestors][#9239]
- #9250 [Update Unicode to Version 17.0.0 and Emoji Version 17.0][#9250]
- #9262 [Abstract RubyHash][#9262]
- #9263 [Implicit param fixes for proc and binding][#9263]
- #9266 [Endless method with modifier method does not parse][#9266]
- #9273 [Cleanup recursion guards][#9273]
- #9277 [Use live counts for event hook stats][#9277]
- #9279 [Move fiddle back to default temporarily for resolv][#9279]
- #9286 [Proposing RISC-V architecture support][#9286]
- #9287 [Add riscv64 platform support][#9287]
- #9298 [Ensure we have a classloader to boot from][#9298]
- #9299 [Delete methods deprecated prior to JRuby 9.4.0.0][#9299]
- #9300 [Replace now-deprecated wait_timeout][#9300]
- #9313 [Time being returned as ASCII-8BIT encoding in JRuby 10][#9313]
- #9318 [
Process.detachraises ArrayIndexOutOfBoundsException if called from a thread that is not the main thread][#9318] - #9325 [[fix] NullPointerException from closed IO][#9325]
- #9362 [Allow endless methods to be an argument to methods like visibity][#9362]
- #9365 [Marshal load perf][#9365]
- #9371 [Deprecate all public RubyString constructors][#9371]
- #9374 [Integrate WASM-based Prism parser into standard build][#9374]
- #9383 [Disable IntFixnum][#9383]
- #9384 [Set.new(a_set) throws LocalJumpError][#9384]
- #9385 [Fixes #9384. Set.new(a_set) throws LocalJumpError][#9385]
JRuby 10.0.5.0
The JRuby community is pleased to announce the release of JRuby 10.0.5.0.
- Homepage: https://www.jruby.org/
- Download: https://www.jruby.org/download
JRuby 10.0.5.x targets Ruby 3.4 compatibility.
Thank you to our contributors this release, you help keep JRuby moving forward! @evaniainbrooks, @kares, @chadlwilson, #jimtng
Compatibility
- Fixed: Two bugs in the JIT compiler that broke certain super calls and defined_method yields. (#8944, #8946, #9310, #9349)
- Fixed: Fiber#raise left the fiber in an resumable state by not correctly transfering control. (#9297, #9356)
- Fixed: Connecting a socket using nonblocking operations failed to complete the establishment of the connection. This affected Redis users, among other cases. (#9304, #9305)
- Fixed: Process#detach raised a NullPointerException if called from a non-main thread. (#9314, #9311)
JVM Integration
- Java 26 is officially supported. (#9332)
Platform Integration
- New platform support: The native library backend for JRuby, JNR, has been updated to include support for the RISCv64 architecture.
- Fixed on Windows: File#flock used unsupported native operations on Windows, causing it to raise errors. This affected the "logger" library, among other cases. (#9347, #9348)
- Fixed on Windows: IO#popen failed to pass keyword arguments if also given a leading environment hash. (#9351, #9352)
Stability
- Fixed: Several memory leaks that affected users running multiple JRuby instances in a single process. (#9070, #9092, #9187, #9359)
43 Issues and PRs resolved for 10.0.5.0
- #4213 squiggly heredoc strip space between interpolation and line connector by mistake
- #8944 Double unresolved super from aliased method when compiled with indy
- #8946 define_method conversion fails to yield after indy JIT
- #9070 Memory leak in jruby within openhab
- #9092 ThreadLocal Memory Leak in JRuby 10.0.2.0 with ScriptingContainer
- #9187 Memory leak running RubyGems in separate runtimes in a loop
- #9261 Fix Time subsecond precision loss from floating point arithmetic
- #9292 Reduce BigInteger construction
- #9293 Incorrect caller_locations line for multi-line call with unless
- #9297 Different behaviour than MRI on Fiber#raise
- #9302 review call-info reset
- #9304 Socket.tcp does not complete connection
- #9305 Ensure connectable sockets finish
- #9307 Time being returned as ASCII-8BIT encoding in JRuby 10
- #9310 [fix] define_method captured block propagation in JIT mode
- #9311 Push a frame for thread toplevel
- #9312 Construct xmlschema string as US-ASCII
- #9314
Process.detachraises ArrayIndexOutOfBoundsException if called from a thread that is not the main thread - #9316 [10.0] build: bump maven from 3.9.11 to 3.9.14 via script-only style
- #9317 [10.0] build: improve build/maven consistency / bump github actions
- #9322 Fix prepended module initialize not called for Ruby classes rooted in a Java superclass
- #9323 [deps] bump jruby-openssl to latest
- #9324 NPE retrieving IO channel
- #9326 [fix] NullPointerException from closed IO
- #9330 Sync with prism update so we can compile jruby-prism using 10.0
- #9332 Support Java 26
- #9334 [fix] Exception#dup: copy cause to the duplicated exception
- #9335 [fix] MatchData#deconstruct_keys: include non-participating captures
- #9336 [fix] Bignum#eql?: use type-strict comparison (not ==)
- #9337 [fix] Bignum comparison with Float in <=> and ==
- #9338 [fix] Bignum: use correct site for coerced comparisons
- #9339 [fix] IO#reopen: copy encoding from source IO
- #9340 Hash#rehash corrupts insertion-order when deduplicating keys
- #9341 [fix] Hash#rehash: fix deduplicating keys (#9340)
- #9343 [compat] Thread#native_thread_id: using Java thread-id
- #9344 [fix] Digest::Base: synchronize MessageDigest mutation
- #9345 [fix] Encoding.compatible?: check when swapping args
- #9347 Use JDK for File#flock on Windows
- #9348 ruby/logger gem broken after version 1.6.3 using JRuby on Windows
- #9349 Disable AliasMethod direct binding for now
- #9352 Issue with calling IO.popen(env, cmd, opts) on Windows
- #9351 Fix non-native IO.popen env + kwargs handling
- #9354 Update JNR dependencies
- #9355 Propagate newline from if to bodies
- #9356 Properly complete Fiber#raise transfer
- #9359 Leak fixes redux
- #9364 [fix] TCPServer#initialize: close channel on bind/init failure
JRuby 10.0.4.0
The JRuby community is pleased to announce the release of JRuby 10.0.4.0.
- Homepage: https://www.jruby.org/
- Download: https://www.jruby.org/download
JRuby 10.0.4.x targets Ruby 3.4 compatibility.
Thank you to our contributors this release, you help keep JRuby moving forward! @evaniainbrooks, @katafrakt, @mrnoname1000
Standard Library
- The syslog library moves to bundled gems. (#9198)
- The unicode_normalize library is now thread-safely loaded as an internal library (#9231, #9232)
43 Issues and PRs resolved for 10.0.4.0
- #8697 Tracing
:calldoesn't work if the traced code is running on a different thread - #8876
import_methodsdoesn't allow calling another refined method - #9120
File.pathdoesn't raiseEncoding::CompatibilityErrorfor ASCII-incompatible string - #9195 Refactor keyword arguments logic
- #9198 Move syslog to bundled gems
- #9206 Fix exception message when calling import_methods without a Module
- #9208 Inconsistency with block parameter default value
- #9211 Fix block argument destructuring with optional parameters
- #9212 Fix method owner when using import_methods
- #9213 Make
refinemethod ofModuleprivate - #9214 Data.define single-attribute class rejects positional arguments
- #9215 Ignore empty kwrest in Data subtypes' constructors
- #9217 Add an error for running jruby.sh from a broken JRUBY_HOME
- #9218 JavaFX AnimationTimer + Mutex.synchronize triggers “deadlock; lock already owned by another fiber belonging to the same thread” on JRuby 10.0.3.0
- #9222 String interpolation of
BasicObjectobject raisesNameErrorinstead ofNoMethodError - #9224 ClassCastException handling kwargs in Struct
- #9225 Expand Data initialize empty kwargs fix to Struct
- #9226 Narrow deadlock check for sibling fibers locking mutex
- #9227 Version output may not accurately represent JIT mode
- #9228 Fix version output to reflect current runtime
- #9230 Use normal call type error for missing dynamic string to_s
- #9231 Thread safety of require and implications on stdlib string.normalize()
- #9232 Internalize and threadsafetify String#unicode_normalize
- #9237 Fix for import_methods does not allow calling another refined method
- #9240 Fix for File.path doesn't raise Encoding::CompatibilityError for ASCII incompatible string
- #9241
Data#to_handData#deconstructreturn values in wrong order when module overridesinitializein a subclassed Data class - #9242 Spurious Struct#initialize keyword argument warning (and crash) with
...forwarding throughsuper - #9243
Data#==/Data#eql?andStruct#eql?return false when instances areextended ininitialize - #9244 Fix for ClassCastException inside Struct#initialize when delegating ... from a prepended module
- #9247 Fix Array#slice raises a RangeError when the start index is out of range of Fixnum
- #9248 Additional fixes for import_methods with JIT
- #9252 Use prepared accessors to retrieve Data fields
- #9254 Compare "real" classes for Data#== and eql?
- #9258
Kernel#respond_to?fails if#respond_to_missing?is not defined - #9259 Only set locking thread once successful
- #9260 Restore Cleaner API use for embedding cleanup
- #9272 Avoid passing bogus -classpath when empty
- #9280 Check if respond_to_missing? exists before respond_to?
- #9281 unexpected ArgumentError: wrong number of arguments
- #9283 Only localize TracePoint to thread if specified
- #9285 Clear callInfo so it does not taint other calls
- #9289 Include gem extension stubs in stdlib artifacts
- #9290 Improve dist verification
JRuby 10.0.3.0
layout: post
title: JRuby 10.0.3.0 Released
The JRuby community is pleased to announce the release of JRuby 10.0.3.0.
- Homepage: https://www.jruby.org/
- Download: https://www.jruby.org/download
JRuby 10.0.3.x targets Ruby 3.4 compatibility.
Thank you to our contributors this release, you help keep JRuby moving forward! @mrnoname1000, @ngr-ilmarh, @Earlopain, @philr, @jotamartos, @kares, @aleksandrs-ledovskis, @trinistr, @katafrakt, @chadlwilson, @khasinski, @evaniainbrooks
Compatibility
- JRuby now reports
RbConfig::CONFIG['arch']without a version number, asuniversal-java. This allows using different JDK versions without triggering RubyGems missing extension warnings for installed gems. The host Java version is still available asRbConfig::CONFIG['arch_version']. [#9107]
Standard Library
- The non-gem standard library is upgraded to Ruby 3.4.5 #8967
- rexml is updated to 3.4.4 to address CVE-2025-58767. #9011
- syslog is moved to a default gem at version 0.4.0. The syslog gem now includes JRuby support. [#9109], ruby/syslog#1
- strscan is updated to 3.1.7. [#9159]
Documentation
- Ruby ri documentation for core and standard library are now included in the release distribution. #9049, #9052
All Issues/PRs
- #8707 WARNING: A terminally deprecated method in sun.misc.Unsafe has been called
- #8727 Cannot install latest
rubocop - #8730 Launcher: Defensive fixes
- #8758 Require is not working for .class file if the class is inside a module since 9.3.0
- #8810 Possible fix for 8809
- #8923
NameErrorfor autoloaded constant withprivate_constant - #8934 JRuby under Java 22+ always thinks it's running under a TTY
- #8940 Verify to_s is string or fall back on anyToString
- #8947 New check for System.console tty on JDK 22+
- #8955 Range#count always returns size for Integer bounds
- #8956 Handle argument or block passed to Range#count
- #8958 Concurrent requires can lead to StringIndexOutOfBoundsException
- #8960 Fix index -1 error while searching for feature path
- #8962 Upgrade polyglot and remove openssl lib hack
- #8967 Update stdlib to 3.4.5 and clean up old files
- #8975 Use RuboCop to clean up poms (10.x)
- #8976 Regression in keyword argument matching in JRuby v10.0.1.0
- #8978 Additional fixes for scheme-based globbing
- #8984 glob refactoring
- #8985 Fix language spec where error string changed
- #8987 InvokeDynamicSupport.findVirtual fails with IllegalAccessException: symbolic reference class is not accessible
- #8989 Explicitly request access before Lookup.find*
- #8994 autoload + private_constant do not play well together
- #8995 private_constant should just update existing autoload
- #8996 Avoid binding unreadable modules' classes
- #8998 Time#localtime incorrectly treats zero offset as UTC (regression in v10.0.2.0)
- #9006 Consider .class a source extension during search
- #9007 Handle
warn(foo, uplevel: nil) - #9009 Encoding a string with undefined chars fails with NoMethodError
- #9010 Fix "+00:00" and 0 being treated as UTC by Time#localtime and Time.at
- #9011 Update rexml gem to solve CVE-2025-58767
- #9016 [fix] regression calling static hash() method on Java proxy
- #9017 can not use Java class with static hash() method
- #9018 Parser does not convert newlines reading \r\n on Windows
- #9019 We need to remove \r from heredoc strings
- #9021 Retire safe double processing utilities
- #9024 Move all main classes to org.jruby.main package
- #9027 Add "since" to bare Deprecated annotations
- #9035 IO#read does not clear code-range for buffer argument
- #9036 fix: clear code-range when re-using a string buffer
- #9038 Add opens and native access to all jar manifests
- #9039 Update all jnr dependencies
- #9041 Migrate .java-version contents to .jruby.release
- #9049 ri docs are not available for core
- #9050 Marshal fails to load an encoding with an encoding ivar
- #9051 Ignore encoding when unmarshaling an Encoding
- #9052 Download and include in dist CRuby's rdoc data
- #9058 Implement efficient unshifting
- #9059 [Reserve extra space before elements when unshifting][#9059]
- #9063 [Hash's compare_by_identity state does not marshal][#9063]
- #9065 [Preserve compare_by_identity for marshaled Hash][#9065]
- #9068 [Windows CI spec runs][#9068]
- #9073 [fix: Permit overriding of JSA file location using ENV variable][#9073]
- #9084 [object_id improvements][#9084]
- #9094 [Implement GC.config [Ruby 3.4]][#9094]
- #9097 [Update jruby-openssl to v0.15.5 to resolve BouncyCastle 1.79 vulnerability (sonatype-2025-001911).][#9097]
- #9098 [Fix CoverageData.mergeLines when coverage increases][#9098]
- #9101 [Cached fixnums for immediate values][#9101]
- #9103 [Update jruby-openssl to 0.15.5][#9103]
- #9106 [Use smaller default size for many collections][#9106]
- #9107 [Separate Java version out of rbconfig 'arch'][#9107]
- #9108 [Tidy up default gems][#9108]
- #9109 [Switch to syslog gem][#9109]
- #9110 [Calling
inspecton proc resets line insource_location][#9110] - #9112 [Prevent modifying state in RubyProc][#9112]
- #9117 [Add file path to error message when unlinking non-existing file][#9117]
- #9122 [Unexpected jruby.sh error messages on Windows][#9122]
- #9127 [fix(launcher): correct parsing of java release files under Bash/msys2 etc on Windows][#9127]
- #9138 [Copy Data type's var table manager with new realClass][#9138]
- #9141 [refactorings and cleanup motivated by error-prone][#9141]
- #9142 [Change GC's methods from module_function to metaclass methods][#9142]
- #9145 [Never trust external content for FString][#9145]
- #9152 [Marshal.dump corruption for large Array structures][#9152]
- #9157 [bump included gems][#9157]
- #9158 [Use same key match for containsKey][#9158]
- #9159 [Update strscan to 3.1.7][#9159]
- #9182 [Fix NoMethodError when encoding with invalid: :replace option][#9182]
- #9188 [Different arguments for each.map vs each and map alone (10.0)][#9188]
- #9189 [Fixes #8952. Nest
itshould be differentits][#9189] - #9190 [Backport implicit local variable fixes from 10.1][#9190]
- #9191 [Fixes #8952. Nested 'it' behavior broken][#9191]
- #9192 [Stab at Fixing #8976][#9192]
- #9194 [
BigDecimal#+,#-,#add,#subalways try to cast result of coercion toRubyBigDecimal][#9194] - #9196 [
require "bigdecimal"does not installBigDecimal()if it was called previously][#9196] - #9199 [Output formatting differences between jRuby 10.0.0.1 and Ruby 3.4 when converting Float to JSON][#9199]
- #9200 [Extract float formatting into a static method to use with to_json][#9200]
- #9203 [Invalidate method caches from generated populators][#9203]
- #9204 [Fix BigDecimal#+, #-, #add, #sub failing when coercing doesn't return a BigDecimal][#9204]
- #9205 [Fix encoding fallback error handling and error message formatting][#9205]
JRuby 9.4.14.0 Released
The JRuby community is pleased to announce the release of JRuby 9.4.14.0.
- Homepage: https://www.jruby.org/
- Download: https://www.jruby.org/download
JRuby 9.4.14.x targets Ruby 3.1 compatibility.
Thank you to our contributors this release, you help keep JRuby moving forward! @matthias-fratz-bsz, @ikaronen-relex, @ylecuyer
Compatibility
- Ruby version is now 3.1.7. (#8966)
Libraries
- strscan is updated to 3.1.5. (#8897)
- cgi is updated to 0.3.7 to resolve CVE-2025-27220 and CVE-2025-27219 (#8954, #8966)
- uri is updated to 0.12.4. (#8966)
- net-smtp is updated to 0.3.1.1. (#8966)
- rss is updated to 0.3.1. (#8966)
- Non-gem stdlib has been updated to Ruby 3.1.7 sources. (#8966)
Build
- jruby-maven-plugins is updated to 3.0.6 to resolve issues with garbled gem poms. (#8898)
- The stdlib build scripts have been modified to work with latest polyglot-ruby. (#8634, #8963)
Usability
- bin/ruby and bin/ruby.bat are now shipped in the distribution, to make installation simpler. (#8875)
29 Issues and PRs resolved for 9.4.14.0
- #8422 ConcurrentLocalContextProvider leaks memory per thread
- #8634 9.4.12.0 unable to build itself
- #8670 Setting system property 'jruby.gem.home' works but outputs a warning
- #8779
Marshal.dump(binding)behavior differs from CRuby - #8823 Failure in
StringScanner#scan_integerwhen running the HexaPDF test suite - #8859
bundle gemdoes not fully run - #8866 JRuby 9.4.13.0 introduces
LoadError: no such file to load -- Win32APIvia stdlib/net/http on Windows - #8875 Pregenerate bin/ruby and bin/ruby.bat
- #8883 Normalize arch to universal-java-version
- #8884 Require the correct case for this library
- #8885 Coerce the chdir for popen
- #8897 Update strscan to fix number scanning at nonzero offset
- #8898 Update maven plugins to latest
- #8902 Sporadic failure in TestArray#test_insert under indy
- #8904 Always check array insert pos
- #8909 Make Binding unmarshalable
- #8918 Don't set callInfo when target does not use kwargs
- #8919 Update vendored cgi gem
- #8933 Output buffer size calculation for unpack('m') and unpack('u') can overflow for long inputs
- #8936 Fix integer overflow in buffer length calculation for unpack('m') and unpack('u')
- #8954 Secuity: Bump cgi to 0.4.2. CVE-2025-27220 CVE-2025-27219
- #8961 Fix index -1 error while searching for feature path
- #8963 Upgrade polyglot and remove openssl lib hack
- #8966 Update stdlib to 3.1.7
- #8968 Pass multi-elt array key for to_h using yieldArray
- #8969 Fix memory leak in Concurrent/ThreadSafeLocalContextProvider
- #8970 Move jruby.gem.home and jruby.gem.path to Options
- #8973 Pathname::glob behavior changed with 9.4.13.0 and later
- #8980 Additional fixes for scheme-based globbing (9.4)