
Security News
upm Launches as a Fast, Tiny Package Manager Written in TypeScript
upm uses Node.js to deliver fast npm installs in about 250 KB, with a JavaScript API and security defaults.
Fast CSS Selectors API Engine
NWSAPI is the development progress of NWMATCHER aiming at Selectors Level 4 conformance. It has been completely reworked to be easily extended and maintained. It is a right-to-left selector parser and compiler written in pure Javascript with no external dependencies. It was initially thought as a cross browser library to improve event delegation and web page scraping in various frameworks but it has become a popular replacement of the native CSS selection and matching functionality in newer browsers and headless environments.
It uses regular expressions to parse CSS selector strings and metaprogramming to transforms these selector strings into Javascript function resolvers. This process is executed only once for each selector string allowing memoization of the function resolvers and achieving unmatched performances.
To include NWSAPI in a standard web page:
<script type="text/javascript" src="nwsapi.js"></script>
To include NWSAPI in a standard web page and automatically replace the native QSA:
<script type="text/javascript" src="nwsapi.js" onload="NW.Dom.install()"></script>
To use NWSAPI with Node.js:
$ npm install nwsapi
NWSAPI currently supports browsers (as a global, NW.Dom) and headless environments (as a CommonJS module).
Here is a list of all the CSS2/CSS3/CSS4 Supported selectors.
You can read more about NWSAPI features and compliance on the wiki.
ancestor( selector, context, callback )Returns a reference to the nearest ancestor element matching selector, starting at context. Returns null if no element is found. If callback is provided, it is invoked for the matched element.
first( selector, context, callback )Returns a reference to the first element matching selector, starting at context. Returns null if no element matches. If callback is provided, it is invoked for the matched element.
match( selector, element, callback )Returns true if element matches selector, starting at context; returns false otherwise. If callback is provided, it is invoked for the matched element.
select( selector, context, callback )Returns an array of all the elements matching selector, starting at context; returns empty Array otherwise. If callback is provided, it is invoked for each matching element.
byId( id, from )Returns a reference to the first element with ID id, optionally filtered to descendants of the element from.
byTag( tag, from )Returns an array of elements having the specified tag name tag, optionally filtered to descendants of the element from.
byClass( class, from )Returns an array of elements having the specified class name class, optionally filtered to descendants of the element from.
configure( options )The following is the list of currently available configuration options, their default values and descriptions, they are boolean flags that can be set to true or false:
IDS_DUPES: true - true to allow using multiple elements having the same id, false to disallowLIVECACHE: true - true for caching both results and resolvers, false for caching only resolversMIXEDCASE: true - true to match tag names case insensitive, false to match using case sensitiveLOGERRORS: true - true to print errors and warnings to the console, false to mute both of themconfigure( { <configuration-flag>: [ true | false ] } )Disable logging errors/warnings to console, disallow duplicate ids. Example:
NW.Dom.configure( { LOGERRORS: false, IDS_DUPES: false } );
NOTE: NW.Dom.configure() without parameters return the current configuration.
registerCombinator( symbol, resolver )Registers a new symbol and its matching resolver in the combinators table. Example:
NW.Dom.registerCombinator( '^', 'e.parentElement' );
registerOperator( symbol, resolver )Registers a new symbol and its matching resolver in the attribute operators table. Example:
NW.Dom.registerOperator( '!=', { p1: '^', p2: '$', p3: 'false' } );
registerSelector( name, rexp, func )Registers a new selector, the matching RE and the resolver function, in the selectors table. Example:
NW.Dom.registerSelector('Controls', /^\:(control)(.*)/i,
(function(global) {
return function(match, source, mode, callback) {
var status = true;
source = 'if(/^(button|input|select|textarea)/i.test(e.nodeName)){' + source + '}';
return { 'source': source, 'status': status };
};
})(this));
NWSAPI powers millions of builds, web scrapers, and testing suites every single day—including key infrastructure like jsdom.
Maintaining a zero-dependency, ultra-fast CSS engine that strictly adheres to evolving W3C Selectors specifications takes significant time, research, and testing. If NWSAPI helps your company save time, build features, or run reliable tests, please consider supporting its ongoing maintenance!
Choose the platform that works best for you or your organization:
Custom licensing, dedicated support, or priority bug fixes are also available for corporate sponsors. Feel free to reach out!
Sizzle is a pure-JavaScript CSS selector engine designed to be easily dropped in to a host library. It is one of the most well-known selector engines and was used in jQuery. Compared to nwsapi, Sizzle has a wider adoption but may not be as up-to-date with the latest CSS selector specifications.
css-select is a CSS selector engine that aims to be CSS4 compliant. It can be used to select elements from an object representing a parsed HTML or XML document. It is similar to nwsapi in terms of compliance with CSS specifications but differs in API and implementation details.
Qwery is a modern selector engine which can query elements quickly and efficiently. It is smaller and more focused on modern browsers compared to nwsapi, which might make it a better choice for projects that do not require legacy browser support.
FAQs
Fast CSS Selectors API Engine
The npm package nwsapi receives a total of 48,425,865 weekly downloads. As such, nwsapi popularity was classified as popular.
We found that nwsapi demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 2 open source maintainers collaborating on the project.

Security News
upm uses Node.js to deliver fast npm installs in about 250 KB, with a JavaScript API and security defaults.

Company News
Socket is joining the OpenJS Security Stewardship Program to fund Node.js vulnerability research, maintainer remediation, and security releases.

Security News
Two compromised GitHub Actions were re-enabled with malicious tags intact, exposing thousands of downstream repositories to Mini Shai-Hulud.