# What changed in jsdom

> 1460 changes in jsdom 0.2 to 30 from its official release notes, upgrade guides and advisories: 240 breaking, 3 deprecations, 6 security, 353 new APIs and options. Each one cited. Sources checked 2026-10-17. HTML: https://unstale.sh/npm/jsdom/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## jsdom 30

### Breaking changes

- Cross-origin redirects no longer reuse credentials supplied to xhr.open(), including during destination authentication challenges. (30.1.3) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.3)
- The default blobEvent.timecode is now NaN. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- DOM APIs now reject user-created proxies where genuine DOM objects are required. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- Storage events are no longer sent to windows created afterward, while surviving recipients still receive events after source destruction. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- The minimum supported Node.js version was raised. (30.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.0.0)

### Security

- When withCredentials is false, XMLHttpRequest no longer incorrectly sends or accepts cookies after cross-origin redirects back to the document origin. (30.1.3) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.3)
- Fixed XML HTML serialization to reject invalid attribute characters and avoid stack overflows on large strings. (30.1.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.1)
- base elements now ignore data: and javascript: URLs. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)

### New APIs and options

- Elements can be accessed by name directly on document, such as document.myForm. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- Adds QuotaExceededError for storage quota errors and oversized crypto.getRandomValues() requests. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- Added the background-position-x CSS property. (30.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.0.0)
- Added the background-position-y CSS property. (30.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.0.0)
- Added the CSS.escape() function. (30.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.0.0)
- Added the CSS.supports() function. (30.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.0.0)

### Performance

- Improved computed style and CSS property read performance, including stylesheets containing attribute selectors. (30.1.3) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.3)
- CSS property definitions now use less package space and memory. (30.1.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.2)
- Building large DOM trees is no longer severely slowed, including SVG charts created with D3. (30.1.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.2)
- Long-lived MutationObserver instances no longer retain bookkeeping for garbage-collected nodes, reducing memory growth. (30.1.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.2)
- DOM construction, tree mutations, range operations, and live collection access are faster, especially on large documents. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- Memory use is reduced for DOM nodes, attributes, event listeners, and mutation observers. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- Event dispatch, form and label lookups, select updates, and radio-group updates are faster. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- Computed-style retrieval, style changes, and CSS serialization are faster. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- Range operations on large documents are faster. (30.0.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.0.1)

### Behavior and default changes

- URLs now support Unicode v18.0.0 in internationalized domain names. (30.1.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.2)
- Element, attribute, and document type creation now supports relaxed DOM naming rules. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- Retained references continue to provide access to the document and DOM after window.close(). (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)

### Fixes and other changes

- Computed background positions now resolve font-relative lengths using the final font size and handle multiple image layers correctly. (30.1.3) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.3)
- Computed color values no longer depend on property read order, including unresolved color-mix() results. (30.1.3) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.3)
- CSS calculations reducing to a percentage no longer incorrectly produce pixel values. (30.1.3) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.3)
- Malformed CSS math functions no longer throw exceptions while parsing documents, stylesheets, and style declarations. (30.1.3) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.3)
- Selector matching now handles XML namespaces and attribute selectors matching empty values and values beginning with a hyphen. (30.1.3) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.3)
- Currentcolor border colors no longer incorrectly become transparent when color uses light-dark() or relative color syntax. (30.1.3) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.3)
- Fixed slowdowns when focusing elements and running interaction tests that regressed in v30.1.2. (30.1.3) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.3)
- Numeric font weights in the font shorthand no longer incorrectly set line-height. (30.1.3) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.3)
- Computed styles now include style rules nested inside multiple @media rules. (30.1.3) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.3)
- CSS shorthands no longer overwrite higher-priority or more-specific longhands during style computation, including declarations with CSS variables. (30.1.3) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.3)
- Shorthand values now resolve consistently with correct defaults and inheritance for background, border, flex, font, margin, and padding. (30.1.3) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.3)
- Deeply nested color-mix expressions now resolve correctly without exceptions. (30.1.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.2)
- Deeply nested reads of empty inherited custom properties no longer become exponentially slow, and inheritance stops at an initial reset. (30.1.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.2)
- Negative CSS sizing values are no longer incorrectly rejected for min-width, min-height, max-width, and max-height. (30.1.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.2)
- focus() no longer focuses elements hidden by display or excluded through shadow DOM slot assignment. (30.1.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.2)
- Focus-related selectors and computed styles now update correctly after focus changes, including inside focus and blur listeners. (30.1.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.2)
- Computed styles now update after editing declarations, selectors, or media queries, including imported stylesheets. (30.1.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.2)
- getComputedStyle() no longer throws for XML and MathML elements without inline-style support. (30.1.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.2)
- selectedOptions collections now remain current after selection changes and form resets. (30.1.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.2)
- Selectors and computed styles now update correctly after form control state changes, resets, and canceled clicks. (30.1.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.2)
- Stylesheet parsing no longer retains the last parsed stylesheet's window after window.close(). (30.1.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.2)
- Fixed exceptions from truncated charset parameters and incomplete meta tags affecting encoding detection. (30.1.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.1)
- Fixed selector matching for :lang(), :nth-child(... of ...), and :has() in mutation and duplicate-ID cases. (30.1.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.1)
- Fixed element.focus() incorrectly focusing disabled controls and hidden inputs with tabindex="". (30.1.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.1)
- Fixed focus and blur behavior across frames and when focusing the document viewport. (30.1.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.1)
- Fixed removed or disabled focus targets becoming active and listener-created text selections being overwritten. (30.1.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.1)
- Fixed encoding detection to honor XML declarations and detect UTF-16 without a byte order mark. (30.1.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.1)
- Fixed !important handling when updating CSS longhands after shorthands, using variables or CSS-wide keywords, and assigning properties directly. (30.1.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.1)
- Fixed noscript parsing with includeNodeLocations or inside frames to honor runScripts. (30.1.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.1)
- Fixed the storageQuota option being ignored by frames. (30.1.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.1)
- Fixed invalid style.setProperty() calls changing existing !important priorities, serialized styles, or mutation records. (30.1.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.1)
- Fixed spurious events and incorrect relatedTarget values after removing the previously focused element. (30.1.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.1)
- Fixed XML serialization errors for special namespace names and incorrect reuse of sibling namespace prefixes. (30.1.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.1)
- ownerDocument is corrected after adopting or assigning an attribute node across documents. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- Adjacent shorthand components, invalid assignments, and unusual CSS declaration characters now parse correctly without inline-style crashes. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- Computed border widths are corrected, including borderless elements that incorrectly reported 16px. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- Successful cached resource loads are no longer treated as aborted. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- Modified CDATA sections and processing instructions now clone, import, and serialize correctly. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- The CSS object shape and property descriptors now match expected behavior. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- Case-sensitive CSS attribute selector values now retain their correct case sensitivity. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- Lengths and percentages inside CSS math functions now resolve correctly to pixels or percentages. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- CSS values mixing lengths or percentages with math functions now parse correctly. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- Queued work stops after window.close() or iframe removal, preventing new scripts, loads, timers, and animation frames. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- currentScript is correct during nested script execution and scripts in shadow trees. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- Queries now find matching elements when an earlier element shares the same ID but fails the rest of the selector. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- Documents created with createDocument() or createHTMLDocument() now reach readyState complete. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- Document replacement, element and doctype placement, and mutations during replaceWith() now follow valid DOM behavior. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- Elements from DOMParser-created documents no longer become window named properties or remain retained in memory. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- Fresh lookups now use the adopted document's case-sensitivity rules when moving between HTML and XML documents. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- Selectors now match when the first selector part matches the element itself. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- tagName no longer retains stale casing after adoption between HTML and XML documents. (18.0.0, 30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0), [release notes](https://github.com/jsdom/jsdom/releases/tag/v18.0.0)
- translate now handles empty translate attributes and elements without parents correctly. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- readAsText() now honors the blob MIME charset when no supported explicit encoding is supplied. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- Unitless zero values parse correctly, while negative flex-basis lengths and percentages are rejected. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- Focus state is corrected after removing a focused element or ancestor, including in shadow trees. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- :focus now matches correctly in shadow trees. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- getComputedStyle() now resolves font-weight keywords to numeric values. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- Repeated calls no longer alter case-sensitive background URLs or inconsistently resolve border shorthands with system colors. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- Computed styles now use the correct stylesheet order after style elements are inserted or updated. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- Computed styles now account for nested @import and @media rules and update after imports finish loading. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- Parent documents no longer wait indefinitely when a child iframe removes itself while loading. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- Cloning input elements now preserves input.indeterminate. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- input.list now works correctly in detached element trees. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- Large valueAsNumber assignments now work for time and local date/time inputs. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- Resource loading and JSDOM.fromURL() no longer hang when response handling throws. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- Serialization now handles min() and max() containing nested calc(). (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- Mutation observers, abort signals, and storage tracking no longer retain removed nodes, listeners, or closed windows. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- Attribute lookups, ID lookups, and element behavior now remain correct after namespace prefix changes. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- lookupNamespaceURI() now handles the xml and xmlns prefixes correctly. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- NodeIterator traversal now remains correct when its filter removes nodes. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- Radio grouping and checkedness now handle differing form owners, external and unnamed controls, and canceled clicks. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- CDATA boundary offsets and range cloning, extraction, deletion, insertion, and stringification now work correctly. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- Cancellation now works across redirects, pending requestInterceptor() callbacks, and XMLHttpRequest reuse after abort. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- Script execution now responds correctly to src, type, for, and event attribute changes. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- Inserting children into a connected empty script no longer executes scripts incorrectly. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- Ordering is corrected for scripts, custom-element callbacks, iframe loading, and mutation observers during insertion. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- Select selection remains correct when options or entire select elements move, and unrelated descendants change. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- Style invalidation, stylesheet removal, and frame source updates now work correctly in shadow trees. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- Shorthand assignments no longer produce extra mutation records or custom-element callbacks for intermediate values. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- viewportElement now resolves correctly inside symbol elements. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- normalize() no longer incorrectly removes text nodes or merges their siblings. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- Textarea hard wrapping now uses the numeric textarea.cols value. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- Time input parsing and serialization now preserve fractional seconds. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- volumechange and ratechange events now fire asynchronously. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- Named-property collections on window are no longer stale, and empty or namespaced IDs and names no longer create incorrect access. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- Event dispatch and window.event now work for non-node targets, including correct default passive listener handling. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- Lone surrogates in XML are replaced with the Unicode replacement character. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- XPath iterators now invalidate correctly after mutations and report errors for invalid result types. (30.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.1.0)
- Fixed getComputedStyle with calc() and other functions throwing exceptions after a regression in v30.0.0. (30.0.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.0.1)
- CSS function serialization was corrected, including values returned by getPropertyValue(). (30.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.0.0)
- document.evaluate() now throws the correct error type. (30.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.0.0)
- Length values returned by getComputedStyle() are now converted into pixels. (30.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v30.0.0)

## jsdom 29

### Breaking changes

- The keyText getter and setter now validate values. (29.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v29.0.0)
- The selectorText setter now rejects invalid selectors. (29.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v29.0.0)
- MediaList now parses media queries properly; invalid queries become "not all" per spec. (29.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v29.0.0)
- The minimum supported Node.js v22 version is now 22.13.0. (29.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v29.0.0)

### New APIs and options

- Added basic support for the ratio CSS type. (29.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v29.1.0)
- CSSCounterStyleRule is now available on jsdom Window objects. (29.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v29.0.0)
- cssMediaRule now exposes a matches getter. (29.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v29.0.0)
- CSSNamespaceRule is now available on jsdom Window objects. (29.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v29.0.0)
- cssSupportsRule now exposes a matches getter. (29.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v29.0.0)
- styleSheet now exposes href. (29.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v29.0.0)
- styleSheet now exposes ownerNode. (29.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v29.0.0)
- styleSheet now exposes title. (29.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v29.0.0)

### Performance

- Significantly optimized initial calls before the computed style cache warms up. (29.1.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v29.1.1)
- getComputedStyle() is significantly faster, reducing the runtime cost of computed-style access. (29.0.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v29.0.2)
- Document initialization is faster by lazily initializing the CSS selector engine. (29.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v29.0.0)

### Fixes and other changes

- Fixed computed style computation when using background-origin and background-clip CSS properties. (29.1.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v29.1.1)
- Fixed computed style serialization for the border-radius CSS property. (29.1.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v29.1.1)
- Fixed getComputedStyle() sometimes returning outdated results after CSS was modified. (29.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v29.1.0)
- Parsing of the CSS background and border shorthand properties was fixed. (29.0.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v29.0.2)
- Computed value rules now cover more properties, with fixes for inheritance, defaulting keywords, custom properties, currentcolor, and system colors. (29.0.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v29.0.2)
- CSS parsing now handles border, background, and their sub-shorthands containing keywords or var(). (29.0.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v29.0.1)
- Returns a more functional CSSStyleDeclaration object with indexed access support, restoring behavior regressed in v29.0.0. (29.0.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v29.0.1)
- CSSOM serialization, parsing, and API behavior is improved, especially around edge cases. (29.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v29.0.0)
- CSSStyleDeclaration modifications now properly trigger custom element reactions. (29.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v29.0.0)
- The disallow modification flag is now checked in all mutation methods. (29.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v29.0.0)
- getComputedStyle() no longer crashes in XHTML documents containing at-rules. (29.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v29.0.0)
- Nested @media rule parsing now works correctly. (29.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v29.0.0)
- A memory leak when stylesheets were removed from the document has been fixed. (29.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v29.0.0)
- A potential hang in synchronous XMLHttpRequest caused by a worker-thread race condition has been fixed. (29.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v29.0.0)
- The response getter now returns null during the LOADING state instead of parsed JSON. (29.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v29.0.0)

## jsdom 28

### Breaking changes

- These elements now fire load rather than error events on non-OK HTTP responses. (28.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v28.0.0)
- WebSockets are no longer correctly throttled to one connection per origin, causing a regression. (28.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v28.0.0)

### New APIs and options

- Added a method for reading a Blob as text. (28.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v28.1.0)

### Performance

- Synchronous requests avoid about 400ms of repeated setup overhead after the first request. (28.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v28.1.0)

### Behavior and default changes

- MIME type sniffing was added to iframe and frame loads. (28.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v28.0.0)

### Fixes and other changes

- Returns the first element in tree order when multiple elements share the same ID. (28.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v28.1.0)
- Restored compatibility when Node.js built-in fetch was used before importing jsdom. (28.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v28.1.0)
- Event timing and result state now more closely follow the specification. (28.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v28.1.0)
- Now accounts for CSS specificity when multiple rules apply. (28.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v28.1.0)
- Correctly handles !important priority. (28.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v28.1.0)
- SVG elements no longer incorrectly proxy event handlers to the Window. (28.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v28.1.0)
- Synchronous requests no longer potentially hang when dispatch errors occur. (28.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v28.1.0)
- Query components of anchor elements now decode correctly in non-UTF-8 documents. (28.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v28.0.0)
- APIs now correctly snapshot data passed through ArrayBuffers. (28.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v28.0.0)
- A redirected document's referrer is now the initiating page rather than the last redirect hop. (28.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v28.0.0)
- APIs now correctly snapshot data passed through typed arrays. (28.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v28.0.0)
- Using WebSockets no longer emits a require("url").parse() deprecation warning. (28.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v28.0.0)
- WebSocket upgrade requests can now be intercepted by customizable resource loading. (28.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v28.0.0)
- XMLHttpRequest fetches can now be intercepted by customizable resource loading, except synchronous requests. (28.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v28.0.0)
- Many small correctness issues in XMLHttpRequest were fixed. (28.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v28.0.0)

## jsdom 27

### Breaking changes

- XML byte decoding uses UTF-8 more often instead of sniffing meta charset or using the parent frame's encoding. (27.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v27.4.0)
- The minimum supported Node.js versions are now v20.19.0+, v22.12.0+, or v24.0.0+; earlier versions should remain on jsdom v26.1.0. (27.0.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v27.0.1)
- element.click() now fires a PointerEvent instead of a MouseEvent. (27.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v27.0.0)
- jsdomError events for failed XMLHttpRequest fetches are no longer emitted. (27.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v27.0.0)
- Node.js v20 is now the minimum supported version. (27.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v27.0.0)
- Certain events are now passive by default. (27.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v27.0.0)
- Renamed sendTo() to forwardTo() on the virtual console. (27.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v27.0.0)
- The omitJSDOMErrors boolean option was replaced by jsdomErrors. (27.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v27.0.0)
- The virtual console sendTo() method was renamed to forwardTo(). (27.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v27.0.0)

### New APIs and options

- Added TextDecoder support. (27.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v27.4.0)
- Added TextEncoder support. (27.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v27.4.0)
- Added the BeforeUnloadEvent event constructor. (27.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v27.0.0)
- Added customElements.getName(). (27.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v27.0.0)
- Added the DeviceMotionEvent event constructor, without requestPermission(). (27.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v27.0.0)
- Added the DeviceOrientationEvent event constructor, without requestPermission(). (27.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v27.0.0)
- Added movementX to MouseEvent from the Pointer Lock specification. (27.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v27.0.0)
- Added movementY to MouseEvent from the Pointer Lock specification. (27.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v27.0.0)
- forwardTo() now accepts jsdomErrors to control which errors reach the Node.js console. (27.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v27.0.0)

### Behavior and default changes

- CSS parsing was improved, which may affect how CSS is interpreted by jsdom. (27.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v27.3.0)
- CSSOM object APIs were improved, which may affect code interacting with parsed CSS objects. (27.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v27.3.0)
- CSS parsing and CSSOM object APIs were improved through updates to @acemir/cssom. (27.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v27.2.0)
- CSS parsing now supports nested selectors, nested declarations, layer statements, and improved at-rule validation. (27.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v27.1.0)
- The input pattern attribute now uses the v regular expression flag instead of u. (27.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v27.0.0)
- The user agent stylesheet is now derived from the HTML Standard. (27.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v27.0.0)

### Fixes and other changes

- HTML byte decoding is much more correct through use of the new @exodus/bytes package. (27.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v27.4.0)
- Fixed a memory leak when ranges were used and their referenced elements were removed. (27.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v27.4.0)
- @import-ed stylesheets are properly exposed to CSSOM without overwriting sheets created by link or style elements. (27.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v27.2.0)
- The engines field now reflects the minimum Node.js versions required to run jsdom. (27.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v27.1.0)
- Changes to attributes are now picked up correctly by selector cache invalidation. (27.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v27.1.0)
- CSS display style resolution was fixed. (27.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v27.0.0)
- Upgraded cssstyle with various CSS parsing fixes. (27.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v27.0.0)
- CSS system colors now resolve correctly. (27.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v27.0.0)
- document.createEvent() now accepts a more correct set of event names. (27.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v27.0.0)
- Fixed the ElementInternals accessibility getters and setters. (27.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v27.0.0)
- The CSS inherit keyword now resolves correctly. (27.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v27.0.0)
- The CSS initial keyword now resolves correctly. (27.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v27.0.0)
- The url option now updates document.baseURI and properties derived from it. (27.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v27.0.0)
- Fixed Object.defineProperty() on certain objects, including HTMLSelectElement instances. (27.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v27.0.0)
- The CSS unset keyword now resolves correctly. (27.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v27.0.0)
- Fixed specification conformance issues involving named properties and data-to-accessor property changes. (27.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v27.0.0)

## jsdom 26

### New APIs and options

- Added the SVGSVGElement createSVGRect() method. (26.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v26.1.0)
- Added indexed property support to HTMLFormElement. (26.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v26.1.0)
- Added SVGAnimatedPreserveAspectRatio, including support in the reflection layer. (26.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v26.1.0)
- Added SVGAnimatedRect, including support in the reflection layer. (26.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v26.1.0)
- Added partial support for the SVG defs element and its class. (26.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v26.1.0)
- Added AbortSignal.any(). (26.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v26.0.0)
- ElementInternals now supports the labels property for form-associated custom elements. (26.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v26.0.0)
- Initial support makes form-associated custom elements labelable. (26.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v26.0.0)
- Updated whatwg-url adds support for URL.parse(). (26.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v26.0.0)

### Performance

- Various performance improvements were made through caches, microoptimizations, and deferred object creation. (26.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v26.1.0)

### Behavior and default changes

- Updated CSS dependencies improve CSS parsing capabilities. (26.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v26.0.0)

### Fixes and other changes

- Updated viewportElement() to correctly establish the viewport based on ancestor elements. (26.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v26.1.0)
- Updated nwsapi improves CSS selector matching. (26.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v26.0.0)
- The returned promise now properly rejects when a server redirects to an invalid URL. (26.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v26.0.0)
- Fixed handling around <noframes> elements and HTML entity decoding. (26.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v26.0.0)

## jsdom 25

### Breaking changes

- The prototype chain stays entirely within jsdom when runScripts is set to dangerously or outside-only, which could change instanceof behavior. (25.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v25.0.0)

## jsdom 24

### Breaking changes

- blur() no longer fires focus or focusin on Document, and blur or focusout no longer set relatedTarget. (24.1.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v24.1.2)
- :has() support was removed as a functionality regression from reverting to nwsapi. (24.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v24.0.0)

### New APIs and options

- Added getSetCookie() to the Headers class for retrieving Set-Cookie header values. (24.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v24.1.0)

### Behavior and default changes

- CSS parsing now supports additional CSS constructs. (24.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v24.1.0)

### Fixes and other changes

- Bare property calls to postMessage() are fixed to use window.postMessage(). (24.1.3) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v24.1.3)
- Fixed the `in` operator when applied to EventTarget methods in Node.js ≥22.5.0. (24.1.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v24.1.2)
- Selection methods now trigger the selectionchange event on the Document object. (24.1.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v24.1.1)
- Fixed creation and parsing of elements named after Object.prototype properties such as constructor and toString. (24.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v24.1.0)
- Edge-case behavior was fixed for input.maxLength. (24.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v24.0.0)

