Automation and scraping · Edition No. 25 · 19 Sep 2026

kepano/defuddle

It extracts the main article from a web page and returns it as Markdown.

← Automation and scrapingRead the whole edition →

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.

Stars9.4k
LicenceMIT
Latest0.19.4 (2026-09-17), read from /releases/latest and confirmed on npm — two days before the edition
Good
  • 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.
Watch for
  • 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.
Similar repositories
Install
# 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)
Screenshots
kepano/defuddle: GitHub preview card

Get the next edition in your inbox

A dozen repositories, opened and checked. The licence read, the last release dated, and the ones that did not make it named with the reason. It is the half most lists leave out.

No tracking pixels. One click to leave. The archive stays free either way.

We use your address to send the edition and nothing else. Confirm by email, leave in one click. How we handle it.