Packages

jsdom

30.1.3MIT
  • 30.1.3 is the latest, published 15 October 2026.
  • No known security advisory.
  • 30.x: 6 releases since 27 July 2026, 6 in the last 90 days.

Releases in the last 90 days

Feed of releases and advisories

Every stable release, newest first. Notes are quoted as the maintainers published them.

  1. 30.1.3

    15 October 2026
    Improved performance of getComputedStyle() and computed CSS property reads, including with stylesheets containing attribute selectors. (@scttcper, @asamuzaK)
    • Improved performance of getComputedStyle() and computed CSS property reads, including with stylesheets containing attribute selectors. (@scttcper, @asamuzaK)

    • Fixed slowdowns when focusing elements and running interaction tests, which regressed in v30.1.2. (@scttcper)

    • Fixed XMLHttpRequest reusing credentials supplied to xhr.open() after cross-origin redirects, including in response to authentication challenges from the destination.

    • Fixed XMLHttpRequest incorrectly sending and accepting cookies after cross-origin redirects back to the document's origin when xhr.withCredentials is false.

    • Fixed exceptions from malformed CSS math functions, such as calc(0px - @submenu_space), while parsing documents, stylesheets, and style declarations. (@rnavarro)

    • Fixed getComputedStyle() ignoring style rules nested inside multiple @media rules.

    • Fixed CSS shorthands overwriting longhands with higher priority or specificity during style computation, including declarations containing CSS variables.

    • Fixed getComputedStyle() returning unresolved or inconsistent shorthand values, including for 'background', 'border', 'flex', 'font', 'margin', and 'padding', and incorrect shorthand defaults and inheritance.

    • Fixed computed background positions to resolve font-relative lengths using the final font size and handle multiple image layers correctly.

    • Fixed computed 'color' values depending on property read order, including unresolved color-mix() results, which regressed in v29.0.2.

    • Fixed currentcolor border colors incorrectly becoming transparent when 'color' uses light-dark() or relative color syntax.

    • Fixed CSS calculations that reduce to a percentage incorrectly producing pixel values, which regressed in v30.0.0.

    • Fixed numeric font weights in the 'font' shorthand incorrectly setting 'line-height'.

    • Fixed selector matching involving XML namespaces, and selectors such as [data-a|=""] failing to match empty values and values beginning with -. (@asamuzaK)

  2. 30.1.2

    4 October 2026
    Updated URLs to support Unicode v18.0.0 in internationalized domain names.
    • Updated URLs to support Unicode v18.0.0 in internationalized domain names.

    • Reduced package size and memory use for CSS property definitions. (@scttcper)

    • Fixed severe slowdowns when building large DOM trees, including SVG charts with D3, which regressed in v30.1.0. (@cmdcolin)

    • Fixed exponentially slow reads of empty inherited CSS custom properties in deeply nested documents, and custom properties incorrectly inheriting past an initial reset. (@scttcper)

    • Fixed getComputedStyle() returning stale results after editing stylesheet declarations, selectors, or media queries, including in imported stylesheets.

    • Fixed selector matching and computed styles after changes to form control checkedness, indeterminacy, selection, values, and validity, including during form resets and canceled clicks.

    • Fixed computed styles for :focus, :focus-visible, :focus-within, and selectors containing them after focus changes, including inside focus and blur listeners. (@asamuzaK)

    • Fixed element.focus() incorrectly focusing elements hidden by 'display', including through shadow hosts and slots, and elements excluded by shadow DOM slot assignment. (@asamuzaK)

    • Fixed getComputedStyle() throwing for elements without inline-style support, including XML and MathML elements.

    • Fixed a memory leak where stylesheet parsing retained the last parsed stylesheet's window after window.close().

    • Fixed memory growth from long-lived MutationObserver instances retaining bookkeeping for garbage-collected nodes. (@scttcper)

    • Fixed retained select.selectedOptions collections becoming stale after selection changes and form resets.

    • Fixed rejection of negative CSS sizing values, including for 'min-width', 'min-height', 'max-width', and 'max-height', which regressed in v30.1.0.

    • Fixed handling of deeply nested color-mix() expressions, including exceptions during color resolution. (@asamuzaK)

  3. 30.1.1

    22 September 2026
    Fixed spurious window blur and focusout events and incorrect event.relatedTarget values when focusing an element after removing the previously focused element, which regressed in v30.1.0. (@asamuzaK)
    • Fixed spurious window blur and focusout events and incorrect event.relatedTarget values when focusing an element after removing the previously focused element, which regressed in v30.1.0. (@asamuzaK)

    • Fixed focus and blur behavior across frames, and focusing the document's viewport through document.documentElement.focus(). (@asamuzaK)

    • Fixed focus targets removed or disabled by blur listeners becoming active, and text selections made by focus and blur listeners being overwritten. (@asamuzaK)

    • Fixed element.focus() incorrectly focusing disabled form controls and <input type="hidden"> elements with tabindex="". (@scttcper)

    • Fixed invalid style.setProperty() calls changing existing !important priorities, serialized styles, or mutation records. (@FedgeNo)

    • Fixed !important handling when updating CSS longhands after shorthands, using variables or CSS-wide keywords, and assigning style properties directly. (@FedgeNo)

    • Fixed <noscript> parsing with includeNodeLocations: true or inside frames to honor the runScripts option.

    • Fixed the storageQuota option being ignored by frames.

    • Fixed encoding detection of HTML and XML byte input to honor XML encoding declarations and detect UTF-16 without a byte order mark.

    • Fixed exceptions caused by truncated charset parameters in <meta> elements, and encoding detection incorrectly using incomplete <meta> tags. (@FedgeNo)

    • Fixed XML serialization errors for namespaces named constructor, toString, __proto__, or "null", and incorrect reuse of namespace prefixes declared on sibling elements.

    • Fixed element.innerHTML and element.outerHTML in XML documents to reject invalid characters in attribute values and avoid stack overflows on large strings.

    • Fixed selector matching for :lang(), :nth-child(... of ...) after mutations, and :has() with duplicate IDs or nested logical pseudo-classes. (@asamuzaK)

  4. 30.1.0

    17 September 2026
    Jsdom is feeling the AGI!

    jsdom is feeling the AGI!

    This release is dedicated to @scttcper, who unleashed @codex upon jsdom and found tons of performance improvements. Along the way, he found and fixed many correctness issues as well.

    We really appreciate his thoughtful PRs, which did a great job following the project's contribution guidelines, and were clearly human-curated, with their PR descriptions edited to be brief and respectful of the maintainers' time.

    • Added named access to elements on document, such as document.myForm for <form name="myForm">. (@vojtisprime11)

    • Added QuotaExceededError, including its use for storage quota errors and oversized crypto.getRandomValues() requests.

    • Added support for the relaxed DOM naming rules when creating elements, attributes, and document types.

    • Improved performance of DOM construction, tree mutations, range operations, and live collection access, especially on large documents. (@scttcper, @erezrokah)

    • Improved performance of getComputedStyle(), style changes, and CSS serialization. (@scttcper, @jhult)

    • Improved performance of event dispatch, form control and label lookups, and updates to <select> elements and radio button groups. (@scttcper)

    • Reduced memory use when creating and working with DOM nodes, attributes, event listeners, and mutation observers. (@scttcper)

    • Changed window.close() to preserve access to the document and its DOM through retained references.

    • Fixed element.querySelectorAll() returning no matches when the first part of the selector matches the element itself, which regressed in v30.0.0. (@asamuzaK)

    • Fixed case sensitivity in CSS attribute selectors, including selectors matching data-state="", title="", and other case-sensitive values. (@asamuzaK)

    • Fixed document.querySelector() failing to find a matching element when an earlier element has the same ID but does not match the rest of the selector. (@vojtisprime11)

    • Fixed :focus matching in shadow trees. (@asamuzaK)

    • Fixed DOM insertion and replacement, including valid document.replaceChildren() calls, invalid document element and doctype placements, and mutations during element.replaceWith().

    • Fixed the ordering of script execution, custom element callbacks, iframe loading, and mutation observer notifications during DOM insertion, including in shadow trees.

    • Fixed queued events and navigation continuing after window.close() or iframe removal, and prevented new scripts, resource loads, timers, and animation frames from starting in destroyed documents. (@scttcper)

    • Fixed parent documents waiting indefinitely for loading to finish when a child iframe removes itself during loading.

    • Fixed request cancellation across redirects, during pending requestInterceptor() callbacks, and when reusing an XMLHttpRequest after aborting it.

    • Fixed resource loading and JSDOM.fromURL() potentially hanging when response handling throws and response stream cleanup does not finish.

    • Fixed successful cached resource loads being treated as aborted.

    • Fixed getComputedStyle() and document.styleSheets using the wrong stylesheet order after inserting or updating <style> elements.

    • Fixed getComputedStyle() ignoring nested @import and @media rules in imported stylesheets, and returning stale results after imports finish loading.

    • Fixed style invalidation, stylesheet removal, and frame source updates in shadow trees.

    • Fixed repeated getComputedStyle() calls changing case-sensitive background URLs, and inconsistent resolution of border shorthands containing system colors. (@scttcper)

    • Fixed computed border widths, including borderless elements incorrectly reporting 16px, which regressed in v30.0.0. (@Alberto-BaseNet)

    • Fixed getComputedStyle() to resolve 'font-weight' keywords to numeric values. (@tianrking)

    • Fixed getComputedStyle() to convert lengths to pixels inside CSS math functions containing percentages, and to resolve percentages in 'font-size' math functions. (@soroushm)

    • Fixed serialization of min() and max() containing nested calc(), which regressed in v30.0.0. (@asamuzaK)

  5. 30.0.1

    29 July 2026
    Fixed getComputedStyle() with calc() and other functions throwing an exception, which regressed in v30.0.0. (@asamuzaK)
    • Fixed getComputedStyle() with calc() and other functions throwing an exception, which regressed in v30.0.0. (@asamuzaK)

    • Sped up up range operations on large documents (@leonidaz)

  6. 30.0.0

    27 July 2026
    Breaking changes:

    Breaking changes:

    • Node.js minimum version raised to ^22.22.2 || ^24.15.0 || >=26.0.0.

    Other changes:

    • Added CSS.escape() and CSS.supports() functions. (@asamuzaK)

    • Added 'background-position-x' and 'background-position-y' CSS properties. (@olagokemills)

    • Fixed getComputedStyle() to convert length values into pixels. (@asamuzaK)

    • Fixed CSS function serialization, e.g., in the return value of getPropertyValue(). (@asamuzaK)

    • Fixed the type of error thrown by document.evaluate() (@dokson)