## jsdom 23

### Breaking changes

- Node.js v18 is now required as the minimum supported version. (23.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v23.0.0)

### New APIs and options

- Added string-valued ARIA attribute-reflecting properties to Element. (23.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v23.1.0)
- Added an initial implementation of ElementInternals, including the shadowRoot getter and string-valued ARIA properties. (23.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v23.1.0)

### Performance

- Selector-heavy workloads may experience a performance regression with the new engine. (23.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v23.2.0)

### Fixes and other changes

- Now follows the latest specification, including updated handling of empty string inputs and possible new URLs. (23.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v23.1.0)
- Now follows the latest specification, including updated handling of empty string inputs and possible new URLs. (23.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v23.1.0)
- The setter now handles NaN correctly. (23.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v23.1.0)
- Fixed the incorrect canvas peer dependency introduced in v23.0.0. (23.0.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v23.0.1)

## jsdom 22

### Breaking changes

- Node.js v16 is now the minimum supported version. (22.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v22.0.0)

### New APIs and options

- Added abortSignal.throwIfAborted(). (22.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v22.1.0)
- Added AbortSignal.timeout() for creating timeout-based abort signals. (22.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v22.1.0)
- Added crypto.randomUUID() for generating UUIDs. (22.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v22.1.0)
- Added DOMRect. (22.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v22.1.0)
- Added DOMRectReadOnly. (22.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v22.1.0)
- The FormData constructor now supports the submitter argument. (22.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v22.1.0)

### Fixes and other changes

- DOMParser-created documents now inherit their URL from the creating document. (22.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v22.1.0)
- Color-based properties now resolve named colors and attempt to provide initial inheritance support. (22.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v22.1.0)
- Window event handler properties now reflect the latest list from the standard. (22.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v22.1.0)

## jsdom 21

### Breaking changes

- Script elements without a src attribute no longer fire load events. (21.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v21.1.0)
- formEl.submit() no longer fires submit events. (21.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v21.1.0)
- The window, document, location, and top properties are now non-configurable. (21.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v21.0.0)

### New APIs and options

- MouseEvent now includes x, y, pageX, pageY, offsetX, and offsetY properties. (21.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v21.1.0)
- SubmitEvent now exposes the submitter property. (21.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v21.1.0)
- Window.location now has a setter that forwards to location.href, with URL setting implemented only for fragment navigations. (21.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v21.0.0)

### Performance

- getComputedStyle() now caches results, improving performance. (21.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v21.1.0)

### Behavior and default changes

- getComputedStyle() now supports the unset CSS value. (21.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v21.1.0)
- Image input elements now submit forms. (21.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v21.0.0)

### Fixes and other changes

- Corrected pageX, pageY, offsetX, and offsetY values during MouseEvent dispatch. (21.1.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v21.1.2)
- Selector engine fixes were included through the nwsapi upgrade. (21.1.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v21.1.2)
- Corrected the new end index calculated when setRangeText() is used on input and textarea elements. (21.1.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v21.1.2)
- Several CSS parsing bugs were fixed by replacing cssom with the maintained rweb-cssom parser. (21.1.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v21.1.1)
- URL changes now propagate to the history API, preventing history.replaceState() from corrupting the URL. (21.1.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v21.1.1)
- Assigning an empty hash now preserves an existing # in location.href. (21.1.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v21.1.1)
- getComputedStyle() now correctly applies inheritance for pointer-events. (21.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v21.1.0)
- screenX and screenY now preserve fractional values instead of coercing them to integers. (21.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v21.1.0)
- Removed link stylesheets no longer affect the document. (21.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v21.1.0)
- Deferred script elements added after DOMContentLoaded now execute instead of being skipped. (21.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v21.0.0)
- Several issues with JSDOM.fromURL() in the browser build have been fixed. (21.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v21.0.0)
- selectElement.selectedOptions is now correct when optionElement.selected is set, reverting a related option-appending performance improvement. (21.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v21.0.0)

## jsdom 20

### Breaking changes

- Node.js v14 is now the minimum supported version. (20.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v20.0.0)

### New APIs and options

- Added the signal option to addEventListener(). (20.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v20.0.0)
- Added crypto.getRandomValues(). (20.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v20.0.0)
- Added HTMLFormControlsCollection and RadioNodeList, so formEl.elements now behaves correctly. (20.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v20.0.0)

### Performance

- Appending option elements to select elements is faster. (20.0.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v20.0.1)

### Fixes and other changes

- DOMParser now works on XML documents containing emoji. (20.0.3) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v20.0.3)
- Custom element creation is no longer affected by modifications to the window.customElements property. (20.0.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v20.0.2)
- getModifierState now properly consults the event's ctrlKey, altKey, metaKey, and shiftKey properties. (20.0.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v20.0.2)
- Calling xhr.abort no longer throws an exception when the constructed XMLHttpRequest is invalid. (20.0.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v20.0.2)
- The method now accepts typed array subclasses. (20.0.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v20.0.1)
- The getter no longer crashes for opaque-path URLs, including the default about:blank URL. (20.0.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v20.0.1)
- Fixed the :root pseudoclass to work correctly. (20.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v20.0.0)

## jsdom 19

### Breaking changes

- Returns undefined for nodes originating from fragment parsing, making node locations reliable with respect to the original document source. (19.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v19.0.0)

### Fixes and other changes

- Calling window.close inside the Window load event no longer crashes. (19.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v19.0.0)

## jsdom 18

### Breaking changes

- Almost all Promise and TypeError instances now use the jsdom global, potentially changing instanceof checks. (18.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v18.0.0)
- WebSocket SSL certificate checking now respects ResourceLoader strictSSL, which defaults to true. (18.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v18.0.0)

### New APIs and options

- AbortSignal now exposes a reason property. (18.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v18.1.0)
- abortSignal.abort() now accepts a reason argument. (18.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v18.1.0)

### Performance

- Node insertion performance was improved. (18.0.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v18.0.1)
- node.contains() performance was improved. (18.0.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v18.0.1)

### Fixes and other changes

- Fixed connectedCallback firing in situations involving document fragments, which was broken in v18.0.1. (18.1.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v18.1.1)
- headers.append() now normalizes values. (18.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v18.1.0)
- headers.set() now normalizes values. (18.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v18.1.0)
- pageshow events now have bubbles and cancelable enabled. (18.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v18.1.0)
- Live Ranges now update correctly after calling node.normalize(). (18.0.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v18.0.1)
- Live Ranges now update correctly after child nodes are removed. (18.0.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v18.0.1)
- Setting valueAsDate to null now sets the value to an empty string instead of throwing. (18.0.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v18.0.1)
- Form submission no longer occurs when the form is invalid. (18.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v18.0.0)

## jsdom 17

### Breaking changes

- Node v12 is now the minimum supported version, so older Node.js runtimes are no longer supported. (17.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v17.0.0)

## jsdom 16

### Breaking changes

- Removed ondragexit from Window and related interfaces. (16.5.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.5.0)
- Using the second pseudo-element argument now emits a not-implemented warning, except ::part and ::slotted throw according to the spec. (16.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.4.0)
- createDocument now returns an XMLDocument instead of a Document. (16.2.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.2.2)
- StyleSheetList no longer inherits from Array.prototype, improving spec compliance. (16.2.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.2.2)
- When runScripts remains undefined, noscript children are parsed as nodes rather than text. (16.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.1.0)
- Removes document.origin. (16.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.0.0)
- A more general API replaces dom.runVMScript() for accessing jsdom's internal VM context. (16.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.0.0)
- The dom.runVMScript() API was replaced and is no longer available. (16.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.0.0)
- Node v10 is now the minimum supported runtime version. (16.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.0.0)
- JavaScript-spec-defined globals are exposed uniformly, as outer-environment aliases when disabled and fresh scripting-environment copies when enabled. (16.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.0.0)
- Each jsdom Window now creates new instances of all web platform globals instead of sharing constructors and prototypes. (16.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.0.0)

### New APIs and options

- Added AbortSignal.abort() for creating an aborted signal. (16.7.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.7.0)
- Added the parentNode.replaceChildren() API. (16.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.6.0)
- Added the inputType property to input events. (16.5.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.5.0)
- Added the window.event API. (16.5.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.5.0)
- Added the window.queueMicrotask() API. (16.5.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.5.0)
- Added support for custom elements, enabling developers to use them with jsdom. (16.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.2.0)
- Added console.timeLog() support. (16.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.1.0)
- Adds the AbstractRange API for working with DOM ranges. (16.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.0.0)
- Adds a working Comment constructor. (16.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.0.0)
- Adds a working DocumentFragment constructor. (16.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.0.0)
- Adds stepDown() to input elements. (16.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.0.0)
- Adds stepUp() to input elements. (16.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.0.0)
- Adds valueAsDate to input elements. (16.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.0.0)
- Adds valueAsNumber to input elements. (16.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.0.0)
- Adds the Range API for working with DOM ranges. (16.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.0.0)
- Adds the Selection API for accessing and manipulating document selections. (16.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.0.0)
- Adds the StaticRange API for working with static DOM ranges. (16.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.0.0)
- Adds a working Text constructor. (16.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.0.0)
- Adds window.getSelection() for accessing the document selection. (16.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.0.0)
- Adds window.origin. (16.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.0.0)

### Performance

- Repeated access to el.tagName is faster, indirectly improving selector matching and style computation. (16.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.4.0)
- Improves the performance of getComputedStyle(). (16.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.0.0)

### Behavior and default changes

- The return value now includes dummy x and y properties. (16.7.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.7.0)
- Attr now extends Node, aligning its object model with specifications. (16.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.1.0)

### Fixes and other changes

