npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

niddle

v0.2.12

Published

A super fast html parser and manipulator written in rust.

Readme

niddle

A super fast Node.js addon for HTML parsing and manipulation, written in Rust.

Features

  • High-performance DOM parsing and manipulation
  • Exposes a simple JavaScript API via NAPI-RS
  • Designed for both server-side and CLI HTML processing
  • Written in Rust for speed and safety

Installation

yarn add niddle
# or
npm install niddle

Usage

const { parse } = require('niddle');
const root = parse('<div id="foo" class="bar">hello <span>world</span></div>');

const div = root.select('div');
console.log(div.getAttribute('id')); // "foo"
console.log(div.text()); // "hello world"
div.setAttribute('title', 'my-title');
console.log(div.outerHtml()); // <div id="foo" class="bar" title="my-title">hello <span>world</span></div>

API Documentation

parse(html: string): NodeRepr

Parses an HTML string and returns a NodeRepr instance representing the root node.

Parameters

  • html (string): The HTML content to parse.

Returns

  • NodeRepr: The parsed root node.

NodeRepr Class

Represents a DOM node and provides various manipulation methods.

Methods

  • append(content: string | NodeRepr): void
    • Appends a new node or HTML string as a child.
  • appendSequence(nodes: NodeRepr[]): void
    • Appends multiple nodes.
  • clone(): NodeRepr
    • Clones the current node (not including descendants).
  • cloneRecursive(): NodeRepr
    • Clones the node and all descendants.
  • getAttribute(name: string): string
    • Gets an attribute value by name.
  • getAttributes(): Record<string, string>
    • Gets all attributes as a key-value object.
  • getChildren(): NodeRepr[]
    • Returns all child nodes.
  • innerHtml(): string
    • Gets the HTML content of all descendants.
  • insertAfter(node: NodeRepr): void
    • Inserts the current node after the specified node.
  • insertBefore(node: NodeRepr): void
    • Inserts the current node before the specified node.
  • insertSequenceAfter(nodes: NodeRepr[]): void
    • Inserts multiple nodes after the current node.
  • insertSequenceBefore(nodes: NodeRepr[]): void
    • Inserts multiple nodes before the current node.
  • outerHtml(): string
    • Gets the HTML content including the node itself.
  • prepend(content: string | NodeRepr): void
    • Prepends a new node or HTML string as a child.
  • prependSequence(nodes: NodeRepr[]): void
    • Prepends multiple nodes.
  • remove(): void
    • Removes the node from the DOM.
  • removeAllAttributes(): void
    • Removes all attributes from the node.
  • removeAttribute(name: string): void
    • Removes an attribute by name.
  • select(selectors: string): NodeRepr
    • Selects the first node matching the selector.
  • selectAll(selectors: string): NodeRepr[]
    • Selects all nodes matching the selector.
  • setAttribute(name: string, value: string): void
    • Sets an attribute value.
  • setAttributes(attrs: Record<string, string>): void
    • Sets multiple attributes.
  • text(): string
    • Gets the text content of the node.

Contributing

yarn install
yarn build
yarn test

Benchmark

cargo benchmark
yarn benchmark

For more usage examples and advanced API, see the source code and benchmarks in the repository.