Discover / Data & Research

Cheerio

by cheeriojsTypeScript

Fast and flexible HTML parsing library for server side web scraping in Node.js.

Toolstable

Maturity: stable because 15y old, v1.2.0 released 192d ago. Derived from release and commit history, not a rating.

Stars
30k
Forks
1.7k
Downloads / mo
Last commit
2026-08-03
License
MIT
Open issues
67

Market and trust evidence

Edition not yet matched

No exact skills.sh identity match is available for this repository. Repository adoption and freshness remain visible above; install momentum is not inferred.

Trust analysis is a screening signal, not a security warranty. Read the ranking and trust methodology.

In practice

Written by AI from this repository’s README · high confidence

Extracting or rewriting parts of an HTML document without running a full browser DOM implementation.

Use it when

Use it when scraping or transforming static HTML and you want familiar selector syntax over a fast parser.

Not the right pick when

It works on the document you hand it, so pages that build their content with client side scripts stay empty.

Capabilities

  • cheerio.load turns an HTML string into a queryable object
  • jQuery style selectors with context and root scoping
  • text, html, attr, addClass and other manipulation methods
  • render back to html, outerHTML or plain text
  • parse5 by default with optional htmlparser2 for forgiving parsing
  • DOM node style properties such as tagName and childNodes

Cost: Free and open source

Install

Derived from the published package name in the repository, not from a model.

Video walkthroughs

Third-party YouTube uploads matched to this tool by title, channel and repository name on 2026-08-03. Not made, reviewed or endorsed by SkillPilot. View counts and publish months are as of the match date and the month is approximate. Nothing loads from YouTube until you press play.

What the repository ships

Security policyCI configured

Detected from the actual files in the repository root.

Latest release v1.2.0

Published 2026-01-23

What's Changed

  • .val() now supports button values by @kaioduarte in https://github.com/cheeriojs/cheerio/pull/4175
  • .find() now properly scopes :scope selectors by @T0nd0Tara in https://github.com/cheeriojs/cheerio/pull/4967
  • The isHtml utility now runtime-validates input types by @Mallikarjun-0 in https://github.com/cheeriojs/cheerio/pull/4523

New Contributors

  • @noritaka1166 made their first contribution in https://github.com/cheeriojs/cheerio/pull/4740
  • @kaioduarte made their first contribution in https://github.com/cheeriojs/cheerio/pull/4175
  • @Mallikarjun-0 made their first contribution in https://github.com/cheeriojs/cheerio/pull/4523
  • @T0nd0Tara made their first contribution in https://github.com/cheeriojs/cheerio/pull/4967

Full Changelog: https://github.com/cheeriojs/cheerio/compare/v1.1.2...v1.2.0

Tags

README

<h1 align="center">cheerio</h1>

<h5 align="center">The fast, flexible, and elegant library for parsing and manipulating HTML and XML.</h5>

<div align="center">

<a href="https://github.com/cheeriojs/cheerio/actions/workflows/ci.yml">

<img src="https://github.com/cheeriojs/cheerio/actions/workflows/ci.yml/badge.svg" alt="Build Status">

</a>

<a href="https://coveralls.io/github/cheeriojs/cheerio">

<img src="https://img.shields.io/coveralls/github/cheeriojs/cheerio/main" alt="Coverage">

</a>

<a href="#backers">

<img src="https://img.shields.io/opencollective/backers/cheerio" alt="OpenCollective backers">

</a>

<a href="#sponsors">

<img src="https://img.shields.io/opencollective/sponsors/cheerio" alt="OpenCollective sponsors">

</a>

<a href="https://scorecard.dev/viewer/?uri=github.com/cheeriojs/cheerio">

<img src="https://api.scorecard.dev/projects/github.com/cheeriojs/cheerio/badge" alt="OpenSSF Scorecard">

</a>

</div>

<br>

中文文档 (Chinese Readme)


import * as cheerio from 'cheerio';
const $ = cheerio.load('<h2 class="title">Hello world</h2>');

$('h2.title').text('Hello there!');
$('h2').addClass('welcome');

$.html();
//=> <html><head></head><body><h2 class="title welcome">Hello there!</h2></body></html>

Installation

Install Cheerio using a package manager like npm, yarn, bun, or Deno.


npm install cheerio
# or
bun add cheerio
# or
deno install cheerio

Features

&#10084; Proven syntax: Cheerio implements a subset of core jQuery. Cheerio

removes all the DOM inconsistencies and browser cruft from the jQuery library,

revealing its truly gorgeous API.

&#991; Blazingly fast: Cheerio works with a very simple, consistent DOM

model. As a result parsing, manipulating, and rendering are incredibly

efficient.

&#10049; Incredibly flexible: Cheerio wraps around

parse5 for parsing HTML and can optionally

use the forgiving htmlparser2. Cheerio

can parse nearly any HTML or XML document. Cheerio works in both browser and

server environments.

API

Loading

First you need to load in the HTML. This step in jQuery is implicit, since

jQuery operates on the one, baked-in DOM. With Cheerio, we need to pass in the

HTML document.


// ESM or TypeScript:
import * as cheerio from 'cheerio';

// In other environments:
const cheerio = require('cheerio');

const $ = cheerio.load('<ul id="fruits">...</ul>');

$.html();
//=> <html><head></head><body><ul id="fruits">...</ul></body></html>