- Fixed incorrect cascade computation in getComputedStyle(). (16.7.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.7.0)
- textareaEl.value now applies wrapping when the wrap attribute is specified. (16.7.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.7.0)
- Fixed handling when code running inside jsdom throws null or undefined as an exception. (16.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.6.0)
- Fixed several XMLHttpRequest issues around header processing. (16.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.6.0)
- Fixed infinite recursion when observing elements inside a MutationObserver callback. (16.5.3) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.5.3)
- The wildcard header now works with XMLHttpRequest. (16.5.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.5.2)
- Constructed comment nodes now receive the correct ownerDocument. (16.5.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.5.2)
- The returned promise now resolves with the custom element constructor. (16.5.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.5.2)
- HTML parsing now treats noscript elements appropriately. (16.5.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.5.2)
- Inline event handlers now behave correctly when globals named element or formOwner exist. (16.5.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.5.2)
- Validity checking now works for controls associated through the form attribute outside the form element. (16.5.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.5.2)
- Canceling a checkbox or radio click now restores the previous indeterminate value. (16.5.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.5.2)
- The form property now correctly reflects the legend's parent fieldset. (16.5.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.5.2)
- NodeIterator remains functional beyond ten instances and uses less memory from inactive iterators. (16.5.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.5.2)
- The text property now excludes script descendants. (16.5.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.5.2)
- Disconnected radio buttons and checkboxes no longer fire input and change events. (16.5.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.5.2)
- SVG templates now parse without throwing and use the SVG namespace. (16.5.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.5.2)
- Constructed text nodes now receive the correct ownerDocument. (16.5.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.5.2)
- JSON responses now strip a leading BOM when responseType is json. (16.5.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.5.2)
- Restores customElements.get() after a regression in v16.5.0. (16.5.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.5.1)
- Adds a setter so window.event can be overwritten and globals named event can be assigned in the jsdom context. (16.5.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.5.1)
- about:blank iframe URLs no longer incorrectly inherit the parent URL. (16.5.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.5.0)
- Fixed edge cases involving callback functions and event handlers. (16.5.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.5.0)
- Fixed a potential memory leak involving custom elements. (16.5.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.5.0)
- Fixed edge cases involving properties of proxy-like objects such as dataset. (16.5.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.5.0)
- new File() no longer converts slash characters to colons. (16.5.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.5.0)
- Filesystem subresources now load correctly when filenames contain non-ASCII characters. (16.5.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.5.0)
- The hidden attribute now causes display: none according to the user-agent stylesheet. (16.5.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.5.0)
- Checkbox inputs remain mutable when disabled. (16.5.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.5.0)
- Radio inputs remain mutable when disabled. (16.5.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.5.0)
- Fixed edge cases involving properties of proxy-like objects such as localStorage. (16.5.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.5.0)
- Mutation observer callbacks now receive the MutationObserver instance as their this value. (16.5.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.5.0)
- xhr.response now returns null for failures occurring during download. (16.5.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.5.0)
- Cross-origin XMLHttpRequest responses now expose the Content-Length header. (16.5.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.5.0)
- XMLHttpRequest no longer fires a redundant final progress event with the same loaded value. (16.5.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.5.0)
- draggable="" attribute processing now uses ASCII case-insensitivity instead of Unicode case-insensitivity. (16.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.4.0)
- el.focus() now does nothing when called on disconnected elements. (16.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.4.0)
- el.focus() now works on SVG elements. (16.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.4.0)
- Removing the currently focused element now moves focus to the body element. (16.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.4.0)
- form.elements now respects form="" and can contain non-descendant form controls. (16.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.4.0)
- imgEl.complete now returns true for images with empty or unset src attributes. (16.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.4.0)
- With canvas enabled, imgEl.complete now returns true when an image-loading error occurs. (16.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.4.0)
- imgEl.complete now returns false when an image's src attribute is reset to an empty value. (16.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.4.0)
- translate="" attribute processing now uses ASCII case-insensitivity instead of Unicode case-insensitivity. (16.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.4.0)
- The valueMissing validation check for radio inputs is corrected. (16.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.4.0)
- Drawing an empty canvas into another canvas now works correctly. (16.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.3.0)
- Elements with the contenteditable="" attribute are now considered focusable. (16.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.3.0)
- A second failing image load now fires an error event instead of sometimes firing load when canvas is installed. (16.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.3.0)
- el.focus() and el.blur() now fire focusin and focusout events. (16.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.3.0)
- Edge-case behavior for event listener objects with handleEvent properties is fixed. (16.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.3.0)
- NodeFilter is now scoped per Window instead of shared across all Windows. (16.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.3.0)
- DOM objects can now be used as addEventListener arguments without triggering errors. (16.2.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.2.2)
- Running jsdom in a browser now detects globals more reliably. (16.2.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.2.2)
- Calling click on a label or descendant no longer causes infinite recursion. (16.2.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.2.2)
- Closing a window with outstanding requests to data URLs no longer causes errors. (16.2.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.2.2)
- The del cite property now properly reflects its value as a URL. (16.2.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.2.2)
- getComputedStyle now accounts for inline style attributes. (16.2.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.2.2)
- Month input values are now consistent across affected time zones and times. (16.2.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.2.2)
- The input src property now properly reflects its value as a URL. (16.2.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.2.2)
- The ins cite property now properly reflects its value as a URL. (16.2.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.2.2)
- requestAnimationFrame no longer prevents the Node.js process from exiting. (16.2.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.2.2)
- Updating a select element's value now invalidates dependent properties such as selectedOptions. (16.2.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.2.2)
- setTimeout no longer leaks closures passed to it. (16.2.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.2.2)
- Number input stepUp and stepDown now use decimal-based calculations instead of floating point calculations. (16.2.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.2.2)
- Window event methods now properly inherit from EventTarget instead of being distinct functions. (16.2.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.2.2)
- Fixed issues using Attr as a Node, including checking baseURI and calling cloneNode(). (16.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.2.0)
- Fixed edge cases in number/string conversion for element properties reflecting integer attributes. (16.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.2.0)
- Fixed a memory leak during parsing introduced in v14.0.0. (16.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.2.0)
- Fixed selection-related issues when manipulating input and textarea values. (16.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.1.0)
- Handling of rgba() and hsl() colors now includes fixes through cssstyle v2.1.0. (16.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.1.0)
- Fixed timer and animation-frame issues, especially around window closing and recursive calls. (16.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.1.0)
- Changing an input element's type attribute now behaves correctly. (16.0.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.0.1)
- Validation now behaves correctly when a range input's max value is less than its min value. (16.0.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.0.1)
- Node v10 and v11 support now works when runScripts is set. (16.0.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.0.1)
- fileReader.readAsDataURL() now always base64-encodes the result. (16.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.0.0)
- Inserting img elements into documents without a browsing context no longer crashes when canvas is installed. (16.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.0.0)
- Fixes validation for email inputs using multiple and pattern attributes. (16.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.0.0)
- Fixes incorrect validation errors on readonly input elements. (16.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.0.0)
- Fixes validation errors for fractional input values when step is fractional. (16.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.0.0)
- input.type now defaults to text. (16.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.0.0)
- Fixes character encoding detection when documents use meta charset declarations. (16.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.0.0)
- Fixes template elements so they work correctly inside XML documents. (16.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.0.0)
- Fixes a memory leak when using window.setInterval(). (16.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.0.0)
- Fixes a memory leak when using window.setTimeout(). (16.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v16.0.0)

## jsdom 15

### Breaking changes

- Changed the exception thrown when attaching a shadow root to something already acting as a shadow host. (15.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v15.2.0)
- Changed el.tabIndex's default value when no tabindex attribute is set to reflect the updated specification. (15.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v15.2.0)
- selectEl.value now returns the empty string when no option is selected instead of the first option's value. (15.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v15.2.0)
- element.tagName now uses the ASCII uppercase of the element's qualified name instead of Unicode uppercase. (15.1.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v15.1.1)
- The endings: "native" option now converts line endings to \n on all operating systems. (15.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v15.0.0)
- When parsing binary input, charset now overrides sniffed encoding instead of being ignored. (15.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v15.0.0)
- The endings: "native" option now converts line endings to \n on all operating systems. (15.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v15.0.0)
- Now treats .xht files as application/xhtml+xml instead of text/html, matching .xhtml and .xml handling. (15.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v15.0.0)

### New APIs and options

- Added shadowRoot.activeElement. (15.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v15.2.0)
- Added a form.requestSubmit() stub to match the existing form.submit() stub. (15.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v15.2.0)
- Added readystatechange events during document loading. (15.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v15.2.0)
- Added the element.translate getter and setter. (15.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v15.1.0)
- Added the Headers class from the Fetch standard. (15.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v15.1.0)

### Behavior and default changes

- Added basic style inheritance for visibility in getComputedStyle(), laying groundwork for further inheritance, cascading, and specificity work. (15.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v15.2.0)
- The nonce property moved from HTMLScriptElement and HTMLStyleElement to HTMLElement, remaining a simple reflection of the attribute. (15.1.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v15.1.1)

### Tooling

- Set canvas as an optional peer dependency, which helps Yarn PnP support. (15.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v15.2.0)

### Fixes and other changes

- Focusing an already-focused element now does nothing instead of firing additional focus events. (15.2.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v15.2.1)
- URL hashes are no longer sent to the server or duplicated when constructing the Document. (15.2.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v15.2.1)
- Namespaced attribute selectors are handled correctly by the selector engine. (15.2.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v15.2.1)
- WebKit-prefixed pseudo-elements are handled correctly by the selector engine. (15.2.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v15.2.1)
- Fixed various correctness issues with constructing FormData from a form element. (15.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v15.2.0)
- Fixed validation logic for range inputs. (15.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v15.2.0)
- Reflected properties are no longer affected by overwriting el.getAttributeNS() or el.setAttributeNS(). (15.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v15.2.0)
- XML parsing errors now include the filename instead of using "undefined". (15.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v15.2.0)
- The on<event> properties now properly track their related attributes for SVG elements. (15.1.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v15.1.1)
- The style property now properly tracks its related attribute for SVG elements. (15.1.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v15.1.1)
- XMLHttpRequest no longer unnecessarily reserializes content-type request headers. (15.1.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v15.1.1)
- XMLHttpRequest now correctly merges preflight and response headers. (15.1.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v15.1.1)
- Fixed event path iteration in shadow DOM cases to follow specification fixes. (15.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v15.1.0)
- form.elements now excludes input elements with type=image. (15.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v15.1.0)
- pattern="" form control validation now applies the regular expression to the whole string. (15.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v15.1.0)
- Fixed synchronous XMLHttpRequest behavior on the newly-released Node.js v12. (15.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v15.1.0)

## jsdom 14

### Breaking changes

- Attribute access now ignores attributes with namespaces, as required by the specification. (14.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v14.1.0)
- During document loading, the load event now targets the Document instead of the Window. (14.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v14.1.0)
- Styles no longer apply to documents without a browsing context, including styles containing @import rules. (14.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v14.1.0)
- Calling JSDOM.fragment() without arguments now creates an empty DocumentFragment instead of one containing the text node "undefined". (14.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v14.0.0)

### New APIs and options

- The External class is now exposed as a property of window. (14.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v14.1.0)
- The input element now exposes a list property. (14.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v14.1.0)
- The datalist element now exposes an options property. (14.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v14.1.0)
- pageshow events now fire during document loading. (14.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v14.1.0)
- PageTransitionEvent was added. (14.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v14.1.0)

### Behavior and default changes

- Anchor and area elements with an empty href can activate javascript URLs or fragments. (14.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v14.1.0)

### Fixes and other changes

- Re-enabling a disabled element restores its activation behavior. (14.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v14.1.0)
- HTML fragment parsing through innerHTML and outerHTML is now spec-compliant. (14.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v14.1.0)
- HTML serialization no longer breaks after certain properties receive non-string values. (14.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v14.1.0)
- option elements now return correct label property values in edge cases. (14.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v14.1.0)
- The pretendToBeVisual option now propagates to child subframes as well as the main Window. (14.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v14.1.0)
- option elements now return correct value property values in edge cases. (14.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v14.1.0)
- Fixed a regression when calling element.blur() on a focused element. (14.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v14.0.0)
- Inserting link elements into documents without a browsing context no longer crashes, and resources are fetched only when browsing-context connected. (14.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v14.0.0)
- Template contents now use a separate browsing-context-less document, preventing resources from being fetched inside templates. (14.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v14.0.0)

## jsdom 13

### Breaking changes

- Events fired by jsdom now have isTrusted set to true. (13.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v13.2.0)
- XML documents now default to UTF-8 instead of windows-1252. (13.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v13.2.0)
- mediaElement.duration now defaults to NaN. (13.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v13.1.0)
- Radio button group names are now matched case-sensitively. (13.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v13.1.0)
- titleElement.text now returns child text content instead of titleElement.innerHTML. (13.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v13.1.0)
- Support for canvas-prebuilt was removed because canvas v2.x includes a built-in prebuilt version. (13.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v13.0.0)
- DOM tree modifications now prevent impossible trees from being created. (13.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v13.0.0)

### Security

- getComputedStyle now throws a sensible exception for the wrong argument without exposing jsdom internals. (13.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v13.2.0)

### New APIs and options

- Added support for MutationObserver. (13.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v13.2.0)
- Added navigator.mimeTypes, which is always empty. (13.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v13.2.0)
- Added navigator.plugins, which is always empty. (13.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v13.2.0)
- The progress element now exposes value, max, and position properties. (13.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v13.2.0)
- Added the outputEl.htmlFor property. (13.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v13.1.0)
- Added el.insertAdjacentElement(). (13.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v13.1.0)
- Added el.insertAdjacentText(). (13.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v13.1.0)
- Added the defaultValue property to output elements, including form reset behavior. (13.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v13.1.0)
- Added the type property to output elements, including form reset behavior. (13.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v13.1.0)
- Added the value property to output elements, including form reset behavior. (13.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v13.1.0)
- addEventListener() now supports the passive option. (13.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v13.0.0)
- The storageEvent.initStorageEvent() method was added. (13.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v13.0.0)
- The relList property was added to <a>, <area>, and <link> elements. (13.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v13.0.0)

### Performance

- Parsing large text nodes is faster, particularly for large inline style or script elements. (13.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v13.1.0)

### Behavior and default changes

- form.reset() now fires a cancelable reset event. (13.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v13.1.0)
- olEl.start now defaults to 1. (13.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v13.1.0)

### Fixes and other changes

- Nested fieldsets now receive correct disabled-state handling. (13.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v13.2.0)
- DOMParser-created documents now have readyState set to complete. (13.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v13.2.0)
- Summary elements are now focusable. (13.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v13.2.0)
- Clicking summary elements now toggles their parent details element. (13.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v13.2.0)
- XML document DOCTYPE parsing now preserves custom name values. (13.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v13.2.0)
- XML documents loaded in frames and iframes no longer error. (13.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v13.2.0)
- Bubbling click events now activate behavior correctly, including submitting forms from child clicks. (13.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v13.1.0)
- Fixed document.title in SVG documents. (13.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v13.1.0)
- Fixed the value of Element.prototype[Symbol.unscopables]. (13.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v13.1.0)
- focus and blur events are now composed. (13.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v13.1.0)
- Reset buttons and inputs now actually perform a form reset when clicked. (13.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v13.1.0)
- node.isConnected now correctly reports nodes inside a shadow tree as connected. (13.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v13.1.0)
- Fixed el.setCustomValidity() for output and fieldset elements. (13.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v13.1.0)
- Fixed the style property on a and area elements. (13.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v13.1.0)
- Textareas now properly account for changes to child CDATA section nodes. (13.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v13.1.0)
- XML parsing now ignores text outside the root element instead of treating it as an error. (13.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v13.1.0)
- Fixed XML serialization for elements with unknown prefixes. (13.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v13.1.0)
- XMLHttpRequest against nonexistent file URLs now produces a network error instead of crashing. (13.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v13.1.0)

## jsdom 12

### Breaking changes

- Errors are no longer swallowed when the canvas or canvas-prebuilt packages are installed but fail to load. (12.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v12.2.0)
- input and change events for input elements are now trusted and uncancelable. (12.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v12.1.0)
- XML parsing now conforms more closely to specifications, rejecting some ill-formed documents and handling additional constructs correctly. (12.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v12.1.0)
- CSS selection APIs now throw an error for invalid selectors even when used on empty nodes. (12.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v12.0.0)
- jsdom now requires Node.js v8. (12.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v12.0.0)
- The old jsdom API was removed because the new API now provides all required capabilities. (12.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v12.0.0)

### New APIs and options

- Added the element.toggleAttribute() method. (12.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v12.2.0)
- Added support for shadow roots, slots, composed events, and related shadow DOM functionality. (12.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v12.2.0)
- dom.runVMScript() now accepts an options parameter for configuring script execution. (12.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v12.1.0)
- Custom resource loader fetch() implementations can now see which element initiated the fetch. (12.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v12.1.0)
- Added the fieldsetEl.elements property for accessing elements associated with a fieldset. (12.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v12.1.0)
- Added the fieldsetEl.type property. (12.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v12.1.0)
- Added the countReset() method to console. (12.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v12.0.0)
- Added the dir() method to console. (12.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v12.0.0)
- Added the dirxml() method to console. (12.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v12.0.0)
- Added htmlElement.draggable. (12.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v12.0.0)
- Added the InputEvent class. (12.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v12.0.0)
- Added window.status. (12.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v12.0.0)

### Behavior and default changes

- window.name now defaults to the empty string instead of "nodejs", per spec. (12.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v12.0.0)

### Fixes and other changes

- formElement.form now also checks the form="" attribute instead of only the closest ancestor form element. (12.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v12.2.0)
- Fixed XMLHttpRequest sometimes sending an empty request body after a preflight request. (12.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v12.2.0)
- Scripts with the async attribute no longer execute before preceding synchronous scripts, reducing a regression from v12.0.0. (12.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v12.1.0)
- CSS selection APIs no longer sometimes return outdated results, especially for state pseudo-class selectors like :checked. (12.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v12.0.0)
- select.selectedOptions no longer sometimes returns outdated results. (12.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v12.0.0)
- Cloning textarea elements now preserves their values. (12.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v12.0.0)
- The default User-Agent now says "unknown OS" instead of "undefined" when jsdom is used in web browsers. (12.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v12.0.0)
- window.frameElement now returns an actual HTMLElement instance instead of a jsdom internal class. (12.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v12.0.0)