All 279 releases

Major versions

  • 30.xsince 27 July 2026 · latest 30.1.3 · 6 releases
  • 29.xsince 15 March 2026 · latest 29.1.1 · 5 releases
  • 28.xsince 2 February 2026 · latest 28.1.0 · 2 releases
  • 27.xsince 13 September 2025 · latest 27.4.0 · 6 releases
  • 26.xsince 9 January 2025 · latest 26.1.0 · 2 releases
  • 25.xsince 25 August 2024 · latest 25.0.1 · 2 releases
  • 24.xsince 21 January 2024 · latest 24.1.3 · 5 releases
  • 23.xsince 26 November 2023 · latest 23.2.0 · 4 releases
  • 22.xsince 2 May 2023 · latest 22.1.0 · 2 releases
  • 21.xsince 7 January 2023 · latest 21.1.2 · 4 releases
  • 20.xsince 19 June 2022 · latest 20.0.3 · 4 releases
  • 19.xsince 2 December 2021 · latest 19.0.0 · 1 release
  • 18.xsince 8 October 2021 · latest 18.1.1 · 4 releases
  • 17.xsince 13 August 2021 · latest 17.0.0 · 1 release
  • 16.xsince 13 January 2020 · latest 16.7.0 · 14 releases
  • 15.xsince 21 April 2019 · latest 15.2.1 · 5 releases
  • 14.xsince 10 March 2019 · latest 14.1.0 · 2 releases
  • 13.xsince 29 October 2018 · latest 13.2.0 · 3 releases
  • 12.xsince 19 August 2018 · latest 12.2.0 · 3 releases
  • 11.xsince 21 May 2017 · latest 11.12.0 · 16 releases
  • 10.xsince 24 April 2017 · latest 10.1.0 · 2 releases
  • 9.xsince 6 May 2016 · latest 9.12.0 · 24 releases
  • 8.xsince 27 January 2016 · latest 8.5.0 · 12 releases
  • 7.xsince 17 October 2015 · latest 7.2.2 · 8 releases
  • 6.xsince 5 August 2015 · latest 6.5.1 · 8 releases
  • 5.xsince 16 April 2015 · latest 5.6.1 · 12 releases
  • 4.xsince 22 February 2015 · latest 4.5.2 · 13 releases
  • 3.xsince 18 January 2015 · latest 3.1.2 · 7 releases
  • 2.xsince 28 December 2014 · latest 2.0.0 · 1 release
  • 1.xsince 28 September 2014 · latest 1.5.0 · 15 releases
  • 0.xsince 21 November 2011 · latest 0.11.1 · 86 releases

Quality and security signals

What npm and deps.dev say about the latest release. Signals, not a verdict.

Reading npm and deps.dev…

Registry facts last checked 16 October 2026. Releases and advisories last read 16 October 2026.

Know when your own dependencies move

Inlinr tracks your coding time automatically. Switch dependency tracking on for a project and it reads that repository's manifest to show what is behind and what has been deprecated — off by default, one project at a time.