Changes

Release History

Version Date Description
5.0.0 May 24, 2026 jdk17, Firefox 150, Chrome/Edge 148, Bugfixes
4.21.0 December 28, 2025 Firefox 146, core-js, Bugfixes
4.20.0 December 07, 2025 Chrome/Edge 143, core-js, Bugfixes
4.19.0 November 23, 2025 Chrome/Edge 142, Firefox 145, support spread in arrays, neko improvements, Bugfixes
4.18.0 October 30, 2025 Chrome/Edge 141, Firefox 144, FirefoxESR 140, javascript, Bugfixes
4.17.0 October 05, 2025 Chrome/Edge 140, Firefox 142, css :has(), :is(), :where(), BroadcastChannel, Bugfixes
4.16.0 August 29, 2025 StringUtils, Brotli, spread for object literals, Bugfixes
4.15.0 August 17, 2025 Chrome/Edge 139, Firefox 141, core-js, Bugfixes
4.14.0 July 30, 2025 Chrome/Edge 138, Firefox 140, core-js, junit 5, jsoup-bridge, Bugfixes
4.13.0 June 03, 2025 Chrome/Edge 136, Firefox 138, js prototypes, Bugfixes
4.12.0 May 17, 2025 Chrome/Edge 135, Firefox 137, Rhino RegExp, Bugfixes
4.11.1 March 26, 2025 Bugfixes
4.11.0 March 25, 2025 Chrome/Edge 134, Firefox 136, Rhino RegExp, less dependencies, Bugfixes
4.10.0 February 22, 2025 Chrome/Edge 133, Firefox 135, Javascript Errors, Bugfixes
4.9.0 January 22, 2025 Chrome/Edge 132, Firefox 134, BigInt, Bugfixes
4.8.0 January 12, 2025 Bugfixes, css colors, less dependencies, improved javascript support

Release 5.0.0 – May 24, 2026