## jsdom 11

### Breaking changes

- hashchange events no longer bubble, matching the updated specification. (11.12.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.12.0)
- popstate events no longer bubble, matching the updated specification. (11.12.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.12.0)
- Style and script evaluation better follows the specification; scripts inserted by innerHTML are no longer evaluated. (11.6.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.6.2)
- data: URL parsing no longer includes fragment portions. (11.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.6.0)
- Various APIs now use ASCII lowercasing instead of Unicode lowercasing for element and attribute names. (11.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.6.0)
- Removed probablySupportsContext() from HTMLCanvasElement per specification updates. (11.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.6.0)
- Removed setContext() from HTMLCanvasElement per specification updates. (11.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.6.0)
- Removed the nonstandard window.createPopup() method. (11.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.6.0)
- Removed the nonstandard window.scrollLeft property. (11.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.6.0)
- Removed the nonstandard window.scrollTop property. (11.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.6.0)
- Stopped XML parsing from interpreting HTML character entities. (11.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.4.0)
- document.getElementsByName() now returns a NodeList instead of an HTMLCollection. (11.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.3.0)
- Disabled labeled controls no longer receive activation behavior when label.click() is called. (11.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.3.0)
- UIEvent now only allows initialization with Window objects for its view property. (11.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.3.0)
- blob.close() and blob.isClosed() were removed. (11.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.0.0)
- Disconnected forms no longer submit. (11.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.0.0)
- Location info objects returned by nodeLocation() now have a different structure after the parse5 upgrade. (11.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.0.0)
- The old API no longer accepts custom parsers; parse5 and sax are always used for HTML and XML. (11.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.0.0)
- Invalid qualified names now throw InvalidCharacterError instead of NamespaceError DOMExceptions. (11.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.0.0)
- Event handler attributes require runScripts: "dangerously"; event handler properties now work with any runScripts value. (11.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.0.0)
- Remaining non-spec toString() methods on various prototypes were removed. (11.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.0.0)
- Methods accepting web platform objects now type-check arguments and throw TypeError for invalid values. (11.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.0.0)
- getAllResponseHeaders() lowercases response headers and separates values with comma-space. (11.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.0.0)

### New APIs and options

- Added element.closest for finding the nearest matching ancestor element. (11.12.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.12.0)
- Added storageQuota to control how much data in-memory storage can contain. (11.12.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.12.0)
- Added StorageEvent support for storage-related event handling. (11.12.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.12.0)
- Added in-memory localStorage support for browser-like storage access. (11.12.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.12.0)
- Added in-memory sessionStorage support for browser-like storage access. (11.12.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.12.0)
- Added el.labels for form control elements. (11.11.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.11.0)
- Added label.control. (11.11.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.11.0)
- Added the node.getRootNode() API. (11.11.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.11.0)
- Added event.returnValue. (11.10.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.10.0)
- Added event.srcElement. (11.10.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.10.0)
- Added node.lookupPrefix(). (11.9.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.9.0)
- Added the full constraint validation API to eight HTML element interfaces. (11.8.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.8.0)
- Added getElementById() to DocumentFragment, enabling ID lookup within fragments. (11.8.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.8.0)
- FileReader gains readAsBinaryString(), which was added back to the specification. (11.7.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.7.0)
- Added support for the endings option to the Blob constructor. (11.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.6.0)
- Added window.devicePixelRatio. (11.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.6.0)
- Added a setter for HTMLInputElement.files. (11.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.6.0)
- Added support for the public HTMLMeterElement API except meterEl.labels. (11.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.6.0)
- Added getModifierState() to KeyboardEvent. (11.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.6.0)
- Added getModifierState() to MouseEvent. (11.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.6.0)
- Added window.performance with High Resolution Time basics. (11.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.6.0)
- Added performance.now(). (11.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.6.0)
- Added performance.timeOrigin. (11.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.6.0)
- Added performance.toJSON(). (11.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.6.0)
- Added screen.availHeight, and made all screen properties getters. (11.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.6.0)
- Added screen.availWidth, and made all screen properties getters. (11.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.6.0)
- Added screen.colorDepth, and made all screen properties getters. (11.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.6.0)
- Added screen.pixelDepth, and made all screen properties getters. (11.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.6.0)
- Added a fully functioning WebSocket implementation. (11.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.6.0)
- Added the locationbar property to Window. (11.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.6.0)
- Added the menubar property to Window. (11.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.6.0)
- Added the personalbar property to Window. (11.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.6.0)
- Added the scrollbars property to Window. (11.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.6.0)
- Added the statusbar property to Window. (11.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.6.0)
- Added the toolbar property to Window. (11.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.6.0)
- Added AbortController support. (11.5.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.5.1)
- Added AbortSignal support. (11.5.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.5.1)
- Added after() to DocumentType, Element, and CharacterData. (11.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.4.0)
- Added append() to Document, DocumentFragment, and Element. (11.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.4.0)
- Added before() to DocumentType, Element, and CharacterData. (11.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.4.0)
- Added node.isConnected. (11.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.4.0)
- Added node.isSameNode(). (11.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.4.0)
- Added prepend() to Document, DocumentFragment, and Element. (11.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.4.0)
- Added an option controlling requestAnimationFrame(), cancelAnimationFrame(), document.hidden, and document.visibilityState. (11.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.4.0)
- Added replaceWith() to DocumentType, Element, and CharacterData. (11.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.4.0)
- Added rudimentary SVG element classes, making SVG elements instances of SVGElement; only SVGSVGElement is concretely implemented for svg. (11.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.4.0)
- Added the CompositionEvent class. (11.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.3.0)
- Added a <details> element implementation. (11.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.3.0)
- Added a stub <marquee> element implementation. (11.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.3.0)
- Added a stub <picture> element implementation. (11.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.3.0)
- Added a setter for table.caption. (11.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.3.0)
- Added the table.createTBody() method. (11.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.3.0)
- Added a setter for table.tFoot. (11.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.3.0)
- Added a setter for table.tHead. (11.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.3.0)
- Added the WheelEvent class. (11.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.3.0)
- Added a no-op document.captureEvents() API for compatibility. (11.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.2.0)
- Added a no-op document.clear() API for compatibility. (11.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.2.0)
- Added a no-op document.releaseEvents() API for compatibility. (11.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.2.0)
- Added support for accessing element data attributes through dataset. (11.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.2.0)
- Select elements now support indexed and named access, plus item() and namedItem(). (11.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.2.0)
- Added a no-op AddSearchProvider() API for compatibility. (11.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.2.0)
- Added a no-op IsSearchProviderInstalled() API for compatibility. (11.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.2.0)
- Updated whatwg-url brought along URLSearchParams. (11.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.1.0)
- Event handler properties such as oneventname were added to relevant prototypes and now follow the specification. (11.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.0.0)

### Performance

- Parsing HTML documents with large numbers of sibling elements is faster. (11.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.6.0)
- Significantly sped up synchronous XMLHttpRequest. (11.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.3.0)
- getComputedStyle() is significantly faster because unsupported selectors were removed from the default style sheet. (11.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.0.0)
- HTMLCollection performance was significantly improved, including parsing performance for large documents. (11.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.0.0)

### Behavior and default changes

- Selector matching now uses nwsapi, bringing fixes, performance improvements, and additional selector support. (11.11.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.11.0)
- DOMTokenList.replace() now returns a boolean, matching the recent specification addition. (11.7.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.7.0)
- MIME type parsing was improved throughout jsdom using the new whatwg-mimetype package. (11.7.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.7.0)
- All window.screen properties are now getters. (11.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.6.0)
- Added XML CDATA section parsing, including through domParser.parseFromString(). (11.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.4.0)
- Converted DOMTokenList to proxies for improved specification compliance and liveness. (11.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.3.0)
- FileList now supports indexed property access such as fileList[i]. (11.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.2.0)
- select.options is now an HTMLOptionsCollection instance. (11.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.2.0)
- Updated URL behavior to include origin serialization changes. (11.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.1.0)
- Added javascript: URL navigation via window.location, evaluating side effects without actually navigating. (11.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.1.0)
- event.initEvent() and related methods now provide additional defaults. (11.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.0.0)
- Location properties are now own instance properties and are non-configurable. (11.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.0.0)
- tokenList.replace() now follows updated edge-case behavior. (11.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.0.0)
- XMLHttpRequest now permits redirects after a CORS preflight and changes username/password CORS treatment. (11.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.0.0)

### Fixes and other changes

- The old API no longer throws on invalid file-path input such as typical HTML strings. (11.12.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.12.0)
- Fixed the contentType of Documents created through iframes. (11.11.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.11.0)
- Fixed the contentType of Documents created through document.implementation.createDocument(). (11.11.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.11.0)
- Upgraded cssstyle, bringing fixes to the CSS parser and object model. (11.11.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.11.0)
- node.normalize() no longer modifies non-Text nodes. (11.11.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.11.0)
- Fixed the origin of Documents created through document.implementation.createDocument(). (11.11.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.11.0)
- sourceEl.srcset now returns the srcset attribute value instead of the cite attribute value. (11.11.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.11.0)
- Fixed the interaction of URL's href and searchParams properties. (11.11.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.11.0)
- XMLHttpRequest now correctly sets the User-Agent header, including on CORS preflight requests. (11.10.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.10.0)
- JPEG quality is now passed through correctly instead of always being passed as zero to node-canvas. (11.9.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.9.0)
- Document cloning now preserves all appropriate state and avoids adding an extra document type node. (11.9.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.9.0)
- Fixed various edge cases in the nodeValue property. (11.9.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.9.0)
- Fixed various edge cases in the textContent property. (11.9.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.9.0)
- AbortSignal abort events now have isTrusted set to true. (11.7.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.7.0)
- data: URL parsing was improved throughout jsdom using the new data-urls package. (11.7.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.7.0)
- Event handlers are now own properties of each Window rather than properties on Window.prototype. (11.7.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.7.0)
- Removing an img element's empty src attribute no longer sometimes raises an exception. (11.7.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.7.0)
- Argument conversions in XMLHttpRequest.open() were corrected. (11.7.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.7.0)
- Restores parsing jsdomError events omitted for style sheet text containing spaces. (11.6.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.6.2)
- Fixed style elements whose sheet property was sometimes null when it should not be. (11.6.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.6.1)
- Fixed style elements retaining a CSSStyleSheet after being removed from the document. (11.6.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.6.1)
- Documents created via new Document() now use UTF-8 encoding. (11.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.6.0)
- Various events now fire with correct default values, including MouseEvent properties from element.click(). (11.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.6.0)
- Event handler properties now behave correctly when assigned non-callable objects. (11.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.6.0)
- hashchange events during fragment navigation are now trusted events. (11.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.6.0)
- popstate events during fragment navigation are now trusted events. (11.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.6.0)
- URL-accepting properties now perform scalar value string conversion and URL resolution correctly. (11.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.6.0)
- Fixed validation for file inputs and added validation for more input types. (11.5.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.5.1)
- Fixed xhr.abort() so it clears any set headers. (11.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.4.0)
- Fixed radioButton.click() to fire appropriate input and change events. (11.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.4.0)
- Fixed line number reporting in exception stack traces for script elements when includeNodeLocations is set. (11.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.4.0)
- Implemented appropriate input.value getter and setter behavior for input type=file. (11.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.4.0)
- Improved spec compliance so named and indexed properties on element.attributes are retrieved properly. (11.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.4.0)
- Fixed SVG selector behavior inside template contents DocumentFragments, including fragments created by JSDOM.fragment(). (11.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.4.0)
- Fixed SVG selector behavior inside template contents DocumentFragments, including fragments created by JSDOM.fragment(). (11.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.4.0)
- Responses are now always decoded as UTF-8 when responseType is set to json. (11.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.4.0)
- Fixed CORS header handling, especially for preflights and Access-Control-Allow-Headers. (11.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.4.0)
- Made DOMException spec-compliant, including its constructor signature. (11.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.3.0)
- Fixed FocusEvent creation, which had regressed in the previous release. (11.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.3.0)
- The element interface for <td> and <th> is now HTMLTableCellElement with improved specification compliance. (11.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.3.0)
- Fixed interactions between inline event handlers and other event listeners. (11.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.3.0)
- Updated keyboardEvent.initKeyboardEvent() to match the latest specifications. (11.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.3.0)
- Updated mouseEvent.initiMouseEvent() to match the latest specifications. (11.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.3.0)
- Fixed the behavior of table.createCaption(). (11.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.3.0)
- Fixed the behavior of table.deleteRow(). (11.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.3.0)
- Fixed the behavior of the table.rows getter. (11.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.3.0)
- Fixed the behavior of tr.deleteCall(). (11.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.3.0)
- Fixed the behavior of tr.rowIndex. (11.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.3.0)
- Updated uiEvent.initUIEvent() to match the latest specifications. (11.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.3.0)
- Improved event handlers, abort(), and network error behavior. (11.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.2.0)
- Improved behavior around navigating to URL fragments. (11.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.2.0)
- Class matching is now ASCII case-insensitive instead of using JavaScript toLowerCase(). (11.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.2.0)
- Indexed, id, and name property retrieval is now spec-compliant and live. (11.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.2.0)
- Added active checks to prevent reentrancy and improved edge-case spec compliance. (11.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.2.0)
- Indexed property retrieval is now spec-compliant and live. (11.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.2.0)
- Added active checks to prevent reentrancy. (11.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.2.0)
- Elements with id="undefined" no longer shadow the global undefined property. (11.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.2.0)
- Improved event handlers, abort(), and network error behavior. (11.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.2.0)
- Fixed javascript: URL loading for iframes with proper percent-decoding and error reporting. (11.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.1.0)
- Timers no longer start after a window is closed, avoiding errors from unusable objects. (11.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.1.0)
- Fixed corrupted XMLHttpRequest responses larger than 1 MiB. (11.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.1.0)
- fileReader.abort() now properly terminates ongoing reads. (11.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.0.0)
- Upgrading parse5 brings correctness improvements to HTML parsing. (11.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.0.0)
- input.select() no longer throws for input types where selection does not apply. (11.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.0.0)
- Symbol.toStringTag properties are now non-writable and non-enumerable. (11.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.0.0)
- tokenList.remove() now works when its DOMTokenList corresponds to a nonexistent attribute. (11.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.0.0)
- xhr.overrideMimeType() no longer throws for invalid input. (11.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.0.0)
- xhr.send() now accepts array buffer views as well as ArrayBuffers. (11.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.0.0)
- Non-GET requests to data: URLs now work with XMLHttpRequest. (11.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v11.0.0)

## jsdom 10

### Breaking changes

- Removed prototype toString() methods that returned class-like strings to imitate Symbol.toStringTag behavior. (10.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v10.1.0)
- Setting htmlElement.dir now restricts values to ltr, rtl, or auto. (10.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v10.0.0)
- img elements no longer fire load events unless their image data is actually loaded. (10.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v10.0.0)
- The API for creating and manipulating jsdoms was completely overhauled with more intuitive usage and better defaults. (10.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v10.0.0)
- The omitJsdomErrors option was renamed to omitJSDOMErrors. (10.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v10.0.0)
- Node.js v4 and v5 are no longer supported; Node.js v6 or newer is required. (10.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v10.0.0)

### Security

- Origin checking is corrected, so callers do not always need to pass an origin of "*". (10.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v10.0.0)

### Deprecations

- The old API remains available through old-api.js but will not receive new features. (10.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v10.0.0)

### New APIs and options

- Added the select.selectedOptions property. (10.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v10.1.0)
- document.dir is now available. (10.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v10.0.0)

### Performance

- XMLHttpRequest now pre-allocates and exponentially grows a 1 MiB buffer to avoid frequent allocation and concatenation. (10.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v10.1.0)

### Behavior and default changes

- Added value sanitization for password, search, tel, text, color, email, and url input types. (10.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v10.1.0)

### Fixes and other changes

- Properties intended to return the same object now consistently preserve object identity. (10.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v10.1.0)
- Fixed inheritance of the resources option into iframes. (10.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v10.1.0)
- Fixed inheritance of the runScripts option into iframes. (10.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v10.1.0)
- Added Symbol.toStringTag to all web platform classes, making Object.prototype.toString.call() work as expected on jsdom objects. (10.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v10.1.0)
- Fixed an uncaught exception when xhr.abort() was called during a readystatechange event. (10.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v10.1.0)
- The <a> and <area> APIs now match the latest specification, with several bugs fixed. (10.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v10.0.0)
- Setting innerHTML to an empty string now updates the document instead of doing nothing. (10.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v10.0.0)
- The error message is improved when xhr.open receives too few arguments. (10.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v10.0.0)
- Approved preflight headers are now forwarded to the actual request. (10.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v10.0.0)

