About
A JSDOM alternative with support for server side rendering of web components.
Happy DOM aim to support the most common functionality of a web browser.
Read more about how to use Happy DOM
DOM Features
-
Custom Elements (Web Components)
-
Shadow Root (Shadow DOM)
-
Mutation Observer
-
Tree Walker
-
Fetch
And much more..
Works With
Packages
This repository is a Monorepo. Each package lives under packages/
.
happy-dom
This package contains the core functionality of Happy DOM.
jest-environment
This package makes it possible to use Happy DOM with Jest.
server-rendering
This package makes it easier to setup servering side rendering of web components by handling the setup of the Node VM Context for you.
global-registrator
A utility that registers Happy DOM globally, which makes it possible to use Happy DOM for testing in a Node environment.
Performance
Operation | JSDOM | Happy DOM |
---|---|---|
Import / Require | 333 ms | 45 ms |
Parse HTML | 256 ms | 26 ms |
Serialize HTML | 65 ms | 8 ms |
Render custom element | 214 ms | 19 ms |
querySelectorAll('tagname') | 4.9 ms | 0.7 ms |
querySelectorAll('.class') | 6.4 ms | 3.7 ms |
querySelectorAll('[attribute]') | 4.0 ms | 1.7 ms |
querySelectorAll('[class~="name"]') | 5.5 ms | 2.9 ms |
querySelectorAll(':nth-child(2n+1)') | 10.4 ms | 3.8 ms |
See how the test was done here
Whats New in v2.0.0?
- The methods window.whenAsyncComplete() and window.cancelAsync() has been moved to window.happyDOM.whenAsyncComplete() and window.happyDOM.cancelAsync()
Whats New in v1.0.0?
-
Lerna is used for managing all packages within a single repository
-
Full support for querySelector() and querySelectorAll()
-
Server side rendering has been split out to its own package
-
All functionality is now covered by unit tests
-
Automated release process by publishing to NPM automatically when a pull request is merged
-
Release notes are generated automatically by using Github Releases
-
A lot of minor bug fixes