Defuddle - Web Content Extraction
Local, zero-API web page content extractor that outputs clean Markdown with Obsidian-native formatting. By Kepano (Obsidian creator), 6.7K+ GitHub stars. Used as fallback when Jina Reader or Firecrawl are unavailable.
What It Does
Defuddle takes a URL or HTML, finds the main content, strips clutter (comments, sidebars, headers, footers, ads), and returns cleaned HTML or Markdown. It was created for the Obsidian Web Clipper but runs anywhere - browser, Node.js, or CLI.
Key advantages over Mozilla Readability: more forgiving extraction (removes fewer uncertain elements), consistent output for footnotes/math/code blocks, uses mobile styles to detect unnecessary elements, and extracts richer metadata including schema.org data.
Role in the Stack
Defuddle is the fallback web page reader, used when primary tools are unavailable:
- Primary: Jina Reader (
curl -s "https://r.jina.ai/URL") - zero-config, fast, cloud-hosted - Primary (automations): Firecrawl MCP - used by cloud Cursor Automations
- Fallback: Defuddle (
npx defuddle parse URL --markdown) - local, no API dependency
Use defuddle when Jina returns errors, rate-limits, or is down. Also preferred when metadata extraction (author, published date, description, schema.org) is needed alongside content.
CLI Usage
npx defuddle parse URL --markdown # Markdown output to stdout
npx defuddle parse URL --json # JSON with metadata + content
npx defuddle parse URL -m -o output.md # Save to file
npx defuddle parse URL -p title # Extract single property
npx defuddle parse page.html --markdown # Parse local HTML file
Metadata Returned (JSON mode)
| Field | Description |
|---|---|
title |
Article title |
author |
Author name |
published |
Publication date |
description |
Summary/description |
domain |
Website domain |
image |
Main image URL |
language |
BCP 47 language code |
wordCount |
Word count |
schemaOrgData |
Raw schema.org structured data |
Obsidian-Native Output
Defuddle's Markdown output aligns with Obsidian conventions:
- Callouts →
> [!info]format (GitHub alerts, Bootstrap alerts all standardized) - Footnotes → standard
[^1]inline references - Code blocks → language tags preserved, line numbers stripped
- Math → MathML with LaTeX
data-latexattribute - Headings → H1 removed if matches title, remaining H1s converted to H2
Timeline
- 2026-04-13 | Added as fallback web reader in Security and Review Skills stack. Source: Kevin, Cursor session