## jsdom 9

### Breaking changes

- HTML elements now expose offsetParent, always returning null. (9.11.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.11.0)
- getClientRects() now returns an empty array instead of a dummy bounding box. (9.10.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.10.0)
- Named access now returns the first matching element encountered instead of the last. (9.9.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.9.0)
- Moved file.lastModified from Blob to File. (9.8.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.8.0)
- Calling stopImmediatePropagation on an already-dispatched event now follows the latest DOM Standard changes. (9.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.6.0)
- Calling stopPropagation on an already-dispatched event now follows the latest DOM Standard changes. (9.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.6.0)
- The default file.lastModified value is now the current time instead of 0. (9.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.6.0)
- Now returns HTMLCollection instead of NodeList and follows the spec algorithms more exactly. (9.5.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.5.0)
- Now returns HTMLCollection instead of NodeList and follows the spec algorithms more exactly. (9.5.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.5.0)
- The minimum tough-cookie version was upgraded to protect installations against a security advisory. (9.4.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.4.2)
- Disabled-element semantics now more closely match the specification, especially for descendants of fieldset disabled. (9.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.4.0)
- XML parsing now rejects ill-formed XHTML markup when parsingMode is set to xml. (9.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.4.0)
- Constructors exposed as globals on the jsdom window are now non-enumerable. (9.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.4.0)
- URL setters now ignore invalid input instead of throwing. (9.2.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.2.1)
- Makes appName more browser-like instead of based on Node.js information. (9.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.1.0)
- Removes the noUI navigator property. (9.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.1.0)
- Makes platform more browser-like instead of based on Node.js information. (9.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.1.0)
- Makes userAgent more browser-like instead of based on Node.js information. (9.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.1.0)
- Makes version more browser-like instead of based on Node.js information. (9.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.1.0)
- tabIndex now defaults to 0 for focusable elements. (9.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.1.0)
- Support for mutation events was removed; mutation observers are not yet supported. (9.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.0.0)
- XMLHttpRequest statusText now defaults to an empty string instead of OK. (9.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.0.0)

### New APIs and options

- Supports canvas-prebuilt as an alternative package to canvas. (9.12.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.12.0)
- Adds the Option named constructor. (9.12.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.12.0)
- HTML elements now expose offsetHeight, always returning 0. (9.11.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.11.0)
- HTML elements now expose offsetLeft, always returning 0. (9.11.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.11.0)
- HTML elements now expose offsetTop, always returning 0. (9.11.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.11.0)
- HTML elements now expose offsetWidth, always returning 0. (9.11.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.11.0)
- Elements now expose clientHeight, returning 0. (9.10.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.10.0)
- Elements now expose clientLeft, returning 0. (9.10.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.10.0)
- Elements now expose clientTop, returning 0. (9.10.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.10.0)
- Elements now expose clientWidth, returning 0. (9.10.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.10.0)
- Events now expose the cancelBubble property. (9.10.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.10.0)
- NodeList now supports iteration and key/value/entry access methods. (9.10.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.10.0)
- Elements now expose scrollHeight, returning 0. (9.10.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.10.0)
- Elements now expose scrollWidth, returning 0. (9.10.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.10.0)
- Added CDATASection nodes, including document.createCDATASection. (9.9.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.9.0)
- Added a setter for document.body. (9.9.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.9.0)
- Added node.wholeText. (9.9.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.9.0)
- Added the blob.isClosed property. (9.8.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.8.0)
- Added document.hasFocus() for checking whether the document currently has focus. (9.7.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.7.0)
- addEventListener and removeEventListener now support EventListenerOptions, including once and capture. (9.7.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.7.0)
- HTMLCollection now supports for-of iteration. (9.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.6.0)
- Added document.embeds. (9.5.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.5.0)
- Added document.plugins. (9.5.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.5.0)
- Added document.scripts. (9.5.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.5.0)
- Custom request agents can now be passed through the agent option. (9.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.4.0)
- Custom request agent classes can now be passed through the agentClass option. (9.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.4.0)
- Adds a spec-compliant DOMParser API, except parsed documents always use about:blank instead of the creating document's URL. (9.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.4.0)
- Adds window.frameElement, but without appropriate cross-origin security checks. (9.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.4.0)
- Adds the public jsdom.evalVMScript API for evaluating VM scripts. (9.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.4.0)
- Added the Audio named constructor. (9.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.3.0)
- Added an API to override a window's existing URL. (9.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.2.0)
- Adds the FocusEvent class and fires focus and blur events appropriately. (9.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.1.0)
- Adds the appCodeName navigator property. (9.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.1.0)
- Adds the javaEnabled() navigator method. (9.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.1.0)
- Adds the language navigator property. (9.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.1.0)
- Adds the languages navigator property. (9.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.1.0)
- Adds the onLine navigator property. (9.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.1.0)
- Adds the product navigator property. (9.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.1.0)
- Adds the productSub navigator property. (9.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.1.0)
- Adds the vendor navigator property. (9.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.1.0)
- Adds the vendorSub navigator property. (9.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.1.0)
- Added DOMTokenList.prototype.replace. (9.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.0.0)
- XMLHttpRequest gained a responseURL property. (9.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.0.0)

### Performance

- XPath execution is faster. (9.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.1.0)

### Behavior and default changes

- Adds rudimentary processing of XML <!ENTITY declarations. (9.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.4.0)
- XMLHttpRequest methods, headers, and header values now use the ByteString algorithm. (9.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.0.0)
- Argument validation was removed from DOMTokenList.prototype.contains to match the latest specification. (9.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.0.0)

### Fixes and other changes

- Works correctly when jsdom is browserified. (9.12.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.12.0)
- Works correctly when jsdom is browserified. (9.12.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.12.0)
- Preserves URL fragments across redirects. (9.12.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.12.0)
- Makes optionEl.text more spec-compliant. (9.12.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.12.0)
- Makes optionEl.value more spec-compliant. (9.12.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.12.0)
- Always returns a positive integer instead of 0 on the first call. (9.12.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.12.0)
- Always returns a positive integer instead of 0 on the first call. (9.12.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.12.0)
- Actually stops immediate propagation instead of only stopping propagation. (9.12.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.12.0)
- Edge cases in type conversions for method arguments and setters across implemented web platform APIs were fixed. (9.11.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.11.0)
- Blob, File, and FileReader behavior now better matches the File API specification. (9.10.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.10.0)
- Progress events now match recent specification changes and test updates. (9.10.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.10.0)
- Readystatechange events now match recent specification changes and test updates. (9.10.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.10.0)
- Removed use of array.includes to restore compatibility with Node.js v4. (9.9.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.9.1)
- Fixed removal of event listeners registered with the once option. (9.9.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.9.0)
- document.body now acts more correctly in various edge cases. (9.9.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.9.0)
- Added document.embeds, which had been mistakenly omitted from 9.5.0. (9.9.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.9.0)
- Added document.plugsin, which had been mistakenly omitted from 9.5.0. (9.9.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.9.0)
- Added document.scripts, which had been mistakenly omitted from 9.5.0. (9.9.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.9.0)
- document.title now acts more correctly in various edge cases. (9.9.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.9.0)
- Now works with null or document parent nodes for afterbegin and beforeend insertion positions. (9.9.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.9.0)
- The not implemented virtual console message now occurs only when form submission is not canceled. (9.9.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.9.0)
- Fixed POSTing JSON with Authorization to a CORS endpoint. (9.9.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.9.0)
- Fixed syntax errors so jsdom can run correctly on Node.js v4. (9.8.3) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.8.3)
- Now splits only on ASCII whitespace instead of all Unicode whitespace. (9.8.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.8.2)
- Now splits only on ASCII whitespace instead of all Unicode whitespace. (9.8.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.8.2)
- Fixed an error when passing no class names to getElementsByClassName, including empty or whitespace-only strings. (9.8.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.8.1)
- file.lastModified now defaults to the File object's creation time. (9.8.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.8.0)
- Non-HTML elements named "iframe" are no longer incorrectly focusable. (9.8.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.8.0)
- Fixed a performance regression when modifying the DOM, especially during initial parsing of documents with many elements. (9.7.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.7.1)
- Focusing something inside an iframe now also focuses the iframe itself. (9.7.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.7.0)
- Cloning Attrs now correctly preserves the namespace prefix. (9.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.6.0)
- XMLHttpRequest progress events now have ordering closer to the specification and browsers. (9.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.6.0)
- Corrected console.groupCollapse to console.groupCollapsed and updated the virtual console. (9.5.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.5.0)
- Various HTMLCollection-returning getters are now more spec-compliant. (9.5.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.5.0)
- Now respects the agent and agentClass options in addition to agentOptions. (9.5.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.5.0)
- Fixed error events from failed resource loads going missing since v9.4.3. (9.4.5) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.4.5)
- Removed leftover console.log from the error handling path introduced in v9.4.3. (9.4.4) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.4.4)
- Fixed spurious jsdomError events when closing a window due to aborted resource loads. (9.4.3) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.4.3)
- Inline event handlers returning non-boolean values no longer erroneously cancel events. (9.4.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.4.2)
- Cloned input elements now copy their value, checkedness, and dirty flags correctly. (9.4.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.4.1)
- Iframe documents now receive the parent document's URL as their referrer. (9.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.4.0)
- External images specified with relative URLs now load when the canvas npm package is installed. (9.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.4.0)
- input.checked now has the correct value inside checkbox click events. (9.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.4.0)
- Stylesheet link elements now load when their href attributes change while in a document. (9.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.4.0)
- Script elements now load when they gain a src attribute while in a document. (9.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.4.0)
- Window named properties now correctly resolve iframe elements or iframe windows for name versus id scenarios. (9.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.4.0)
- Canceling clicks on submit buttons and labels now prevents form submission and re-dispatches to the relevant form control. (9.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.3.0)
- The Image named constructor now follows the specification more closely, including matching HTMLImageElement.prototype. (9.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.3.0)
- The tabIndex setter no longer causes errors after regressing in 9.1.0. (9.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.3.0)
- Unhandled errors thrown in XHR event handlers are now redirected to the virtual console instead of being swallowed. (9.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.3.0)
- Returns the attribute value instead of an empty string for unparseable URLs. (9.2.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.2.1)
- External resources now receive the document's URL as referrer instead of its base URL. (9.2.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.2.1)
- Returns null instead of throwing for elements that do not allow selection. (9.2.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.2.1)
- Returns null instead of throwing for elements that do not allow selection. (9.2.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.2.1)
- Returns null instead of throwing for elements that do not allow selection. (9.2.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.2.1)
- Returns null instead of undefined for out-of-bounds indices. (9.2.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.2.1)
- The URL constructor now correctly throws for unparseable URLs. (9.2.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.2.1)
- Error events are no longer suppressed after the first event. (9.2.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.2.1)
- The proxy option is now applied to all requests. (9.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.2.0)
- Fixed response header filtering for cross-origin requests and ProgressEvents fired from those XHRs. (9.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.2.0)
- Only focusable elements can be focused. (9.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.1.0)
- Resolves formEl.action relative to the document URL, or uses that URL when the attribute is missing or empty. (9.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.1.0)
- Invalid CSS no longer crashes parsing and instead emits a jsdomError to the virtual console. (9.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.1.0)
- window.close() now correctly clears event listeners on the document. (9.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.1.0)
- Fixed validation of the Blob constructor's type option. (9.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v9.0.0)

## jsdom 8

### Breaking changes

- Removed the nonstandard Internet Explorer-only property. (8.5.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.5.0)
- Removed the unimplemented property, which previously crashed when used. (8.5.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.5.0)
- Clicks cannot begin while another click is in progress. (8.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.2.0)
- XHTML frames and iframes are parsed as XML instead of HTML. (8.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.2.0)
- Created documents now use XML parsing mode, affecting several DOM APIs. (8.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.1.0)
- relatedNode is now the new Attr object instead of the Node. (8.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.1.0)
- Changed DOMTokenList.toString serialization slightly to match recent spec changes. (8.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.1.0)
- Named properties are now lowercase except for specified XML and non-HTML edge cases. (8.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.1.0)
- Named properties are now non-enumerable. (8.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.1.0)
- tc.headers is now a DOMTokenList reflecting the headers attribute instead of a string. (8.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.1.0)
- All jsdom installs now benefit from cssstyle's improved margin parsing and CSSOM behavior. (8.0.3) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.0.3)
- All jsdom installs now benefit from cssstyle's improved padding parsing and CSSOM behavior. (8.0.3) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.0.3)
- Removed this minor unimplemented or no-longer-standard DOM Level 3 API. (8.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.0.0)
- Removed this minor unimplemented or no-longer-standard DOM Level 3 API. (8.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.0.0)
- Removed this minor unimplemented or no-longer-standard DOM Level 3 API. (8.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.0.0)
- Nodes are adopted during insertion instead of causing WrongDocumentError exceptions. (8.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.0.0)
- Now returns numeric IDs, accepts string arguments to eval, and passes extra arguments after the first two. (8.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.0.0)
- Now returns numeric IDs, accepts string arguments to eval, and passes extra arguments after the first two. (8.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.0.0)
- Removed this minor unimplemented or no-longer-standard DOM Level 3 API. (8.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.0.0)

### Deprecations

- The proprietary navigator.noUI is superseded by the Page Visibility API and will be removed in v9.0.0. (8.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.3.0)

### New APIs and options

- Added the TreeWalker class and document.createTreeWalker implementation for traversing document trees. (8.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.4.0)
- Adds canvasContext.createPattern when the canvas npm package is installed. (8.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.3.0)
- Images can be drawn onto canvases when the canvas npm package is installed. (8.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.3.0)
- Adds canvasContext.toBlob when the canvas npm package is installed. (8.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.3.0)
- Adds the Page Visibility API's document.hidden property, which always returns true. (8.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.3.0)
- Adds the Page Visibility API's document.visibilityState property, which always returns prerender. (8.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.3.0)
- Adds the document.lastModified property. (8.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.2.0)
- Adds the document.origin property. (8.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.2.0)
- A top-level strictSSL option governs all requests made by jsdom. (8.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.2.0)
- Added a setter for element.classList that forwards to element.classList.value. (8.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.1.0)
- Added element.getAttributeNames() for enumerating an element's attribute names. (8.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.1.0)
- Added Node.prototype.adoptNode to adopt nodes across documents. (8.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.0.0)
- Added a stub matching the existing getBoundingClientRect stub. (8.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.0.0)
- Added Element.prototype.insertAdjacentHTML for inserting HTML adjacent to an element. (8.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.0.0)

### Performance

- Parsing speed should improve because URLs are no longer parsed and resolved during parsing. (8.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.0.0)

### Behavior and default changes

- Decodes URL or file bytes using Content-Type, meta charset, or BOM signals, matching browser encoding behavior. (8.5.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.5.0)
- Images load and decode when the canvas package is installed and external img resources are fetched, updating dimensions and firing load or error events. (8.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.3.0)
- XMLHttpRequest gains preliminary CORS support. (8.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.2.0)
- Labels now proxy clicks to their labeled form elements. (8.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.1.0)
- Many properties are now available, with more spec-compliant type conversions and attribute/property reflections; implementation details are hidden behind a single symbol. (8.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.0.0)

### Fixes and other changes

- Accounts for Content-Type, meta charset, and BOM signals when fetching resources through browser-like mechanisms. (8.5.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.5.0)
- Fixed setting proxied inline event handlers for documents without a browsing context. (8.5.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.5.0)
- Setting selected on a multi-select no longer clears all other selectedness. (8.4.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.4.1)
- Fixed issues with generated files in the published package that impacted webpack users. (8.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.4.0)
- Fixed minor bugs in URL parsing and the URL API. (8.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.4.0)
- Fixed spurious attributes appearing on jsdom nodes when Object.prototype was modified. (8.3.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.3.1)
- Change events now fire appropriately for input clicks. (8.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.2.0)
- Input selection methods and properties now distinguish outright-selectable inputs from textual inputs with variable-length selection. (8.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.2.0)
- Input events now fire appropriately for input clicks. (8.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.2.0)
- Scripts execute only when their MIME type appears on the canonical JavaScript MIME type list. (8.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.2.0)
- The scriptEl.text getter and setter now follow the specification. (8.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.2.0)
- Corrected the constructor property, which previously incorrectly pointed to Window. (8.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.1.0)
- option.index no longer errors for options outside a select. (8.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.1.0)
- Can now replace an attribute node without changing its order in the attribute list. (8.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.1.0)
- Can now replace an attribute node without changing its order in the attribute list. (8.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.1.0)
- tc.cellIndex no longer errors for cells outside a table row. (8.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.1.0)
- tr.sectionRowIndex no longer errors for rows outside table sections. (8.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.1.0)
- Fixed the this value when passing an object with handleEvent() to addEventListener. (8.0.4) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.0.4)
- Fixed a typo that prevented HTMLOptionElement.prototype.label from working. (8.0.3) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.0.3)
- document.activeElement now falls back to the body element when no element is focused or the active element is removed. (8.0.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.0.2)
- Custom user agents now propagate to navigator.userAgent in frames and iframes. (8.0.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.0.2)
- Event handler callbacks now bind this to the event's current target. (8.0.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.0.1)
- Event objects are now always initialized unless created with document.createEvent, including events with an empty name. (8.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.0.0)
- Reimplemented according to the latest specs, improving URL resolution and navigation correctness for links and areas. (8.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.0.0)
- Iframes now load through the custom resource loader. (8.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.0.0)
- Fixed shorthand properties so component properties update and parsing works correctly. (8.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v8.0.0)

