9.4k stars · MIT · 0.19.4 (2026-09-17), read from /releases/latest and confirmed on npm — two days before the edition · Track this in Scout
It extracts the main article from a web page and returns it as Markdown.
▶Repo detailsthe review · specs · pros & cons · install
What it is
A small JavaScript library, also usable as a command from the terminal. It reads a page, works out which part of it is the actual content, cleans away the rest, and converts what is left into Markdown. It was built for the Obsidian Web Clipper, so it is tested against a very large number of real sites.What it is good for. Anyone saving articles to read or to search later, and anyone feeding pages into anything else. The problem it removes is the page furniture, which is most of the bytes and none of the meaning. A short line about Grasppy: a pasted article is a common way people bring text in, and this is the cheapest way to make that text clean before anything else touches it.
- It does one thing, so there is almost nothing to learn and almost nothing to break.
- It keeps headings, lists, code blocks and footnotes rather than flattening everything into paragraphs.
- MIT licence, and very actively maintained: version 0.19.4 was published on 17 September 2026, two days before this edition.
- It reads the page you give it. It does not fetch pages, follow links or wait for JavaScript, so a page that builds itself in the browser needs something else in front.
- It is JavaScript. A Python project has to shell out to it or pick a different tool.
- Content extraction is guesswork by nature. On an unusual layout it will occasionally take too much or too little.
- mozilla/readability
The code behind Firefox's Reader View, and the thing Defuddle was written to improve on.
Track this in Scout
adbar/trafilaturaPublished in Edition 6, the Python answer to the same problem, and it also downloads and crawls.
Track this in Scout
microlinkhq/metascraperPublished in Edition 20, it reads a page's title, description and image rather than its body text.
Track this in Scout
# As a command:
npm install -g defuddle-cli
defuddle parse https://example.com/article --md -o article.md
# As a library in your own project:
npm install defuddle
# In Node.js:
# import { Defuddle } from 'defuddle/node'
# const result = await Defuddle(html, url, { markdown: true })
# console.log(result.content)