JRuby 10.1.2.0 Released
Monday, September 21 2026
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
Java Integration
- The location of the AppCDS JSA file can now be specified with JRUBY_JSA_HOME. [#9667]
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
- jruby-openssl 0.16.2
- 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 --help fails 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 causes when re-raising an exception originally raised with the two-argument raise Class, arg form (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#sprintf calls Hash#default_proc with incorrect args
- #9570 fix dup for frozen class
- #9579 JRuby can’t pass
STDOUT to child process when a different IO is given as out:
- #9582 Data.define subclass fields are nil when module is included in define block
- #9585 Marshaling incompatibility with cyclic objects?
- #9587
IO::Buffer#copy and #set_string reject the documented source_offset fourth argument
- #9588 Accept
source_offset in IO::Buffer#copy and #set_string
- #9593 Compiler gives a constant-folded ASCII String the code range CR_VALID, which breaks the
eql? / hash contract
- #9595
IO#tty? silently returns true for redirected stdio in embedded runtimes when --add-opens are 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
resolv default gem to 0.7.2
- #9640 AppCDS usage causing sealing violations
- #9645 Fix the Fiber scheduler IO path: negated errno, zero length, buffer size
- #9648 Run pager commands through the platform shell
- #9649 Mutex Deadlock fix: Track the fiber that owns a Mutex
- #9650 Don’t raise EBADF closing an IO whose channel NIO already closed
- #9653 [Java 26 Leyden] AOT Cache breaks dynamic Ruby proxies for classes loaded from external JARs
- #9654 Time.new(String) raises java.lang.ArrayIndexOutOfBoundsException when the string ends where a ‘:’ is expected
- #9655 NoSuchMethodError when a Ruby subclass of a Java class includes a module
- #9656 Fix IO#wait arguments and return values, and defer it to Fiber.scheduler
- #9659 [ji] resolve Java super <init> through included modules
- #9660 Fix where Fiber#transfer hands control back
- #9662 Fix custom respond_to? handling: include_all, defined? lookup, deprecated signature
- #9665 Data subclasses in net-imap are losing fields
- #9667 [Allow specifying AppCDS cache location and use safer default][#9667]
- #9669 jruby/vm integer messages fail on JRuby 10 due to Fixnum reference
- #9670 Update tagged Data specs
- #9677 Constant declared with
autoload and then defined by a direct require keeps its UNDEF table slot; every later lookup re-enters LoadService (very slow inside a WAR)
- #9679 Don’t wrap an alias in another alias
- #9683 Fix bin/* patterns in .gitignore
- #9685 Fix setup sequence for cgi/escape
- #9690 JFFI bad library load is a huge startup hit on MacOS
- #9691 Support zero-size IO::Buffers
- #9695 require “json” warns about redefined to_hash with -w in JRuby 10.1.1.0
- #9696 Set the aliased flag on the real method, not the wrapper
- #9697 ObjectSpace::WeakMap is double-weak in CRuby
- #9701 Allow specifying AppCDS cache location and use safer default
- #9703
Redis::ConnectionError with JRuby 10
- #9705 Update stdlib
- #9709 Additional stdlib updates
- #9719 IO#accept raises NullPointerException instead of IOError when the socket is closed concurrently
- #9720 Update jar-dependencies to 0.6.1
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
Java Integration
- The location of the AppCDS JSA file can now be specified with JRUBY_JSA_HOME. [#9667]
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
- jruby-openssl 0.16.2
- 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
- #9645 Fix the Fiber scheduler IO path: negated errno, zero length, buffer size
- #9648 Run pager commands through the platform shell
- #9649 Mutex Deadlock fix: Track the fiber that owns a Mutex
- #9650 Don’t raise EBADF closing an IO whose channel NIO already closed
- #9653 [Java 26 Leyden] AOT Cache breaks dynamic Ruby proxies for classes loaded from external JARs
- #9654 Time.new(String) raises java.lang.ArrayIndexOutOfBoundsException when the string ends where a ‘:’ is expected
- #9655 NoSuchMethodError when a Ruby subclass of a Java class includes a module
- #9656 Fix IO#wait arguments and return values, and defer it to Fiber.scheduler
- #9659 [ji] resolve Java super <init> through included modules
- #9660 Fix where Fiber#transfer hands control back
- #9662 Fix custom respond_to? handling: include_all, defined? lookup, deprecated signature
- #9665 Data subclasses in net-imap are losing fields
- #9667 [Allow specifying AppCDS cache location and use safer default][#9667]
- #9669 jruby/vm integer messages fail on JRuby 10 due to Fixnum reference
- #9670 Update tagged Data specs
- #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) - #9679 Don’t wrap an alias in another alias
- #9683 Fix bin/* patterns in .gitignore
- #9685 Fix setup sequence for cgi/escape
- #9690 JFFI bad library load is a huge startup hit on MacOS
- #9691 Support zero-size IO::Buffers
- #9695 require “json” warns about redefined to_hash with -w in JRuby 10.1.1.0
- #9696 Set the aliased flag on the real method, not the wrapper
- #9697 ObjectSpace::WeakMap is double-weak in CRuby
- #9701 Allow specifying AppCDS cache location and use safer default
- #9703
Redis::ConnectionErrorwith JRuby 10 - #9705 Update stdlib
- #9709 Additional stdlib updates
- #9719 IO#accept raises NullPointerException instead of IOError when the socket is closed concurrently
- #9720 Update jar-dependencies to 0.6.1