## jsdom 7

### Breaking changes

- Attr now follows the latest specification, is no longer a Node subclass, and no longer has child text nodes. (7.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.1.0)
- CustomEvent now provides initCustomEvent for initialization. (7.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.1.0)
- initProgressEvent was replaced by initCustomEvent on CustomEvent.prototype. (7.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.1.0)
- Invalid selectors now throw SyntaxError DOMExceptions instead of Error instances. (7.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.1.0)
- Invalid selectors now throw SyntaxError DOMExceptions instead of Error instances. (7.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.1.0)
- Invalid selectors now throw SyntaxError DOMExceptions instead of Error instances. (7.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.1.0)
- The template content structure no longer includes an extra intermediate document fragment or child nodes. (7.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.1.0)
- document.implementation.createDocumentType now requires all three arguments. (7.0.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.0.1)
- Comparing any two doctypes no longer always returns true. (7.0.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.0.1)
- Creating a jsdom document with an invalid URL now throws an error. (7.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.0.0)
- Node.js 4.0 or later is now required to run jsdom. (7.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.0.0)
- omitJsdomErrors moved from virtual-console creation to the sendTo call. (7.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.0.0)

### New APIs and options

- Adds support for text selection APIs on input and textarea elements. (7.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.2.0)
- Almost all supported Event subclasses now have constructors that allow setting supported properties. (7.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.1.0)
- KeyboardEvent is now implemented. (7.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.1.0)
- TouchEvent is now implemented, although it does not yet have a constructor. (7.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.1.0)
- The AT_TARGET event-phase constant is now available. (7.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.0.0)
- Blob is now supported by the XMLHttpRequest implementation. (7.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.0.0)
- The BUBBLING_PHASE event-phase constant is now available. (7.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.0.0)
- The CAPTURING_PHASE event-phase constant is now available. (7.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.0.0)
- document.charset is now available as an alias for document.characterSet. (7.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.0.0)
- Event.prototype.stopImmediatePropagation is now available. (7.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.0.0)
- File is now supported by the XMLHttpRequest implementation. (7.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.0.0)
- FileList is now supported by the XMLHttpRequest implementation. (7.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.0.0)
- FileReader is now supported by the XMLHttpRequest implementation. (7.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.0.0)
- FormData is now supported by the XMLHttpRequest implementation. (7.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.0.0)
- HTMLTemplateElement.prototype.content now exposes a template's contents as a document fragment. (7.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.0.0)
- The agentOptions option adds new request-management control. (7.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.0.0)
- The pool option adds new request-management control. (7.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.0.0)
- The userAgent option adds new request-management control. (7.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.0.0)
- The NONE event-phase constant is now available. (7.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.0.0)
- ProgressEvent is now supported by the XMLHttpRequest implementation. (7.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.0.0)
- Resource loads can now be aborted. (7.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.0.0)
- Synchronous XMLHttpRequests are now supported. (7.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.0.0)
- XMLHttpRequestEventTarget is now supported as part of the XMLHttpRequest implementation. (7.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.0.0)
- XMLHttpRequestUpload is now supported as part of the XMLHttpRequest implementation. (7.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.0.0)

### Behavior and default changes

- postMessage tasks now use jsdom's timer queue, making them easier to mock. (7.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.2.0)
- Uses sax as the default XML parser, fixing many XML and XHTML parsing issues. (7.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.2.0)
- XMLHttpRequest and related classes were completely re-implemented with more complete, standards-compliant behavior. (7.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.0.0)

### Fixes and other changes

- Fixed canvasEl.toDataURL() argument handling when the canvas npm package is installed. (7.2.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.2.2)
- Fixed data: URL parsing to allow empty contents, such as data:text/css;base64,. (7.2.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.2.2)
- Fixed a regression when parsing attributes with a namespace URL but no prefix. (7.2.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.2.1)
- Canvas contents now reset when width or height changes, including changes from the default dimensions. (7.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.2.0)
- Fixes doctype parsing that confused the system ID and public ID. (7.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.2.0)
- Fixes HTMLCollections containing elements with numeric id or name values. (7.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.2.0)
- document.writeln now correctly handles multiple arguments instead of ignoring all arguments after the first. (7.1.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.1.1)
- FileList objects no longer contain a property named "undefined". (7.1.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.1.1)
- Unresolvable iframe URLs now load about:blank instead of crashing jsdom, matching spec behavior. (7.1.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.1.1)
- Creating a customevent now correctly returns a CustomEvent instead of an Event. (7.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.1.0)
- The Event class hierarchy now has more complete functionality and correct public APIs. (7.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.1.0)
- EventTarget now follows the specification exactly, improving edge-case behavior. (7.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.1.0)
- Browser builds can again fetch URLs for content and similar uses. (7.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.1.0)
- Template parsing and serialization now make innerHTML work as specified. (7.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.1.0)
- appendChild now validates its arguments more correctly. (7.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.1.0)
- insertBefore now validates its arguments more correctly. (7.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.1.0)
- replaceChild now validates its arguments more correctly. (7.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.1.0)
- Template parsing and serialization now make outerHTML work as specified. (7.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.1.0)
- Fixed RegExp literals inside jsdom script code so instanceof RegExp returns true. (7.0.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.0.2)
- Comparing two elements with attributes no longer throws an error. (7.0.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.0.1)
- Loose cookie parsing now correctly handles assignments such as document.cookie = "foo". (7.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.0.0)
- document.styleSheets now correctly tracks stylesheet removal from the document. (7.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.0.0)
- The created callback now receives the same window object as the loaded and done callbacks when scripting is enabled. (7.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v7.0.0)

## jsdom 6

### Breaking changes

- Now splits class arguments on whitespace, requires all classes, returns an HTMLCollection, and memoizes the result to match the specification. (6.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.4.0)
- Now matches the specification and no longer inherits from NodeList. (6.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.4.0)
- The href getter now applies spec-compliant fallbacks and always returns an absolute URL. (6.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.3.0)
- Removed the vestigial HTMLIsIndexElement global property. (6.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.3.0)
- sendTo(console) now forwards jsdomError events to console.error by default. (6.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.2.0)
- Nodes no longer expose the nonstandard errors array. (6.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.0.0)
- hashchange now emits HashChangeEvent instances with correctly named newURL and oldURL properties. (6.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.0.0)
- io.js 2.0 or newer is now required because jsdom uses ES2015 features. (6.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.0.0)
- The done callback now receives one error object instead of an array of errors. (6.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.0.0)
- The load(errors, window) callback is replaced by onload(window), reflecting window.onload behavior. (6.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.0.0)
- Callers may need to pass file: URLs where filenames previously worked. (6.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.0.0)
- Nodes no longer expose the raise method used to add entries to the errors array. (6.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.0.0)
- jsdom no longer uses setimmediate, removing its eval-based incompatibility with CSP scenarios. (6.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.0.0)

### New APIs and options

- Allows cookie as either a top-level option or nested under document. (6.5.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.5.1)
- Allows referrer as either a top-level option or nested under document. (6.5.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.5.1)
- Allows cookie as either a top-level option or nested under document. (6.5.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.5.1)
- Allows referrer as either a top-level option or nested under document. (6.5.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.5.1)
- Adds iteration support so developers can use for-of loops with NodeLists. (6.5.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.5.0)
- Adds the element that initiated a resource load, enabling customization based on the loading element. (6.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.4.0)
- Adds an API to retrieve the source-text location of a given node. (6.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.4.0)
- Allows changing a window's top property. (6.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.4.0)
- Implemented HTMLAudioElement in full, while its HTMLMediaElement base remains largely a stub. (6.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.3.0)
- Added a complete implementation of HTMLDataElement. (6.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.3.0)
- Added a stub implementation of HTMLDataListElement. (6.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.3.0)
- Added a stub implementation of HTMLDialogElement. (6.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.3.0)
- Added a stub implementation of HTMLEmbedElement. (6.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.3.0)
- Added appropriate constants to HTMLMediaElement. (6.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.3.0)
- Added a stub implementation of HTMLMeterElement. (6.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.3.0)
- Added a complete implementation of HTMLSpanElement. (6.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.3.0)
- Added a complete implementation of HTMLTimeElement. (6.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.3.0)
- Added a property returning the node's owner document base URL. (6.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.3.0)
- Added a fully spec-compliant implementation of window.atob. (6.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.3.0)
- Added a fully spec-compliant implementation of window.btoa. (6.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.3.0)
- Added a full-featured, spec-compliant classList implementation. (6.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.2.0)
- Added an option to disable forwarding jsdomError events when using sendTo(console). (6.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.2.0)
- Added a basic implementation of HTMLMediaElement for use in jsdom. (6.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.1.0)
- Added a basic implementation of HTMLVideoElement for use in jsdom. (6.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.1.0)
- A new ErrorEvent class is available as part of script error handling. (6.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.0.0)
- XMLHttpRequest.prototype.response is now available as a getter. (6.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.0.0)

### Behavior and default changes

- Canvas elements now expose a uniform spec-compliant API with or without the canvas package installed. (6.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.3.0)
- Updated HTMLTableCellElement to the latest specification. (6.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.3.0)
- Updated HTMLTableDataCellElement to the latest specification. (6.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.3.0)
- Updated HTMLTableHeaderCellElement to the latest specification. (6.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.3.0)
- Updated HTMLTableRowElement to the latest specification. (6.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.3.0)
- Updated HTMLTableSectionElement to the latest specification. (6.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.3.0)
- The url option is now resolved as a URL before installation as document.URL, including a trailing slash for host-only URLs. (6.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.3.0)

### Fixes and other changes

- An about:blank iframe without base elements now falls back to the parent window's base URL. (6.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.3.0)
- Canvas elements now have the correct HTMLCanvasElement and HTMLElement instanceof relationships when the canvas package is installed. (6.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.3.0)
- The height property now reflects the height attribute and defaults to 150. (6.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.3.0)
- The width property now reflects the width attribute and defaults to 300. (6.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.3.0)
- Canvas elements now work better with other jsdom APIs when the canvas package is installed, including document.getElementById. (6.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.3.0)
- The DOMSubtreeModified event now fires in more cases, though mutation events remain incomplete. (6.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.2.0)
- Fixed errors when parsing invalid doctype declarations such as <!DOCTYPE>. (6.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.2.0)
- Stopped emitting spurious jsdomError events after window.close(). (6.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.2.0)
- No longer crashes when used with file: URLs. (6.0.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.0.1)
- Correctly returns response text when responseType is unset. (6.0.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.0.1)
- StyleSheetList.prototype.item now works correctly. (6.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.0.0)
- The browser vm shim now adds built-in global properties to the sandbox, fixing scripts run in web workers. (6.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.0.0)
- window.onerror and error event listeners now catch all script errors, similarly to browsers. (6.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v6.0.0)

## jsdom 5

### Breaking changes

- DOM attribute handling now follows the specification more closely, including updated NamedNodeMap, Element methods, and style attribute behavior. (5.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.4.0)
- Removed the erroneously added mapDOMNodes function from window. (5.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.4.0)
- Removed the erroneously added mapper function from window. (5.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.4.0)
- Removed the erroneously added visitTree function from window. (5.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.4.0)
- The setter now converts null to the cookie value "null" instead of ignoring it. (5.0.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.0.1)
- Calling document.write on XML documents now throws as required by the specification. (5.0.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.0.1)
- The setter now converts undefined to the string "undefined" instead of ignoring it. (5.0.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.0.1)
- XML documents no longer receive an automatically inserted HTML document structure when created without arguments. (5.0.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.0.1)
- Added an API for creating cookie jars that can be shared among multiple jsdom documents. (5.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.0.0)
- Added cookieJar configuration for supplying shared cookie jars to jsdom documents. (5.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.0.0)
- Removed cookieDomain configuration from jsdom document creation. (5.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.0.0)
- Removed the jar option from jsdom document creation configuration. (5.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.0.0)

### New APIs and options

- Added support for communicating between parent windows, iframes, and combinations thereof, with some origin and structured-cloning semantics still missing. (5.5.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.5.0)
- Added nextElementSibling to Element and the various types of CharacterData. (5.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.4.0)
- Added previousElementSibling to Element and the various types of CharacterData. (5.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.4.0)
- A factory creates virtual consoles that can be installed before document creation to catch initialization events. (5.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.3.0)
- Document creation methods accept a virtual console before creation, allowing virtual console events during initialization to be caught. (5.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.3.0)
- Implemented the childElementCount property through the ParentNode mixin. (5.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.2.0)
- Implemented the firstElementChild property through the ParentNode mixin. (5.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.2.0)
- Implemented the lastElementChild property through the ParentNode mixin. (5.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.2.0)
- Implemented the outerHTML setter, allowing developers to assign serialized markup. (5.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.2.0)
- Added support for the NodeIterator class from the DOM Standard. (5.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.1.0)

### Behavior and default changes

- Attrs can no longer be cloned according to the latest specification, although cloneNode remains for legacy reasons. (5.5.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.5.0)
- StyleSheetList now inherits from Array, matching the latest CSSOM specification. (5.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.4.0)
- Elements with id or certain name attributes now create named properties and global variables on window, improving script compatibility. (5.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.4.0)
- Node.js now fails fast with a clear error message to avoid confusion from syntax errors. (5.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.1.0)
- Cookie handling is delegated to tough-cookie, bringing additional previously missing cookie behaviors. (5.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.0.0)
- Descendant iframes automatically share cookie jars, allowing same-domain iframes to access appropriate cookies. (5.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.0.0)
- document.cookie now accepts arrays, allowing multiple cookies to be set at once. (5.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.0.0)

### Fixes and other changes

- Stops createAttributeNS from accidentally creating a global attribute variable. (5.6.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.6.1)
- CSS properties using url("quoted string") now parse correctly. (5.6.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.6.1)
- Selectors matching the empty string, such as div[title=""], now work correctly. (5.6.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.6.1)
- Clicking submit buttons now submits their containing form, matching input type=submit behavior. (5.5.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.5.0)
- The type property of button elements now defaults to submit and remains within the allowed range. (5.5.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.5.0)
- Elements with unusual tag names that only the parser normally creates can now be cloned. (5.5.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.5.0)
- Doctypes can now be cloned in accordance with the latest specification. (5.5.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.5.0)
- Cloned documents now correctly preserve their URL and content-type. (5.5.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.5.0)
- document.open() now returns the document itself as required by the specification. (5.5.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.5.0)
- Virtual console output from iframes is now proxied to the parent window's virtual console. (5.5.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.5.0)
- Invalid values assigned to el.style.cssText or the style attribute are ignored instead of throwing an error. (5.4.3) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.4.3)
- License metadata now conforms to the latest npm standards. (5.4.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.4.2)
- Restored compatibility with browserify after a regression introduced in v5.4.0. (5.4.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.4.1)
- Fixed getElementById for img elements whose id attributes were modified. (5.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.4.0)
- The virtualConsole option now works with jsdom.env as well as jsdom.jsdom. (5.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.4.0)
- The default HTML stylesheet is now applied, making computed styles more accurate and allowing jQuery show() and hide() methods to work correctly. (5.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.4.0)
- Fixed relative stylesheet resolution when using @import. (5.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.2.0)
- Fixed outerHTML getter results for select and form elements. (5.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.2.0)
- Fixed incorrect results and failures in documents created without a window. (5.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.2.0)
- The initial request now shares its cookie jar with subsequent requests, avoiding possible EventEmitter memory leak warnings. (5.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.1.0)
- document.write now accepts multiple arguments and concatenates them. (5.0.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.0.1)
- Calling document.write with an empty string no longer attempts to insert a default HTML document structure. (5.0.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v5.0.1)

## jsdom 4

### Breaking changes