Selectors

Once you've loaded the HTML, you can use jQuery-style selectors to find elements

within the document.

\$( selector, [context], [root] )

selector searches within the context scope which searches within the root

scope. selector and context can be a string expression, DOM Element, array

of DOM elements, or cheerio object. root, if provided, is typically the HTML

document string.

This selector method is the starting point for traversing and manipulating the

document. Like in jQuery, it's the primary method for selecting elements in the

document.


$('.apple', '#fruits').text();
//=> Apple

$('ul .pear').attr('class');
//=> pear

$('li[class=orange]').html();
//=> Orange

Rendering

When you're ready to render the document, you can call the html method on the

"root" selection:


$.root().html();
//=>  <html>
//      <head></head>
//      <body>
//        <ul id="fruits">
//          <li class="apple">Apple</li>
//          <li class="orange">Orange</li>
//          <li class="pear">Pear</li>
//        </ul>
//      </body>
//    </html>

If you want to render the

outerHTML

of a selection, you can use the outerHTML prop:


$('.pear').prop('outerHTML');
//=> <li class="pear">Pear</li>

You may also render the text content of a Cheerio object using the text

method:


const $ = cheerio.load('This is <em>content</em>.');
$('body').text();
//=> This is content.

The "DOM Node" object

Cheerio collections are made up of objects that bear some resemblance to

browser-based DOM nodes.

You can expect them to define the following properties:

  • tagName
  • parentNode
  • previousSibling
  • nextSibling
  • nodeValue
  • firstChild
  • childNodes
  • lastChild

Screencasts

https://vimeo.com/31950192

This video tutorial is a follow-up to Nettut's "How to Scrape Web Pages with

Node.js and jQuery", using cheerio instead of JSDOM + jQuery. This video shows

how easy it is to use cheerio and how much faster cheerio is than JSDOM +

jQuery.

Cheerio in the real world

Are you using cheerio in production? Add it to the

wiki!

Sponsors

Does your company use Cheerio in production? Please consider

sponsoring this project! Your

help will allow maintainers to dedicate more time and resources to its

development and support.

Headlining Sponsors

<!-- BEGIN SPONSORS: headliner -->

<a href="https://github.com/" target="_blank" rel="noopener noreferrer">

<img height="128px" width="128px" src="https://humble.imgix.net/https%3A%2F%2Favatars.githubusercontent.com%2Fgithub?ixlib=js-3.8.0&w=128&h=128&fit=fillmax&fill=solid&s=65172918690f124c0adebece30c66471" title="Github" alt="Github"></img>

</a>

<a href="https://www.airbnb.com/" target="_blank" rel="noopener noreferrer">

<img height="128px" width="128px" src="https://humble.imgix.net/https%3A%2F%2Favatars.githubusercontent.com%2Fairbnb?ixlib=js-3.8.0&w=128&h=128&fit=fillmax&fill=solid&s=e679125f79ca84598b8f8420b581dea5" title="AirBnB" alt="AirBnB"></img>

</a>

<a href="https://hasdata.com" target="_blank" rel="noopener noreferrer">

<img height="128px" width="128px" src="https://humble.imgix.net/https%3A%2F%2Fhasdata.com%2Ffavicon.svg?ixlib=js-3.8.0&w=128&h=128&fit=fillmax&fill=solid&s=21933842d61dec74a961fc57754e58cb" title="HasData" alt="HasData"></img>

</a>

<!-- END SPONSORS -->

Other Sponsors

<!-- BEGIN SPONSORS: sponsor -->

<a href="https://onlinecasinosspelen.com" target="_blank" rel="noopener noreferrer">

<img height="64px" width="64px" src="https://humble.imgix.net/https%3A%2F%2Fimages.opencollective.com%2Fonlinecasinosspelen%2F99ac6a2%2Flogo.png?ixlib=js-3.8.0&w=64&h=64&fit=fillmax&fill=solid&s=8ec1ec058845b823858f22205485be02" title="OnlineCasinosSpelen" alt="OnlineCasinosSpelen"></img>

</a>

<a href="https://Nieuwe-Casinos.net" target="_blank" rel="noopener noreferrer">

<img height="64px" width="64px" src="https://humble.imgix.net/https%3A%2F%2Fimages.opencollective.com%2Fnieuwecasinos%2Fc67d423%2Flogo.png?ixlib=js-3.8.0&w=64&h=64&fit=fillmax&fill=solid&s=ed55d86b80b1aa8cf89b033020521945" title="Nieuwe-Casinos.net" alt="Nieuwe-Casinos.net"></img>

</a>

<!-- END SPONSORS -->

Backers

Become a backer to show your

support for Cheerio and help us maintain and improve this open source project.

<!-- BEGIN SPONSORS: backer -->

<a href="https://kafidoff.com" target="_blank" rel="noopener noreferrer">

<img height="64px" width="64px" src="https://humble.imgix.net/https%3A%2F%2Fimages.opencollective.com%2Fkafidoff-vasy%2Fd7ff85c%2Favatar.png?ixlib=js-3.8.0&w=64&h=64&fit=fillmax&fill=solid&s=a41c66c2f9b1d3a7a241e425e7aa2d09" title="Vasy Kafidoff" alt="Vasy Kafidoff"></img>

</a>

<!-- END SPONSORS -->

License

MIT

Related tools