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 |
|---|---|---|
![]() |
Tests for htmx 2.0.10 added. | rbri |
![]() |
InnerOuterTextSerializer handles dt tags like li. | rbri |
![]() |
Support start attribute when creating the text representation of an UnorderedList. | rbri |
![]() |
HtmlHeadingGroup introduced. | rbri |
![]() |
HtmxTwoZeroSevenScriptPreProcessor updated to support htmx 2.0.10 also. | rbri |
![]() |
Simple first impl of Document parseHTMLUnsafe() added. | rbri |
![]() |
moveBefore() fixed to not create double id/name index entries. | rbri |
![]() |
Make sure elements not added twice to the id/name index. | rbri |
![]() |
core-js: 'BaseFunction' and 'NativeString' converted to descriptor. | RhinoTeam |
![]() |
core-js: typed array constructor improved to be closer to spec. | RhinoTeam |
![]() |
INCOMPATIBLE CHANGE: WebClientOptions.getWebSocketMaxTextMessageBufferSize() / setWebSocketMaxTextMessageBufferSize() removed. | rbri |
![]() |
INCOMPATIBLE CHANGE: WebClientOptions.getWebSocketMaxBinaryMessageBufferSize() / setWebSocketMaxBinaryMessageBufferSize() removed. | rbri |
![]() |
WebSocket close() check for null web socket impl. | rbri |
![]() |
WebSocket close event - set the was clean flag only if statusCode is 1000. | rbri |
![]() |
WebSocket constructor improved, better checking/handling of the url and throw the correct error types. | rbri |
![]() |
WebSocket should handle the socket connect error by setting the status and triggering the listeners. | rbri |
![]() |
INCOMPATIBLE CHANGE: WebSocketListener.onWebSocketBinary(byte[] data, int offset, int length) changed to onWebSocketBinary(ByteBuffer payload). | rbri |
![]() |
INCOMPATIBLE CHANGE: WebSocketListener.onWebSocketBinary(byte[] data, int offset, int length) changed to onWebSocketBinary(ByteBuffer payload). | rbri |
![]() |
INCOMPATIBLE CHANGE: WebSocketAdapter.closeIncommingSession() renamed to closeIncomingSession(). | rbri |
![]() |
websocket-client: jetty updated to 12.1.8. | rbri |
![]() |
core-js: Fix Object.assign with array target losing length update. | RhinoTeam |
![]() |
core-js: Introduce ClassSizeException (extends ClassFileFormatException) and tighten up exceptions related to class compilation. | RhinoTeam |
![]() |
core-js: Fix for ignored spreads in array construction. | rbri |
![]() |
core-js: Fix uint8 overflow in array literal skipIndexesId and sourcePositions. | rbri |
![]() |
core-js: Tidy up serial version ids; applied openrewrite to add `@Serial` annotations. | RhinoTeam |
![]() |
Introduce SpeechRecognitionEvent and SpeechRecognitionErrorEvent and make them also available as webkitSpeechRecognitionEvent and webkitSpeechRecognitionError. | rbri |
![]() |
Introduce SpeechGrammar, SpeechGrammarList, and SpeechRecognition and make them also available as webkitSpeechGrammar, webkitSpeechGrammarList, and webkitSpeechRecognition. | rbri |
![]() |
SVGSymbolElement is a child of SVGGraphicsElement. | rbri |
![]() |
Bunch of event constructor fixes. | rbri |
![]() |
Unified and enhanced test for all the js event objects, many missing test classes added. | rbri |
![]() |
ChromeEdge: The <command> html tag is no longer supported. | rbri |
![]() |
ChromeEdge: document.createEvent('WheelEvent') throws. | rbri |
![]() |
ChromeEdge: document.createEvent('CloseEvent') throws. | rbri |
![]() |
ChromeEdge: document.createEvent('AnimationEvent') throws. | rbri |
![]() |
ChromeEdge: document.createEvent('PopStateEvent') throws. | rbri |
![]() |
ChromeEdge: NumberFormat for de-CH and it-CH updated. | rbri |
![]() |
neko: invalid numeric entity handling improved | rbri |
![]() |
neko: hgroup support added | rbri |
![]() |
neko: null character handling in script content fixed | rbri |
![]() |
neko: update translation of 0x98 to \u02DC | rbri |
![]() |
neko: fix surrogate-character-reference parse error handling | rbri |
![]() |
neko: fix consecutive ampersands before named entity parsing | rbri |
![]() |
neko: include tests from https://github.com/html5lib/html5lib-tests.git | rbri |
![]() |
neko: more fuzzer tests and fixes | rbri |
![]() |
neko: HTMLScanner.scanName: ASCII fast-path for the per-char inner loop | rbri |
![]() |
neko: javadoc fixes | rbri |
![]() |
neko: handle empty attributes always the same way | rbri |
![]() |
neko: more robust collection handling, missing forcedEndElement_ reset fixed | rbri |
![]() |
neko: add missing methods to EmptyXMLAttributesImpl to make it more robust | rbri |
![]() |
neko: introduce and use immutable EmptyXMLAttributesImpl | rbri |
![]() |
neko: reuse the plaintext scanner (like the other scanners) and avoid toLowerCase if not needed | rbri |
![]() |
neko: use the correct property (http://cyberneko.org/html/properties/names/attrs) in case of the error handling for strange attributes | rbri |
![]() |
neko: adjust column now also when skipping | rbri |
![]() |
neko: modernize by using Arrays.mismatch() | rbri |
![]() |
neko: reuse the HTMLUnicodeEntitiesParser (like we do for many other things) and simplify the code a bit | rbri |
![]() |
Defer building the HtmlPage id/name lookup index until first read. | Ronny Shapiro |
![]() |
Input type image returns false for willValidate. | rbri |
![]() |
XMLHttpRequest adds the origin header to patch requests. | rbri |
![]() |
ChromeEdgeFF: document.createElement tagName character validation adjusted. | rbri |
![]() |
ChromeEdge: willValidate returns true for readonly buttons. | rbri |
![]() |
Fix toString result for Intl.Collator, Intl.DateTimeFormat, Intl.NumberFormat, and Intl.v8BreakIterator. | rbri |
![]() |
Fix v8BreakIterator ctor to accept language-region. | rbri |
![]() |
Fix DomNode.insertBefore(DomNode) to dissolve DocumentFragment into its children before insertion. | Lai Quang Duong |
![]() |
cssparser: support for unicode characters in keywords removed, this is not used in real world and the parser is much simpler without | rbri |
![]() |
core-js: Make NativeDate.toLocaleString() behave more like real browsers. | Lai Quang Duong |
![]() |
core-js: Major refactoring to separate top level scope and 'globalThis'. | RhinoTeam |
![]() |
core-js: Improve 'caller' handling depending on strict mode. | rbri |
![]() |
core-js: Clean up tracking of strict mode in general. | RhinoTeam |
![]() |
core-js: Support for resizable ArrayBuffers as specified in ES2024 added. | RhinoTeam |
![]() |
core-js: Fixed automatic semicolon insertion for 'let' | RhinoTeam |
![]() |
core-js: Ensure that construction is wrapped in a top-level call when none is present, preventing assertion failures in interpreted mode | RhinoTeam |
![]() |
FunctionWrapper implements SymbolScriptable - solves e.g. Function.prototype.toString instanceof Function of Object.prototype.toString.call(Function.prototype.toString). | Lai Quang Duong |
![]() |
xpath: Add missing entry for ER_XPATH_ERROR in XPATHErrorResources. | Ryuhei Ishizuka |
![]() |
Force content sniffing for '*/*' content type to be in sync with the browsers. | Lai Quang Duong |
![]() |
SubtleCrypto: digest() - SHA-1, SHA-256, SHA-384, SHA-512. | Lai Quang Duong |
![]() |
SubtleCrypto: generateKey() - RSASSA-PKCS1-v1_5, RSA-PSS, RSA-OAEP, ECDSA, ECDH, AES-CBC, AES-CTR, AES-GCM, AES-KW, HMAC | Lai Quang Duong |
![]() |
SubtleCrypto: importKey("raw") - HMAC, AES-CBC, AES-CTR, AES-GCM, AES-KW | Lai Quang Duong |
![]() |
SubtleCrypto: exportKey("raw") - HMAC, AES-CBC, AES-CTR, AES-GCM, AES-KW | Lai Quang Duong |
![]() |
SubtleCrypto: sign() - HMAC, RSASSA-PKCS1-v1_5, RSA-PSS, ECDSA | Lai Quang Duong |
![]() |
SubtleCrypto: verify() - HMAC, RSASSA-PKCS1-v1_5, RSA-PSS, ECDSA | Lai Quang Duong |
![]() |
SubtleCrypto: encrypt() - AES-CBC, AES-GCM, AES-CTR, RSA-OAEP | Lai Quang Duong |
![]() |
SubtleCrypto: decrypt() - AES-CBC, AES-GCM, AES-CTR, RSA-OAEP | Lai Quang Duong |
![]() |
Area: properties hash,host,hostname,href,origin,password,pathname,port,protocol,search, and username added. | Lai Quang Duong |
![]() |
Extract shared HTMLHyperlinkElementUtils for URL decomposition and use it from HTMLAnchorElement and HTMLAreaElement. | Lai Quang Duong |
![]() |
HTMLAnchorElement: strip default port from host/port/origin. | Lai Quang Duong |
![]() |
HtmlPage: fix a bug where async script may not be executed. | Lai Quang Duong |
![]() |
ProgressEvent: properties loaded and total are numeric. | rbri |
![]() |
Intl: getCanonicalLocales() processes arguments as array-likes in sync with the spec. | rbri |
![]() |
FileReader: fire ProgressEvent and add missing event handlers | Lai Quang Duong |
![]() |
HtmlInputElement's of type email/url/date/time have to fire the input event. | Lai Quang Duong |
![]() |
Align cookie max-age handling for huge values with the spec. | Lai Quang Duong |
![]() |
Intl: fix toStringSymbol for Intl, Collator, DateTimeFormat, Locale, and NumberFormat. | rbri |
![]() |
Intl: supportedLocalesOf() implementation added to DateTimeFormat and NumberFormat. | Lai Quang Duong |
![]() |
window.queueMicrotask() added. | Lai Quang Duong |
![]() |
Intl: supportedLocalesOf() implementation added to DateTimeFormat and NumberFormat. | Lai Quang Duong |
![]() |
Intl: getCanonicalLocales() implementation added | Lai Quang Duong |
![]() |
Intl.Locale implementation added. | Lai Quang Duong |
![]() |
Storage: fix storeSize calculation when overwriting existing key | Kanoko Yamamoto |
![]() |
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 |
![]() |
Upgrade commons-logging to 1.3.6. | rbri |
![]() |
core-js: Syntax error when multiple comments in braceless IF. | RhinoTeam |
![]() |
core-js: iCode debug printing refactored. | RhinoTeam |
![]() |
core-js: Convert XML objects from 'IdScriptableObject's to descriptors. | RhinoTeam |
![]() |
select.remove() with no arguments now removes itself from the DOM. Fixes #1092. | rbri |
![]() |
core-js: Enforce 'WrapFactory' users to override new `wrap(...)` and `wrapAsJavaObject(...)` methods. | RhinoTeam |
![]() |
core-js: use 'ClassValue' for caching class-based TypeInfo. | RhinoTeam |
![]() |
core-js: a problem in dumpICode fixed and test coverage increased. | RhinoTeam |
![]() |
core-js: fix generator .return() to include value when in completed state. | RhinoTeam |
![]() |
core-js: Avoid compiling `a.eval()` as a direct eval call so all the prototypes are set up correctly. | RhinoTeam |
![]() |
Better separation of the scope and the global this object. | rbri |
![]() |
core-js: Support for rest parameters in destructuring. | RhinoTeam |
![]() |
core-js: Respect custom [Symbol.hasInstance] implementations; look up of hasInstance walks prototype chain. | RhinoTeam |
![]() |
core-js: NativeError and RegExp setup modernized. | RhinoTeam |
![]() |
core-js: Fix for setting of prototype and parent scopes on some new objects. | RhinoTeam |
![]() |
core-js: Fix scope used in iterator creation. | RhinoTeam |
![]() |
core-js: IdFunctionObject.isConstructor() to return useCallAsConstructor; now methods like Date.prototype.getDate, RegExp.prototype.exec, etc. no longer incorrectly reported as constructors. | RhinoTeam |
![]() |
Test suite updated to junit 6 and cleaned up. | rbri |
![]() |
Simplify logging configuration for our test by switching from log4j to logback-classic. | rbri |
![]() |
core-js: Add delete support to DOMStringMap. | RhinoTeam |
![]() |
core-js: Remove direct dependency to ScriptableObject from DOMStringMap and improve get/set impl. | RhinoTeam |
![]() |
core-js: migrate NativeDate away from IdScriptable. | RhinoTeam |
![]() |
core-js: internal code cleanup - drop support for version 1.0 - 1.4 | RhinoTeam |
![]() |
core-js: add a method to temporarily suspend microtask processing | RhinoTeam |
![]() |
core-js: Optimize regex backtracking for quantifiers before end-of-line anchor | RhinoTeam |
![]() |
core-js: JSON.parse fixed to preserve negative zero | RhinoTeam |
![]() |
core-js: use ThrowTypeError at all relevant places. | rbri |
![]() |
core-js: debugger eval for scripts and eval scope for top-level scripts fixed. | RhinoTeam |
![]() |
core-js: DataView Float16 support added. | RhinoTeam |
![]() |
Improved HttpMethod validation in XMLHttpRequest open('trace', ...). | rbri |
![]() |
XMLHttpRequest open('trace', ...) throws a security error. | rbri |
![]() |
The test suite now uses Jetty 12.1. | RhinoTeam |
![]() |
INCOMPATIBLE CHANGE: Cookie moved from package 'org.htmlunit.util' to 'org.htmlunit.http' | rbri |
![]() |
core-js: DataView BigInt64 and BigUInt64 support added | RhinoTeam |
![]() |
core-js: isConstructor check fixed and improved | RhinoTeam |
![]() |
core-js: major performance improvement for RegExp.prototype[Symbol.split] and RegExp.prototype[Symbol.replace] | RhinoTeam |
![]() |
core-js: improve the Number.toLocaleString() implementation; drop our own version | rbri |
![]() |
Use java.util.Objects.hash() instead org.apache.commons.lang3.builder.HashCodeBuilder. | rbri |
![]() |
Use java.util.Objects.hash() instead org.apache.commons.lang3.builder.HashCodeBuilder. | rbri |
![]() |
module-info.java added to all projects. | rbri |
![]() |
INCOMPATIBLE CHANGE: XmlUtilsXercesHelper and XmlUtilsSunXercesHelper removed (and the class XmlUtilsHelperAPI). | rbri |
![]() |
INCOMPATIBLE CHANGE: dependency to xercesImpl removed. | rbri |
![]() |
INCOMPATIBLE CHANGE: htmlunit-csp updated to Java 17. | rbri |
![]() |
INCOMPATIBLE CHANGE: htmlunit-cssparser updated to Java 17. | rbri |
![]() |
INCOMPATIBLE CHANGE: htmlunit-corejs updated to Java 17. | rbri |
![]() |
INCOMPATIBLE CHANGE: htmlunit-neko updated to Java 17. | rbri |
![]() |
INCOMPATIBLE CHANGE: htmlunit-xpath updated to Java 17. | rbri |
Release 4.21.0 – December 28, 2025
| Type | Changes | By |
|---|---|---|
![]() |
DOMPointReadOnly, DOMRectReadOnly, DOMMatrixReadOnly, and PerformanceNavigation toJSON() implementation improved. | rbri |
![]() |
DOMPointReadOnly and DOMPoint implementation improved. | rbri |
![]() |
DOMRectReadOnly and DOMRect implementation improved, now we implement the whole interface. | rbri |
![]() |
cssparser: support for dvw, dvh, dvmin, dvmax, lvw, lvh, lvmin, lvmax, svw, svh, svmin, svmax unit added | rbri |
![]() |
cssparser: simplified error processing | rbri |
![]() |
cssparser: wrong escape sequence definition for letter 'o' fixed. | rbri |
![]() |
neko: minor improvements by replacing some equalsIgnoreCase() calls by simple equals(). | rbri |
![]() |
core-js: improved handling of unimplemented rest parameters in destructuring | RhinoTeam |
![]() |
core-js: fix checking of proxy functions being constructors. | RhinoTeam |
![]() |
core-js: proxies refactored to be callable objects only if their initial target is callable | RhinoTeam |
![]() |
core-js: modernize and improve the approach used for 'caller' support | rbri |
![]() |
core-js: make 'caller' a function prototype property. Fixes #1064. | rbri |
![]() |
core-js: make 'arguments' a function prototype property | rbri |
![]() |
core-js: make NativeCall attributes final | rbri |
![]() |
core-js: adjust our rhino fork to use the improved 'arguments' handling | rbri |
![]() |
core-js: improved interpreter performance by avoiding the need for activation frames | RhinoTeam |
![]() |
core-js: an off-by-one error in the lexer when encountering EOF fixed | RhinoTeam |
![]() |
core-js: initialise 'CallSite' against top level scope | RhinoTeam |
![]() |
core-js: implement support for destructuring in 'catch' to support things like 'catch ({message})' or 'catch ([a, b])' | RhinoTeam |
![]() |
core-js: incorrect destructuring in for loops handled at parse time | RhinoTeam |
![]() |
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 |
|---|---|---|
![]() |
core-js: Disambiguate local variable names to fix debugger issues. | RhinoTeam |
![]() |
core-js: Fix variable resolution in switch statements with let declarations (regression from 4.18.0) | RhinoTeam |
![]() |
core-js: default parameter evaluation ordering for generators fixed. | RhinoTeam |
![]() |
core-js: Symbol.toStringTag implemented for generators. | RhinoTeam |
![]() |
core-js: Destructuring support improved. | RhinoTeam |
![]() |
core-js: 'ES6Iterator' migrated to lambda based ScriptableObject. | RhinoTeam |
![]() |
core-js: 'DestructuringIterator' migrated to lambda based ScriptableObject. | RhinoTeam |
![]() |
core-js: 'NativeConsole' migrated to lambda based ScriptableObject. | RhinoTeam |
![]() |
core-js: 'ES6Generator' migrated to lambda based ScriptableObject. | RhinoTeam |
![]() |
core-js: 'NativeIterator' migrated to lambda based ScriptableObject. | RhinoTeam |
![]() |
HTMLElement#getAttributeNames() implemented. | rbri |
![]() |
HTMLElement#moveBefore() implemented (also for Document and DocumentFragment). Fixes #1053. | rbri |
![]() |
neko: code cleanup and warning fixes. | rbri |
Release 4.19.0 – November 23, 2025
| Type | Changes | By |
|---|---|---|
![]() |
neko: code quality and minor performance improvements. | rbri |
![]() |
neko: refactor eof handling from exceptions to return codes. | rbri |
![]() |
core-js: fix wrapper symbol handling in setPrototypeOf. | rbri |
![]() |
core-js: Rewrite Symbol.prototype.keyFor to avoid ConcurrentModificationException. | RhinoTeam |
![]() |
Use our own ArrayUtils at more places. | rbri |
![]() |
Upgrade Apache commons-lang3 to 3.20.0. | rbri |
![]() |
core-js: support for spread in arrays added | RhinoTeam |
![]() |
Upgrade Apache commons-io to 2.21.0. | rbri |
![]() |
HTMLFormControlsCollection getOwnPropertyDescriptor() has to support fields by name and id. | rbri |
![]() |
core-js: Refactor internal property descriptors to not be 'ScriptableObjects' | RhinoTeam |
![]() |
core-js: some fixes for arguments support in strict mode | rbri |
![]() |
core-js: Replace number formatting operations on Number (toExponential, toFixed, and toPrecision) | RhinoTeam |
![]() |
core-js: fix/improve our enhanced arguments support | rbri |
![]() |
JavaScript timeout messages slightly improved. | rbri |
![]() |
WebClient.setJavaScriptTimeout(timeout) stops most JavaScript immediately. This is a regression compared to version 4.18.0. Fixes #1057. | rbri |
![]() |
neko: improve spec conformance of comment end detection | rbri |
![]() |
neko: use a separate flag to mark formatting elements (in sync with the spec) | rbri |
![]() |
neko: reopening of dangling formatting elements refactored, make it lazy to be able to suppress the repopen in case of empty elements | rbri |
![]() |
No longer use org.apache.commons.lang3.math.NumberUtils. | rbri |
Release 4.18.0 – October 30, 2025
| Type | Changes | By |
|---|---|---|
![]() |
core-js: replace the NumberToString implementation with the Schubfach algorithm | RhinoTeam |
![]() |
Add basic support for parsing multipart/form-data fetch responses | das7pad |
![]() |
XMLHttpRequest.getAllResponseHeaders() uses '\r\n' as delimiter in FF/FF_ESR also | rbri |
![]() |
evaluation of the proxy autoconf javascript code fixed (regression) | rbri |
![]() |
MutationEvent support removed for Firefox 144 | rbri |
![]() |
CSS2Properties now named CSSStyleProperties in Firefox 144 | rbri |
![]() |
JavaScript configuration was broken if more than one JsxClass annotation defined for a single class | rbri |
![]() |
resync with the latest brotli code | rbri |
![]() |
core-js: improve/fix support for let statements inside switch statements. Fixes #1040. | RhinoTeam |
![]() |
core-js: fix a bunch of issues with ThrowTypeError | rbri |
![]() |
core-js: fix interpreter bytecode printing | RhinoTeam |
![]() |
core-js: fixed exception in the interpreter when using many literal bigint | RhinoTeam |
![]() |
core-js: fix function.length with default arguments and length calculation with rest params | RhinoTeam |
![]() |
core-js: make 'Symbol()' comply with the spec. Specifically, it's handling of the second argument to the constructor. | RhinoTeam |
![]() |
core-js: support for yield* improved | RhinoTeam |
![]() |
core-js: builtin methods should have no 'prototype' property | RhinoTeam |
![]() |
core-js: many, many internal refactorings to open the door for further improvements | RhinoTeam |
![]() |
DOMMatrixReadOnly toString() and toJSON() implemented. | rbri |
![]() |
core-js: regular expressions with property escapes throwing a NPE (regression from 4.14.0). Fixes #1046. | rbri |
![]() |
DOMMatrixReadOnly isIdentity property implemented. | rbri |
![]() |
core-js: improve global symbol registry handling. | RhinoTeam |
Release 4.17.0 – October 05, 2025
| Type | Changes | By |
|---|---|---|
![]() |
core-js: duplicate function keys in object literal now allowed. | RhinoTeam |
![]() |
Empty implementation of MessagePort.start() and MessagePort.close() added. | rbri |
![]() |
Detection of the window.postMessage() transfer parameter improved. | rbri |
![]() |
Deprecated methods HTMLParser.parse(WebResponse, HtmlPage, boolean, boolean), HTMLParser.parseFragment(DomNode, DomNode, String, boolean), and HTMLParser.parseFragment(DomNode, String) removed. | rbri |
![]() |
Deprecated method UrlUtils.decodeDataUrl(byte[]) removed. | rbri |
![]() |
Deprecated method AbstractJavaScriptConfiguration.isCompatible(SupportedBrowser, SupportedBrowser) removed. | rbri |
![]() |
Deprecated class org.htmlunit.html.DomNode.DescendantElementsIterator removed. | rbri |
![]() |
Use a new HTMLElementsWithCache object for each neko parser run to avoid race conditions under load. | Rene Schwietzke |
![]() |
neko: some optimizations for HTMLElementsProvider/HTMLElements/HTMLElementsWithCache. | Rene Schwietzke |
![]() |
neko: introduce HTMLElementsProvider and HTMLElementsWithCache. | rbri |
![]() |
core-js: 'eval'of a function is now undefined. | RhinoTeam |
![]() |
core-js: duplicate properties in object literal now allowed. | RhinoTeam |
![]() |
Window.top has no setter. | rbri |
![]() |
Upgrade Apache commons-lang3 to 3.19.0. | rbri |
![]() |
Initial support for the :has() pseudo selector added. | rbri |
![]() |
Initial support for the :where() pseudo selector added. | rbri |
![]() |
Initial support for the :is() pseudo selector added. | rbri |
![]() |
XMLHttpRequest now supports data url's. | rbri |
![]() |
Head request for a data url now returning an empty response. | rbri |
![]() |
HtmxTwoZeroSevenScriptPreProcessor added; this is required for htmx 2.0.3-2.0.7. | rbri |
![]() |
Tests for htmx 2.0.4-2.0.7 added. | rbri |
![]() |
core-js: fix template literal string conversion for ECMAScript compliance | RhinoTeam |
![]() |
core-js: fix Array.from to prioritize iterable over array-like objects | RhinoTeam |
![]() |
CSS.escape() javascript method added. | rbri |
![]() |
Fix URL constructor to support also the data scheme. | rbri |
![]() |
DOMMatrix and DOMMatrixReadOnly stubs replaced by a real implementation (incomplete). Fixes #371. | rbri |
![]() |
Properly synchronize access to httpClientBuilder_ in class HttpWebConnection. Fixes #1014. | René Schwietzke |
![]() |
core-js: fix error stack generation in interpreted mode and report the correct line number | RhinoTeam |
![]() |
core-js: don't propagate strict flag when compiling scripts and we already have an active context in strict mode | RhinoTeam |
![]() |
core-js: a problem with toString() on arrow functions fixed | RhinoTeam |
![]() |
core-js: ES2025 Error.isError static method implemented | RhinoTeam |
![]() |
core-js: ES2025 Math.f16round method implemented | RhinoTeam |
![]() |
HtmlLink.getWebResponse(...) now also works when the JavaScript engine is disabled. | rbri |
![]() |
BroadcastChannel stub replaced by a real implementation. Fixes #978. | rbri |
![]() |
UrlUtils.isSameOrigin(URL, URL) added and used by XMLHttpRequest | rbri |
![]() |
SameOrigin check has to check the protocol also. | rbri |
Release 4.16.0 – August 29, 2025
| Type | Changes | By |
|---|---|---|
![]() |
core-js: infer function names at runtime for computed properties | RhinoTeam |
![]() |
core-js: Several fixes for calling bind() in the interpreter (regression from 4.14.0) | rbri |
![]() |
core-js: ES2025 ArrayBuffer transfer(), and transferToFixedLength() implemented | RhinoTeam |
![]() |
core-js: internal optimizations to make 'undefined' lookup faster | RhinoTeam |
![]() |
core-js: ES2025 Set methods intersection(), union(), difference(), symmetricDifference(), isSubsetOf(), isSupersetOf(), and isDisjointFrom() implemented | RhinoTeam |
![]() |
core-js: make Object.assign copy over Symbol properties | RhinoTeam |
![]() |
core-js: some methods should not have a prototype property | RhinoTeam |
![]() |
core-js: ES2025 Promise.try implemented | RhinoTeam |
![]() |
core-js: spread for object literals implemented | RhinoTeam |
![]() |
neko: do not check for bom headers on compressed streams | rbri |
![]() |
WebClient waitForBackgroundJavaScript(long), waitForBackgroundJavaScriptStartingBefore(long), and waitForBackgroundJavaScriptStartingBefore(long, long) no longer marked as experimental. | rbri |
![]() |
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 |
![]() |
Use our own StringUtils at more places to be compatible with older commons lang versions. | rbri |
![]() |
Handling of CData sections in XHTML documents improved/fixed. | rbri |
Release 4.15.0 – August 17, 2025
| Type | Changes | By |
|---|---|---|
![]() |
WebAssert messages reviewed and improved. | rbri |
![]() |
WebAssert got various improvements and more complete unit tests. | rbri |
![]() |
Improve WebAssert javadoc. | rbri |
![]() |
Improve WebClientOptions javadoc. | rbri |
![]() |
neko: improved features/properties documentation | rbri |
![]() |
neko: fix missing property/feature handling for HTMLScanner.setFeature() and HTMLScanner.setProperty(). | rbri |
![]() |
core-js: Fix two more regressions from the Interpreter refactoring. Various combinations of apply/bind/call now working again. Fixes #1001. | RhinoTeam |
![]() |
websocket-client: jetty updated to 9.4.58.v20250814. | rbri |
![]() |
core-js: Fix a regression regarding optional chaining operators. | RhinoTeam |
![]() |
neko: Always call detectEncoding() to skip bom in case we got an input stream with bom and an encoding. | rbri |
![]() |
neko: increase PlaybackInputStream buffer size | rbri |
![]() |
neko: NekoSAXParser Factory added | rbri |
![]() |
WebClient option pageRefreshLimit added. Refresh handling changed to support a clear limit. The initial value is 72 to be backward compatible. | rbri |
![]() |
Dummy implementation of PointerEvent#getPersistentDeviceId() returning always 0. | rbri |
![]() |
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 |
![]() |
core-js: TypedArray.from and TypedArray.of implemented. | RhinoTeam |
Release 4.14.0 – July 30, 2025
| Type | Changes | By |
|---|---|---|
![]() |
New sister project 'jsoup-bridge' (https://github.com/HtmlUnit/htmlunit?tab=readme-ov-file#jsoup-bridge). | rbri |
![]() |
Switched to sonatype central-publishing for snapshots and release builds. | rbri |
![]() |
New method WebClinet.waitForBackgroundJavaScriptStartingBefore(final long delayMillis, final long timeoutMillis) that combines a overall timeout with waiting for js tasks starting before. | rbri |
![]() |
Avoid ConcurrentModificationException in HtmlPage.deregisterFramesIfNeeded() | rbri |
![]() |
Separate developer documentation to help people start working on this project | rbri |
![]() |
MutationEvent is still available in FF but not as global | rbri |
![]() |
Some fixes for the ctor prototype setup | rbri |
![]() |
code cleanup based on PMD - use isEmpty() in more places | rbri |
![]() |
core-js: Infer function name when declared in a var/let statement implemented | RhinoTeam |
![]() |
core-js: Promise.withResolvers() added | RhinoTeam |
![]() |
core-js: assigning values to super got some improvements | rbri |
![]() |
core-js: BigInt.asUintN and BigInt.asIntN implementation fixed | RhinoTeam |
![]() |
core-js: code simplification for support of different JDKs | RhinoTeam |
![]() |
core-js: huge refactoring of the interpreter for more speed and easier maintenance | RhinoTeam |
![]() |
core-js: '__parent__' property is no longer available | rbri |
![]() |
core-js: refactored exception and stack handling | RhinoTeam |
![]() |
core-js: The Builtins and the Regexp initializer migrated from reflection to lambda | RhinoTeam |
![]() |
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 |
![]() |
core-js: refactored CallFrame to keep stack as immutable linked list. | RhinoTeam |
![]() |
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 |
![]() |
SBOM (CycloneDX format) added. | rbri |
![]() |
core-js: minor code optimization. | rbri |
![]() |
core-js: typo in prototype detection fixed. | rbri |
![]() |
core-js: Code cleanup. | RhinoTeam |
![]() |
neko: fix ParentNode#getTextContent() | rbri |
![]() |
neko: introduce Element.SCRIPT_SUPPORTING flag for HTMLElements | rbri |
![]() |
Upgrade Apache commons-io to 2.20.0. | rbri |
![]() |
Upgrade Apache commons-lang3 to 3.18.0. | rbri |
![]() |
core-js: UnicodeMode support for regexp added. | RhinoTeam |
![]() |
core-js: ArrayBuffer detach() support added. | RhinoTeam |
![]() |
Major improvements for the asXML() function. Fixes #982. | rbri |
![]() |
Test suite updated to junit 5 and cleaned up. | rbri |
![]() |
The hidden attribute now supports the 'until-found' value. | rbri |
![]() |
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 |
![]() |
jQuery 1.12.4 test suite added. | rbri |
![]() |
jQuery 1.8.2, 1.11.3, and 3.3.1 test suite refreshed. | rbri |
![]() |
FF139: SVGDiscardElement is gone (again). | rbri |
![]() |
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 |
|---|---|---|
![]() |
The prototype for DOMRect is now DOMRectReadOnly. | rbri |
![]() |
Internal javascript class ClientRect renamed to DOMRect (the old name was a leftover from IE). | rbri |
![]() |
Internal javascript class ClientRectList renamed to DOMRectList (the old name was a leftover from IE). | rbri |
![]() |
core-js: Adjust order of evaluation of function arguments to match the spec. | RhinoTeam |
![]() |
core-js: Major tidy up of 'NativeTypedArrayView' to better match spec. | RhinoTeam |
![]() |
core-js: Refactor functions to be lambdas rather than IdScriptableObject's. | RhinoTeam |
![]() |
The prototype for HTMLAllCollectionis no longer the HTMLCollection, it is now object. | rbri |
![]() |
HTMLTableCellElement now supports the 'align', 'ch', 'chOff', 'headers', 'height', 'noWrap', 'rowSpan', 'scope', 'vAlign', 'width' properties. | rbri |
![]() |
HTMLTableColElement now supports the 'align', 'ch', 'chOff', and 'vAlign' properties. | rbri |
![]() |
Internal javascript class HTMLTableComponent removed. The prototype for HTMLTableCellElement, HTMLTableColElement, and HTMLTableRowElement is now the correct HTMLElement. | rbri |
![]() |
HTMLTableSectionElement now supports the deleteRow() and insertRow() functions. | rbri |
![]() |
HTMLTableSectionElement now supports the 'align' and 'rows' properties. | rbri |
![]() |
HTMLTableElement now supports the deleteRow() and insertRow() functions. | rbri |
![]() |
HTMLTableElement now supports the 'align' and 'rows' properties. | rbri |
![]() |
Internal javascript class RowContainer removed. The prototype for HTMLTableElement, and HTMLTableSectionElement is now the correct HTMLElement. | rbri |
![]() |
HTMLUListElement now supports the 'compact' property. | rbri |
![]() |
HTMLOListElement now supports the 'compact' property. | rbri |
![]() |
HTMLMenuElement now supports the 'compact' property. | rbri |
![]() |
HTMLLIElement now supports the 'type' property. | rbri |
![]() |
HTMLDListElement now supports the 'compact' property. | rbri |
![]() |
HTMLDListElement now supports the 'compact' property. | rbri |
![]() |
Internal javascript class HTMLListElement removed. The prototype for HTMLDListElement, HTMLDirectoryElement, HTMLLIElement, HTMLMenuElement, HTMLOListElement, and HTMLUListElement is now the correct HTMLElement. | rbri |
![]() |
Internal javascript class HTMLListElement removed. The prototype for HTMLDListElement, HTMLDirectoryElement, HTMLLIElement, HTMLMenuElement, HTMLOListElement, andHTMLUListElement is now the correct HTMLElement. | rbri |
![]() |
Javascript class configuration reworked, this allows some optimizations in the furture. | rbri |
![]() |
Constructor prototype fixes, now we have the correct prototypes for most classes. The RecursiveFunctionObject workaround is no longer required. | rbri |
![]() |
DomNodeIterator is now serializable. | rbri |
![]() |
FF138: adjust datetimeformat for several locales. | rbri |
![]() |
Chrome/Edge 136: Clicking an image input no longer submits the value as param. | rbri |
![]() |
FF138: Frame elements are accessible by name. | rbri |
![]() |
FF138: Error.captureStackTrace() is supported. | rbri |
![]() |
FF138: js constant maxActions added to Notification. | rbri |
![]() |
FF138: stylesheet links checking the content type for 'text/css'. | rbri |
Release 4.12.0 – May 17, 2025
| Type | Changes | By |
|---|---|---|
![]() |
WebClient option NekoReaderBufferSize added. You can use this to increase the buffer size used by the Neko Html parser to optimize parsing performance. | rbri |
![]() |
HTMLParser parseFragment(DomNode, String), parse(WebResponse, HtmlPage, boolean, boolean), and parseFragment(DomNode, DomNode, String, boolean) are deprecated. | rbri |
![]() |
neko: HTMLScanner always requires a document handler; the null check is moved to the setter and all the others are removed. | rbri |
![]() |
neko: avoid HTML1011 error for self closing tags. | rbri |
![]() |
neko: ignore whitespace before the closing > when parsing special tags. | rbri |
![]() |
neko: remove two superfluous conversions from the code. | rbri |
![]() |
core-js: NativeArray impl is now lambda based. | RhinoTeam |
![]() |
core-js: improved date string parser; support optional ms digits, skip ms digits, extended year support is not available in es6 | rbri |
![]() |
core-js: detailed message added to IndexOutOfBoundsExceptions | RhinoTeam |
![]() |
core-js: add double null check pattern when initializing cache values. | RhinoTeam |
![]() |
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 |
![]() |
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 |
![]() |
AlertHandler, ConfirmHandler, FrameContentHandler, CharacterDataChangeListener, and IncorrectnessListener marked as @FunctionalInterface. | rbri |
![]() |
Upgrade Apache commons-io to 2.19.0. | rbri |
![]() |
Element.scrollIntoView() now triggers scroll events on all parents. | rbri |
![]() |
For FF scroll events are of type UIEvent. | rbri |
![]() |
Scroll events are not bubbling and not cancelable. | rbri |
![]() |
core-js: Function.prototype[Symbol.hasInstance] fixed. | RhinoTeam |
![]() |
core-js: regression in hex and unicode hex parsing or regexp fixed | RhinoTeam |
![]() |
CSS blockSize support improved. | rbri |
![]() |
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 |
![]() |
core-js: Fix a character class parsing regression for regexp. | RhinoTeam |
![]() |
core-js: Fix handling of \x and \u in regexp. | RhinoTeam |
![]() |
FF137: SVGDiscardElement added. | rbri |
![]() |
Chrome/Edge 135, FF137: Setter validation for length style properties adjusted. | rbri |
![]() |
Chrome/Edge 135: Style properties 'interactivity', 'overflowBlock', 'overflowInline', and 'scrollMarkerGroup' added. | rbri |
![]() |
FF137: Adjust clientHeight for some ruby related tags. | rbri |
![]() |
Chrome/Edge 135, FF137: Improved namespace handling when sending an html document via XMLHttpRequest. | rbri |
![]() |
Chrome/Edge 135: Improved <br> handling in options tags. | rbri |
![]() |
Chrome/Edge 135, FF137: Fixed font sizes for smaller/larger CSS property value. | rbri |
![]() |
FF137: Set span for table cells to zero if provided value is invalid. | rbri |
![]() |
core-js: Some fixes for strict handling. | RhinoTeam |
![]() |
core-js: Several code improvements for the RegExp implementation. | RhinoTeam |
![]() |
WebClient.setWebSocketAdapter(WebSocketAdapterFactory) added. This should help to use a different WebSocket implementation. Fixes #946. | rbri |
![]() |
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 |
![]() |
core-js: Named capture groups in RegularExpressions now supported. | RhinoTeam |
![]() |
Deprecated method CssStyleSheet.validateSelectors(SelectorList, int, DomNode) removed. | rbri |
![]() |
Deprecated method HtmlForm.getElements() removed. | rbri |
![]() |
Deprecated method WebRequest.setRefererlHeader(URL) removed. | rbri |
Release 4.11.1 – March 26, 2025
| Type | Changes | By |
|---|---|---|
![]() |
NumberFormatException when calculating the clientHeight/offsetHeight. | rbri |
Release 4.11.0 – March 25, 2025
| Type | Changes | By |
|---|---|---|
![]() |
Event 'onload' is triggered by FF ESR also if the frame content was not shown because of csp. | rbri |
![]() |
Initial support for font sizes 'xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large', 'xxx-large', 'smaller', and 'larger'. | rbri |
![]() |
core-js: Refactor NativeString based on lambdas and stop using IdScriptableObject. | rbri |
![]() |
The style cache has to handle all parents of added or deleted nodes. Fixes #942. | rbri |
![]() |
Class HiddenFunctionObject removed, this was a leftover from the IE age. | rbri |
![]() |
core-js: Arguments.callee is always the same function in strict mode. | rbri |
![]() |
core-js: Arguments.caller is not available in real browsers. | rbri |
![]() |
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 |
![]() |
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 |
![]() |
core-js: RegExp lookbehind implemented. | RhinoTeam |
![]() |
core-js: NativeObject converted from IdScriptableObject to lambda constructor | RhinoTeam |
![]() |
core-js: problem with 'super' and nested lambdas | RhinoTeam |
![]() |
core-js: RegExp.prototype[Symbol.match] and String.prototype.match. | RhinoTeam |
![]() |
core-js: Implement Symbol.match. | RhinoTeam |
![]() |
core-js: String.prototype.match. As per the spec, it is simply supposed to invoke the Symbol.match of the regexp. | RhinoTeam |
![]() |
core-js: Fix the behavior of Regexp sticky flag. | RhinoTeam |
![]() |
Deprecated methods removed from EncodingSniffer, HttpClientConverter, WebResponse, and WebResponseWrapper. | rbri |
![]() |
cssparser: improved support for var initial values. | rbri |
![]() |
Apache commons-codec is no longer a runtime dependency. | rbri |
![]() |
atob() has to remove all whitespace from the provided string. | rbri |
![]() |
atob() must always fail on invalid input. Fixes #940. Thanks to Christoph Burgmer. | rbri |
![]() |
The script async attribute is ignored if the src attribute is absent. | rbri |
![]() |
Many more checkstyle jdoc rules enabled and all violations fixed. | rbri |
![]() |
HtmlImage onerror event is triggered for 204 responses. | rbri |
![]() |
Some minor code improvements found by spotbugs. | rbri |
![]() |
Some more event initialization fixes. | rbri |
![]() |
Fix various event initialization when working with WebSocket's. | rbri |
Release 4.10.0 – February 22, 2025
| Type | Changes | By |
|---|---|---|
![]() |
core-js: NativeGlobal now based on lambda functions. | RhinoTeam |
![]() |
Avoid using XPath for implementing form submit on enter key pressed. | rbri |
![]() |
Implement Document.getElementById() without using XPath. | rbri |
![]() |
NPE in org.htmlunit.javascript.JavaScriptEngine.asJavaScriptException(). | rbri |
![]() |
Upgrade commons-logging to 1.3.5. | rbri |
![]() |
StyleElement implements no longer the Comparable interface. For our special needs we now using the static method compareToByImportanceAndSpecificity(StyleElement, StyleElement). | RhinoTeam |
![]() |
core-js: load more classes lazily. | RhinoTeam |
![]() |
HtmlUrlInput value trimming fixed. | rbri |
![]() |
Replace the deprecated WebElement.getAttribute(String) with getDomAttribute(String) and getDomProperty(String) at many places in the test suite. | rbri |
![]() |
Use StandardCharsets.UTF_8 instead of Charsets.UTF_8 for the sample code. | rbri |
![]() |
HtmlTextArea - several fixes to throw the correct error. | rbri |
![]() |
AudioContext/OfflineAudioContext - several fixes to throw the correct error. | rbri |
![]() |
'Illegal constructor' is a type error. | rbri |
![]() |
Firefox ESR accept header no longer contains 'image/avif,image/webp,image/png,image/svg+xml'. | rbri |
![]() |
core-js: BigInt, Boolean and Number converted to use lambdas. | RhinoTeam |
![]() |
core-js: Function hoisting inside blocks is now a core Rhino feature, our own hack is gone. | RhinoTeam |
![]() |
core-js: Map and Set converted to use lambdas. | RhinoTeam |
![]() |
core-js: lambda-based classes serializable are serializable. | RhinoTeam |
![]() |
core-js: bunch of changes to make the SlotMap handling faster. | RhinoTeam |
![]() |
CSSStyleSheet - several fixes to throw the correct error. | rbri |
![]() |
XPath.evaluate() throws a TypeError. | rbri |
![]() |
Document - several fixes to throw the correct error. | rbri |
![]() |
XMLHttpRequest - several fixes to throw the correct error. | rbri |
![]() |
Geolocation.ctor() throws a TypeError. | rbri |
![]() |
TreeWalker.ctor() throws a TypeError. | rbri |
![]() |
MutationObserver.observe() throws a TypeError. | rbri |
![]() |
DOMParser.parseFromString() throws a TypeError. | rbri |
![]() |
Window.postMessage() throws a SyntaxError. | rbri |
![]() |
Window.atob()/btoa() throws an InvalidCharacterError. | rbri |
![]() |
DomNode.appendChild() throws a HierarchyRequestError. | rbri |
![]() |
AbstractRange.ctor() throws a TypeError. | rbri |
![]() |
DOMTokenList - several fixes to throw the correct error. | rbri |
![]() |
CSSGroupingRule - several fixes to throw the correct error. | rbri |
![]() |
HTMLInputElement value/selectionStart/selectionEnd properties throws the correct error (InvalidStateError). | rbri |
![]() |
SVGMatrix.rotateFromVector()/inverse() throws the correct error (InvalidAccessError/InvalidStateError). | rbri |
![]() |
Crypto.getRandomValues() throws a QuotaExceededError. | rbri |
![]() |
CanvasRenderingContext2D.measureText() throws a TypeError. | rbri |
![]() |
HTMLTableElement/HTMLTableRowElement - several fixes to throw the correct error. | rbri |
![]() |
Element.querySelectorAll()/querySelector() throws a SyntaxError. | rbri |
![]() |
HTMLOptionsCollection.add() throws a NotFoundError. | rbri |
![]() |
Accessing a HTMLDocument without a js peer throws a TypeError. | rbri |
![]() |
Document.createElementNS() throws a TypeError. | rbri |
![]() |
Document.createElementNS() throws a TypeError. | rbri |
![]() |
Selection.getRangeAt() throws an IndexSizeError. | rbri |
![]() |
Node.replaceChild()/removeChild()/insertBefore() several fixes to throw the correct error. | rbri |
![]() |
HTMLDocument.appendChild() throws HierarchyRequestError. | rbri |
![]() |
Document.createElement() throws InvalidCharacterError. | rbri |
![]() |
ImageData.ctor() various fixes to throw the correct error in different situations. | rbri |
![]() |
CharacterData.deleteData() throws an IndexSizeError. | rbri |
![]() |
Document.querySelectorAll() throws a SyntaxError if the selector is invalid. | rbri |
![]() |
Document.createEvent() creates the correct exception when the event type is not supported. | rbri |
![]() |
DOMException name property was missing. | rbri |
![]() |
Handling of the error code when construction DOMException is fixed. | rbri |
![]() |
Document.evaluate() now throws a SyntaxError instead of an InternalError. | rbri |
![]() |
Upgrade commons-codec to 1.18.0. | rbri |
![]() |
WebClientOptions sslClientCertificateStore is transient. | rbri |
Release 4.9.0 – January 22, 2025
| Type | Changes | By |
|---|---|---|
![]() |
WebClientOptions SSLTrustStore is transient. | rbri |
![]() |
WebClientOptions.Geolocation is serializable now | rbri |
![]() |
HtmlDomTreeWalker is serializable now | rbri |
![]() |
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 |
![]() |
BigInt support added. | rbri |
![]() |
core-js: Symbol.hasInstance for Function.prototype implemented. | RhinoTeam |
![]() |
core-js: Context#emptyArgs is deprecated. | rbri |
Release 4.8.0 – January 12, 2025
| Type | Changes | By |
|---|---|---|
![]() |
cssparser: support plain color definitions with var/calc. | rbri |
![]() |
cssparser: 'and' is a valid class name. | rbri |
![]() |
cssparser: support relative color definitions. | rbri |
![]() |
websocket-client: jetty updated to 9.4.57.v20241219. | rbri |
![]() |
core-js: add an empty slot map (singleton) for cases where no slots exist; this should reduce the memory needed a bit | RhinoTeam |
![]() |
core-js: methods cannot be used as constructor fixed | RhinoTeam |
![]() |
Upgrade commons-codec to 1.17.2. | rbri |
![]() |
Apache commons-net is no longer a runtime dependency. | rbri |
![]() |
Apache commons-text is no longer a runtime dependency. | rbri |
![]() |
core-js: Extract function calling out of the interpreter loop for performance. | RhinoTeam |
![]() |
Avoid ConcurrentModificationExceptions in frame processing. | rbri |
![]() |
core-js: handle stack frames in the correct order. | RhinoTeam |
![]() |
cssparser: support hwb(), lab(), lch(), oklab(), and oklch() color definitions. | rbri |
![]() |
cssparser: add support for 'none' in modern color definitions. | rbri |
![]() |
core-js: fix border checks for typedarray set-method (see https://github.com/HtmlUnit/htmlunit-core-js/issues/27) | rbri |
![]() |
core-js: Allow symbol keys in getter/setter in object literal syntax like 'var o = { get [aSymbol]: value }'. | RhinoTeam |
![]() |
core-js: Support for generator methods in object literals like 'o = {*g() {...}}' added. | RhinoTeam |
![]() |
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 |
![]() |
core-js: Fix tokenEnd and cursor for string, template, xml literals and multiline comments when using multibyte characters. | RhinoTeam |
![]() |
FAQ updated with some info about page history. | rbri |
![]() |
DomElement#getStaticElementsByTagName() has to check for prefix. Fixes #905. | rbri |
![]() |
Upgrade Apache commons-text to 1.13.0. | rbri |
![]() |
core-js: Some improvements for the interpreter by generating smaller interpreter bytecode. | RhinoTeam |