- Removed an unnecessary browserify dependency that was erroneously included in 4.5.0. (4.5.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v4.5.1)
- Unknown elements now create HTMLUnknownElement instances instead of HTMLElement instances. (4.0.5) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v4.0.5)
- document.createEvent accepts more argument types and throws for invalid arguments according to the DOM Standard. (4.0.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v4.0.2)
- The native Contextify dependency was eliminated, making jsdom easier to install without a C++ compiler toolchain. (4.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v4.0.0)
- The non-standard document.parentWindow property was removed; use the standard document.defaultView instead. (4.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v4.0.0)
- jsdom no longer works with Node.js; applications must use io.js or remain on the 3.x series. (4.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v4.0.0)
- Window instances no longer implicitly share parser- and serializer-related state. (4.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v4.0.0)

### New APIs and options

- Adds document.currentScript for accessing the currently executing script element. (4.5.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v4.5.0)
- Event instances now expose whether preventDefault() has been called. (4.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v4.3.0)
- MouseEvent now accepts a second parameter, behaving the same as Event's second parameter for now. (4.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v4.2.0)
- MutationEvent now accepts a second parameter, behaving the same as Event's second parameter for now. (4.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v4.2.0)
- UIEvent now accepts a second parameter, behaving the same as Event's second parameter for now. (4.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v4.2.0)
- The Event constructor now accepts a second parameter to set bubbles and cancelable properties. (4.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v4.1.0)
- DOMException provides a more comprehensive set of constants. (4.0.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v4.0.2)

### Performance

- Window creation is approximately 600% faster when no scripts are executed. (4.0.3) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v4.0.3)

### Behavior and default changes

- The click() method is now defined on HTMLElement.prototype instead of HTMLInputElement.prototype, matching the latest spec. (4.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v4.3.0)
- The click() method now dispatches a MouseEvent instead of a generic Event. (4.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v4.3.0)
- DOMException instances now have name properties. (4.0.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v4.0.2)
- Some Window data properties became accessors for improved specification compliance. (4.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v4.0.0)
- Window methods moved from the prototype to each instance for improved specification compliance. (4.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v4.0.0)

### Fixes and other changes

- Dispatching click events now activates radio buttons and checkboxes, matching the behavior of el.click(). (4.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v4.3.0)
- Fixed named and indexed window properties and window.length when frames or iframes are added or removed. (4.0.5) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v4.0.5)
- Doctype parsing now relies on information provided by the HTML parser when possible. (4.0.4) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v4.0.4)
- Fixed cases where childNodes was not correctly up to date. (4.0.3) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v4.0.3)
- EventTarget handlers now execute in FIFO order, as required by the specification. (4.0.3) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v4.0.3)
- Chrome 40 is supported again; latest stable Firefox and IE versions should also work, though less well-tested. (4.0.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v4.0.2)
- Events created with new Event("click") can now be dispatched. (4.0.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v4.0.2)
- EventTarget is now correctly in the prototype chain of Window. (4.0.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v4.0.2)
- EventTarget argument validation now follows the DOM Standard. (4.0.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v4.0.2)
- Node.prototype.contains now always returns a boolean, correcting a regression introduced in 3.1.1. (4.0.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v4.0.1)
- Document.prototype now correctly delegates its ownerDocument getter to Node.prototype. (4.0.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v4.0.1)
- Fixed edge cases when running scripts in browserified jsdom. (4.0.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v4.0.1)

## jsdom 3

### Breaking changes

- Removed isSameNode because it is not part of the DOM Standard and only performed a verbose strict-equality check. (3.1.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v3.1.1)
- CDATA sections were removed from the DOM APIs. (3.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v3.0.0)
- Default attributes were removed from the DOM APIs. (3.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v3.0.0)
- Documents now default to about:blank instead of inferring a file URL or using location.href. (3.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v3.0.0)
- DocumentType now follows the DOM Standard and no longer includes notations, entities, or default attributes. (3.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v3.0.0)
- Accessors on Node, Element, Attr, and Document were corrected to match the specification; some nonstandard setters were removed. (3.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v3.0.0)
- Removed the non-standard addFeature method from DOMImplementation. (3.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v3.0.0)
- DOMImplementation.hasFeature now always returns true. (3.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v3.0.0)
- Removed the ownerDocument property from DOMImplementation. (3.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v3.0.0)
- Removed the non-standard removeFeature method from DOMImplementation. (3.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v3.0.0)
- Entities were removed from the DOM APIs. (3.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v3.0.0)
- Entity types were removed from the DOM APIs. (3.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v3.0.0)
- 3.0.x is the last jsdom release supporting Node.js; future releases will require io.js. (3.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v3.0.0)
- Notations were removed from the DOM APIs. (3.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v3.0.0)
- console.error no longer contributes to the non-standard window.errors array. (3.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v3.0.0)
- XML and HTML documents now differ more accurately in tag-name and attribute casing. (3.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v3.0.0)

### New APIs and options

- Adds the named Image(width, height) constructor. (3.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v3.0.0)
- A virtual console abstraction captures console output from inside the page. (3.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v3.0.0)

### Performance

- Some properties moved to Document.prototype and Window.prototype, improving memory usage and specification compliance. (3.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v3.0.0)

### Behavior and default changes

- Comment now follows the DOM Standard and derives from CharacterData. (3.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v3.0.0)
- document.contentType is now generally inferred from the document parsing mode. (3.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v3.0.0)
- Name and qualified-name validation now uses xml-name-validator and centralized algorithms. (3.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v3.0.0)
- The XML parser now has limited awareness of processing instructions. (3.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v3.0.0)
- ProcessingInstruction now follows the DOM Standard and derives from CharacterData. (3.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v3.0.0)
- Text now follows the DOM Standard and derives from CharacterData. (3.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v3.0.0)

### Fixes and other changes

- URL resolution now handles about:blank properly on all systems, including the default URL since 3.0.0. (3.1.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v3.1.2)
- Scripts can now run at least partially inside a browserified jsdom instance through dynamic global reference rewriting. (3.1.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v3.1.2)
- Calling window.alert no longer crashes applications in cases handled by the NOT_IMPLEMENTED helper. (3.1.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v3.1.2)
- Triggering NOT_IMPLEMENTED methods such as window.location.reload no longer leaks a global variable. (3.1.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v3.1.2)
- Scripts generally do not work well in browserified jsdom, despite fixes to browserifying issues around jsdom.env. (3.1.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v3.1.1)
- Updated isEqualNode to the DOM Standard algorithm, fixing an error thrown during comparison. (3.1.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v3.1.1)
- Unchecking a radio button no longer incorrectly unchecks radio buttons outside its containing form. (3.0.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v3.0.2)
- Empty HTML strings passed through the html option are now handled. (3.0.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v3.0.1)
- Null bytes passed to autodetecting capabilities are now handled. (3.0.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v3.0.1)
- Serialization errors for text nodes were fixed, including cases possibly occurring inside template elements. (3.0.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v3.0.1)
- CharacterData now follows DOM Standard algorithms, removing some exceptions previously thrown. (3.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v3.0.0)
- Doctype parsing and association with documents were cleaned up, improving handling of exotic doctypes. (3.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v3.0.0)
- Fixes an exception when querySelector receives selectors such as div:last-child > span[title]. (3.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v3.0.0)

## jsdom 2

### Breaking changes

- Replaced the nonstandard matchesSelector method with the standard matches method. (2.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v2.0.0)
- Removed the level option from jsdom.jsdom. (2.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v2.0.0)
- Removed the defunct jsdom.level public API in favor of the living standard model. (2.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v2.0.0)

### Fixes and other changes

- querySelector now correctly coerces its argument to a string. (2.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v2.0.0)

## jsdom 1

### Breaking changes

- div.toString() now returns [object HTMLDivElement]. (1.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v1.4.0)
- Separate cssstyle-browserify dependency is no longer required; cssstyle can be used directly. (1.0.3) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v1.0.3)
- Returns true when the default is not prevented, correcting the previous opposite behavior. (1.0.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v1.0.1)
- The nonstandard document.innerHTML API was removed. (1.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v1.0.0)
- The nonstandard EventTarget.getListeners API was removed. (1.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v1.0.0)

### New APIs and options

- Adds missing console methods; most currently do nothing, while assert is implemented. (1.5.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v1.5.0)
- The textLength property now exists on HTMLTextAreaElement. (1.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v1.4.0)
- Adds NodeFilter, including its constants. (1.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v1.2.0)
- Adds document.implementation.createHTMLDocument() for creating HTML documents. (1.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v1.1.0)

### Performance

- Makes childNodes and the many places in jsdom that use it much faster. (1.5.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v1.5.0)
- Faster implementation should speed up common operations like appendChild and similar. (0.8.8, 1.4.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v1.4.1), [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.8.8)
- Performance improved for several AttributeList methods, reducing the cost of attribute operations. (1.2.3) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v1.2.3)
- Performance improved for Node.prototype.insertBefore, reducing the cost of this DOM mutation method. (1.2.3) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v1.2.3)
- Performance improved for Node.prototype.removeChild, reducing the cost of this DOM mutation method. (1.2.3) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v1.2.3)

### Behavior and default changes

- blur is now available on HTMLElement.prototype instead of only certain element prototypes. (1.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v1.3.0)
- focus is now available on HTMLElement.prototype instead of only certain element prototypes. (1.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v1.3.0)
- cssstyle is no longer pinned, allowing future upstream fixes to arrive automatically. (1.0.3) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v1.0.3)
- In browsers, options.url now defaults to location.href instead of an inferred fil:// URL. (1.0.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v1.0.2)

### Fixes and other changes

- document.cloneNode now works. (1.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v1.4.0)
- Resetting a form now follows the specification for all form element types. (1.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v1.4.0)
- hasAttribute is now case-insensitive as required by the specification. (1.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v1.4.0)
- The checked property now behaves according to the specification. (1.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v1.4.0)
- The defaultChecked property now behaves according to the specification. (1.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v1.4.0)
- The value property now behaves according to the specification. (1.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v1.4.0)
- The selected property now behaves according to the specification. (1.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v1.4.0)
- The value property now behaves according to the specification. (1.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v1.4.0)
- Resetting radio buttons now correctly resets the other radio buttons according to the specification. (1.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v1.4.0)
- Checks whether module.parent exists before constructing a document's initial URL, compensating for testing frameworks that do not correctly emulate the module environment. (1.3.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v1.3.2)
- Changing attributes on option elements now produces the correct consequences, including correct document.getElementById interaction when changing id. (1.3.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v1.3.1)
- The text-node data setter now correctly coerces assigned values to strings. (1.2.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v1.2.2)
- document.toString() now returns the standard HTMLDocument object string. (1.2.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v1.2.2)
- Arguments are now correctly coerced to strings, allowing arrays to be passed. (1.2.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v1.2.2)
- Parsing and serialization of <template> elements now work correctly because parse5 supports them. (1.2.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v1.2.1)
- The initial history.length is now 1 instead of 0. (1.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v1.2.0)
- history.pushState no longer fires the popstate event. (1.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v1.2.0)
- history.replaceState no longer fires the popstate event. (1.2.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v1.2.0)
- Ensures localName is no longer null for elements when it should not be. (1.1.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v1.1.0)
- Browserifying jsdom should work better because required packages are now declared as dependencies. (1.0.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v1.0.2)
- The dependency is temporarily pinned to version 0.2.18 or earlier to avoid a known CSSStyleDeclaration issue. (1.0.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v1.0.2)
- The defaultValue property is now correctly synced to the value="" attribute. (1.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v1.0.0)
- The value property is now correctly synced to the value="" attribute. (1.0.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v1.0.0)

## jsdom 0.11

### Breaking changes

- Attributes reflected as properties now return '' when absent, while getAttribute still returns null. (0.11.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.11.1)
- DOCTYPE names are no longer uppercased during parsing. (0.11.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.11.0)
- DOCTYPEs now appear in the output of document.innerHTML. (0.11.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.11.0)

### New APIs and options

- Adds Node.prototype.parentElement for accessing a node's parent element. (0.11.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.11.1)
- navigator.cookieEnabled is now implemented and always returns true. (0.11.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.11.0)
- Various document position constants were added to the Node constructor. (0.11.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.11.0)
- Node.prototype.contains is now implemented. (0.11.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.11.0)

### Behavior and default changes

- A new default level focuses jsdom on the DOM Living Standard and HTML Living Standard, enabling more modern DOM and HTML features. (0.11.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.11.0)

### Fixes and other changes

- Corrects the default URL used by jsdom.jQueryify to load jQuery. (0.11.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.11.1)
- Makes textContent work for nodes without children, including text nodes. (0.11.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.11.1)
- DocumentType.prototype.parentNode now returns the document node instead of null. (0.11.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.11.0)
- A bug involving invalid script paths and jsdom.jQueryify was fixed. (0.11.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.11.0)
- Various navigator properties are now getters instead of data properties. (0.11.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.11.0)
- Node.prototype.compareDocumentPosition is now implemented correctly. (0.11.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.11.0)

## jsdom 0.10

### Breaking changes

- Serializing void elements no longer includes a space-slash, producing <br> instead of <br />. (0.10.5) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.10.5)
- window.location.port now defaults to an empty string instead of null. (0.10.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.10.1)

### New APIs and options

- Remaining URL properties are now available on HTMLAnchorElement. (0.10.6) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.10.6)
- Remaining URL properties are now available on window.location. (0.10.6) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.10.6)
- Added querySelector to DocumentFragments. (0.10.4) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.10.4)
- Added querySelectorAll to DocumentFragments. (0.10.4) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.10.4)

### Behavior and default changes

- Defaults should usually be the empty string instead of null. (0.10.3) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.10.3)
- Defaults should usually be the empty string instead of null. (0.10.3) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.10.3)
- document.cookie now supports multiple cookies, though options like path and max-age remain ignored. (0.10.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.10.0)

### Fixes and other changes

- Iframes correctly load about:blank when the src attribute is empty or missing. (0.10.6) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.10.6)
- Reflected attributes no longer break when String.prototype.normalize is available by default in newer Node versions. (0.10.6) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.10.6)
- Documents containing only whitespace now generate wrapper documents, matching blank documents. (0.10.6) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.10.6)
- The list of void elements now matches the latest HTML specification. (0.10.5) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.10.5)
- Fixed another case where jQuery 1.11's show method caused errors. (0.10.4) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.10.4)
- Using jQuery 1.11's show() method no longer throws an error. (0.10.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.10.2)
- window.location properties now update correctly after pushState or replaceState. (0.10.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.10.2)

## jsdom 0.9

### Breaking changes

- An empty namespace URI is now treated as meaning no namespace. (0.9.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.9.0)
- HTMLInputElement no longer has a type attribute by default, while its type property remains "text". (0.9.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.9.0)

### New APIs and options

- HTMLAnchorElement gains a port property. (0.9.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.9.0)
- HTMLAnchorElement gains a protocol property. (0.9.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.9.0)

### Behavior and default changes

- Attribute ordering now follows WHATWG DOM semantics, with more accurate attribute storage behavior. (0.9.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.9.0)

### Fixes and other changes

- An empty namespace URI is now treated as meaning no namespace. (0.9.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.9.0)
- An empty namespace URI is now treated as meaning no namespace. (0.9.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.9.0)

## jsdom 0.8

### New APIs and options

- Cookies are stored and used between requests, with customizable cookie jars supported. (0.8.11) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.8.11)
- Adds a hash property to HTMLAnchorElement. (0.8.10) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.8.10)
- CSS now supports the @-moz-document at-rule. (0.8.9) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.8.9)
- Adds the host property to HTMLAnchorElement. (0.8.7) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.8.7)
- Adds a dummy method returning 0 for all rectangle properties. (0.8.6) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.8.6)
- Adds an href property to CSSStyleSheet instances for external CSS files. (0.8.5) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.8.5)
- Typed array constructors are now available on window. (0.8.4) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.8.4)
- Basic history navigation and state methods are now supported. (0.8.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.8.2)
- Adds a property that evaluates to true for specifically distinguishing jsdom in tests. (0.8.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.8.0)
- Adds working XMLHttpRequest support, including cookie passing. (0.8.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.8.0)

### Behavior and default changes

- CSS now supports many shorthand properties. (0.8.9) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.8.9)
- Documents beginning with an XML declaration are parsed as XML without lowercasing tags. (0.8.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.8.2)

### Fixes and other changes

- Attributes named like NamedNodeMap prototype properties no longer break jsdom. (0.8.11) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.8.11)
- Calling removeAttributeNS on a missing attribute no longer throws. (0.8.11) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.8.11)
- CSS unit handling is improved. (0.8.9) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.8.9)
- Stops accidentally modifying Error.prototype. (0.8.6) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.8.6)
- querySelector is now placed on Element and Document prototypes instead of being an own-property. (0.8.4) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.8.4)
- querySelectorAll is now placed on Element and Document prototypes instead of being an own-property. (0.8.4) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.8.4)
- Auto-detection of whether the first parameter is an HTML string or filename now handles long strings without erroring. (0.8.3) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.8.3)
- Tag names passed to createElement are coerced to strings before evaluation. (0.8.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.8.2)
- Fixed a casing issue that prevented jsdom from loading on Unix and Solaris systems. (0.8.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.8.1)
- Fixed the broken window.location.replace behavior. (0.8.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.8.1)