Type Changes By
Add Tests for htmx 2.0.10 added. rbri
Add InnerOuterTextSerializer handles dt tags like li. rbri
Add Support start attribute when creating the text representation of an UnorderedList. rbri
Add HtmlHeadingGroup introduced. rbri
Update HtmxTwoZeroSevenScriptPreProcessor updated to support htmx 2.0.10 also. rbri
Add Simple first impl of Document parseHTMLUnsafe() added. rbri
Fix moveBefore() fixed to not create double id/name index entries. rbri
Fix Make sure elements not added twice to the id/name index. rbri
Update core-js: 'BaseFunction' and 'NativeString' converted to descriptor. RhinoTeam
Update core-js: typed array constructor improved to be closer to spec. RhinoTeam
Remove INCOMPATIBLE CHANGE: WebClientOptions.getWebSocketMaxTextMessageBufferSize() / setWebSocketMaxTextMessageBufferSize() removed. rbri
Remove INCOMPATIBLE CHANGE: WebClientOptions.getWebSocketMaxBinaryMessageBufferSize() / setWebSocketMaxBinaryMessageBufferSize() removed. rbri
Fix WebSocket close() check for null web socket impl. rbri
Fix WebSocket close event - set the was clean flag only if statusCode is 1000. rbri
Fix WebSocket constructor improved, better checking/handling of the url and throw the correct error types. rbri
Fix WebSocket should handle the socket connect error by setting the status and triggering the listeners. rbri
Update INCOMPATIBLE CHANGE: WebSocketListener.onWebSocketBinary(byte[] data, int offset, int length) changed to onWebSocketBinary(ByteBuffer payload). rbri
Update INCOMPATIBLE CHANGE: WebSocketListener.onWebSocketBinary(byte[] data, int offset, int length) changed to onWebSocketBinary(ByteBuffer payload). rbri
Update INCOMPATIBLE CHANGE: WebSocketAdapter.closeIncommingSession() renamed to closeIncomingSession(). rbri
Update websocket-client: jetty updated to 12.1.8. rbri
Fix core-js: Fix Object.assign with array target losing length update. RhinoTeam
Update core-js: Introduce ClassSizeException (extends ClassFileFormatException) and tighten up exceptions related to class compilation. RhinoTeam
Fix core-js: Fix for ignored spreads in array construction. rbri
Fix core-js: Fix uint8 overflow in array literal skipIndexesId and sourcePositions. rbri
Update core-js: Tidy up serial version ids; applied openrewrite to add `@Serial` annotations. RhinoTeam
Add Introduce SpeechRecognitionEvent and SpeechRecognitionErrorEvent and make them also available as webkitSpeechRecognitionEvent and webkitSpeechRecognitionError. rbri
Add Introduce SpeechGrammar, SpeechGrammarList, and SpeechRecognition and make them also available as webkitSpeechGrammar, webkitSpeechGrammarList, and webkitSpeechRecognition. rbri
Update SVGSymbolElement is a child of SVGGraphicsElement. rbri
Update Bunch of event constructor fixes. rbri
Update Unified and enhanced test for all the js event objects, many missing test classes added. rbri
Update ChromeEdge: The <command> html tag is no longer supported. rbri
Update ChromeEdge: document.createEvent('WheelEvent') throws. rbri
Update ChromeEdge: document.createEvent('CloseEvent') throws. rbri
Update ChromeEdge: document.createEvent('AnimationEvent') throws. rbri
Update ChromeEdge: document.createEvent('PopStateEvent') throws. rbri
Update ChromeEdge: NumberFormat for de-CH and it-CH updated. rbri
Fix neko: invalid numeric entity handling improved rbri
Add neko: hgroup support added rbri
Fix neko: null character handling in script content fixed rbri
Fix neko: update translation of 0x98 to \u02DC rbri
Fix neko: fix surrogate-character-reference parse error handling rbri
Fix neko: fix consecutive ampersands before named entity parsing rbri
Add neko: include tests from https://github.com/html5lib/html5lib-tests.git rbri
Fix neko: more fuzzer tests and fixes rbri
Update neko: HTMLScanner.scanName: ASCII fast-path for the per-char inner loop rbri
Fix neko: javadoc fixes rbri
Update neko: handle empty attributes always the same way rbri
Update neko: more robust collection handling, missing forcedEndElement_ reset fixed rbri
Add neko: add missing methods to EmptyXMLAttributesImpl to make it more robust rbri
Add neko: introduce and use immutable EmptyXMLAttributesImpl rbri
Update neko: reuse the plaintext scanner (like the other scanners) and avoid toLowerCase if not needed rbri
Fix neko: use the correct property (http://cyberneko.org/html/properties/names/attrs) in case of the error handling for strange attributes rbri
Fix neko: adjust column now also when skipping rbri
Update neko: modernize by using Arrays.mismatch() rbri
Update neko: reuse the HTMLUnicodeEntitiesParser (like we do for many other things) and simplify the code a bit rbri
Update Defer building the HtmlPage id/name lookup index until first read. Ronny Shapiro
Fix Input type image returns false for willValidate. rbri
Fix XMLHttpRequest adds the origin header to patch requests. rbri
Update ChromeEdgeFF: document.createElement tagName character validation adjusted. rbri
Update ChromeEdge: willValidate returns true for readonly buttons. rbri
Fix Fix toString result for Intl.Collator, Intl.DateTimeFormat, Intl.NumberFormat, and Intl.v8BreakIterator. rbri
Fix Fix v8BreakIterator ctor to accept language-region. rbri
Fix Fix DomNode.insertBefore(DomNode) to dissolve DocumentFragment into its children before insertion. Lai Quang Duong
Update cssparser: support for unicode characters in keywords removed, this is not used in real world and the parser is much simpler without rbri
Update core-js: Make NativeDate.toLocaleString() behave more like real browsers. Lai Quang Duong
Update core-js: Major refactoring to separate top level scope and 'globalThis'. RhinoTeam
Update core-js: Improve 'caller' handling depending on strict mode. rbri
Update core-js: Clean up tracking of strict mode in general. RhinoTeam
Add core-js: Support for resizable ArrayBuffers as specified in ES2024 added. RhinoTeam
Fix core-js: Fixed automatic semicolon insertion for 'let' RhinoTeam
Update core-js: Ensure that construction is wrapped in a top-level call when none is present, preventing assertion failures in interpreted mode RhinoTeam
Fix FunctionWrapper implements SymbolScriptable - solves e.g. Function.prototype.toString instanceof Function of Object.prototype.toString.call(Function.prototype.toString). Lai Quang Duong
Fix xpath: Add missing entry for ER_XPATH_ERROR in XPATHErrorResources. Ryuhei Ishizuka
Fix Force content sniffing for '*/*' content type to be in sync with the browsers. Lai Quang Duong
Add SubtleCrypto: digest() - SHA-1, SHA-256, SHA-384, SHA-512. Lai Quang Duong
Add SubtleCrypto: generateKey() - RSASSA-PKCS1-v1_5, RSA-PSS, RSA-OAEP, ECDSA, ECDH, AES-CBC, AES-CTR, AES-GCM, AES-KW, HMAC Lai Quang Duong
Add SubtleCrypto: importKey("raw") - HMAC, AES-CBC, AES-CTR, AES-GCM, AES-KW Lai Quang Duong
Add SubtleCrypto: exportKey("raw") - HMAC, AES-CBC, AES-CTR, AES-GCM, AES-KW Lai Quang Duong
Add SubtleCrypto: sign() - HMAC, RSASSA-PKCS1-v1_5, RSA-PSS, ECDSA Lai Quang Duong
Add SubtleCrypto: verify() - HMAC, RSASSA-PKCS1-v1_5, RSA-PSS, ECDSA Lai Quang Duong
Add SubtleCrypto: encrypt() - AES-CBC, AES-GCM, AES-CTR, RSA-OAEP Lai Quang Duong
Add SubtleCrypto: decrypt() - AES-CBC, AES-GCM, AES-CTR, RSA-OAEP Lai Quang Duong
Add Area: properties hash,host,hostname,href,origin,password,pathname,port,protocol,search, and username added. Lai Quang Duong
Update Extract shared HTMLHyperlinkElementUtils for URL decomposition and use it from HTMLAnchorElement and HTMLAreaElement. Lai Quang Duong
Fix HTMLAnchorElement: strip default port from host/port/origin. Lai Quang Duong
Fix HtmlPage: fix a bug where async script may not be executed. Lai Quang Duong
Update ProgressEvent: properties loaded and total are numeric. rbri
Fix Intl: getCanonicalLocales() processes arguments as array-likes in sync with the spec. rbri
Add FileReader: fire ProgressEvent and add missing event handlers Lai Quang Duong
Fix HtmlInputElement's of type email/url/date/time have to fire the input event. Lai Quang Duong
Fix Align cookie max-age handling for huge values with the spec. Lai Quang Duong
Fix Intl: fix toStringSymbol for Intl, Collator, DateTimeFormat, Locale, and NumberFormat. rbri
Add Intl: supportedLocalesOf() implementation added to DateTimeFormat and NumberFormat. Lai Quang Duong
Fix window.queueMicrotask() added. Lai Quang Duong
Add Intl: supportedLocalesOf() implementation added to DateTimeFormat and NumberFormat. Lai Quang Duong
Add Intl: getCanonicalLocales() implementation added Lai Quang Duong
Add Intl.Locale implementation added. Lai Quang Duong
Fix Storage: fix storeSize calculation when overwriting existing key Kanoko Yamamoto
Update In sync with the spec, a form now maintains a past names map at the form level, not on individual elements. The map is populated only when form.xyz resolves to a single element, and entries are invalidated when the element's form owner changes. Lai Quang Duong
Update Upgrade commons-logging to 1.3.6. rbri
Update core-js: Syntax error when multiple comments in braceless IF. RhinoTeam
Update core-js: iCode debug printing refactored. RhinoTeam
Update core-js: Convert XML objects from 'IdScriptableObject's to descriptors. RhinoTeam
Fix select.remove() with no arguments now removes itself from the DOM. Fixes #1092. rbri
Update core-js: Enforce 'WrapFactory' users to override new `wrap(...)` and `wrapAsJavaObject(...)` methods. RhinoTeam
Update core-js: use 'ClassValue' for caching class-based TypeInfo. RhinoTeam
Update core-js: a problem in dumpICode fixed and test coverage increased. RhinoTeam
Update core-js: fix generator .return() to include value when in completed state. RhinoTeam
Update core-js: Avoid compiling `a.eval()` as a direct eval call so all the prototypes are set up correctly. RhinoTeam
Update Better separation of the scope and the global this object. rbri
Update core-js: Support for rest parameters in destructuring. RhinoTeam
Update core-js: Respect custom [Symbol.hasInstance] implementations; look up of hasInstance walks prototype chain. RhinoTeam
Update core-js: NativeError and RegExp setup modernized. RhinoTeam
Fix core-js: Fix for setting of prototype and parent scopes on some new objects. RhinoTeam
Fix core-js: Fix scope used in iterator creation. RhinoTeam
Update core-js: IdFunctionObject.isConstructor() to return useCallAsConstructor; now methods like Date.prototype.getDate, RegExp.prototype.exec, etc. no longer incorrectly reported as constructors. RhinoTeam
Update Test suite updated to junit 6 and cleaned up. rbri
Update Simplify logging configuration for our test by switching from log4j to logback-classic. rbri
Add core-js: Add delete support to DOMStringMap. RhinoTeam
Update core-js: Remove direct dependency to ScriptableObject from DOMStringMap and improve get/set impl. RhinoTeam
Add core-js: migrate NativeDate away from IdScriptable. RhinoTeam
Add core-js: internal code cleanup - drop support for version 1.0 - 1.4 RhinoTeam
Add core-js: add a method to temporarily suspend microtask processing RhinoTeam
Update core-js: Optimize regex backtracking for quantifiers before end-of-line anchor RhinoTeam
Fix core-js: JSON.parse fixed to preserve negative zero RhinoTeam
Fix core-js: use ThrowTypeError at all relevant places. rbri
Fix core-js: debugger eval for scripts and eval scope for top-level scripts fixed. RhinoTeam
Add core-js: DataView Float16 support added. RhinoTeam
Update Improved HttpMethod validation in XMLHttpRequest open('trace', ...). rbri
Fix XMLHttpRequest open('trace', ...) throws a security error. rbri
Update The test suite now uses Jetty 12.1. RhinoTeam
Update INCOMPATIBLE CHANGE: Cookie moved from package 'org.htmlunit.util' to 'org.htmlunit.http' rbri
Add core-js: DataView BigInt64 and BigUInt64 support added RhinoTeam
Update core-js: isConstructor check fixed and improved RhinoTeam
Update core-js: major performance improvement for RegExp.prototype[Symbol.split] and RegExp.prototype[Symbol.replace] RhinoTeam
Update core-js: improve the Number.toLocaleString() implementation; drop our own version rbri
Update Use java.util.Objects.hash() instead org.apache.commons.lang3.builder.HashCodeBuilder. rbri
Update Use java.util.Objects.hash() instead org.apache.commons.lang3.builder.HashCodeBuilder. rbri
Update module-info.java added to all projects. rbri
Update INCOMPATIBLE CHANGE: XmlUtilsXercesHelper and XmlUtilsSunXercesHelper removed (and the class XmlUtilsHelperAPI). rbri
Update INCOMPATIBLE CHANGE: dependency to xercesImpl removed. rbri
Update INCOMPATIBLE CHANGE: htmlunit-csp updated to Java 17. rbri
Update INCOMPATIBLE CHANGE: htmlunit-cssparser updated to Java 17. rbri
Update INCOMPATIBLE CHANGE: htmlunit-corejs updated to Java 17. rbri
Update INCOMPATIBLE CHANGE: htmlunit-neko updated to Java 17. rbri
Update INCOMPATIBLE CHANGE: htmlunit-xpath updated to Java 17. rbri

Release 4.21.0 – December 28, 2025

Type Changes By
Update DOMPointReadOnly, DOMRectReadOnly, DOMMatrixReadOnly, and PerformanceNavigation toJSON() implementation improved. rbri
Update DOMPointReadOnly and DOMPoint implementation improved. rbri
Add DOMRectReadOnly and DOMRect implementation improved, now we implement the whole interface. rbri
Add cssparser: support for dvw, dvh, dvmin, dvmax, lvw, lvh, lvmin, lvmax, svw, svh, svmin, svmax unit added rbri
Update cssparser: simplified error processing rbri
Fix cssparser: wrong escape sequence definition for letter 'o' fixed. rbri
Update neko: minor improvements by replacing some equalsIgnoreCase() calls by simple equals(). rbri
Update core-js: improved handling of unimplemented rest parameters in destructuring RhinoTeam
Fix core-js: fix checking of proxy functions being constructors. RhinoTeam
Update core-js: proxies refactored to be callable objects only if their initial target is callable RhinoTeam
Update core-js: modernize and improve the approach used for 'caller' support rbri
Update core-js: make 'caller' a function prototype property. Fixes #1064. rbri
Update core-js: make 'arguments' a function prototype property rbri
Update core-js: make NativeCall attributes final rbri
Update core-js: adjust our rhino fork to use the improved 'arguments' handling rbri
Update core-js: improved interpreter performance by avoiding the need for activation frames RhinoTeam
Update core-js: an off-by-one error in the lexer when encountering EOF fixed RhinoTeam
Update core-js: initialise 'CallSite' against top level scope RhinoTeam
Update core-js: implement support for destructuring in 'catch' to support things like 'catch ({message})' or 'catch ([a, b])' RhinoTeam
Update core-js: incorrect destructuring in for loops handled at parse time RhinoTeam
Update neko: inserted tags are in lowercase (at least if the option for uppercase tag names is not set) rbri

Release 4.20.0 – December 07, 2025

Type Changes By
Update core-js: Disambiguate local variable names to fix debugger issues. RhinoTeam
Fix core-js: Fix variable resolution in switch statements with let declarations (regression from 4.18.0) RhinoTeam
Update core-js: default parameter evaluation ordering for generators fixed. RhinoTeam
Add core-js: Symbol.toStringTag implemented for generators. RhinoTeam
Update core-js: Destructuring support improved. RhinoTeam
Update core-js: 'ES6Iterator' migrated to lambda based ScriptableObject. RhinoTeam
Update core-js: 'DestructuringIterator' migrated to lambda based ScriptableObject. RhinoTeam
Update core-js: 'NativeConsole' migrated to lambda based ScriptableObject. RhinoTeam
Update core-js: 'ES6Generator' migrated to lambda based ScriptableObject. RhinoTeam
Update core-js: 'NativeIterator' migrated to lambda based ScriptableObject. RhinoTeam
Add HTMLElement#getAttributeNames() implemented. rbri
Add HTMLElement#moveBefore() implemented (also for Document and DocumentFragment). Fixes #1053. rbri
Update neko: code cleanup and warning fixes. rbri

Release 4.19.0 – November 23, 2025

Type Changes By
Update neko: code quality and minor performance improvements. rbri
Update neko: refactor eof handling from exceptions to return codes. rbri
Fix core-js: fix wrapper symbol handling in setPrototypeOf. rbri
Update core-js: Rewrite Symbol.prototype.keyFor to avoid ConcurrentModificationException. RhinoTeam
Update Use our own ArrayUtils at more places. rbri
Update Upgrade Apache commons-lang3 to 3.20.0. rbri
Add core-js: support for spread in arrays added RhinoTeam
Update Upgrade Apache commons-io to 2.21.0. rbri
Update HTMLFormControlsCollection getOwnPropertyDescriptor() has to support fields by name and id. rbri
Update core-js: Refactor internal property descriptors to not be 'ScriptableObjects' RhinoTeam
Fix core-js: some fixes for arguments support in strict mode rbri
Update core-js: Replace number formatting operations on Number (toExponential, toFixed, and toPrecision) RhinoTeam
Update core-js: fix/improve our enhanced arguments support rbri
Update JavaScript timeout messages slightly improved. rbri
Fix WebClient.setJavaScriptTimeout(timeout) stops most JavaScript immediately. This is a regression compared to version 4.18.0. Fixes #1057. rbri
Update neko: improve spec conformance of comment end detection rbri
Update neko: use a separate flag to mark formatting elements (in sync with the spec) rbri
Update neko: reopening of dangling formatting elements refactored, make it lazy to be able to suppress the repopen in case of empty elements rbri
Update No longer use org.apache.commons.lang3.math.NumberUtils. rbri

Release 4.18.0 – October 30, 2025

Type Changes By
Update core-js: replace the NumberToString implementation with the Schubfach algorithm RhinoTeam
Add Add basic support for parsing multipart/form-data fetch responses das7pad
Fix XMLHttpRequest.getAllResponseHeaders() uses '\r\n' as delimiter in FF/FF_ESR also rbri
Fix evaluation of the proxy autoconf javascript code fixed (regression) rbri
Remove MutationEvent support removed for Firefox 144 rbri
Update CSS2Properties now named CSSStyleProperties in Firefox 144 rbri
Fix JavaScript configuration was broken if more than one JsxClass annotation defined for a single class rbri
Update resync with the latest brotli code rbri
Update core-js: improve/fix support for let statements inside switch statements. Fixes #1040. RhinoTeam
Fix core-js: fix a bunch of issues with ThrowTypeError rbri
Fix core-js: fix interpreter bytecode printing RhinoTeam
Fix core-js: fixed exception in the interpreter when using many literal bigint RhinoTeam
Fix core-js: fix function.length with default arguments and length calculation with rest params RhinoTeam
Fix core-js: make 'Symbol()' comply with the spec. Specifically, it's handling of the second argument to the constructor. RhinoTeam
Update core-js: support for yield* improved RhinoTeam
Fix core-js: builtin methods should have no 'prototype' property RhinoTeam
Update core-js: many, many internal refactorings to open the door for further improvements RhinoTeam
Add DOMMatrixReadOnly toString() and toJSON() implemented. rbri
Fix core-js: regular expressions with property escapes throwing a NPE (regression from 4.14.0). Fixes #1046. rbri
Add DOMMatrixReadOnly isIdentity property implemented. rbri
Fix core-js: improve global symbol registry handling. RhinoTeam

Release 4.17.0 – October 05, 2025

Type Changes By
Fix core-js: duplicate function keys in object literal now allowed. RhinoTeam
Add Empty implementation of MessagePort.start() and MessagePort.close() added. rbri
Fix Detection of the window.postMessage() transfer parameter improved. rbri
Remove Deprecated methods HTMLParser.parse(WebResponse, HtmlPage, boolean, boolean), HTMLParser.parseFragment(DomNode, DomNode, String, boolean), and HTMLParser.parseFragment(DomNode, String) removed. rbri
Remove Deprecated method UrlUtils.decodeDataUrl(byte[]) removed. rbri
Remove Deprecated method AbstractJavaScriptConfiguration.isCompatible(SupportedBrowser, SupportedBrowser) removed. rbri
Remove Deprecated class org.htmlunit.html.DomNode.DescendantElementsIterator removed. rbri
Update Use a new HTMLElementsWithCache object for each neko parser run to avoid race conditions under load. Rene Schwietzke
Update neko: some optimizations for HTMLElementsProvider/HTMLElements/HTMLElementsWithCache. Rene Schwietzke
Add neko: introduce HTMLElementsProvider and HTMLElementsWithCache. rbri
Fix core-js: 'eval'of a function is now undefined. RhinoTeam
Fix core-js: duplicate properties in object literal now allowed. RhinoTeam
Fix Window.top has no setter. rbri
Update Upgrade Apache commons-lang3 to 3.19.0. rbri
Add Initial support for the :has() pseudo selector added. rbri
Add Initial support for the :where() pseudo selector added. rbri
Add Initial support for the :is() pseudo selector added. rbri
Add XMLHttpRequest now supports data url's. rbri
Fix Head request for a data url now returning an empty response. rbri
Add HtmxTwoZeroSevenScriptPreProcessor added; this is required for htmx 2.0.3-2.0.7. rbri
Add Tests for htmx 2.0.4-2.0.7 added. rbri
Fix core-js: fix template literal string conversion for ECMAScript compliance RhinoTeam
Fix core-js: fix Array.from to prioritize iterable over array-like objects RhinoTeam
Add CSS.escape() javascript method added. rbri
Fix Fix URL constructor to support also the data scheme. rbri
Add DOMMatrix and DOMMatrixReadOnly stubs replaced by a real implementation (incomplete). Fixes #371. rbri
Fix Properly synchronize access to httpClientBuilder_ in class HttpWebConnection. Fixes #1014. René Schwietzke
Fix core-js: fix error stack generation in interpreted mode and report the correct line number RhinoTeam
Fix core-js: don't propagate strict flag when compiling scripts and we already have an active context in strict mode RhinoTeam
Fix core-js: a problem with toString() on arrow functions fixed RhinoTeam
Add core-js: ES2025 Error.isError static method implemented RhinoTeam
Add core-js: ES2025 Math.f16round method implemented RhinoTeam
Fix HtmlLink.getWebResponse(...) now also works when the JavaScript engine is disabled. rbri
Add BroadcastChannel stub replaced by a real implementation. Fixes #978. rbri
Add UrlUtils.isSameOrigin(URL, URL) added and used by XMLHttpRequest rbri
Fix SameOrigin check has to check the protocol also. rbri

Release 4.16.0 – August 29, 2025

Type Changes By
Update core-js: infer function names at runtime for computed properties RhinoTeam
Add core-js: Several fixes for calling bind() in the interpreter (regression from 4.14.0) rbri
Add core-js: ES2025 ArrayBuffer transfer(), and transferToFixedLength() implemented RhinoTeam
Update core-js: internal optimizations to make 'undefined' lookup faster RhinoTeam
Add core-js: ES2025 Set methods intersection(), union(), difference(), symmetricDifference(), isSubsetOf(), isSupersetOf(), and isDisjointFrom() implemented RhinoTeam
Fix core-js: make Object.assign copy over Symbol properties RhinoTeam
Fix core-js: some methods should not have a prototype property RhinoTeam
Add core-js: ES2025 Promise.try implemented RhinoTeam
Add core-js: spread for object literals implemented RhinoTeam
Update neko: do not check for bom headers on compressed streams rbri
Update WebClient waitForBackgroundJavaScript(long), waitForBackgroundJavaScriptStartingBefore(long), and waitForBackgroundJavaScriptStartingBefore(long, long) no longer marked as experimental. rbri
Update Use our own 'fork' of the current brotli source code. This makes some fixes available that are done in the code base but not release so far. Fixes #1009. rbri
Update Use our own StringUtils at more places to be compatible with older commons lang versions. rbri
Update Handling of CData sections in XHTML documents improved/fixed. rbri

Release 4.15.0 – August 17, 2025

Type Changes By
Update WebAssert messages reviewed and improved. rbri
Update WebAssert got various improvements and more complete unit tests. rbri
Update Improve WebAssert javadoc. rbri
Update Improve WebClientOptions javadoc. rbri
Update neko: improved features/properties documentation rbri
Fix neko: fix missing property/feature handling for HTMLScanner.setFeature() and HTMLScanner.setProperty(). rbri
Fix core-js: Fix two more regressions from the Interpreter refactoring. Various combinations of apply/bind/call now working again. Fixes #1001. RhinoTeam
Update websocket-client: jetty updated to 9.4.58.v20250814. rbri
Fix core-js: Fix a regression regarding optional chaining operators. RhinoTeam
Fix neko: Always call detectEncoding() to skip bom in case we got an input stream with bom and an encoding. rbri
Update neko: increase PlaybackInputStream buffer size rbri
Add neko: NekoSAXParser Factory added rbri
Add WebClient option pageRefreshLimit added. Refresh handling changed to support a clear limit. The initial value is 72 to be backward compatible. rbri
Add Dummy implementation of PointerEvent#getPersistentDeviceId() returning always 0. rbri
Update The parser for the refresh header has been rewritten. Thanks to a series of additional tests, we are now much closer to real browsers. Fixes #1002. rbri
Add core-js: TypedArray.from and TypedArray.of implemented. RhinoTeam

Release 4.14.0 – July 30, 2025

Type Changes By
Add New sister project 'jsoup-bridge' (https://github.com/HtmlUnit/htmlunit?tab=readme-ov-file#jsoup-bridge). rbri
Update Switched to sonatype central-publishing for snapshots and release builds. rbri
Add New method WebClinet.waitForBackgroundJavaScriptStartingBefore(final long delayMillis, final long timeoutMillis) that combines a overall timeout with waiting for js tasks starting before. rbri
Fix Avoid ConcurrentModificationException in HtmlPage.deregisterFramesIfNeeded() rbri
Add Separate developer documentation to help people start working on this project rbri
Fix MutationEvent is still available in FF but not as global rbri
Fix Some fixes for the ctor prototype setup rbri
Update code cleanup based on PMD - use isEmpty() in more places rbri
Add core-js: Infer function name when declared in a var/let statement implemented RhinoTeam
Add core-js: Promise.withResolvers() added RhinoTeam
Update core-js: assigning values to super got some improvements rbri
Fix core-js: BigInt.asUintN and BigInt.asIntN implementation fixed RhinoTeam
Update core-js: code simplification for support of different JDKs RhinoTeam
Update core-js: huge refactoring of the interpreter for more speed and easier maintenance RhinoTeam
Remove core-js: '__parent__' property is no longer available rbri
Update core-js: refactored exception and stack handling RhinoTeam
Update core-js: The Builtins and the Regexp initializer migrated from reflection to lambda RhinoTeam
Update core-js: major '__proto__' support update bringing the '__proto__' support in line with the spec and with real browsers. This also includes support for the strange function 'shorthand' case for __proto_. rbri
Update core-js: refactored CallFrame to keep stack as immutable linked list. RhinoTeam
Fix core-js: fix how 'this' is handled when calling `Array.from` in some edge cases, when `null` or 'undefined' were passed as the `this` argument RhinoTeam
Add SBOM (CycloneDX format) added. rbri
Update core-js: minor code optimization. rbri
Update core-js: typo in prototype detection fixed. rbri
Update core-js: Code cleanup. RhinoTeam
Fix neko: fix ParentNode#getTextContent() rbri
Add neko: introduce Element.SCRIPT_SUPPORTING flag for HTMLElements rbri
Update Upgrade Apache commons-io to 2.20.0. rbri
Update Upgrade Apache commons-lang3 to 3.18.0. rbri
Add core-js: UnicodeMode support for regexp added. RhinoTeam
Add core-js: ArrayBuffer detach() support added. RhinoTeam
Update Major improvements for the asXML() function. Fixes #982. rbri
Update Test suite updated to junit 5 and cleaned up. rbri
Add The hidden attribute now supports the 'until-found' value. rbri
Update INCOMPATIBLE CHANGE: To add support for the 'until-found' hidden attribute value, the parameter handling of method HtmlElement.setHidden(String) was changed. Please have a look at the javadoc for details about the current implementation. rbri
Add jQuery 1.12.4 test suite added. rbri
Update jQuery 1.8.2, 1.11.3, and 3.3.1 test suite refreshed. rbri
Remove FF139: SVGDiscardElement is gone (again). rbri
Fix getClientRects() returns an empty list for hidden inputs. This fixes also a problem with the :hidden jQuery selector. rbri

Release 4.13.0 – June 03, 2025

Type Changes By
Fix The prototype for DOMRect is now DOMRectReadOnly. rbri
Update Internal javascript class ClientRect renamed to DOMRect (the old name was a leftover from IE). rbri
Update Internal javascript class ClientRectList renamed to DOMRectList (the old name was a leftover from IE). rbri
Update core-js: Adjust order of evaluation of function arguments to match the spec. RhinoTeam
Update core-js: Major tidy up of 'NativeTypedArrayView' to better match spec. RhinoTeam
Update core-js: Refactor functions to be lambdas rather than IdScriptableObject's. RhinoTeam
Fix The prototype for HTMLAllCollectionis no longer the HTMLCollection, it is now object. rbri
Update HTMLTableCellElement now supports the 'align', 'ch', 'chOff', 'headers', 'height', 'noWrap', 'rowSpan', 'scope', 'vAlign', 'width' properties. rbri
Update HTMLTableColElement now supports the 'align', 'ch', 'chOff', and 'vAlign' properties. rbri
Fix Internal javascript class HTMLTableComponent removed. The prototype for HTMLTableCellElement, HTMLTableColElement, and HTMLTableRowElement is now the correct HTMLElement. rbri
Update HTMLTableSectionElement now supports the deleteRow() and insertRow() functions. rbri
Update HTMLTableSectionElement now supports the 'align' and 'rows' properties. rbri
Update HTMLTableElement now supports the deleteRow() and insertRow() functions. rbri
Update HTMLTableElement now supports the 'align' and 'rows' properties. rbri
Fix Internal javascript class RowContainer removed. The prototype for HTMLTableElement, and HTMLTableSectionElement is now the correct HTMLElement. rbri
Update HTMLUListElement now supports the 'compact' property. rbri
Update HTMLOListElement now supports the 'compact' property. rbri
Update HTMLMenuElement now supports the 'compact' property. rbri
Update HTMLLIElement now supports the 'type' property. rbri
Update HTMLDListElement now supports the 'compact' property. rbri
Update HTMLDListElement now supports the 'compact' property. rbri
Fix Internal javascript class HTMLListElement removed. The prototype for HTMLDListElement, HTMLDirectoryElement, HTMLLIElement, HTMLMenuElement, HTMLOListElement, and HTMLUListElement is now the correct HTMLElement. rbri
Fix Internal javascript class HTMLListElement removed. The prototype for HTMLDListElement, HTMLDirectoryElement, HTMLLIElement, HTMLMenuElement, HTMLOListElement, andHTMLUListElement is now the correct HTMLElement. rbri
Update Javascript class configuration reworked, this allows some optimizations in the furture. rbri
Fix Constructor prototype fixes, now we have the correct prototypes for most classes. The RecursiveFunctionObject workaround is no longer required. rbri
Fix DomNodeIterator is now serializable. rbri
Update FF138: adjust datetimeformat for several locales. rbri
Update Chrome/Edge 136: Clicking an image input no longer submits the value as param. rbri
Add FF138: Frame elements are accessible by name. rbri
Add FF138: Error.captureStackTrace() is supported. rbri
Add FF138: js constant maxActions added to Notification. rbri
Update FF138: stylesheet links checking the content type for 'text/css'. rbri

Release 4.12.0 – May 17, 2025

Type Changes By
Add WebClient option NekoReaderBufferSize added. You can use this to increase the buffer size used by the Neko Html parser to optimize parsing performance. rbri
Update HTMLParser parseFragment(DomNode, String), parse(WebResponse, HtmlPage, boolean, boolean), and parseFragment(DomNode, DomNode, String, boolean) are deprecated. rbri
Update neko: HTMLScanner always requires a document handler; the null check is moved to the setter and all the others are removed. rbri
Fix neko: avoid HTML1011 error for self closing tags. rbri
Fix neko: ignore whitespace before the closing > when parsing special tags. rbri
Update neko: remove two superfluous conversions from the code. rbri
Update core-js: NativeArray impl is now lambda based. RhinoTeam
Update core-js: improved date string parser; support optional ms digits, skip ms digits, extended year support is not available in es6 rbri
Update core-js: detailed message added to IndexOutOfBoundsExceptions RhinoTeam
Update core-js: add double null check pattern when initializing cache values. RhinoTeam
Fix DomTokenList.forEach() now takes care of the current state of the list (e.g. the forEach function might add/remove elements to the list itself). rbri
Fix NodeList.forEach() now takes care of the current state of the list (e.g. the forEach function might add/remove elements to the list itself). rbri
Update AlertHandler, ConfirmHandler, FrameContentHandler, CharacterDataChangeListener, and IncorrectnessListener marked as @FunctionalInterface. rbri
Update Upgrade Apache commons-io to 2.19.0. rbri
Update Element.scrollIntoView() now triggers scroll events on all parents. rbri
Update For FF scroll events are of type UIEvent. rbri
Fix Scroll events are not bubbling and not cancelable. rbri
Fix core-js: Function.prototype[Symbol.hasInstance] fixed. RhinoTeam
Fix core-js: regression in hex and unicode hex parsing or regexp fixed RhinoTeam
Update CSS blockSize support improved. rbri
Fix core-js: Complete reimplementation of 'String.prototype.search', 'String.prototype.replace', 'String.prototype.replaceAll', and 'String.prototype.split'. The new impl is much closer to the spec. RhinoTeam
Fix core-js: Fix a character class parsing regression for regexp. RhinoTeam
Fix core-js: Fix handling of \x and \u in regexp. RhinoTeam
Add FF137: SVGDiscardElement added. rbri
Update Chrome/Edge 135, FF137: Setter validation for length style properties adjusted. rbri
Add Chrome/Edge 135: Style properties 'interactivity', 'overflowBlock', 'overflowInline', and 'scrollMarkerGroup' added. rbri
Update FF137: Adjust clientHeight for some ruby related tags. rbri
Update Chrome/Edge 135, FF137: Improved namespace handling when sending an html document via XMLHttpRequest. rbri
Update Chrome/Edge 135: Improved <br> handling in options tags. rbri
Update Chrome/Edge 135, FF137: Fixed font sizes for smaller/larger CSS property value. rbri
Update FF137: Set span for table cells to zero if provided value is invalid. rbri
Fix core-js: Some fixes for strict handling. RhinoTeam
Update core-js: Several code improvements for the RegExp implementation. RhinoTeam
Add WebClient.setWebSocketAdapter(WebSocketAdapterFactory) added. This should help to use a different WebSocket implementation. Fixes #946. rbri
Add WebSocketAdapter splitted into WebSocketAdapter and WebSocketListener. New interface WebSocketAdapterFactory introduced. This should help to make it simpler to use a different WebSocket implementation. Fixes #946. rbri
Add core-js: Named capture groups in RegularExpressions now supported. RhinoTeam
Remove Deprecated method CssStyleSheet.validateSelectors(SelectorList, int, DomNode) removed. rbri
Remove Deprecated method HtmlForm.getElements() removed. rbri
Remove Deprecated method WebRequest.setRefererlHeader(URL) removed. rbri

Release 4.11.1 – March 26, 2025

Type Changes By
Fix NumberFormatException when calculating the clientHeight/offsetHeight. rbri

Release 4.11.0 – March 25, 2025

Type Changes By
Fix Event 'onload' is triggered by FF ESR also if the frame content was not shown because of csp. rbri
Add Initial support for font sizes 'xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large', 'xxx-large', 'smaller', and 'larger'. rbri
Fix core-js: Refactor NativeString based on lambdas and stop using IdScriptableObject. rbri
Fix The style cache has to handle all parents of added or deleted nodes. Fixes #942. rbri
Remove Class HiddenFunctionObject removed, this was a leftover from the IE age. rbri
Fix core-js: Arguments.callee is always the same function in strict mode. rbri
Fix core-js: Arguments.caller is not available in real browsers. rbri
Fix core-js: An issue where capture groups in quantified expressions (min = 2) were not cleared between iterations fixed. For example, in /(?:(\2)(\d)){2}/, during the second iteration, \2 incorrectly retained the first iteration's value instead of being reset. RhinoTeam
Remove Switched back from our RegExp translation into Java regular expressions to use the core Rhino stuff. Rhino made significant progress in this area. This simplifies our implementation and supports more features in the future. rbri
Add core-js: RegExp lookbehind implemented. RhinoTeam
Update core-js: NativeObject converted from IdScriptableObject to lambda constructor RhinoTeam
Fix core-js: problem with 'super' and nested lambdas RhinoTeam
Fix core-js: RegExp.prototype[Symbol.match] and String.prototype.match. RhinoTeam
Add core-js: Implement Symbol.match. RhinoTeam
Fix core-js: String.prototype.match. As per the spec, it is simply supposed to invoke the Symbol.match of the regexp. RhinoTeam
Fix core-js: Fix the behavior of Regexp sticky flag. RhinoTeam
Remove Deprecated methods removed from EncodingSniffer, HttpClientConverter, WebResponse, and WebResponseWrapper. rbri
Add cssparser: improved support for var initial values. rbri
Update Apache commons-codec is no longer a runtime dependency. rbri
Fix atob() has to remove all whitespace from the provided string. rbri
Fix atob() must always fail on invalid input. Fixes #940. Thanks to Christoph Burgmer. rbri
Fix The script async attribute is ignored if the src attribute is absent. rbri
Update Many more checkstyle jdoc rules enabled and all violations fixed. rbri
Fix HtmlImage onerror event is triggered for 204 responses. rbri
Update Some minor code improvements found by spotbugs. rbri
Fix Some more event initialization fixes. rbri
Fix Fix various event initialization when working with WebSocket's. rbri

Release 4.10.0 – February 22, 2025

Type Changes By
Update core-js: NativeGlobal now based on lambda functions. RhinoTeam
Update Avoid using XPath for implementing form submit on enter key pressed. rbri
Update Implement Document.getElementById() without using XPath. rbri
Fix NPE in org.htmlunit.javascript.JavaScriptEngine.asJavaScriptException(). rbri
Update Upgrade commons-logging to 1.3.5. rbri
Update StyleElement implements no longer the Comparable interface. For our special needs we now using the static method compareToByImportanceAndSpecificity(StyleElement, StyleElement). RhinoTeam
Update core-js: load more classes lazily. RhinoTeam
Update HtmlUrlInput value trimming fixed. rbri
Update Replace the deprecated WebElement.getAttribute(String) with getDomAttribute(String) and getDomProperty(String) at many places in the test suite. rbri
Update Use StandardCharsets.UTF_8 instead of Charsets.UTF_8 for the sample code. rbri
Fix HtmlTextArea - several fixes to throw the correct error. rbri
Fix AudioContext/OfflineAudioContext - several fixes to throw the correct error. rbri
Fix 'Illegal constructor' is a type error. rbri
Update Firefox ESR accept header no longer contains 'image/avif,image/webp,image/png,image/svg+xml'. rbri
Update core-js: BigInt, Boolean and Number converted to use lambdas. RhinoTeam
Update core-js: Function hoisting inside blocks is now a core Rhino feature, our own hack is gone. RhinoTeam
Update core-js: Map and Set converted to use lambdas. RhinoTeam
Fix core-js: lambda-based classes serializable are serializable. RhinoTeam
Update core-js: bunch of changes to make the SlotMap handling faster. RhinoTeam
Fix CSSStyleSheet - several fixes to throw the correct error. rbri
Fix XPath.evaluate() throws a TypeError. rbri
Fix Document - several fixes to throw the correct error. rbri
Fix XMLHttpRequest - several fixes to throw the correct error. rbri
Fix Geolocation.ctor() throws a TypeError. rbri
Fix TreeWalker.ctor() throws a TypeError. rbri
Fix MutationObserver.observe() throws a TypeError. rbri
Fix DOMParser.parseFromString() throws a TypeError. rbri
Fix Window.postMessage() throws a SyntaxError. rbri
Fix Window.atob()/btoa() throws an InvalidCharacterError. rbri
Fix DomNode.appendChild() throws a HierarchyRequestError. rbri
Fix AbstractRange.ctor() throws a TypeError. rbri
Fix DOMTokenList - several fixes to throw the correct error. rbri
Fix CSSGroupingRule - several fixes to throw the correct error. rbri
Fix HTMLInputElement value/selectionStart/selectionEnd properties throws the correct error (InvalidStateError). rbri
Fix SVGMatrix.rotateFromVector()/inverse() throws the correct error (InvalidAccessError/InvalidStateError). rbri
Fix Crypto.getRandomValues() throws a QuotaExceededError. rbri
Fix CanvasRenderingContext2D.measureText() throws a TypeError. rbri
Fix HTMLTableElement/HTMLTableRowElement - several fixes to throw the correct error. rbri
Fix Element.querySelectorAll()/querySelector() throws a SyntaxError. rbri
Fix HTMLOptionsCollection.add() throws a NotFoundError. rbri
Fix Accessing a HTMLDocument without a js peer throws a TypeError. rbri
Fix Document.createElementNS() throws a TypeError. rbri
Fix Document.createElementNS() throws a TypeError. rbri
Fix Selection.getRangeAt() throws an IndexSizeError. rbri
Fix Node.replaceChild()/removeChild()/insertBefore() several fixes to throw the correct error. rbri
Fix HTMLDocument.appendChild() throws HierarchyRequestError. rbri
Fix Document.createElement() throws InvalidCharacterError. rbri
Fix ImageData.ctor() various fixes to throw the correct error in different situations. rbri
Fix CharacterData.deleteData() throws an IndexSizeError. rbri
Fix Document.querySelectorAll() throws a SyntaxError if the selector is invalid. rbri
Fix Document.createEvent() creates the correct exception when the event type is not supported. rbri
Fix DOMException name property was missing. rbri
Fix Handling of the error code when construction DOMException is fixed. rbri
Fix Document.evaluate() now throws a SyntaxError instead of an InternalError. rbri
Update Upgrade commons-codec to 1.18.0. rbri
Fix WebClientOptions sslClientCertificateStore is transient. rbri

Release 4.9.0 – January 22, 2025

Type Changes By
Fix WebClientOptions SSLTrustStore is transient. rbri
Fix WebClientOptions.Geolocation is serializable now rbri
Fix HtmlDomTreeWalker is serializable now rbri
Fix core-js: junit-vintage-engine was NOT marked as 'test' dependency, therefore we had junit as part of our dependencies/lib/distribution (regression from 4.8.0) rbri
Add BigInt support added. rbri
Fix core-js: Symbol.hasInstance for Function.prototype implemented. RhinoTeam
Add core-js: Context#emptyArgs is deprecated. rbri

Release 4.8.0 – January 12, 2025

Type Changes By
Add cssparser: support plain color definitions with var/calc. rbri
Fix cssparser: 'and' is a valid class name. rbri
Add cssparser: support relative color definitions. rbri
Update websocket-client: jetty updated to 9.4.57.v20241219. rbri
Fix core-js: add an empty slot map (singleton) for cases where no slots exist; this should reduce the memory needed a bit RhinoTeam
Fix core-js: methods cannot be used as constructor fixed RhinoTeam
Update Upgrade commons-codec to 1.17.2. rbri
Update Apache commons-net is no longer a runtime dependency. rbri
Update Apache commons-text is no longer a runtime dependency. rbri
Update core-js: Extract function calling out of the interpreter loop for performance. RhinoTeam
Fix Avoid ConcurrentModificationExceptions in frame processing. rbri
Fix core-js: handle stack frames in the correct order. RhinoTeam
Add cssparser: support hwb(), lab(), lch(), oklab(), and oklch() color definitions. rbri
Add cssparser: add support for 'none' in modern color definitions. rbri
Fix core-js: fix border checks for typedarray set-method (see https://github.com/HtmlUnit/htmlunit-core-js/issues/27) rbri
Add core-js: Allow symbol keys in getter/setter in object literal syntax like 'var o = { get [aSymbol]: value }'. RhinoTeam
Add core-js: Support for generator methods in object literals like 'o = {*g() {...}}' added. RhinoTeam
Add core-js: Implement the super operator - which can actually be used outside of classes and will do something that intuitively is "refer to the prototype". RhinoTeam
Fix core-js: Fix tokenEnd and cursor for string, template, xml literals and multiline comments when using multibyte characters. RhinoTeam
Update FAQ updated with some info about page history. rbri
Fix DomElement#getStaticElementsByTagName() has to check for prefix. Fixes #905. rbri
Update Upgrade Apache commons-text to 1.13.0. rbri
Add core-js: Some improvements for the interpreter by generating smaller interpreter bytecode. RhinoTeam