## jsdom 0.7

### Breaking changes

- The html property no longer uses the previous string auto-detection behavior, making this a breaking change. (0.7.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.7.0)

### New APIs and options

- hashchange events now fire when the URL hash changes. (0.7.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.7.0)
- The file property provides an explicit way to specify file input. (0.7.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.7.0)
- The url property provides an explicit way to specify URL input. (0.7.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.7.0)

### Behavior and default changes

- window.location is now more complete and accurate, including hashchange events when the hash changes. (0.7.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.7.0)

### Fixes and other changes

- Errors raised in scripts are now passed to jsdom.env's callback. (0.7.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.7.0)
- String input detection is more accurate, changing how jsdom.env interprets passed strings. (0.7.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.7.0)
- Errors for unsupported features now identify exactly which feature is not implemented. (0.7.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.7.0)
- window.location.href is set correctly when constructing a window from a URL that redirects. (0.7.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.7.0)

## jsdom 0.6

### Breaking changes

- Empty attributes now expose an empty string value instead of the attribute name. (0.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.6.0)

### New APIs and options

- Frames and iframes are now accessible through named properties. (0.6.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.6.2)

### Behavior and default changes

- Attribute names may now use any value permitted by HTML5, including characters such as ^. (0.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.6.0)
- Attribute values may now use any value permitted by HTML5, including > and <. (0.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.6.0)

### Fixes and other changes

- Custom attributes named like Object.prototype properties no longer confuse jsdom. (0.6.5) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.6.5)
- CSS selectors containing commas inside quotes are no longer misinterpreted. (0.6.4) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.6.4)
- img elements now fire load events when their src attributes change. (0.6.4) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.6.4)
- Improves automatic detection of URLs versus HTML fragments when using jsdom.env. (0.6.3) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.6.3)
- node-canvas integration is fixed after being broken since version 0.5.7. (0.6.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.6.2)
- URL resolution now handles document URLs, base tags, and relative hrefs more browser-compatibly, affecting external resources and href/src accuracy. (0.6.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.6.2)
- The code is now parseable with Esprima, improving compatibility with Esprima-based tooling. (0.6.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.6.1)
- The package metadata now uses repository instead of repositories to prevent npm warnings. (0.6.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.6.1)
- The innerHTML of script tags no longer loses its first character. (0.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.6.0)
- Multiline attributes are no longer mangled during parsing. (0.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.6.0)
- Elements with optional closing tags, such as p or td, are now parsed correctly. (0.6.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.6.0)

## jsdom 0.5

### Breaking changes

- This release and future releases require at least Node.js 0.8. (0.5.4) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.5.4)

### Deprecations

- This release remains compatible with Node.js 0.6; future releases will require at least Node.js 0.8. (0.5.3) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.5.3)

### New APIs and options

- The parser can now be configured through jsdom.env. (0.5.4) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.5.4)

### Fixes and other changes

- canvas behaves like a div when node-canvas is unavailable instead of causing a crash. (0.5.7) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.5.7)
- Event handlers now support return false and receive the event argument more spec-compatibly. (0.5.7) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.5.7)
- The textContent getter is more accurate for comment nodes and processing instruction nodes. (0.5.7) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.5.7)
- HTMLCollections now expose named properties for members' id and name attributes, enabling access such as form.elements.inputId. (0.5.6) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.5.6)
- Event handler properties now update correctly through setAttributeNode, attributeNode.value =, removeAttribute, and removeAttributeNode. (0.5.6) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.5.6)
- Corrected the property when the attribute value is falsy, such as an empty attribute value. (0.5.5) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.5.5)
- Corrected the property when the attribute value is falsy, such as an empty attribute value. (0.5.5) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.5.5)
- Accessing rowIndex for table rows outside a table no longer throws. (0.5.4) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.5.4)
- Image src properties now resolve relative to location.href, matching anchor href behavior. (0.5.4) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.5.4)
- getAttributeNS now returns null for absent attributes, matching getAttribute. (0.5.3) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.5.3)
- Stylesheets containing @-webkit-keyframes no longer crash getComputedStyle calls. (0.5.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.5.2)
- The features option is handled correctly by jsdom.env. (0.5.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.5.2)
- Radio buttons now allow only one checked button, and clicking one no longer incorrectly unchecks it. (0.5.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.5.1)
- Calling click on input elements now fires a click event. (0.5.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.5.1)
- selectedIndex now changes correctly when option elements are selected, making select elements work properly, especially with jQuery. (0.5.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.5.1)
- Makes contextify a non-optional dependency because jsdom never worked without it. (0.5.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.5.0)

## jsdom 0.4

### Breaking changes

- getAttribute now returns null for attributes that are not present, matching DOM4 behavior. (0.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.4.0)
- Nonstandard NodeList properties such as toArray are now hidden unless prefixed with an underscore. (0.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.4.0)
- NodeList instances no longer provide array methods, including indexOf, matching the specification. (0.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.4.0)

### Performance

- The querySelectorAll implementation was adjusted for improved accuracy and speed. (0.4.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.4.2)

### Behavior and default changes

- Static NodeList-returning methods such as querySelectorAll now return a real NodeList instance. (0.4.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.4.0)

### Fixes and other changes

- selected now returns true for the first <option> in a <select> when nothing is explicitly set. (0.4.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.4.2)
- Loading HTML files no longer crashes when an <a> tag lacks an href attribute. (0.4.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.4.1)

## jsdom 0.3

### Breaking changes

- A window's load event now always fires asynchronously, including when no external resources are needed. (0.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.3.0)
- Turning off mutation events is no longer supported because it breaks external-resource fetching. (0.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.3.0)

### New APIs and options

- Adds a basic blur() implementation on appropriate elements. (0.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.3.0)
- Adds a basic focus() implementation on appropriate elements. (0.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.3.0)
- Adds the matchesSelector API through nwmatcher. (0.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.3.0)

### Behavior and default changes

- Styles from style and linked stylesheet elements are now applied to getComputedStyle results. (0.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.3.0)

### Fixes and other changes

- Stylesheets with @media rules no longer crash calls to getComputedStyle, including those in jQuery initialization. (0.3.4) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.3.4)
- document.write calls now insert new elements correctly. (0.3.3) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.3.3)
- Inputs without a type attribute now return "text" from getAttribute. (0.3.3) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.3.3)
- Stylesheets with comma-separated selectors now apply when using getComputedStyle. (0.3.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.3.2)
- Prevents crashes when stylesheets contain invalid selectors. (0.3.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.3.1)
- Script filenames containing spaces now work when passed to jsdom.env. (0.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.3.0)
- A real querySelector implementation solves many outstanding querySelector bugs. (0.3.0) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.3.0)

## jsdom 0.2

### Breaking changes

- attr is no longer placed in the global scope when using node-canvas. (0.2.19) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.19)
- cssText is no longer as accurate after reverting use of the cssstyle package. (0.2.17) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.17)
- style is no longer as accurate after reverting use of the cssstyle package. (0.2.17) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.17)
- HTMLOptionElement.text now returns the option's text rather than its value. (0.2.16) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.16)
- The name property is now exposed only on specific tags and accurately reflects the corresponding name attribute. (0.2.16) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.16)
- Falsy values assigned to text nodes are converted to strings instead of becoming empty strings. (0.2.16) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.16)
- outerHTML is no longer formatted, which is especially important for pre elements. (0.2.16) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.16)
- Text instances no longer expose a value property. (0.2.16) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.16)
- Exceptions occurring in the callback are no longer swallowed. (0.2.14) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.14)
- Single tags now serialize with a space before the closing slash. (0.2.14) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.14)
- Disabling external script processing also prevents inline event handlers from running. (0.2.10) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.10)
- The trigger name changes to raise for a more descriptive API. (0.2.10) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.10)
- removeAttributeNS no longer returns a value. (0.2.6) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.6)
- The method now returns only elements attached to the document. (0.2.5) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.5)
- Attr.specified is now readonly. (0.2.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.1)
- download now receives the object returned by URL.parse() as its first parameter. (0.2.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.1)
- setAttributeNS() no longer returns a value. (0.2.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.1)
- setNamedItem no longer sets Node.parentNode. (0.2.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.1)

### Security

- Script loading over HTTPS is fixed. (0.2.4) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.4)

### New APIs and options

- Adds SkipExternalResources, which accepts a regular expression for skipping external resources. (0.2.19) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.19)
- Anchor elements gain a hostname property to comply with the WHATWG standard. (0.2.15) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.15)
- HTTP proxy support is added to jsdom.env. (0.2.15) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.15)
- Anchor elements gain a pathname property to comply with the WHATWG standard. (0.2.15) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.15)
- Adds JSONP support. (0.2.9) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.9)
- Support was added for document.cookie. (0.2.6) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.6)
- Encoding and decoding support was added for all HTML entities from HTML4 and HTML5. (0.2.6) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.6)
- A document configuration option allows users to change the document referer. (0.2.6) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.6)
- jsdom.env() now accepts the same features object used by jsdom.jsdom and related APIs. (0.2.6) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.6)
- Support was added for reading window.location.search. (0.2.6) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.6)
- Initial support for reading and using the URL fragment through window.location.hash. (0.2.5) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.5)
- Inline event handlers such as onclick are supported. (0.2.4) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.4)
- Initial CSSOM integration was added. (0.2.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.1)
- DOM level configuration now accepts a string or object. (0.2.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.1)
- removeEventListener() was added to DOMWindow. (0.2.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.1)
- The download() function now supports an HTTP referrer. (0.2.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.1)
- HTML serialization can optionally pretty print while traversing the tree. (0.2.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.1)
- The encoding of the jsdom.env HTML request can now be set. (0.2.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.1)
- HTTP request headers can now be configured for jsdom.env. (0.2.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.1)
- jsdom.env now supports a src configuration option. (0.2.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.1)
- A DOM level can now be selected using a level number and feature string. (0.2.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.1)
- NodeList#indexOf was added. (0.2.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.1)
- window.stopTimers() was introduced as an initial attempt to fix a memory leak. (0.2.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.1)
- XPath support was added. (0.2.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.1)

### Performance

- Runtime performance received a major boost. (0.2.11) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.11)

### Behavior and default changes

- Elements may now have non-unique ids. (0.2.11) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.11)
- Scripts injected by jsdom receive a jsdom class during serialization. (0.2.11) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.11)
- The selector engine was upgraded from sizzle 1.0 to a version roughly equivalent to 1.5.1. (0.2.11) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.11)
- Error reports now include stacktraces, giving developers more diagnostic context. (0.2.5) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.5)
- Invalid markup is reported as an error and attached to the associated element and document. (0.2.4) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.4)
- Scheme-less URLs now default to the current protocol. (0.2.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.1)

### Fixes and other changes

- URL resolution now works correctly on pages containing href-less <base> tags. (0.2.19) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.19)
- cssText is accurate again after cssstyle fixed its memory problems. (0.2.18) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.18)
- style properties are accurate again after cssstyle fixed its memory problems. (0.2.18) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.18)
- Out-of-memory errors caused by cssstyle on some larger real-world pages were fixed. (0.2.17) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.17)
- Checkbox and radiobutton checked state now correctly reflects the checked attribute. (0.2.16) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.16)
- CSS style declarations now provide more accurate cssText and style properties on all elements. (0.2.16) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.16)
- The level3/xpath functionality is now included correctly. (0.2.16) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.16)
- jsdom no longer breaks when String.prototype.normalize is provided by libraries such as sugar.js. (0.2.16) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.16)
- Doctypes are no longer set as the documentElement. (0.2.15) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.15)
- HTML entities are decoded in text only when outside script and style tags. (0.2.15) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.15)
- Single-selection HTMLSelectElement instances now report type as select-one instead of select. (0.2.15) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.15)
- config.html now handles file paths containing spaces. (0.2.14) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.14)
- QuerySelector is isolated from the prototype. (0.2.14) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.14)
- Setting textContent to an empty string clears children. (0.2.14) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.14)
- Contextify simulation now works using vm.runInContext. (0.2.14) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.14)
- Removes an unused style property that caused explosions in 0.2.12 and Node 0.4.7. (0.2.13) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.13)
- The npm package no longer includes gmon.out, v8.log, or tests, reducing unnecessary distributed files. (0.2.12) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.12)
- contexify is now optional, so projects may no longer need it installed as a required dependency. (0.2.11) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.11)
- NamedNodeMap items can now be accessed via properties. (0.2.11) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.11)
- toArray and item are now non-enumerable properties on NodeList objects. (0.2.11) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.11)
- Using the :not() selector with querySelector no longer throws a ReferenceError. (0.2.11) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.11)
- Attribute event handlers on the bubbling path are now called. (0.2.10) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.10)
- DocumentFeatures now handles iframes without a src attribute. (0.2.10) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.10)
- CSSOM constructors are exposed on the dom object. (0.2.10) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.10)
- Script tag content is no longer escaped. (0.2.10) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.10)
- Assigning markup to textarea.value no longer parses it. (0.2.10) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.10)
- Fixes appendHtmlToElement behavior with the HTML5 parser. (0.2.9) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.9)
- Prevents double loading when scripts and src properties are mixed. (0.2.9) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.9)
- Fixes a bug involving the src property. (0.2.9) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.9)
- Features are properly reset after a jsdom.env invocation. (0.2.9) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.9)
- NodeList properties now enumerate like arrays. (0.2.9) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.9)
- Fixes a ReferenceError in the scanForImportRules helper function. (0.2.9) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.9)
- Fixes setting a script element's text property. (0.2.9) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.9)
- Downloaded file paths now include the URL search component. (0.2.9) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.9)
- Inline event handlers are ignored in every context except the JavaScript context. (0.2.8) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.8)
- Fixed stylesheet loading so stylesheets load correctly for developers using jsdom. (0.2.7) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.7)
- Different jsdom levels can now be used in the same process. (0.2.6) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.6)
- Mutation events for DOMAttrModified receive fixes, improving attribute-change event behavior. (0.2.5) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.5)
- Special characters are serialized like a grade A browser in element attributes. (0.2.5) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.5)
- Special characters are serialized like a grade A browser when reading or writing innerHTML. (0.2.5) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.5)
- Events now bubble up to the window object. (0.2.5) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.5)
- Changing the id attribute's nodeValue now updates the element's id. (0.2.5) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.5)
- Calling insertBefore with the same node for both parameters now does nothing. (0.2.5) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.5)
- Adding a script to an invalid or incomplete DOM now catches the error and passes it to the .env callback. (0.2.4) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.4)
- A crash is fixed when setChild fails to create a new DOM element. (0.2.4) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.4)
- Using style.setProperty now updates the style attribute. (0.2.4) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.4)
- Prevents segfaults caused by window being garbage collected prematurely; developers must manually close the window to free memory. (0.2.3) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.3)
- Parsing incomplete DOCTYPE declarations no longer causes a JavaScript error. (0.2.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.2)
- document.parentWindow now equals window. (0.2.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.2)
- Frames and iframes load and process scripts when the parent has the features enabled. (0.2.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.2)
- NodeLists can now have a length of 0. (0.2.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.2)
- Style serialization issues were fixed. (0.2.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.2)
- toArray now returns an empty array when given an empty NodeList. (0.2.2) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.2)
- Missing body and html tags are now inserted automatically. (0.2.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.1)
- Every document now has either a body or a frameset. (0.2.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.1)
- Doctype serialization now handles newlines correctly. (0.2.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.1)
- getListeners() now returns a shallow copy, allowing listeners to be safely removed during dispatch. (0.2.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.1)
- HTMLDecode now correctly decodes common named entities. (0.2.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.1)
- JavaScript errors are triggered on the script element instead of the document. (0.2.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.1)
- Empty scripts no longer cause jsdom.env to hang. (0.2.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.1)
- Node and Exception type constants are now available in all levels. (0.2.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.1)
- The defaultSelected field of option elements was corrected. (0.2.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.1)
- The selected field of option elements was corrected. (0.2.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.1)
- Relative and absolute URLs now work as expected. (0.2.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.1)
- resourceLoader.download now handles HTTPS and redirects correctly. (0.2.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.1)
- The title node now uses textContent, and the getter walks the DOM to extract text correctly. (0.2.1) — [release notes](https://github.com/jsdom/jsdom/releases/tag/v0.2.1)
